From 7c6b05710c584c57069177cc997123b346e8b4ba Mon Sep 17 00:00:00 2001 From: Dennis Kerschus Date: Tue, 13 Jun 2023 13:19:05 +0200 Subject: [PATCH] t --- .../site/python3.7/greenlet/greenlet.h | 164 + .venv/pyvenv.cfg | 5 + .vscode/launch.json | 26 + FlowTest.py | 15 + __pycache__/FlowAnalyserMain.cpython-311.pyc | Bin 0 -> 2314 bytes __pycache__/FlowAnalyserMain.cpython-37.pyc | Bin 0 -> 1250 bytes __pycache__/FlowTest.cpython-311.pyc | Bin 0 -> 639 bytes __pycache__/FlowTest.cpython-37.pyc | Bin 0 -> 456 bytes __pycache__/env.cpython-311.pyc | Bin 0 -> 296 bytes __pycache__/env.cpython-37.pyc | Bin 0 -> 266 bytes __pycache__/inn.cpython-311.pyc | Bin 0 -> 1119 bytes __pycache__/inn.cpython-37.pyc | Bin 0 -> 818 bytes __pycache__/sysjob2html.cpython-311.pyc | Bin 0 -> 1562 bytes __pycache__/sysjob2html.cpython-37.pyc | Bin 0 -> 833 bytes __pycache__/sysjobhistory.cpython-37.pyc | Bin 0 -> 1365 bytes __pycache__/sysjobs.cpython-311.pyc | Bin 0 -> 13360 bytes __pycache__/sysjobs.cpython-37.pyc | Bin 0 -> 4921 bytes env.py | 4 + favicon.ico | Bin 0 -> 370070 bytes inn.py | 17 + requirements.txt | Bin 0 -> 548 bytes static/css/mermaid.css | 346 + static/css/style.css | 54 + static/mermaid.core.js | 14924 ++ static/mermaid.core.js.map | 65 + static/mermaid.js | 114244 +++++++++++++++ static/mermaid.js.map | 65 + static/mermaid.min.js | 25 + static/mermaid.min.js.map | 1 + sysjob2html.py | 21 + sysjobs.py | 141 + templates/index.html | 9 + test.md | 57 + tmp.txt | 2 + 34 files changed, 130185 insertions(+) create mode 100644 .venv/Include/site/python3.7/greenlet/greenlet.h create mode 100644 .venv/pyvenv.cfg create mode 100644 .vscode/launch.json create mode 100644 FlowTest.py create mode 100644 __pycache__/FlowAnalyserMain.cpython-311.pyc create mode 100644 __pycache__/FlowAnalyserMain.cpython-37.pyc create mode 100644 __pycache__/FlowTest.cpython-311.pyc create mode 100644 __pycache__/FlowTest.cpython-37.pyc create mode 100644 __pycache__/env.cpython-311.pyc create mode 100644 __pycache__/env.cpython-37.pyc create mode 100644 __pycache__/inn.cpython-311.pyc create mode 100644 __pycache__/inn.cpython-37.pyc create mode 100644 __pycache__/sysjob2html.cpython-311.pyc create mode 100644 __pycache__/sysjob2html.cpython-37.pyc create mode 100644 __pycache__/sysjobhistory.cpython-37.pyc create mode 100644 __pycache__/sysjobs.cpython-311.pyc create mode 100644 __pycache__/sysjobs.cpython-37.pyc create mode 100644 env.py create mode 100644 favicon.ico create mode 100644 inn.py create mode 100644 requirements.txt create mode 100644 static/css/mermaid.css create mode 100644 static/css/style.css create mode 100644 static/mermaid.core.js create mode 100644 static/mermaid.core.js.map create mode 100644 static/mermaid.js create mode 100644 static/mermaid.js.map create mode 100644 static/mermaid.min.js create mode 100644 static/mermaid.min.js.map create mode 100644 sysjob2html.py create mode 100644 sysjobs.py create mode 100644 templates/index.html create mode 100644 test.md create mode 100644 tmp.txt diff --git a/.venv/Include/site/python3.7/greenlet/greenlet.h b/.venv/Include/site/python3.7/greenlet/greenlet.h new file mode 100644 index 0000000..d02a16e --- /dev/null +++ b/.venv/Include/site/python3.7/greenlet/greenlet.h @@ -0,0 +1,164 @@ +/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */ + +/* Greenlet object interface */ + +#ifndef Py_GREENLETOBJECT_H +#define Py_GREENLETOBJECT_H + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* This is deprecated and undocumented. It does not change. */ +#define GREENLET_VERSION "1.0.0" + +#ifndef GREENLET_MODULE +#define implementation_ptr_t void* +#endif + +typedef struct _greenlet { + PyObject_HEAD + PyObject* weakreflist; + PyObject* dict; + implementation_ptr_t pimpl; +} PyGreenlet; + +#define PyGreenlet_Check(op) (op && PyObject_TypeCheck(op, &PyGreenlet_Type)) + + +/* C API functions */ + +/* Total number of symbols that are exported */ +#define PyGreenlet_API_pointers 12 + +#define PyGreenlet_Type_NUM 0 +#define PyExc_GreenletError_NUM 1 +#define PyExc_GreenletExit_NUM 2 + +#define PyGreenlet_New_NUM 3 +#define PyGreenlet_GetCurrent_NUM 4 +#define PyGreenlet_Throw_NUM 5 +#define PyGreenlet_Switch_NUM 6 +#define PyGreenlet_SetParent_NUM 7 + +#define PyGreenlet_MAIN_NUM 8 +#define PyGreenlet_STARTED_NUM 9 +#define PyGreenlet_ACTIVE_NUM 10 +#define PyGreenlet_GET_PARENT_NUM 11 + +#ifndef GREENLET_MODULE +/* This section is used by modules that uses the greenlet C API */ +static void** _PyGreenlet_API = NULL; + +# define PyGreenlet_Type \ + (*(PyTypeObject*)_PyGreenlet_API[PyGreenlet_Type_NUM]) + +# define PyExc_GreenletError \ + ((PyObject*)_PyGreenlet_API[PyExc_GreenletError_NUM]) + +# define PyExc_GreenletExit \ + ((PyObject*)_PyGreenlet_API[PyExc_GreenletExit_NUM]) + +/* + * PyGreenlet_New(PyObject *args) + * + * greenlet.greenlet(run, parent=None) + */ +# define PyGreenlet_New \ + (*(PyGreenlet * (*)(PyObject * run, PyGreenlet * parent)) \ + _PyGreenlet_API[PyGreenlet_New_NUM]) + +/* + * PyGreenlet_GetCurrent(void) + * + * greenlet.getcurrent() + */ +# define PyGreenlet_GetCurrent \ + (*(PyGreenlet * (*)(void)) _PyGreenlet_API[PyGreenlet_GetCurrent_NUM]) + +/* + * PyGreenlet_Throw( + * PyGreenlet *greenlet, + * PyObject *typ, + * PyObject *val, + * PyObject *tb) + * + * g.throw(...) + */ +# define PyGreenlet_Throw \ + (*(PyObject * (*)(PyGreenlet * self, \ + PyObject * typ, \ + PyObject * val, \ + PyObject * tb)) \ + _PyGreenlet_API[PyGreenlet_Throw_NUM]) + +/* + * PyGreenlet_Switch(PyGreenlet *greenlet, PyObject *args) + * + * g.switch(*args, **kwargs) + */ +# define PyGreenlet_Switch \ + (*(PyObject * \ + (*)(PyGreenlet * greenlet, PyObject * args, PyObject * kwargs)) \ + _PyGreenlet_API[PyGreenlet_Switch_NUM]) + +/* + * PyGreenlet_SetParent(PyObject *greenlet, PyObject *new_parent) + * + * g.parent = new_parent + */ +# define PyGreenlet_SetParent \ + (*(int (*)(PyGreenlet * greenlet, PyGreenlet * nparent)) \ + _PyGreenlet_API[PyGreenlet_SetParent_NUM]) + +/* + * PyGreenlet_GetParent(PyObject* greenlet) + * + * return greenlet.parent; + * + * This could return NULL even if there is no exception active. + * If it does not return NULL, you are responsible for decrementing the + * reference count. + */ +# define PyGreenlet_GetParent \ + (*(PyGreenlet* (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_GET_PARENT_NUM]) + +/* + * deprecated, undocumented alias. + */ +# define PyGreenlet_GET_PARENT PyGreenlet_GetParent + +# define PyGreenlet_MAIN \ + (*(int (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_MAIN_NUM]) + +# define PyGreenlet_STARTED \ + (*(int (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_STARTED_NUM]) + +# define PyGreenlet_ACTIVE \ + (*(int (*)(PyGreenlet*)) \ + _PyGreenlet_API[PyGreenlet_ACTIVE_NUM]) + + + + +/* Macro that imports greenlet and initializes C API */ +/* NOTE: This has actually moved to ``greenlet._greenlet._C_API``, but we + keep the older definition to be sure older code that might have a copy of + the header still works. */ +# define PyGreenlet_Import() \ + { \ + _PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \ + } + +#endif /* GREENLET_MODULE */ + +#ifdef __cplusplus +} +#endif +#endif /* !Py_GREENLETOBJECT_H */ diff --git a/.venv/pyvenv.cfg b/.venv/pyvenv.cfg new file mode 100644 index 0000000..ba6b6e6 --- /dev/null +++ b/.venv/pyvenv.cfg @@ -0,0 +1,5 @@ +home = C:\Python311 +include-system-site-packages = false +version = 3.11.4 +executable = C:\Python311\python.exe +command = C:\Python311\python.exe -m venv --upgrade C:\users\denker\Documents\udvikling\Python\FlowAnalyser\.venv diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b00c1ff --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Flask", + "type": "python", + "request": "launch", + "module": "flask", + "env": { + "FLASK_APP": "FlowAnalyserMain.py", + "FLASK_DEBUG": "1" + }, + "args": [ + "run", + "--no-debugger", + "--no-reload" + ], + "jinja": true, + "justMyCode": true + } + ] +} + diff --git a/FlowTest.py b/FlowTest.py new file mode 100644 index 0000000..a101ae0 --- /dev/null +++ b/FlowTest.py @@ -0,0 +1,15 @@ +from inn import getEngine +import markdown + + +def test(): + #engine = getEngine() + + text = "# Title"+"\n" + text+= "~~~mermaid\n" + text+= "gantt\n" + text+="​~~~" + html=markdown.markdown(text, extensions=['md_mermaid']) + print(html) + return html + \ No newline at end of file diff --git a/__pycache__/FlowAnalyserMain.cpython-311.pyc b/__pycache__/FlowAnalyserMain.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6bc12f23307ef49ab7e57605aab458b6d8d612c GIT binary patch literal 2314 zcmZ`)-%A`v9G|)UHFxLr{8>#rH6<#!8njI)CTS3)xg-#33#R#T6^@NN>gnFzF}ubn zO0FeP3wcPP5MK&Dr3uMHU;1AEgFRXB7zhMP9{P5{K1iPWojq4?jh&tO&g^$S^PTVa zJD=J8J&}kZD0j}R8@htf-{K`G>i%Fig%Ns+3}j#v-4uPq#Dz#UQjoF|7VnZNXJx-v zvWkyWeVk-!SXneCN*rKsFlxMKdOKA0yO+*m=h$h0?FHkl~n>Skm zRAWz*VQf|f3)*~ZfT8M<`8Gom&$9^Z3$0!-vf`)F=g5|qA`hgyXbEF<7h!n7TI?Bs zUItKNziux@RRE_ z%sB_HAV~SENZ7qKyo$;_t9bqZwJGd;P#`e;N)E4u&`yR{3NJn=t0PHO7au-?h5~`mll=MP6miD0OYP&n;tk^fz*h5azd z2WzEJexnP19$7nB^smC9AN5gqXACjJfyX9p!fAKqE!)wpX_{jcPB?#`=BA6*On!DH zTJMKT%K%gDyh$x*MID)=rdgbB+(B&K25t8Yh^MHL2J;7$2)i(eUf>C!8M$f}mu^zq z;j#nr1=_#UsEm}V3hoYPCC;mZ(#ZrWqR{!}k)X@3NwjNT?YAFuuV@bN>J z^fIAZQAUJgp?C%1{CJ095RTWtjR$j-_Kb0J+HJ(s3qy z7Ya)+&|HqI^)u%28CERhO3O2F%Dl;cDL|qi%{)@HIVtE1)W|cNCl2UR(w#Z3eKVP1 ztjM^+ii-~A5?i#=GLH+__Ibpc8&60a3KKWVkINSBoPy$q%43I7vQsc4ZkDYAg&?@j z)NgnGlHJZsr8DDoW?Z?w7DJ@X)lR-4T^{M%Aw%0_==lx6kf936cqHTcwWgxz2_JBF zo1A_AeT7`~$VHc2tf`WccuiuD<8FJu*M6=-&U@s%>({;4@zxr`O5#vdNz=MqlR&q( zw^t)b{dh;|-d4Idu2+-+PZ_91u+k^seeWcs4hEVxO2P;C5yv^9!Ba=Bm| z_n5f&=?*SY>poXz#Mj$DY@b=I3nrQP{Bg}*w&#oYY#y%<&I!(OwWM2yZu3aV@H5Y) zyk+s|EOj#0Y~G?=rS)E$q_&+eT3{y_Ozs^_i?XN;?;#SLl|opFz=RTM4zPZcH0{!>LAZcwYJ)eUMD zwYfp9$vrq#Lt!z7Nc^X@AJ?ATs%R-sOO@5C(p0{^e(Q(aqg)L|@Zg44O|)l>7wQ;)=9q^(9u>JyHyc0|R72;5L+(^*sIFyQ7Q%_F* blKM5}qUL(7GeH>~9|aD`<6ml9V;JOrnl}!3 literal 0 HcmV?d00001 diff --git a/__pycache__/FlowAnalyserMain.cpython-37.pyc b/__pycache__/FlowAnalyserMain.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0aaf8e0ae0191edfac3d1ce385d947ac7f711d88 GIT binary patch literal 1250 zcmZux&2Aev5GJ|5T1m0vIEB+g+FlB%2M6de2!i~hKv1=b+$LQJSZu_Rz1A*QASovj zl#_#;610yX9s5c=wuhpxkW*(?v7G=V!Qsqs$enLKa_@D!3B&f!UvFg^Xzvl%-dtH(6p7JFXtHlnek&@D9q3W zOcl~cFR^8W-FVRFd@2BOh?iGqnv5Q`nJ;|adaFY(aZ!5;IN>ub20 z`jwF{=rVlaJWwYt7}LXPfHo!6I~b)S3XRO%9M>;Q+TJMNQ*m85&6UiJ6H~c4(JPcn zTZdpDs>4D7KHSY54ZxV9RxUCd1%Cj!&Bq#RnMQ+;XJ5vR{oGnm=5dXe56Uz`*AK)a naj*ACoZr$5MqPZXs^zSN+w{Z@g~f=NkTzW;UnM+2&o2KD&@4cv literal 0 HcmV?d00001 diff --git a/__pycache__/FlowTest.cpython-311.pyc b/__pycache__/FlowTest.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46e5be1a9ed0a865571f3232afddc737f64800ab GIT binary patch literal 639 zcmZWmO>5gg5S^9QiY3P+fn1W4Lwl$%Jrzpo5-4$dF*Svx7b7SpyC|xqRoGoOwQ-CB zIRyFx+Fy_l(jOB;4o1*Rd+N<#ddaD?wiPIS(mvkI&OD8FFUw^Q5PzPhY>NQ=GC>Y& zA*K}+Ux5K55yYfLh|yMLwJc_zLCa>=9#rXXQ(h&R8*u$v1fk%~1Cz=@QP{Yq8VT*l z2@KGtUj~>d`$5sU(l}6#kGU{Cg@Al_E^xe?d_*`Q+ITN8AQ#ws^UzOVKybvRX21BT zvLEV*d;QXIIE=ZB+adG%PS6%wdtC<&ex_e=EAwLZVX==tQDJ=Afe%v6=i{qF7y|GnZ;`HYJWmwr7t=*C=V<#*YquoHzM@Za_H zVIurDQF8oBw4)x@&w_of^wXoB@l{$bqhkS=dW)38#DV3_v_7WA^PLghn5*p(U7xEb zr_Hqf!(F>`H@`i*@~@h=Zf)e&?%W!tseAtTv~ku*8{^VS+L)ptUS4L0LP&Fja>4VTe;NT!#=sz<}d~#JE(IP_;x|Sdvaj%2>5cli-H<5Pqpg zIPn2oIN?-7!jYdH+j@4Ki%us(Am6<;-Ny)hy33ysaLzzY7l0y)1(G4rQh%w3w+nm};&pgnSDXwLi8}ydxa~&riR9oZcCxO-h-XFr8i&qf#CN1Z3zc4rVs@@FF^Br*GGxXcPUnu-*uXt~7XW!a4x6(FsNMc!Kk>Ly h+O0{uJvGs0f`8D4L>->Uf|i1v!fzqtYIktx{Q@6aZ7To( literal 0 HcmV?d00001 diff --git a/__pycache__/env.cpython-311.pyc b/__pycache__/env.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..55c7e27b93fd94818049266d784c53fa01ca31db GIT binary patch literal 296 zcmZ3^%ge<81kR`2Q;LD~V-N=h7@>^MVnD`ph7^VTZl vX-=wL5jW5{kpGHhfy4)9Mn=XPoRSS}H@L+cIBsxDfC#w;4iGHj1gZc42t8Uc literal 0 HcmV?d00001 diff --git a/__pycache__/env.cpython-37.pyc b/__pycache__/env.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3590fe66d47b92457b23fe7f6bbdb03a8f144956 GIT binary patch literal 266 zcmXv}&1%9x5Z-8%V6jl>8}#HsLFlOzX{*><6~xQ3Ae+w6F3Il7P7;Z4)K}>vIBQfe;LgjEsy9s)ThC6BApdZWROX+#jew;`#jDd+*-8^ZVZUjjrbq$n?)9 zew{+-yD$y}>_m2!V0wWt!jg+T$&@6ar`(j6Hq(ioc4bd76;CzQ#Fim0V`ej z^>St|@hfhZ*@e}o$n3^S3FR|C!~uDU>oz4;NS2Ae;`js{eVEv;MXk`;Aj=htk$j40 zN`x^d@VQ3Gio-%$&&xc`)?KbFSrwOXl@XWNA=mDb(3-JAYr&S13id#TDGl$=a{#DE zYDqZNO5t=XjpZh4fEOzQo07nm90DH5qr*(E4tP0OO6I2g8Y12uMzv(DHsywzCdX5M9C&+#$w*9dL&Rh+~;yB1(_iFy|s zLoY-q*O?4nq240{ZC8mZO;T(Kt#g~BzVEZc$a z17VZr*%ELr6MHoPO4S;5U8lm8szn*$x%FBAt*N>-Mg@I&m1}ta3_-a#m1{Lne9I$T zt6Ge01{CxD{q)eXW$2dUuW)s*!3=0Y!-?!p-JB>tfX%GDS7v!8uxlRiLskYBoHZBr zmG9NV)xa;$xxwZQ-*W2^Uv_+dtXk*U6%x)S*M=I9RZz`rfHsQtq4r$dd#XJj_nv9b zZ>wnF%15nZT>muKF>ZgJ>lllXeEgen`epZ5qwvKjMB_I)#`Kmk4er>Oh$a_0#)1gZ z2cwf0KHx|%cJ$(wUWBw={q4Iua16@pJO|ubuDwdUdcqJN{OuSckHfJ)E;ALkkoWu% z5KxaQ;G}{SD!!j;0=^$(Ma^K5u@?we7{sI^{HoX7< literal 0 HcmV?d00001 diff --git a/__pycache__/inn.cpython-37.pyc b/__pycache__/inn.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f025baae67933067cdeaac820da4a9c48f8c1407 GIT binary patch literal 818 zcmYjQOK;RL5VrH$>~^ zh6R$CVC-~Hc+w|+qx&L|AqizfqQ(v&u0>ihCb4Xjw(O8j;}69WSz-}ueMY3q!Vwz8 zzaTRjVB1SIrv)E#HO&+UN1yRjP)&>MoR25e@PTJrBW_HVD;sM*%}k-^gTVUcOxW<4 zP6W4+;ew}yjbHPE?$d%Erq~sL6@dgGdmv^9fZ-Z5ulAT<`z)x?3S!|3s_+V`g93fP zU%e{$hU8A7Ju>TuySW_A1;*6Yi+FQ%aOA!(R;2+}k7o0nP123^ z_4Q{?8K=2YKyT}zIff1eJUz*w0a2-i$R;+NQEj;GoRv8=awbZn-2exXjoDQV*C1Eb z#w93UH!(i1M{4GVJbzhlTh7Q<`TL;J9YEME)AwbX9dI&|PhuU$nQJ7_!TI&ifbX4l{r a_-y=C=ByNa+ua`HevmGlt&i{G*!v5w;@_qK literal 0 HcmV?d00001 diff --git a/__pycache__/sysjob2html.cpython-311.pyc b/__pycache__/sysjob2html.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6aad79159a286a2df8e19a9340eb4665a2801556 GIT binary patch literal 1562 zcmah}O>Epm6rQoY|5-z|2_=D&m4Z~3pjIsbL5LDnBvFEvK%4ZkY>V7@k~nLRqnR=3 zE=jZpgjRw>4wc9;7ecG_&?85Vl>liSt(27|Bm}44BISUT6K}jfp)^v)_VYK-&)>ZF z=CglFr;`ZA^wpaAkAl$Oa?%-*HaPwkzz@hoCbp4-3)oQ#3YK%lRvoRNg;=#Cg$VdG zJGy|(2vGUntql>tk1wt{vDqP3+zzc=pO>8Qgcmtbi zC5=#sv^GMM=uT-<*}xl$896OrwM%D4D}aUMYY&Kwoks3LTVEV|;M(uH_aKk`ZibT2 zjGx2$pY^&l=v>x>WNlUUy$$syTUaDcIaaj}hUcke{J3WiD%kH}d9x?86Cu=L9FcD8Rp} z-$8tkbj&Z?FTn;U$$dd62LS**CUIBmP@H>hEkA->p>@bwkp*jLudK@4)50nDVheEnCCQ_=W9j+czJKJos?O^D}S$$RA#Nc=Ped z;qchO@R&b5-WVSDFHbZsPxzUMUxxh5)bHxk8&8ejCJ*zagM7))JB_^K&(OvU^)s}- zCj5->=)A*QXl#6y&8}Jk$pd^ucW2eYEjChrkQ*vh_xEegV=od6X8L+1y~6M=iij~Dq~OIBso+JaC8&+1LaoxI2w_FGnK7MqcQ($<+9oDJ zP(%=q-aNEN!9V02_0+%M$v2w_o#nmvy|?duGjHZSs?|aS>)WqS^d~{+k9Gbp7r+A$ zwF!zMic^%~F3w1oVC$3A$=t46VkfP1D-d&2uY(w2nE5PtO&X|ySd~`36Y5d_quULs z(?(Hn3XCWsrm`b=E{wa$m5#8f_L+Vx`dqLr@bFE@@YGQ4=ex#}Oczr0u&spUfOsHl zAnG$HiYJ(o2_9qW+(o5ztvy;FqZWGEoRBdd6IyAYeMG%F($@1E=$M?K54etKa3s`IL(`>zN=+n{Kajj^TUlRQ ziFXu}DyB>vFd4VNZ3gyW@Nzkn=WVKGE4w(O>b5*s&2n0#tZ83M1)%Kia2Dqu37p^k literal 0 HcmV?d00001 diff --git a/__pycache__/sysjobhistory.cpython-37.pyc b/__pycache__/sysjobhistory.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31746a2fa022e13939184b93135ba3c3e9015dc1 GIT binary patch literal 1365 zcmYjR!H(ND5G5s9l4Z&EdUu;NNP7*OgFm2H6y0pRiP6?**WMmj7ldpwyXumXLrQ72 zK#Ky-wf%6}bk}`zq7rxMTc_LR2z0!EC;qzL;K_aQ@x-)y2#6D-&H7if1?Zm%KLqf(yPW zA#r#;pM85hojsq+^lI#xSaH!J-)37AEV$ONjq$%uw_DCkBAc0RnyoAb;~SAG zNO{BQI@Np*PW*IZOMO3FP#RKy1%)Gm86wU#kV{Nfx#Ku~^>% zX@#myq7Tg_RNvdGOs1-)cf7vuwT*wTOZ9{CA&+M4-EYvxeZNiAlh$dvtqtpBaEO_4 zdr19ty1ApdT;CtwD`>7|}+61uIlI!vjz-n74!uO|bD|=!m z`-u7Y#DtXQspOQJh*DXwN?1Ln^mUbr{YpYrLPOY$i2I_$opITvwIuM^&a|mJp zpFRN*VGoaRh-3Kd?*xyWCSv@+w)d(kD+TQ-%Zl;KdJCi~dyXd3uSF_0w_MgAnrLco z%LyTfeEcD3!m`vpRXvd!ysB$K`UmTUl5P1tSW&SRmN)b0Acp^3P7dCvvKL7`v{6BO qs@izZ;N3PY95mkWV7oWrS$kxk+l#43AYvRlkAZ-PmIOC+eCL1k=5zA^ literal 0 HcmV?d00001 diff --git a/__pycache__/sysjobs.cpython-311.pyc b/__pycache__/sysjobs.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db1897f58b2234076b1c8eb98773ef496261341d GIT binary patch literal 13360 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 literal 0 HcmV?d00001 diff --git a/inn.py b/inn.py new file mode 100644 index 0000000..5900fdb --- /dev/null +++ b/inn.py @@ -0,0 +1,17 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import Session,registry +from sqlalchemy import sql,Table,select,MetaData +import urllib + +def getEngine(database): + server = 'bi-dsa-udv\dsa' # to specify an alternate port + username = 'admindenker' + password = 'biadmin#kode4rm2' + + + connection_string = "DRIVER={SQL Server};Database="+database+";SERVER="+server + connection_string = urllib.parse.quote_plus(connection_string) + connection_string = "mssql+pyodbc:///?odbc_connect=%s" % connection_string + engine = create_engine(connection_string, echo = True) + return engine diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..94b06be31cfe3fa658df40b8acd40de84775db51 GIT binary patch literal 548 zcmZXSy-veG5QL{j;!!|}O(G~LXebaACV$3s+Ne{ZiZWvYdO^*DaSL8(f1J+fyJmrHm|JsdIBWGW zZPW@`Fm|Z6q2I?AOP$d%x6q36ZO=IquE}w#$I*DL4eSnufsUEh_x?%$j+fPXg_#AK z|3M$N&wWr_4yEb};_eo05cu%j1dsKH~DTgN*e(8aGAhS`| UX{BHKz;w$ok}{aZe*PEy0<1((5C8xG literal 0 HcmV?d00001 diff --git a/static/css/mermaid.css b/static/css/mermaid.css new file mode 100644 index 0000000..430830f --- /dev/null +++ b/static/css/mermaid.css @@ -0,0 +1,346 @@ +/* Flowchart variables */ +/* Sequence Diagram variables */ +/* Gantt chart variables */ +div.mermaid svg +{ + display: block; + + margin-right: auto; + margin-left: auto; +} +.mermaid .label +{ + color: #333; +} +div.mermaid .node rect, +div.mermaid .node circle, +div.mermaid .node ellipse, +div.mermaid .node polygon +{ + fill: #ececff; + stroke: #ccf; + stroke-width: 1px; +} +div.mermaid .edgePath .path +{ + stroke: #333; +} +div.mermaid .edgeLabel +{ + background-color: #e8e8e8; +} +div.mermaid .cluster rect +{ + fill: #ffffde !important; + rx: 4 !important; + stroke: #aa3 !important; + stroke-width: 1px !important; +} +div.mermaid .cluster text +{ + fill: #333; +} +div.mermaid .actor +{ + stroke: #ccf; + fill: #ececff; +} +div.mermaid text.actor +{ + fill: black; + stroke: none; +} +div.mermaid .actor-line +{ + stroke: grey; +} +div.mermaid .messageLine0 +{ + stroke-width: 1.5; + stroke-dasharray: '2 2'; + marker-end: 'url(#arrowhead)'; + stroke: #333; +} +div.mermaid .messageLine1 +{ + stroke-width: 1.5; + stroke-dasharray: '2 2'; + stroke: #333; +} +#arrowhead +{ + fill: #333; +} +#crosshead path +{ + fill: #333 !important; + stroke: #333 !important; +} +div.mermaid .messageText +{ + fill: #333; + stroke: none; +} +div.mermaid .labelBox +{ + stroke: #ccf; + fill: #ececff; +} +div.mermaid .labelText +{ + fill: black; + stroke: none; +} +div.mermaid .loopText +{ + fill: black; + stroke: none; +} +div.mermaid .loopLine +{ + stroke-width: 2; + stroke-dasharray: '2 2'; + marker-end: 'url(#arrowhead)'; + stroke: #ccf; +} +div.mermaid .note +{ + stroke: #aa3; + fill: #fff5ad; +} +div.mermaid .noteText +{ + font-family: 'trebuchet ms', verdana, arial; + font-size: 14px; + + fill: black; + stroke: none; +} +/** Section styling */ +div.mermaid .section +{ + opacity: .2; + + stroke: none; +} +div.mermaid .section0 +{ + fill: rgba(102, 102, 255, .49); +} +div.mermaid .section2 +{ + fill: #fff400; +} +div.mermaid .section1, +div.mermaid .section3 +{ + opacity: .2; + + fill: white; +} +div.mermaid .sectionTitle0 +{ + fill: #333; +} +div.mermaid .sectionTitle1 +{ + fill: #333; +} +div.mermaid .sectionTitle2 +{ + fill: #333; +} +div.mermaid .sectionTitle3 +{ + fill: #333; +} +div.mermaid .sectionTitle +{ + font-size: 11px; + + text-anchor: start; + text-height: 14px; +} +/* Grid and axis */ +div.mermaid .grid .tick +{ + opacity: .3; + + stroke: lightgrey; + shape-rendering: crispEdges; +} +div.mermaid .grid path +{ + stroke-width: 0; +} +/* Today line */ +div.mermaid .today +{ + fill: none; + stroke: red; + stroke-width: 2px; +} +/* Task styling */ +/* Default task */ +div.mermaid .task +{ + stroke-width: 2; +} +div.mermaid .taskText +{ + font-size: 11px; + + text-anchor: middle; +} +div.mermaid .taskTextOutsideRight +{ + font-size: 11px; + + fill: black; + text-anchor: start; +} +div.mermaid .taskTextOutsideLeft +{ + font-size: 11px; + + fill: black; + text-anchor: end; +} +/* Specific task settings for the sections*/ +div.mermaid .taskText0, +div.mermaid .taskText1, +div.mermaid .taskText2, +div.mermaid .taskText3 +{ + fill: white; +} +div.mermaid .task0, +div.mermaid .task1, +div.mermaid .task2, +div.mermaid .task3 +{ + fill: #8a90dd; + stroke: #534fbc; +} +div.mermaid .taskTextOutside0, +div.mermaid .taskTextOutside2 +{ + fill: black; +} +div.mermaid .taskTextOutside1, +div.mermaid .taskTextOutside3 +{ + fill: black; +} +/* Active task */ +div.mermaid .active0, +div.mermaid .active1, +div.mermaid .active2, +div.mermaid .active3 +{ + fill: #bfc7ff; + stroke: #534fbc; +} +div.mermaid .activeText0, +div.mermaid .activeText1, +div.mermaid .activeText2, +div.mermaid .activeText3 +{ + fill: black !important; +} +/* Completed task */ +div.mermaid .done0, +div.mermaid .done1, +div.mermaid .done2, +div.mermaid .done3 +{ + stroke: grey; + fill: lightgrey; + stroke-width: 2; +} +div.mermaid .doneText0, +div.mermaid .doneText1, +div.mermaid .doneText2, +div.mermaid .doneText3 +{ + fill: black !important; +} +/* Tasks on the critical line */ +div.mermaid .crit0, +div.mermaid .crit1, +div.mermaid .crit2, +div.mermaid .crit3 +{ + stroke: #f88; + fill: red; + stroke-width: 2; +} +div.mermaid .activeCrit0, +div.mermaid .activeCrit1, +div.mermaid .activeCrit2, +div.mermaid .activeCrit3 +{ + stroke: #f88; + fill: #bfc7ff; + stroke-width: 2; +} +div.mermaid .doneCrit0, +div.mermaid .doneCrit1, +div.mermaid .doneCrit2, +div.mermaid .doneCrit3 +{ + cursor: pointer; + + stroke: #f88; + fill: lightgrey; + stroke-width: 2; + shape-rendering: crispEdges; +} +div.mermaid .doneCritText0, +div.mermaid .doneCritText1, +div.mermaid .doneCritText2, +div.mermaid .doneCritText3 +{ + fill: black !important; +} +div.mermaid .activeCritText0, +div.mermaid .activeCritText1, +div.mermaid .activeCritText2, +div.mermaid .activeCritText3 +{ + fill: black !important; +} +div.mermaid .titleText +{ + font-size: 18px; + + text-anchor: middle; + fill: black; +} +/* + + +*/ +div.mermaid .node text +{ + font-family: 'trebuchet ms', verdana, arial; + font-size: 14px; +} +div.mermaidTooltip +{ + font-family: 'trebuchet ms', verdana, arial; + font-size: 12px; + + position: absolute; + z-index: 100; + + max-width: 200px; + padding: 2px; + + text-align: center; + pointer-events: none; + + border: 1px solid #aa3; + border-radius: 2px; + background: #ffffde; +} \ No newline at end of file diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 0000000..6b443c4 --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,54 @@ +html,body,#wrapper { + width: 100%; + height: 100%; + margin: 0px; +} + +.chart { + font-family: Arial, sans-serif; + font-size: 12px; +} + +.axis path,.axis line { + fill: none; + stroke: #000; + shape-rendering: crispEdges; +} + +.bar { + fill: #33b5e5; +} + +.bar-failed { + fill: #CC0000; +} + +.bar-running { + fill: #669900; +} + +.bar-succeeded { + fill: #33b5e5; +} + +.bar-killed { + fill: #ffbb33; +} + +#forkme_banner { + display: block; + position: absolute; + top: 0; + right: 10px; + z-index: 10; + padding: 10px 50px 10px 10px; + color: #fff; + background: + url('http://dk8996.github.io/Gantt-Chart/images/blacktocat.png') + #0090ff no-repeat 95% 50%; + font-weight: 700; + box-shadow: 0 0 10px rgba(0, 0, 0, .5); + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + text-decoration: none; +} \ No newline at end of file diff --git a/static/mermaid.core.js b/static/mermaid.core.js new file mode 100644 index 0000000..67aeb18 --- /dev/null +++ b/static/mermaid.core.js @@ -0,0 +1,14924 @@ +UNPKG - mermaid

UNPKG

463 kBJavaScriptView Raw
1(function webpackUniversalModuleDefinition(root, factory) { +
2 if(typeof exports === 'object' && typeof module === 'object') +
3 module.exports = factory(); +
4 else if(typeof define === 'function' && define.amd) +
5 define([], factory); +
6 else if(typeof exports === 'object') +
7 exports["mermaid"] = factory(); +
8 else +
9 root["mermaid"] = factory(); +
10})(window, function() { +
11return /******/ (function(modules) { // webpackBootstrap +
12/******/ // The module cache +
13/******/ var installedModules = {}; +
14/******/ +
15/******/ // The require function +
16/******/ function __webpack_require__(moduleId) { +
17/******/ +
18/******/ // Check if module is in cache +
19/******/ if(installedModules[moduleId]) { +
20/******/ return installedModules[moduleId].exports; +
21/******/ } +
22/******/ // Create a new module (and put it into the cache) +
23/******/ var module = installedModules[moduleId] = { +
24/******/ i: moduleId, +
25/******/ l: false, +
26/******/ exports: {} +
27/******/ }; +
28/******/ +
29/******/ // Execute the module function +
30/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +
31/******/ +
32/******/ // Flag the module as loaded +
33/******/ module.l = true; +
34/******/ +
35/******/ // Return the exports of the module +
36/******/ return module.exports; +
37/******/ } +
38/******/ +
39/******/ +
40/******/ // expose the modules object (__webpack_modules__) +
41/******/ __webpack_require__.m = modules; +
42/******/ +
43/******/ // expose the module cache +
44/******/ __webpack_require__.c = installedModules; +
45/******/ +
46/******/ // define getter function for harmony exports +
47/******/ __webpack_require__.d = function(exports, name, getter) { +
48/******/ if(!__webpack_require__.o(exports, name)) { +
49/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +
50/******/ } +
51/******/ }; +
52/******/ +
53/******/ // define __esModule on exports +
54/******/ __webpack_require__.r = function(exports) { +
55/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +
56/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +
57/******/ } +
58/******/ Object.defineProperty(exports, '__esModule', { value: true }); +
59/******/ }; +
60/******/ +
61/******/ // create a fake namespace object +
62/******/ // mode & 1: value is a module id, require it +
63/******/ // mode & 2: merge all properties of value into the ns +
64/******/ // mode & 4: return value when already ns object +
65/******/ // mode & 8|1: behave like require +
66/******/ __webpack_require__.t = function(value, mode) { +
67/******/ if(mode & 1) value = __webpack_require__(value); +
68/******/ if(mode & 8) return value; +
69/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +
70/******/ var ns = Object.create(null); +
71/******/ __webpack_require__.r(ns); +
72/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +
73/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +
74/******/ return ns; +
75/******/ }; +
76/******/ +
77/******/ // getDefaultExport function for compatibility with non-harmony modules +
78/******/ __webpack_require__.n = function(module) { +
79/******/ var getter = module && module.__esModule ? +
80/******/ function getDefault() { return module['default']; } : +
81/******/ function getModuleExports() { return module; }; +
82/******/ __webpack_require__.d(getter, 'a', getter); +
83/******/ return getter; +
84/******/ }; +
85/******/ +
86/******/ // Object.prototype.hasOwnProperty.call +
87/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +
88/******/ +
89/******/ // __webpack_public_path__ +
90/******/ __webpack_require__.p = ""; +
91/******/ +
92/******/ +
93/******/ // Load entry module and return exports +
94/******/ return __webpack_require__(__webpack_require__.s = "./src/mermaid.js"); +
95/******/ }) +
96/************************************************************************/ +
97/******/ ({ +
98 +
99/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/dark/index.scss": +
100/*!*******************************************************************************************************************!*\ +
101 !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/dark/index.scss ***! +
102 \*******************************************************************************************************************/ +
103/*! no static exports found */ +
104/***/ (function(module, exports, __webpack_require__) { +
105 +
106exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false); +
107// Module +
108exports.push([module.i, "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.label {\n font-family: 'trebuchet ms', verdana, arial;\n color: #333; }\n\n.node rect,\n.node circle,\n.node ellipse,\n.node polygon {\n fill: #BDD5EA;\n stroke: purple;\n stroke-width: 1px; }\n\n.node.clickable {\n cursor: pointer; }\n\n.arrowheadPath {\n fill: lightgrey; }\n\n.edgePath .path {\n stroke: lightgrey;\n stroke-width: 1.5px; }\n\n.edgeLabel {\n background-color: #e8e8e8; }\n\n.cluster rect {\n fill: #6D6D65;\n stroke: rgba(255, 255, 255, 0.25);\n stroke-width: 1px; }\n\n.cluster text {\n fill: #F9FFFE; }\n\ndiv.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 12px;\n background: #6D6D65;\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 2px;\n pointer-events: none;\n z-index: 100; }\n\n.actor {\n stroke: #81B1DB;\n fill: #BDD5EA; }\n\ntext.actor {\n fill: black;\n stroke: none; }\n\n.actor-line {\n stroke: lightgrey; }\n\n.messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: lightgrey; }\n\n.messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: lightgrey; }\n\n#arrowhead {\n fill: lightgrey; }\n\n#crosshead path {\n fill: lightgrey !important;\n stroke: lightgrey !important; }\n\n.messageText {\n fill: lightgrey;\n stroke: none; }\n\n.labelBox {\n stroke: #81B1DB;\n fill: #BDD5EA; }\n\n.labelText {\n fill: #323D47;\n stroke: none; }\n\n.loopText {\n fill: lightgrey;\n stroke: none; }\n\n.loopLine {\n stroke-width: 2;\n stroke-dasharray: '2 2';\n stroke: #81B1DB; }\n\n.note {\n stroke: rgba(255, 255, 255, 0.25);\n fill: #fff5ad; }\n\n.noteText {\n fill: black;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 14px; }\n\n.activation0 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation1 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation2 {\n fill: #f4f4f4;\n stroke: #666; }\n\n/** Section styling */\n.section {\n stroke: none;\n opacity: 0.2; }\n\n.section0 {\n fill: rgba(255, 255, 255, 0.3); }\n\n.section2 {\n fill: #EAE8B9; }\n\n.section1,\n.section3 {\n fill: white;\n opacity: 0.2; }\n\n.sectionTitle0 {\n fill: #F9FFFE; }\n\n.sectionTitle1 {\n fill: #F9FFFE; }\n\n.sectionTitle2 {\n fill: #F9FFFE; }\n\n.sectionTitle3 {\n fill: #F9FFFE; }\n\n.sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px; }\n\n/* Grid and axis */\n.grid .tick {\n stroke: lightgrey;\n opacity: 0.3;\n shape-rendering: crispEdges; }\n\n.grid path {\n stroke-width: 0; }\n\n/* Today line */\n.today {\n fill: none;\n stroke: #DB5757;\n stroke-width: 2px; }\n\n/* Task styling */\n/* Default task */\n.task {\n stroke-width: 2; }\n\n.taskText {\n text-anchor: middle;\n font-size: 11px; }\n\n.taskTextOutsideRight {\n fill: #323D47;\n text-anchor: start;\n font-size: 11px; }\n\n.taskTextOutsideLeft {\n fill: #323D47;\n text-anchor: end;\n font-size: 11px; }\n\n/* Special case clickable */\n.task.clickable {\n cursor: pointer; }\n\n.taskText.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n/* Specific task settings for the sections*/\n.taskText0,\n.taskText1,\n.taskText2,\n.taskText3 {\n fill: #323D47; }\n\n.task0,\n.task1,\n.task2,\n.task3 {\n fill: #BDD5EA;\n stroke: rgba(255, 255, 255, 0.5); }\n\n.taskTextOutside0,\n.taskTextOutside2 {\n fill: lightgrey; }\n\n.taskTextOutside1,\n.taskTextOutside3 {\n fill: lightgrey; }\n\n/* Active task */\n.active0,\n.active1,\n.active2,\n.active3 {\n fill: #81B1DB;\n stroke: rgba(255, 255, 255, 0.5); }\n\n.activeText0,\n.activeText1,\n.activeText2,\n.activeText3 {\n fill: #323D47 !important; }\n\n/* Completed task */\n.done0,\n.done1,\n.done2,\n.done3 {\n stroke: grey;\n fill: lightgrey;\n stroke-width: 2; }\n\n.doneText0,\n.doneText1,\n.doneText2,\n.doneText3 {\n fill: #323D47 !important; }\n\n/* Tasks on the critical line */\n.crit0,\n.crit1,\n.crit2,\n.crit3 {\n stroke: #E83737;\n fill: #E83737;\n stroke-width: 2; }\n\n.activeCrit0,\n.activeCrit1,\n.activeCrit2,\n.activeCrit3 {\n stroke: #E83737;\n fill: #81B1DB;\n stroke-width: 2; }\n\n.doneCrit0,\n.doneCrit1,\n.doneCrit2,\n.doneCrit3 {\n stroke: #E83737;\n fill: lightgrey;\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges; }\n\n.milestone {\n transform: rotate(45deg) scale(0.8, 0.8); }\n\n.milestoneText {\n font-style: italic; }\n\n.doneCritText0,\n.doneCritText1,\n.doneCritText2,\n.doneCritText3 {\n fill: #323D47 !important; }\n\n.activeCritText0,\n.activeCritText1,\n.activeCritText2,\n.activeCritText3 {\n fill: #323D47 !important; }\n\n.titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: #323D47; }\n\ng.classGroup text {\n fill: purple;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 10px; }\n\ng.classGroup rect {\n fill: #BDD5EA;\n stroke: purple; }\n\ng.classGroup line {\n stroke: purple;\n stroke-width: 1; }\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: #BDD5EA;\n opacity: 0.5; }\n\n.classLabel .label {\n fill: purple;\n font-size: 10px; }\n\n.relation {\n stroke: purple;\n stroke-width: 1;\n fill: none; }\n\n#compositionStart {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#compositionEnd {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#aggregationStart {\n fill: #BDD5EA;\n stroke: purple;\n stroke-width: 1; }\n\n#aggregationEnd {\n fill: #BDD5EA;\n stroke: purple;\n stroke-width: 1; }\n\n#dependencyStart {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#dependencyEnd {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#extensionStart {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#extensionEnd {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n.commit-id,\n.commit-msg,\n.branch-label {\n fill: lightgrey;\n color: lightgrey; }\n", ""]); +
109 +
110 +
111 +
112/***/ }), +
113 +
114/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/default/index.scss": +
115/*!**********************************************************************************************************************!*\ +
116 !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/default/index.scss ***! +
117 \**********************************************************************************************************************/ +
118/*! no static exports found */ +
119/***/ (function(module, exports, __webpack_require__) { +
120 +
121exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false); +
122// Module +
123exports.push([module.i, "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.label {\n font-family: 'trebuchet ms', verdana, arial;\n color: #333; }\n\n.node rect,\n.node circle,\n.node ellipse,\n.node polygon {\n fill: #ECECFF;\n stroke: #9370DB;\n stroke-width: 1px; }\n\n.node.clickable {\n cursor: pointer; }\n\n.arrowheadPath {\n fill: #333333; }\n\n.edgePath .path {\n stroke: #333333;\n stroke-width: 1.5px; }\n\n.edgeLabel {\n background-color: #e8e8e8; }\n\n.cluster rect {\n fill: #ffffde;\n stroke: #aaaa33;\n stroke-width: 1px; }\n\n.cluster text {\n fill: #333; }\n\ndiv.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 12px;\n background: #ffffde;\n border: 1px solid #aaaa33;\n border-radius: 2px;\n pointer-events: none;\n z-index: 100; }\n\n.actor {\n stroke: #CCCCFF;\n fill: #ECECFF; }\n\ntext.actor {\n fill: black;\n stroke: none; }\n\n.actor-line {\n stroke: grey; }\n\n.messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n.messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n#arrowhead {\n fill: #333; }\n\n#crosshead path {\n fill: #333 !important;\n stroke: #333 !important; }\n\n.messageText {\n fill: #333;\n stroke: none; }\n\n.labelBox {\n stroke: #CCCCFF;\n fill: #ECECFF; }\n\n.labelText {\n fill: black;\n stroke: none; }\n\n.loopText {\n fill: black;\n stroke: none; }\n\n.loopLine {\n stroke-width: 2;\n stroke-dasharray: '2 2';\n stroke: #CCCCFF; }\n\n.note {\n stroke: #aaaa33;\n fill: #fff5ad; }\n\n.noteText {\n fill: black;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 14px; }\n\n.activation0 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation1 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation2 {\n fill: #f4f4f4;\n stroke: #666; }\n\n/** Section styling */\n.section {\n stroke: none;\n opacity: 0.2; }\n\n.section0 {\n fill: rgba(102, 102, 255, 0.49); }\n\n.section2 {\n fill: #fff400; }\n\n.section1,\n.section3 {\n fill: white;\n opacity: 0.2; }\n\n.sectionTitle0 {\n fill: #333; }\n\n.sectionTitle1 {\n fill: #333; }\n\n.sectionTitle2 {\n fill: #333; }\n\n.sectionTitle3 {\n fill: #333; }\n\n.sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px; }\n\n/* Grid and axis */\n.grid .tick {\n stroke: lightgrey;\n opacity: 0.3;\n shape-rendering: crispEdges; }\n\n.grid path {\n stroke-width: 0; }\n\n/* Today line */\n.today {\n fill: none;\n stroke: red;\n stroke-width: 2px; }\n\n/* Task styling */\n/* Default task */\n.task {\n stroke-width: 2; }\n\n.taskText {\n text-anchor: middle;\n font-size: 11px; }\n\n.taskTextOutsideRight {\n fill: black;\n text-anchor: start;\n font-size: 11px; }\n\n.taskTextOutsideLeft {\n fill: black;\n text-anchor: end;\n font-size: 11px; }\n\n/* Special case clickable */\n.task.clickable {\n cursor: pointer; }\n\n.taskText.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n/* Specific task settings for the sections*/\n.taskText0,\n.taskText1,\n.taskText2,\n.taskText3 {\n fill: white; }\n\n.task0,\n.task1,\n.task2,\n.task3 {\n fill: #8a90dd;\n stroke: #534fbc; }\n\n.taskTextOutside0,\n.taskTextOutside2 {\n fill: black; }\n\n.taskTextOutside1,\n.taskTextOutside3 {\n fill: black; }\n\n/* Active task */\n.active0,\n.active1,\n.active2,\n.active3 {\n fill: #bfc7ff;\n stroke: #534fbc; }\n\n.activeText0,\n.activeText1,\n.activeText2,\n.activeText3 {\n fill: black !important; }\n\n/* Completed task */\n.done0,\n.done1,\n.done2,\n.done3 {\n stroke: grey;\n fill: lightgrey;\n stroke-width: 2; }\n\n.doneText0,\n.doneText1,\n.doneText2,\n.doneText3 {\n fill: black !important; }\n\n/* Tasks on the critical line */\n.crit0,\n.crit1,\n.crit2,\n.crit3 {\n stroke: #ff8888;\n fill: red;\n stroke-width: 2; }\n\n.activeCrit0,\n.activeCrit1,\n.activeCrit2,\n.activeCrit3 {\n stroke: #ff8888;\n fill: #bfc7ff;\n stroke-width: 2; }\n\n.doneCrit0,\n.doneCrit1,\n.doneCrit2,\n.doneCrit3 {\n stroke: #ff8888;\n fill: lightgrey;\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges; }\n\n.milestone {\n transform: rotate(45deg) scale(0.8, 0.8); }\n\n.milestoneText {\n font-style: italic; }\n\n.doneCritText0,\n.doneCritText1,\n.doneCritText2,\n.doneCritText3 {\n fill: black !important; }\n\n.activeCritText0,\n.activeCritText1,\n.activeCritText2,\n.activeCritText3 {\n fill: black !important; }\n\n.titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: black; }\n\ng.classGroup text {\n fill: #9370DB;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 10px; }\n\ng.classGroup rect {\n fill: #ECECFF;\n stroke: #9370DB; }\n\ng.classGroup line {\n stroke: #9370DB;\n stroke-width: 1; }\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: #ECECFF;\n opacity: 0.5; }\n\n.classLabel .label {\n fill: #9370DB;\n font-size: 10px; }\n\n.relation {\n stroke: #9370DB;\n stroke-width: 1;\n fill: none; }\n\n#compositionStart {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#compositionEnd {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#aggregationStart {\n fill: #ECECFF;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#aggregationEnd {\n fill: #ECECFF;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#dependencyStart {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#dependencyEnd {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#extensionStart {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#extensionEnd {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n.commit-id,\n.commit-msg,\n.branch-label {\n fill: lightgrey;\n color: lightgrey; }\n", ""]); +
124 +
125 +
126 +
127/***/ }), +
128 +
129/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/forest/index.scss": +
130/*!*********************************************************************************************************************!*\ +
131 !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/forest/index.scss ***! +
132 \*********************************************************************************************************************/ +
133/*! no static exports found */ +
134/***/ (function(module, exports, __webpack_require__) { +
135 +
136exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false); +
137// Module +
138exports.push([module.i, "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.label {\n font-family: 'trebuchet ms', verdana, arial;\n color: #333; }\n\n.node rect,\n.node circle,\n.node ellipse,\n.node polygon {\n fill: #cde498;\n stroke: #13540c;\n stroke-width: 1px; }\n\n.node.clickable {\n cursor: pointer; }\n\n.arrowheadPath {\n fill: green; }\n\n.edgePath .path {\n stroke: green;\n stroke-width: 1.5px; }\n\n.edgeLabel {\n background-color: #e8e8e8; }\n\n.cluster rect {\n fill: #cdffb2;\n stroke: #6eaa49;\n stroke-width: 1px; }\n\n.cluster text {\n fill: #333; }\n\ndiv.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 12px;\n background: #cdffb2;\n border: 1px solid #6eaa49;\n border-radius: 2px;\n pointer-events: none;\n z-index: 100; }\n\n.actor {\n stroke: #13540c;\n fill: #cde498; }\n\ntext.actor {\n fill: black;\n stroke: none; }\n\n.actor-line {\n stroke: grey; }\n\n.messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n.messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n#arrowhead {\n fill: #333; }\n\n#crosshead path {\n fill: #333 !important;\n stroke: #333 !important; }\n\n.messageText {\n fill: #333;\n stroke: none; }\n\n.labelBox {\n stroke: #326932;\n fill: #cde498; }\n\n.labelText {\n fill: black;\n stroke: none; }\n\n.loopText {\n fill: black;\n stroke: none; }\n\n.loopLine {\n stroke-width: 2;\n stroke-dasharray: '2 2';\n stroke: #326932; }\n\n.note {\n stroke: #6eaa49;\n fill: #fff5ad; }\n\n.noteText {\n fill: black;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 14px; }\n\n.activation0 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation1 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation2 {\n fill: #f4f4f4;\n stroke: #666; }\n\n/** Section styling */\n.section {\n stroke: none;\n opacity: 0.2; }\n\n.section0 {\n fill: #6eaa49; }\n\n.section2 {\n fill: #6eaa49; }\n\n.section1,\n.section3 {\n fill: white;\n opacity: 0.2; }\n\n.sectionTitle0 {\n fill: #333; }\n\n.sectionTitle1 {\n fill: #333; }\n\n.sectionTitle2 {\n fill: #333; }\n\n.sectionTitle3 {\n fill: #333; }\n\n.sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px; }\n\n/* Grid and axis */\n.grid .tick {\n stroke: lightgrey;\n opacity: 0.3;\n shape-rendering: crispEdges; }\n\n.grid path {\n stroke-width: 0; }\n\n/* Today line */\n.today {\n fill: none;\n stroke: red;\n stroke-width: 2px; }\n\n/* Task styling */\n/* Default task */\n.task {\n stroke-width: 2; }\n\n.taskText {\n text-anchor: middle;\n font-size: 11px; }\n\n.taskTextOutsideRight {\n fill: black;\n text-anchor: start;\n font-size: 11px; }\n\n.taskTextOutsideLeft {\n fill: black;\n text-anchor: end;\n font-size: 11px; }\n\n/* Special case clickable */\n.task.clickable {\n cursor: pointer; }\n\n.taskText.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n/* Specific task settings for the sections*/\n.taskText0,\n.taskText1,\n.taskText2,\n.taskText3 {\n fill: white; }\n\n.task0,\n.task1,\n.task2,\n.task3 {\n fill: #487e3a;\n stroke: #13540c; }\n\n.taskTextOutside0,\n.taskTextOutside2 {\n fill: black; }\n\n.taskTextOutside1,\n.taskTextOutside3 {\n fill: black; }\n\n/* Active task */\n.active0,\n.active1,\n.active2,\n.active3 {\n fill: #cde498;\n stroke: #13540c; }\n\n.activeText0,\n.activeText1,\n.activeText2,\n.activeText3 {\n fill: black !important; }\n\n/* Completed task */\n.done0,\n.done1,\n.done2,\n.done3 {\n stroke: grey;\n fill: lightgrey;\n stroke-width: 2; }\n\n.doneText0,\n.doneText1,\n.doneText2,\n.doneText3 {\n fill: black !important; }\n\n/* Tasks on the critical line */\n.crit0,\n.crit1,\n.crit2,\n.crit3 {\n stroke: #ff8888;\n fill: red;\n stroke-width: 2; }\n\n.activeCrit0,\n.activeCrit1,\n.activeCrit2,\n.activeCrit3 {\n stroke: #ff8888;\n fill: #cde498;\n stroke-width: 2; }\n\n.doneCrit0,\n.doneCrit1,\n.doneCrit2,\n.doneCrit3 {\n stroke: #ff8888;\n fill: lightgrey;\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges; }\n\n.milestone {\n transform: rotate(45deg) scale(0.8, 0.8); }\n\n.milestoneText {\n font-style: italic; }\n\n.doneCritText0,\n.doneCritText1,\n.doneCritText2,\n.doneCritText3 {\n fill: black !important; }\n\n.activeCritText0,\n.activeCritText1,\n.activeCritText2,\n.activeCritText3 {\n fill: black !important; }\n\n.titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: black; }\n\ng.classGroup text {\n fill: #13540c;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 10px; }\n\ng.classGroup rect {\n fill: #cde498;\n stroke: #13540c; }\n\ng.classGroup line {\n stroke: #13540c;\n stroke-width: 1; }\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: #cde498;\n opacity: 0.5; }\n\n.classLabel .label {\n fill: #13540c;\n font-size: 10px; }\n\n.relation {\n stroke: #13540c;\n stroke-width: 1;\n fill: none; }\n\n#compositionStart {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#compositionEnd {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#aggregationStart {\n fill: #cde498;\n stroke: #13540c;\n stroke-width: 1; }\n\n#aggregationEnd {\n fill: #cde498;\n stroke: #13540c;\n stroke-width: 1; }\n\n#dependencyStart {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#dependencyEnd {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#extensionStart {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#extensionEnd {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n.commit-id,\n.commit-msg,\n.branch-label {\n fill: lightgrey;\n color: lightgrey; }\n", ""]); +
139 +
140 +
141 +
142/***/ }), +
143 +
144/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/neutral/index.scss": +
145/*!**********************************************************************************************************************!*\ +
146 !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/neutral/index.scss ***! +
147 \**********************************************************************************************************************/ +
148/*! no static exports found */ +
149/***/ (function(module, exports, __webpack_require__) { +
150 +
151exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false); +
152// Module +
153exports.push([module.i, "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.label {\n font-family: 'trebuchet ms', verdana, arial;\n color: #333; }\n\n.node rect,\n.node circle,\n.node ellipse,\n.node polygon {\n fill: #eee;\n stroke: #999;\n stroke-width: 1px; }\n\n.node.clickable {\n cursor: pointer; }\n\n.arrowheadPath {\n fill: #333333; }\n\n.edgePath .path {\n stroke: #666;\n stroke-width: 1.5px; }\n\n.edgeLabel {\n background-color: white; }\n\n.cluster rect {\n fill: #eaf2fb;\n stroke: #26a;\n stroke-width: 1px; }\n\n.cluster text {\n fill: #333; }\n\ndiv.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 12px;\n background: #eaf2fb;\n border: 1px solid #26a;\n border-radius: 2px;\n pointer-events: none;\n z-index: 100; }\n\n.actor {\n stroke: #999;\n fill: #eee; }\n\ntext.actor {\n fill: #333;\n stroke: none; }\n\n.actor-line {\n stroke: #666; }\n\n.messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n.messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n#arrowhead {\n fill: #333; }\n\n#crosshead path {\n fill: #333 !important;\n stroke: #333 !important; }\n\n.messageText {\n fill: #333;\n stroke: none; }\n\n.labelBox {\n stroke: #999;\n fill: #eee; }\n\n.labelText {\n fill: #333;\n stroke: none; }\n\n.loopText {\n fill: #333;\n stroke: none; }\n\n.loopLine {\n stroke-width: 2;\n stroke-dasharray: '2 2';\n stroke: #999; }\n\n.note {\n stroke: #777700;\n fill: #ffa; }\n\n.noteText {\n fill: black;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 14px; }\n\n.activation0 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation1 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation2 {\n fill: #f4f4f4;\n stroke: #666; }\n\n/** Section styling */\n.section {\n stroke: none;\n opacity: 0.2; }\n\n.section0 {\n fill: #80b3e6; }\n\n.section2 {\n fill: #80b3e6; }\n\n.section1,\n.section3 {\n fill: white;\n opacity: 0.2; }\n\n.sectionTitle0 {\n fill: #333; }\n\n.sectionTitle1 {\n fill: #333; }\n\n.sectionTitle2 {\n fill: #333; }\n\n.sectionTitle3 {\n fill: #333; }\n\n.sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px; }\n\n/* Grid and axis */\n.grid .tick {\n stroke: #e6e6e6;\n opacity: 0.3;\n shape-rendering: crispEdges; }\n\n.grid path {\n stroke-width: 0; }\n\n/* Today line */\n.today {\n fill: none;\n stroke: #d42;\n stroke-width: 2px; }\n\n/* Task styling */\n/* Default task */\n.task {\n stroke-width: 2; }\n\n.taskText {\n text-anchor: middle;\n font-size: 11px; }\n\n.taskTextOutsideRight {\n fill: #333;\n text-anchor: start;\n font-size: 11px; }\n\n.taskTextOutsideLeft {\n fill: #333;\n text-anchor: end;\n font-size: 11px; }\n\n/* Special case clickable */\n.task.clickable {\n cursor: pointer; }\n\n.taskText.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n/* Specific task settings for the sections*/\n.taskText0,\n.taskText1,\n.taskText2,\n.taskText3 {\n fill: white; }\n\n.task0,\n.task1,\n.task2,\n.task3 {\n fill: #26a;\n stroke: #1a4d80; }\n\n.taskTextOutside0,\n.taskTextOutside2 {\n fill: #333; }\n\n.taskTextOutside1,\n.taskTextOutside3 {\n fill: #333; }\n\n/* Active task */\n.active0,\n.active1,\n.active2,\n.active3 {\n fill: #eee;\n stroke: #1a4d80; }\n\n.activeText0,\n.activeText1,\n.activeText2,\n.activeText3 {\n fill: #333 !important; }\n\n/* Completed task */\n.done0,\n.done1,\n.done2,\n.done3 {\n stroke: #666;\n fill: #bbb;\n stroke-width: 2; }\n\n.doneText0,\n.doneText1,\n.doneText2,\n.doneText3 {\n fill: #333 !important; }\n\n/* Tasks on the critical line */\n.crit0,\n.crit1,\n.crit2,\n.crit3 {\n stroke: #b1361b;\n fill: #d42;\n stroke-width: 2; }\n\n.activeCrit0,\n.activeCrit1,\n.activeCrit2,\n.activeCrit3 {\n stroke: #b1361b;\n fill: #eee;\n stroke-width: 2; }\n\n.doneCrit0,\n.doneCrit1,\n.doneCrit2,\n.doneCrit3 {\n stroke: #b1361b;\n fill: #bbb;\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges; }\n\n.milestone {\n transform: rotate(45deg) scale(0.8, 0.8); }\n\n.milestoneText {\n font-style: italic; }\n\n.doneCritText0,\n.doneCritText1,\n.doneCritText2,\n.doneCritText3 {\n fill: #333 !important; }\n\n.activeCritText0,\n.activeCritText1,\n.activeCritText2,\n.activeCritText3 {\n fill: #333 !important; }\n\n.titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: #333; }\n\ng.classGroup text {\n fill: #999;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 10px; }\n\ng.classGroup rect {\n fill: #eee;\n stroke: #999; }\n\ng.classGroup line {\n stroke: #999;\n stroke-width: 1; }\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: #eee;\n opacity: 0.5; }\n\n.classLabel .label {\n fill: #999;\n font-size: 10px; }\n\n.relation {\n stroke: #999;\n stroke-width: 1;\n fill: none; }\n\n#compositionStart {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#compositionEnd {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#aggregationStart {\n fill: #eee;\n stroke: #999;\n stroke-width: 1; }\n\n#aggregationEnd {\n fill: #eee;\n stroke: #999;\n stroke-width: 1; }\n\n#dependencyStart {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#dependencyEnd {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#extensionStart {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#extensionEnd {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n.commit-id,\n.commit-msg,\n.branch-label {\n fill: lightgrey;\n color: lightgrey; }\n", ""]); +
154 +
155 +
156 +
157/***/ }), +
158 +
159/***/ "./node_modules/css-loader/dist/runtime/api.js": +
160/*!*****************************************************!*\ +
161 !*** ./node_modules/css-loader/dist/runtime/api.js ***! +
162 \*****************************************************/ +
163/*! no static exports found */ +
164/***/ (function(module, exports, __webpack_require__) { +
165 +
166"use strict"; +
167 +
168 +
169/* +
170 MIT License http://www.opensource.org/licenses/mit-license.php +
171 Author Tobias Koppers @sokra +
172*/ +
173// css base code, injected by the css-loader +
174module.exports = function (useSourceMap) { +
175 var list = []; // return the list of modules as css string +
176 +
177 list.toString = function toString() { +
178 return this.map(function (item) { +
179 var content = cssWithMappingToString(item, useSourceMap); +
180 +
181 if (item[2]) { +
182 return '@media ' + item[2] + '{' + content + '}'; +
183 } else { +
184 return content; +
185 } +
186 }).join(''); +
187 }; // import a list of modules into the list +
188 +
189 +
190 list.i = function (modules, mediaQuery) { +
191 if (typeof modules === 'string') { +
192 modules = [[null, modules, '']]; +
193 } +
194 +
195 var alreadyImportedModules = {}; +
196 +
197 for (var i = 0; i < this.length; i++) { +
198 var id = this[i][0]; +
199 +
200 if (id != null) { +
201 alreadyImportedModules[id] = true; +
202 } +
203 } +
204 +
205 for (i = 0; i < modules.length; i++) { +
206 var item = modules[i]; // skip already imported module +
207 // this implementation is not 100% perfect for weird media query combinations +
208 // when a module is imported multiple times with different media queries. +
209 // I hope this will never occur (Hey this way we have smaller bundles) +
210 +
211 if (item[0] == null || !alreadyImportedModules[item[0]]) { +
212 if (mediaQuery && !item[2]) { +
213 item[2] = mediaQuery; +
214 } else if (mediaQuery) { +
215 item[2] = '(' + item[2] + ') and (' + mediaQuery + ')'; +
216 } +
217 +
218 list.push(item); +
219 } +
220 } +
221 }; +
222 +
223 return list; +
224}; +
225 +
226function cssWithMappingToString(item, useSourceMap) { +
227 var content = item[1] || ''; +
228 var cssMapping = item[3]; +
229 +
230 if (!cssMapping) { +
231 return content; +
232 } +
233 +
234 if (useSourceMap && typeof btoa === 'function') { +
235 var sourceMapping = toComment(cssMapping); +
236 var sourceURLs = cssMapping.sources.map(function (source) { +
237 return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'; +
238 }); +
239 return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); +
240 } +
241 +
242 return [content].join('\n'); +
243} // Adapted from convert-source-map (MIT) +
244 +
245 +
246function toComment(sourceMap) { +
247 // eslint-disable-next-line no-undef +
248 var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); +
249 var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64; +
250 return '/*# ' + data + ' */'; +
251} +
252 +
253/***/ }), +
254 +
255/***/ "./node_modules/node-libs-browser/mock/empty.js": +
256/*!******************************************************!*\ +
257 !*** ./node_modules/node-libs-browser/mock/empty.js ***! +
258 \******************************************************/ +
259/*! no static exports found */ +
260/***/ (function(module, exports) { +
261 +
262 +
263 +
264/***/ }), +
265 +
266/***/ "./node_modules/path-browserify/index.js": +
267/*!***********************************************!*\ +
268 !*** ./node_modules/path-browserify/index.js ***! +
269 \***********************************************/ +
270/*! no static exports found */ +
271/***/ (function(module, exports, __webpack_require__) { +
272 +
273/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors. +
274// +
275// Permission is hereby granted, free of charge, to any person obtaining a +
276// copy of this software and associated documentation files (the +
277// "Software"), to deal in the Software without restriction, including +
278// without limitation the rights to use, copy, modify, merge, publish, +
279// distribute, sublicense, and/or sell copies of the Software, and to permit +
280// persons to whom the Software is furnished to do so, subject to the +
281// following conditions: +
282// +
283// The above copyright notice and this permission notice shall be included +
284// in all copies or substantial portions of the Software. +
285// +
286// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +
287// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +
288// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +
289// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +
290// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +
291// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +
292// USE OR OTHER DEALINGS IN THE SOFTWARE. +
293 +
294// resolves . and .. elements in a path array with directory names there +
295// must be no slashes, empty elements, or device names (c:\) in the array +
296// (so also no leading and trailing slashes - it does not distinguish +
297// relative and absolute paths) +
298function normalizeArray(parts, allowAboveRoot) { +
299 // if the path tries to go above the root, `up` ends up > 0 +
300 var up = 0; +
301 for (var i = parts.length - 1; i >= 0; i--) { +
302 var last = parts[i]; +
303 if (last === '.') { +
304 parts.splice(i, 1); +
305 } else if (last === '..') { +
306 parts.splice(i, 1); +
307 up++; +
308 } else if (up) { +
309 parts.splice(i, 1); +
310 up--; +
311 } +
312 } +
313 +
314 // if the path is allowed to go above the root, restore leading ..s +
315 if (allowAboveRoot) { +
316 for (; up--; up) { +
317 parts.unshift('..'); +
318 } +
319 } +
320 +
321 return parts; +
322} +
323 +
324// Split a filename into [root, dir, basename, ext], unix version +
325// 'root' is just a slash, or nothing. +
326var splitPathRe = +
327 /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +
328var splitPath = function(filename) { +
329 return splitPathRe.exec(filename).slice(1); +
330}; +
331 +
332// path.resolve([from ...], to) +
333// posix version +
334exports.resolve = function() { +
335 var resolvedPath = '', +
336 resolvedAbsolute = false; +
337 +
338 for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { +
339 var path = (i >= 0) ? arguments[i] : process.cwd(); +
340 +
341 // Skip empty and invalid entries +
342 if (typeof path !== 'string') { +
343 throw new TypeError('Arguments to path.resolve must be strings'); +
344 } else if (!path) { +
345 continue; +
346 } +
347 +
348 resolvedPath = path + '/' + resolvedPath; +
349 resolvedAbsolute = path.charAt(0) === '/'; +
350 } +
351 +
352 // At this point the path should be resolved to a full absolute path, but +
353 // handle relative paths to be safe (might happen when process.cwd() fails) +
354 +
355 // Normalize the path +
356 resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { +
357 return !!p; +
358 }), !resolvedAbsolute).join('/'); +
359 +
360 return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +
361}; +
362 +
363// path.normalize(path) +
364// posix version +
365exports.normalize = function(path) { +
366 var isAbsolute = exports.isAbsolute(path), +
367 trailingSlash = substr(path, -1) === '/'; +
368 +
369 // Normalize the path +
370 path = normalizeArray(filter(path.split('/'), function(p) { +
371 return !!p; +
372 }), !isAbsolute).join('/'); +
373 +
374 if (!path && !isAbsolute) { +
375 path = '.'; +
376 } +
377 if (path && trailingSlash) { +
378 path += '/'; +
379 } +
380 +
381 return (isAbsolute ? '/' : '') + path; +
382}; +
383 +
384// posix version +
385exports.isAbsolute = function(path) { +
386 return path.charAt(0) === '/'; +
387}; +
388 +
389// posix version +
390exports.join = function() { +
391 var paths = Array.prototype.slice.call(arguments, 0); +
392 return exports.normalize(filter(paths, function(p, index) { +
393 if (typeof p !== 'string') { +
394 throw new TypeError('Arguments to path.join must be strings'); +
395 } +
396 return p; +
397 }).join('/')); +
398}; +
399 +
400 +
401// path.relative(from, to) +
402// posix version +
403exports.relative = function(from, to) { +
404 from = exports.resolve(from).substr(1); +
405 to = exports.resolve(to).substr(1); +
406 +
407 function trim(arr) { +
408 var start = 0; +
409 for (; start < arr.length; start++) { +
410 if (arr[start] !== '') break; +
411 } +
412 +
413 var end = arr.length - 1; +
414 for (; end >= 0; end--) { +
415 if (arr[end] !== '') break; +
416 } +
417 +
418 if (start > end) return []; +
419 return arr.slice(start, end - start + 1); +
420 } +
421 +
422 var fromParts = trim(from.split('/')); +
423 var toParts = trim(to.split('/')); +
424 +
425 var length = Math.min(fromParts.length, toParts.length); +
426 var samePartsLength = length; +
427 for (var i = 0; i < length; i++) { +
428 if (fromParts[i] !== toParts[i]) { +
429 samePartsLength = i; +
430 break; +
431 } +
432 } +
433 +
434 var outputParts = []; +
435 for (var i = samePartsLength; i < fromParts.length; i++) { +
436 outputParts.push('..'); +
437 } +
438 +
439 outputParts = outputParts.concat(toParts.slice(samePartsLength)); +
440 +
441 return outputParts.join('/'); +
442}; +
443 +
444exports.sep = '/'; +
445exports.delimiter = ':'; +
446 +
447exports.dirname = function(path) { +
448 var result = splitPath(path), +
449 root = result[0], +
450 dir = result[1]; +
451 +
452 if (!root && !dir) { +
453 // No dirname whatsoever +
454 return '.'; +
455 } +
456 +
457 if (dir) { +
458 // It has a dirname, strip trailing slash +
459 dir = dir.substr(0, dir.length - 1); +
460 } +
461 +
462 return root + dir; +
463}; +
464 +
465 +
466exports.basename = function(path, ext) { +
467 var f = splitPath(path)[2]; +
468 // TODO: make this comparison case-insensitive on windows? +
469 if (ext && f.substr(-1 * ext.length) === ext) { +
470 f = f.substr(0, f.length - ext.length); +
471 } +
472 return f; +
473}; +
474 +
475 +
476exports.extname = function(path) { +
477 return splitPath(path)[3]; +
478}; +
479 +
480function filter (xs, f) { +
481 if (xs.filter) return xs.filter(f); +
482 var res = []; +
483 for (var i = 0; i < xs.length; i++) { +
484 if (f(xs[i], i, xs)) res.push(xs[i]); +
485 } +
486 return res; +
487} +
488 +
489// String.prototype.substr - negative index don't work in IE8 +
490var substr = 'ab'.substr(-1) === 'b' +
491 ? function (str, start, len) { return str.substr(start, len) } +
492 : function (str, start, len) { +
493 if (start < 0) start = str.length + start; +
494 return str.substr(start, len); +
495 } +
496; +
497 +
498/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) +
499 +
500/***/ }), +
501 +
502/***/ "./node_modules/process/browser.js": +
503/*!*****************************************!*\ +
504 !*** ./node_modules/process/browser.js ***! +
505 \*****************************************/ +
506/*! no static exports found */ +
507/***/ (function(module, exports) { +
508 +
509// shim for using process in browser +
510var process = module.exports = {}; +
511 +
512// cached from whatever global is present so that test runners that stub it +
513// don't break things. But we need to wrap it in a try catch in case it is +
514// wrapped in strict mode code which doesn't define any globals. It's inside a +
515// function because try/catches deoptimize in certain engines. +
516 +
517var cachedSetTimeout; +
518var cachedClearTimeout; +
519 +
520function defaultSetTimout() { +
521 throw new Error('setTimeout has not been defined'); +
522} +
523function defaultClearTimeout () { +
524 throw new Error('clearTimeout has not been defined'); +
525} +
526(function () { +
527 try { +
528 if (typeof setTimeout === 'function') { +
529 cachedSetTimeout = setTimeout; +
530 } else { +
531 cachedSetTimeout = defaultSetTimout; +
532 } +
533 } catch (e) { +
534 cachedSetTimeout = defaultSetTimout; +
535 } +
536 try { +
537 if (typeof clearTimeout === 'function') { +
538 cachedClearTimeout = clearTimeout; +
539 } else { +
540 cachedClearTimeout = defaultClearTimeout; +
541 } +
542 } catch (e) { +
543 cachedClearTimeout = defaultClearTimeout; +
544 } +
545} ()) +
546function runTimeout(fun) { +
547 if (cachedSetTimeout === setTimeout) { +
548 //normal enviroments in sane situations +
549 return setTimeout(fun, 0); +
550 } +
551 // if setTimeout wasn't available but was latter defined +
552 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { +
553 cachedSetTimeout = setTimeout; +
554 return setTimeout(fun, 0); +
555 } +
556 try { +
557 // when when somebody has screwed with setTimeout but no I.E. maddness +
558 return cachedSetTimeout(fun, 0); +
559 } catch(e){ +
560 try { +
561 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally +
562 return cachedSetTimeout.call(null, fun, 0); +
563 } catch(e){ +
564 // 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 +
565 return cachedSetTimeout.call(this, fun, 0); +
566 } +
567 } +
568 +
569 +
570} +
571function runClearTimeout(marker) { +
572 if (cachedClearTimeout === clearTimeout) { +
573 //normal enviroments in sane situations +
574 return clearTimeout(marker); +
575 } +
576 // if clearTimeout wasn't available but was latter defined +
577 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { +
578 cachedClearTimeout = clearTimeout; +
579 return clearTimeout(marker); +
580 } +
581 try { +
582 // when when somebody has screwed with setTimeout but no I.E. maddness +
583 return cachedClearTimeout(marker); +
584 } catch (e){ +
585 try { +
586 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally +
587 return cachedClearTimeout.call(null, marker); +
588 } catch (e){ +
589 // 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. +
590 // Some versions of I.E. have different rules for clearTimeout vs setTimeout +
591 return cachedClearTimeout.call(this, marker); +
592 } +
593 } +
594 +
595 +
596 +
597} +
598var queue = []; +
599var draining = false; +
600var currentQueue; +
601var queueIndex = -1; +
602 +
603function cleanUpNextTick() { +
604 if (!draining || !currentQueue) { +
605 return; +
606 } +
607 draining = false; +
608 if (currentQueue.length) { +
609 queue = currentQueue.concat(queue); +
610 } else { +
611 queueIndex = -1; +
612 } +
613 if (queue.length) { +
614 drainQueue(); +
615 } +
616} +
617 +
618function drainQueue() { +
619 if (draining) { +
620 return; +
621 } +
622 var timeout = runTimeout(cleanUpNextTick); +
623 draining = true; +
624 +
625 var len = queue.length; +
626 while(len) { +
627 currentQueue = queue; +
628 queue = []; +
629 while (++queueIndex < len) { +
630 if (currentQueue) { +
631 currentQueue[queueIndex].run(); +
632 } +
633 } +
634 queueIndex = -1; +
635 len = queue.length; +
636 } +
637 currentQueue = null; +
638 draining = false; +
639 runClearTimeout(timeout); +
640} +
641 +
642process.nextTick = function (fun) { +
643 var args = new Array(arguments.length - 1); +
644 if (arguments.length > 1) { +
645 for (var i = 1; i < arguments.length; i++) { +
646 args[i - 1] = arguments[i]; +
647 } +
648 } +
649 queue.push(new Item(fun, args)); +
650 if (queue.length === 1 && !draining) { +
651 runTimeout(drainQueue); +
652 } +
653}; +
654 +
655// v8 likes predictible objects +
656function Item(fun, array) { +
657 this.fun = fun; +
658 this.array = array; +
659} +
660Item.prototype.run = function () { +
661 this.fun.apply(null, this.array); +
662}; +
663process.title = 'browser'; +
664process.browser = true; +
665process.env = {}; +
666process.argv = []; +
667process.version = ''; // empty string to avoid regexp issues +
668process.versions = {}; +
669 +
670function noop() {} +
671 +
672process.on = noop; +
673process.addListener = noop; +
674process.once = noop; +
675process.off = noop; +
676process.removeListener = noop; +
677process.removeAllListeners = noop; +
678process.emit = noop; +
679process.prependListener = noop; +
680process.prependOnceListener = noop; +
681 +
682process.listeners = function (name) { return [] } +
683 +
684process.binding = function (name) { +
685 throw new Error('process.binding is not supported'); +
686}; +
687 +
688process.cwd = function () { return '/' }; +
689process.chdir = function (dir) { +
690 throw new Error('process.chdir is not supported'); +
691}; +
692process.umask = function() { return 0; }; +
693 +
694 +
695/***/ }), +
696 +
697/***/ "./node_modules/webpack/buildin/module.js": +
698/*!***********************************!*\ +
699 !*** (webpack)/buildin/module.js ***! +
700 \***********************************/ +
701/*! no static exports found */ +
702/***/ (function(module, exports) { +
703 +
704module.exports = function(module) { +
705 if (!module.webpackPolyfill) { +
706 module.deprecate = function() {}; +
707 module.paths = []; +
708 // module.parent = undefined by default +
709 if (!module.children) module.children = []; +
710 Object.defineProperty(module, "loaded", { +
711 enumerable: true, +
712 get: function() { +
713 return module.l; +
714 } +
715 }); +
716 Object.defineProperty(module, "id", { +
717 enumerable: true, +
718 get: function() { +
719 return module.i; +
720 } +
721 }); +
722 module.webpackPolyfill = 1; +
723 } +
724 return module; +
725}; +
726 +
727 +
728/***/ }), +
729 +
730/***/ "./package.json": +
731/*!**********************!*\ +
732 !*** ./package.json ***! +
733 \**********************/ +
734/*! exports provided: name, version, description, main, keywords, scripts, repository, author, license, standard, dependencies, devDependencies, files, yarn-upgrade-all, default */ +
735/***/ (function(module) { +
736 +
737module.exports = {"name":"mermaid","version":"8.1.0","description":"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.","main":"dist/mermaid.core.js","keywords":["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],"scripts":{"build":"webpack --progress --colors","build:watch":"yarn build --watch","minify":"minify ./dist/mermaid.js > ./dist/mermaid.min.js","release":"yarn build -p --config webpack.config.prod.babel.js","lint":"standard","e2e":"yarn lint && jest e2e --config e2e/jest.config.js","dev":"yarn lint && webpack-dev-server --config webpack.config.e2e.js","test":"yarn lint && jest src","test:watch":"jest --watch src","jison":"node -r @babel/register node_modules/.bin/gulp jison","prepublishOnly":"yarn build && yarn release && yarn test","prepush":"yarn test"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js"],"globals":["page"]},"dependencies":{"d3":"^5.7.0","dagre-d3-renderer":"^0.5.8","dagre-layout":"^0.8.8","graphlibrary":"^2.2.0","he":"^1.2.0","moment-mini":"^2.22.1","lodash":"^4.17.11","minify":"^4.1.1","scope-css":"^1.2.1"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.2.0","@babel/register":"^7.0.0","babel-core":"7.0.0-bridge.0","babel-jest":"^23.6.0","babel-loader":"^8.0.4","coveralls":"^3.0.2","css-loader":"^2.0.1","css-to-string-loader":"^0.1.3","gulp":"^4.0.0","gulp-filelog":"^0.4.1","gulp-jison":"^1.2.0","husky":"^1.2.1","identity-obj-proxy":"^3.0.0","jest":"^23.6.0","jest-environment-puppeteer":"^4.2.0","jest-image-snapshot":"^2.8.2","jest-puppeteer":"^4.2.0","jison":"^0.4.18","moment":"^2.23.0","node-sass":"^4.11.0","puppeteer":"^1.17.0","sass-loader":"^7.1.0","standard":"^12.0.1","webpack":"^4.27.1","webpack-cli":"^3.1.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^1.7.2","yarn-upgrade-all":"^0.5.0"},"files":["dist"],"yarn-upgrade-all":{"ignore":["babel-core"]}}; +
738 +
739/***/ }), +
740 +
741/***/ "./src/diagrams/class/classDb.js": +
742/*!***************************************!*\ +
743 !*** ./src/diagrams/class/classDb.js ***! +
744 \***************************************/ +
745/*! exports provided: addClass, clear, getClass, getClasses, getRelations, addRelation, addMember, addMembers, cleanupLabel, lineType, relationType, default */ +
746/***/ (function(module, __webpack_exports__, __webpack_require__) { +
747 +
748"use strict"; +
749__webpack_require__.r(__webpack_exports__); +
750/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addClass", function() { return addClass; }); +
751/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
752/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClass", function() { return getClass; }); +
753/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClasses", function() { return getClasses; }); +
754/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRelations", function() { return getRelations; }); +
755/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addRelation", function() { return addRelation; }); +
756/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMember", function() { return addMember; }); +
757/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMembers", function() { return addMembers; }); +
758/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cleanupLabel", function() { return cleanupLabel; }); +
759/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lineType", function() { return lineType; }); +
760/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "relationType", function() { return relationType; }); +
761/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
762 +
763let relations = []; +
764let classes = {}; +
765/** +
766 * Function called by parser when a node definition has been found. +
767 * @param id +
768 * @param text +
769 * @param type +
770 * @param style +
771 */ +
772 +
773const addClass = function (id) { +
774 if (typeof classes[id] === 'undefined') { +
775 classes[id] = { +
776 id: id, +
777 methods: [], +
778 members: [] +
779 }; +
780 } +
781}; +
782const clear = function () { +
783 relations = []; +
784 classes = {}; +
785}; +
786const getClass = function (id) { +
787 return classes[id]; +
788}; +
789const getClasses = function () { +
790 return classes; +
791}; +
792const getRelations = function () { +
793 return relations; +
794}; +
795const addRelation = function (relation) { +
796 _logger__WEBPACK_IMPORTED_MODULE_0__["logger"].debug('Adding relation: ' + JSON.stringify(relation)); +
797 addClass(relation.id1); +
798 addClass(relation.id2); +
799 relations.push(relation); +
800}; +
801const addMember = function (className, member) { +
802 const theClass = classes[className]; +
803 +
804 if (typeof member === 'string') { +
805 if (member.substr(-1) === ')') { +
806 theClass.methods.push(member); +
807 } else { +
808 theClass.members.push(member); +
809 } +
810 } +
811}; +
812const addMembers = function (className, MembersArr) { +
813 if (Array.isArray(MembersArr)) { +
814 MembersArr.forEach(member => addMember(className, member)); +
815 } +
816}; +
817const cleanupLabel = function (label) { +
818 if (label.substring(0, 1) === ':') { +
819 return label.substr(2).trim(); +
820 } else { +
821 return label.trim(); +
822 } +
823}; +
824const lineType = { +
825 LINE: 0, +
826 DOTTED_LINE: 1 +
827}; +
828const relationType = { +
829 AGGREGATION: 0, +
830 EXTENSION: 1, +
831 COMPOSITION: 2, +
832 DEPENDENCY: 3 +
833}; +
834/* harmony default export */ __webpack_exports__["default"] = ({ +
835 addClass, +
836 clear, +
837 getClass, +
838 getClasses, +
839 getRelations, +
840 addRelation, +
841 addMember, +
842 addMembers, +
843 cleanupLabel, +
844 lineType, +
845 relationType +
846}); +
847 +
848/***/ }), +
849 +
850/***/ "./src/diagrams/class/classRenderer.js": +
851/*!*********************************************!*\ +
852 !*** ./src/diagrams/class/classRenderer.js ***! +
853 \*********************************************/ +
854/*! exports provided: setConf, draw, default */ +
855/***/ (function(module, __webpack_exports__, __webpack_require__) { +
856 +
857"use strict"; +
858__webpack_require__.r(__webpack_exports__); +
859/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
860/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
861/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "d3"); +
862/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__); +
863/* harmony import */ var dagre_layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dagre-layout */ "dagre-layout"); +
864/* harmony import */ var dagre_layout__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dagre_layout__WEBPACK_IMPORTED_MODULE_1__); +
865/* harmony import */ var graphlibrary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! graphlibrary */ "graphlibrary"); +
866/* harmony import */ var graphlibrary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(graphlibrary__WEBPACK_IMPORTED_MODULE_2__); +
867/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
868/* harmony import */ var _classDb__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./classDb */ "./src/diagrams/class/classDb.js"); +
869/* harmony import */ var _parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./parser/classDiagram */ "./src/diagrams/class/parser/classDiagram.js"); +
870/* harmony import */ var _parser_classDiagram__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__); +
871 +
872 +
873 +
874 +
875 +
876 +
877_parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__["parser"].yy = _classDb__WEBPACK_IMPORTED_MODULE_4__["default"]; +
878const idCache = {}; +
879let classCnt = 0; +
880const conf = { +
881 dividerMargin: 10, +
882 padding: 5, +
883 textHeight: 10 // Todo optimize +
884 +
885}; +
886 +
887const getGraphId = function (label) { +
888 const keys = Object.keys(idCache); +
889 +
890 for (let i = 0; i < keys.length; i++) { +
891 if (idCache[keys[i]].label === label) { +
892 return keys[i]; +
893 } +
894 } +
895 +
896 return undefined; +
897}; +
898/** +
899 * Setup arrow head and define the marker. The result is appended to the svg. +
900 */ +
901 +
902 +
903const insertMarkers = function (elem) { +
904 elem.append('defs').append('marker').attr('id', 'extensionStart').attr('class', 'extension').attr('refX', 0).attr('refY', 7).attr('markerWidth', 190).attr('markerHeight', 240).attr('orient', 'auto').append('path').attr('d', 'M 1,7 L18,13 V 1 Z'); +
905 elem.append('defs').append('marker').attr('id', 'extensionEnd').attr('refX', 19).attr('refY', 7).attr('markerWidth', 20).attr('markerHeight', 28).attr('orient', 'auto').append('path').attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead +
906 +
907 elem.append('defs').append('marker').attr('id', 'compositionStart').attr('class', 'extension').attr('refX', 0).attr('refY', 7).attr('markerWidth', 190).attr('markerHeight', 240).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); +
908 elem.append('defs').append('marker').attr('id', 'compositionEnd').attr('refX', 19).attr('refY', 7).attr('markerWidth', 20).attr('markerHeight', 28).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); +
909 elem.append('defs').append('marker').attr('id', 'aggregationStart').attr('class', 'extension').attr('refX', 0).attr('refY', 7).attr('markerWidth', 190).attr('markerHeight', 240).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); +
910 elem.append('defs').append('marker').attr('id', 'aggregationEnd').attr('refX', 19).attr('refY', 7).attr('markerWidth', 20).attr('markerHeight', 28).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); +
911 elem.append('defs').append('marker').attr('id', 'dependencyStart').attr('class', 'extension').attr('refX', 0).attr('refY', 7).attr('markerWidth', 190).attr('markerHeight', 240).attr('orient', 'auto').append('path').attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z'); +
912 elem.append('defs').append('marker').attr('id', 'dependencyEnd').attr('refX', 19).attr('refY', 7).attr('markerWidth', 20).attr('markerHeight', 28).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z'); +
913}; +
914 +
915let edgeCount = 0; +
916let total = 0; +
917 +
918const drawEdge = function (elem, path, relation) { +
919 const getRelationType = function (type) { +
920 switch (type) { +
921 case _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].relationType.AGGREGATION: +
922 return 'aggregation'; +
923 +
924 case _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].relationType.EXTENSION: +
925 return 'extension'; +
926 +
927 case _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].relationType.COMPOSITION: +
928 return 'composition'; +
929 +
930 case _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].relationType.DEPENDENCY: +
931 return 'dependency'; +
932 } +
933 }; +
934 +
935 path.points = path.points.filter(p => !Number.isNaN(p.y)); // The data for our line +
936 +
937 const lineData = path.points; // This is the accessor function we talked about above +
938 +
939 const lineFunction = d3__WEBPACK_IMPORTED_MODULE_0__["line"]().x(function (d) { +
940 return d.x; +
941 }).y(function (d) { +
942 return d.y; +
943 }).curve(d3__WEBPACK_IMPORTED_MODULE_0__["curveBasis"]); +
944 const svgPath = elem.append('path').attr('d', lineFunction(lineData)).attr('id', 'edge' + edgeCount).attr('class', 'relation'); +
945 let url = ''; +
946 +
947 if (conf.arrowMarkerAbsolute) { +
948 url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; +
949 url = url.replace(/\(/g, '\\('); +
950 url = url.replace(/\)/g, '\\)'); +
951 } +
952 +
953 if (relation.relation.type1 !== 'none') { +
954 svgPath.attr('marker-start', 'url(' + url + '#' + getRelationType(relation.relation.type1) + 'Start' + ')'); +
955 } +
956 +
957 if (relation.relation.type2 !== 'none') { +
958 svgPath.attr('marker-end', 'url(' + url + '#' + getRelationType(relation.relation.type2) + 'End' + ')'); +
959 } +
960 +
961 let x, y; +
962 const l = path.points.length; +
963 +
964 if (l % 2 !== 0 && l > 1) { +
965 const p1 = path.points[Math.floor(l / 2)]; +
966 const p2 = path.points[Math.ceil(l / 2)]; +
967 x = (p1.x + p2.x) / 2; +
968 y = (p1.y + p2.y) / 2; +
969 } else { +
970 const p = path.points[Math.floor(l / 2)]; +
971 x = p.x; +
972 y = p.y; +
973 } +
974 +
975 if (typeof relation.title !== 'undefined') { +
976 const g = elem.append('g').attr('class', 'classLabel'); +
977 const label = g.append('text').attr('class', 'label').attr('x', x).attr('y', y).attr('fill', 'red').attr('text-anchor', 'middle').text(relation.title); +
978 window.label = label; +
979 const bounds = label.node().getBBox(); +
980 g.insert('rect', ':first-child').attr('class', 'box').attr('x', bounds.x - conf.padding / 2).attr('y', bounds.y - conf.padding / 2).attr('width', bounds.width + conf.padding).attr('height', bounds.height + conf.padding); +
981 } +
982 +
983 edgeCount++; +
984}; +
985 +
986const drawClass = function (elem, classDef) { +
987 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].info('Rendering class ' + classDef); +
988 +
989 const addTspan = function (textEl, txt, isFirst) { +
990 const tSpan = textEl.append('tspan').attr('x', conf.padding).text(txt); +
991 +
992 if (!isFirst) { +
993 tSpan.attr('dy', conf.textHeight); +
994 } +
995 }; +
996 +
997 const id = 'classId' + classCnt % total; +
998 const classInfo = { +
999 id: id, +
1000 label: classDef.id, +
1001 width: 0, +
1002 height: 0 +
1003 }; +
1004 const g = elem.append('g').attr('id', id).attr('class', 'classGroup'); +
1005 const title = g.append('text').attr('x', conf.padding).attr('y', conf.textHeight + conf.padding).text(classDef.id); +
1006 const titleHeight = title.node().getBBox().height; +
1007 const membersLine = g.append('line') // text label for the x axis +
1008 .attr('x1', 0).attr('y1', conf.padding + titleHeight + conf.dividerMargin / 2).attr('y2', conf.padding + titleHeight + conf.dividerMargin / 2); +
1009 const members = g.append('text') // text label for the x axis +
1010 .attr('x', conf.padding).attr('y', titleHeight + conf.dividerMargin + conf.textHeight).attr('fill', 'white').attr('class', 'classText'); +
1011 let isFirst = true; +
1012 classDef.members.forEach(function (member) { +
1013 addTspan(members, member, isFirst); +
1014 isFirst = false; +
1015 }); +
1016 const membersBox = members.node().getBBox(); +
1017 const methodsLine = g.append('line') // text label for the x axis +
1018 .attr('x1', 0).attr('y1', conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr('y2', conf.padding + titleHeight + conf.dividerMargin + membersBox.height); +
1019 const methods = g.append('text') // text label for the x axis +
1020 .attr('x', conf.padding).attr('y', titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr('fill', 'white').attr('class', 'classText'); +
1021 isFirst = true; +
1022 classDef.methods.forEach(function (method) { +
1023 addTspan(methods, method, isFirst); +
1024 isFirst = false; +
1025 }); +
1026 const classBox = g.node().getBBox(); +
1027 g.insert('rect', ':first-child').attr('x', 0).attr('y', 0).attr('width', classBox.width + 2 * conf.padding).attr('height', classBox.height + conf.padding + 0.5 * conf.dividerMargin); +
1028 membersLine.attr('x2', classBox.width + 2 * conf.padding); +
1029 methodsLine.attr('x2', classBox.width + 2 * conf.padding); +
1030 classInfo.width = classBox.width + 2 * conf.padding; +
1031 classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; +
1032 idCache[id] = classInfo; +
1033 classCnt++; +
1034 return classInfo; +
1035}; +
1036 +
1037const setConf = function (cnf) { +
1038 const keys = Object.keys(cnf); +
1039 keys.forEach(function (key) { +
1040 conf[key] = cnf[key]; +
1041 }); +
1042}; +
1043/** +
1044 * Draws a flowchart in the tag with id: id based on the graph definition in text. +
1045 * @param text +
1046 * @param id +
1047 */ +
1048 +
1049const draw = function (text, id) { +
1050 _parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__["parser"].yy.clear(); +
1051 _parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__["parser"].parse(text); +
1052 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].info('Rendering diagram ' + text); /// / Fetch the default direction, use TD if none was found +
1053 +
1054 const diagram = d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id='${id}']`); +
1055 insertMarkers(diagram); // Layout graph, Create a new directed graph +
1056 +
1057 const g = new graphlibrary__WEBPACK_IMPORTED_MODULE_2___default.a.Graph({ +
1058 multigraph: true +
1059 }); // Set an object for the graph label +
1060 +
1061 g.setGraph({ +
1062 isMultiGraph: true +
1063 }); // Default to assigning a new object as a label for each new edge. +
1064 +
1065 g.setDefaultEdgeLabel(function () { +
1066 return {}; +
1067 }); +
1068 const classes = _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].getClasses(); +
1069 const keys = Object.keys(classes); +
1070 total = keys.length; +
1071 +
1072 for (let i = 0; i < keys.length; i++) { +
1073 const classDef = classes[keys[i]]; +
1074 const node = drawClass(diagram, classDef); // Add nodes to the graph. The first argument is the node id. The second is +
1075 // metadata about the node. In this case we're going to add labels to each of +
1076 // our nodes. +
1077 +
1078 g.setNode(node.id, node); +
1079 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].info('Org height: ' + node.height); +
1080 } +
1081 +
1082 const relations = _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].getRelations(); +
1083 relations.forEach(function (relation) { +
1084 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].info('tjoho' + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation)); +
1085 g.setEdge(getGraphId(relation.id1), getGraphId(relation.id2), { +
1086 relation: relation +
1087 }); +
1088 }); +
1089 dagre_layout__WEBPACK_IMPORTED_MODULE_1___default.a.layout(g); +
1090 g.nodes().forEach(function (v) { +
1091 if (typeof v !== 'undefined' && typeof g.node(v) !== 'undefined') { +
1092 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Node ' + v + ': ' + JSON.stringify(g.node(v))); +
1093 d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#' + v).attr('transform', 'translate(' + (g.node(v).x - g.node(v).width / 2) + ',' + (g.node(v).y - g.node(v).height / 2) + ' )'); +
1094 } +
1095 }); +
1096 g.edges().forEach(function (e) { +
1097 if (typeof e !== 'undefined' && typeof g.edge(e) !== 'undefined') { +
1098 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(g.edge(e))); +
1099 drawEdge(diagram, g.edge(e), g.edge(e).relation); +
1100 } +
1101 }); +
1102 diagram.attr('height', '100%'); +
1103 diagram.attr('width', '100%'); +
1104 diagram.attr('viewBox', '0 0 ' + (g.graph().width + 20) + ' ' + (g.graph().height + 20)); +
1105}; +
1106/* harmony default export */ __webpack_exports__["default"] = ({ +
1107 setConf, +
1108 draw +
1109}); +
1110 +
1111/***/ }), +
1112 +
1113/***/ "./src/diagrams/class/parser/classDiagram.js": +
1114/*!***************************************************!*\ +
1115 !*** ./src/diagrams/class/parser/classDiagram.js ***! +
1116 \***************************************************/ +
1117/*! no static exports found */ +
1118/***/ (function(module, exports, __webpack_require__) { +
1119 +
1120/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
1121 +
1122/* +
1123 Returns a Parser object of the following structure: +
1124 +
1125 Parser: { +
1126 yy: {} +
1127 } +
1128 +
1129 Parser.prototype: { +
1130 yy: {}, +
1131 trace: function(), +
1132 symbols_: {associative list: name ==> number}, +
1133 terminals_: {associative list: number ==> name}, +
1134 productions_: [...], +
1135 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
1136 table: [...], +
1137 defaultActions: {...}, +
1138 parseError: function(str, hash), +
1139 parse: function(input), +
1140 +
1141 lexer: { +
1142 EOF: 1, +
1143 parseError: function(str, hash), +
1144 setInput: function(input), +
1145 input: function(), +
1146 unput: function(str), +
1147 more: function(), +
1148 less: function(n), +
1149 pastInput: function(), +
1150 upcomingInput: function(), +
1151 showPosition: function(), +
1152 test_match: function(regex_match_array, rule_index), +
1153 next: function(), +
1154 lex: function(), +
1155 begin: function(condition), +
1156 popState: function(), +
1157 _currentRules: function(), +
1158 topState: function(), +
1159 pushState: function(condition), +
1160 +
1161 options: { +
1162 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
1163 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
1164 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
1165 }, +
1166 +
1167 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
1168 rules: [...], +
1169 conditions: {associative list: name ==> set}, +
1170 } +
1171 } +
1172 +
1173 +
1174 token location info (@$, _$, etc.): { +
1175 first_line: n, +
1176 last_line: n, +
1177 first_column: n, +
1178 last_column: n, +
1179 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
1180 } +
1181 +
1182 +
1183 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
1184 text: (matched text) +
1185 token: (the produced terminal token, if any) +
1186 line: (yylineno) +
1187 } +
1188 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
1189 loc: (yylloc) +
1190 expected: (string describing the set of expected tokens) +
1191 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
1192 } +
1193*/ +
1194var parser = function () { +
1195 var o = function (k, v, o, l) { +
1196 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
1197 +
1198 return o; +
1199 }, +
1200 $V0 = [1, 11], +
1201 $V1 = [1, 12], +
1202 $V2 = [1, 13], +
1203 $V3 = [1, 15], +
1204 $V4 = [1, 16], +
1205 $V5 = [1, 17], +
1206 $V6 = [6, 8], +
1207 $V7 = [1, 26], +
1208 $V8 = [1, 27], +
1209 $V9 = [1, 28], +
1210 $Va = [1, 29], +
1211 $Vb = [1, 30], +
1212 $Vc = [1, 31], +
1213 $Vd = [6, 8, 13, 17, 23, 26, 27, 28, 29, 30, 31], +
1214 $Ve = [6, 8, 13, 17, 23, 26, 27, 28, 29, 30, 31, 45, 46, 47], +
1215 $Vf = [23, 45, 46, 47], +
1216 $Vg = [23, 30, 31, 45, 46, 47], +
1217 $Vh = [23, 26, 27, 28, 29, 45, 46, 47], +
1218 $Vi = [6, 8, 13], +
1219 $Vj = [1, 46]; +
1220 +
1221 var parser = { +
1222 trace: function trace() {}, +
1223 yy: {}, +
1224 symbols_: { +
1225 "error": 2, +
1226 "mermaidDoc": 3, +
1227 "graphConfig": 4, +
1228 "CLASS_DIAGRAM": 5, +
1229 "NEWLINE": 6, +
1230 "statements": 7, +
1231 "EOF": 8, +
1232 "statement": 9, +
1233 "className": 10, +
1234 "alphaNumToken": 11, +
1235 "relationStatement": 12, +
1236 "LABEL": 13, +
1237 "classStatement": 14, +
1238 "methodStatement": 15, +
1239 "CLASS": 16, +
1240 "STRUCT_START": 17, +
1241 "members": 18, +
1242 "STRUCT_STOP": 19, +
1243 "MEMBER": 20, +
1244 "SEPARATOR": 21, +
1245 "relation": 22, +
1246 "STR": 23, +
1247 "relationType": 24, +
1248 "lineType": 25, +
1249 "AGGREGATION": 26, +
1250 "EXTENSION": 27, +
1251 "COMPOSITION": 28, +
1252 "DEPENDENCY": 29, +
1253 "LINE": 30, +
1254 "DOTTED_LINE": 31, +
1255 "commentToken": 32, +
1256 "textToken": 33, +
1257 "graphCodeTokens": 34, +
1258 "textNoTagsToken": 35, +
1259 "TAGSTART": 36, +
1260 "TAGEND": 37, +
1261 "==": 38, +
1262 "--": 39, +
1263 "PCT": 40, +
1264 "DEFAULT": 41, +
1265 "SPACE": 42, +
1266 "MINUS": 43, +
1267 "keywords": 44, +
1268 "UNICODE_TEXT": 45, +
1269 "NUM": 46, +
1270 "ALPHA": 47, +
1271 "$accept": 0, +
1272 "$end": 1 +
1273 }, +
1274 terminals_: { +
1275 2: "error", +
1276 5: "CLASS_DIAGRAM", +
1277 6: "NEWLINE", +
1278 8: "EOF", +
1279 13: "LABEL", +
1280 16: "CLASS", +
1281 17: "STRUCT_START", +
1282 19: "STRUCT_STOP", +
1283 20: "MEMBER", +
1284 21: "SEPARATOR", +
1285 23: "STR", +
1286 26: "AGGREGATION", +
1287 27: "EXTENSION", +
1288 28: "COMPOSITION", +
1289 29: "DEPENDENCY", +
1290 30: "LINE", +
1291 31: "DOTTED_LINE", +
1292 34: "graphCodeTokens", +
1293 36: "TAGSTART", +
1294 37: "TAGEND", +
1295 38: "==", +
1296 39: "--", +
1297 40: "PCT", +
1298 41: "DEFAULT", +
1299 42: "SPACE", +
1300 43: "MINUS", +
1301 44: "keywords", +
1302 45: "UNICODE_TEXT", +
1303 46: "NUM", +
1304 47: "ALPHA" +
1305 }, +
1306 productions_: [0, [3, 1], [4, 4], [7, 1], [7, 2], [7, 3], [10, 2], [10, 1], [9, 1], [9, 2], [9, 1], [9, 1], [14, 2], [14, 5], [18, 1], [18, 2], [15, 1], [15, 2], [15, 1], [15, 1], [12, 3], [12, 4], [12, 4], [12, 5], [22, 3], [22, 2], [22, 2], [22, 1], [24, 1], [24, 1], [24, 1], [24, 1], [25, 1], [25, 1], [32, 1], [32, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [35, 1], [35, 1], [35, 1], [35, 1], [11, 1], [11, 1], [11, 1]], +
1307 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
1308 /* action[1] */ +
1309 , $$ +
1310 /* vstack */ +
1311 , _$ +
1312 /* lstack */ +
1313 ) { +
1314 /* this == yyval */ +
1315 var $0 = $$.length - 1; +
1316 +
1317 switch (yystate) { +
1318 case 6: +
1319 this.$ = $$[$0 - 1] + $$[$0]; +
1320 break; +
1321 +
1322 case 7: +
1323 this.$ = $$[$0]; +
1324 break; +
1325 +
1326 case 8: +
1327 yy.addRelation($$[$0]); +
1328 break; +
1329 +
1330 case 9: +
1331 $$[$0 - 1].title = yy.cleanupLabel($$[$0]); +
1332 yy.addRelation($$[$0 - 1]); +
1333 break; +
1334 +
1335 case 12: +
1336 yy.addClass($$[$0]); +
1337 break; +
1338 +
1339 case 13: +
1340 /*console.log($$[$0-3],JSON.stringify($$[$0-1]));*/ +
1341 yy.addClass($$[$0 - 3]); +
1342 yy.addMembers($$[$0 - 3], $$[$0 - 1]); +
1343 break; +
1344 +
1345 case 14: +
1346 this.$ = [$$[$0]]; +
1347 break; +
1348 +
1349 case 15: +
1350 $$[$0].push($$[$0 - 1]); +
1351 this.$ = $$[$0]; +
1352 break; +
1353 +
1354 case 16: +
1355 /*console.log('Rel found',$$[$0]);*/ +
1356 break; +
1357 +
1358 case 17: +
1359 yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); +
1360 break; +
1361 +
1362 case 18: +
1363 console.warn('Member', $$[$0]); +
1364 break; +
1365 +
1366 case 19: +
1367 /*console.log('sep found',$$[$0]);*/ +
1368 break; +
1369 +
1370 case 20: +
1371 this.$ = { +
1372 'id1': $$[$0 - 2], +
1373 'id2': $$[$0], +
1374 relation: $$[$0 - 1], +
1375 relationTitle1: 'none', +
1376 relationTitle2: 'none' +
1377 }; +
1378 break; +
1379 +
1380 case 21: +
1381 this.$ = { +
1382 id1: $$[$0 - 3], +
1383 id2: $$[$0], +
1384 relation: $$[$0 - 1], +
1385 relationTitle1: $$[$0 - 2], +
1386 relationTitle2: 'none' +
1387 }; +
1388 break; +
1389 +
1390 case 22: +
1391 this.$ = { +
1392 id1: $$[$0 - 3], +
1393 id2: $$[$0], +
1394 relation: $$[$0 - 2], +
1395 relationTitle1: 'none', +
1396 relationTitle2: $$[$0 - 1] +
1397 }; +
1398 break; +
1399 +
1400 case 23: +
1401 this.$ = { +
1402 id1: $$[$0 - 4], +
1403 id2: $$[$0], +
1404 relation: $$[$0 - 2], +
1405 relationTitle1: $$[$0 - 3], +
1406 relationTitle2: $$[$0 - 1] +
1407 }; +
1408 break; +
1409 +
1410 case 24: +
1411 this.$ = { +
1412 type1: $$[$0 - 2], +
1413 type2: $$[$0], +
1414 lineType: $$[$0 - 1] +
1415 }; +
1416 break; +
1417 +
1418 case 25: +
1419 this.$ = { +
1420 type1: 'none', +
1421 type2: $$[$0], +
1422 lineType: $$[$0 - 1] +
1423 }; +
1424 break; +
1425 +
1426 case 26: +
1427 this.$ = { +
1428 type1: $$[$0 - 1], +
1429 type2: 'none', +
1430 lineType: $$[$0] +
1431 }; +
1432 break; +
1433 +
1434 case 27: +
1435 this.$ = { +
1436 type1: 'none', +
1437 type2: 'none', +
1438 lineType: $$[$0] +
1439 }; +
1440 break; +
1441 +
1442 case 28: +
1443 this.$ = yy.relationType.AGGREGATION; +
1444 break; +
1445 +
1446 case 29: +
1447 this.$ = yy.relationType.EXTENSION; +
1448 break; +
1449 +
1450 case 30: +
1451 this.$ = yy.relationType.COMPOSITION; +
1452 break; +
1453 +
1454 case 31: +
1455 this.$ = yy.relationType.DEPENDENCY; +
1456 break; +
1457 +
1458 case 32: +
1459 this.$ = yy.lineType.LINE; +
1460 break; +
1461 +
1462 case 33: +
1463 this.$ = yy.lineType.DOTTED_LINE; +
1464 break; +
1465 } +
1466 }, +
1467 table: [{ +
1468 3: 1, +
1469 4: 2, +
1470 5: [1, 3] +
1471 }, { +
1472 1: [3] +
1473 }, { +
1474 1: [2, 1] +
1475 }, { +
1476 6: [1, 4] +
1477 }, { +
1478 7: 5, +
1479 9: 6, +
1480 10: 10, +
1481 11: 14, +
1482 12: 7, +
1483 14: 8, +
1484 15: 9, +
1485 16: $V0, +
1486 20: $V1, +
1487 21: $V2, +
1488 45: $V3, +
1489 46: $V4, +
1490 47: $V5 +
1491 }, { +
1492 8: [1, 18] +
1493 }, { +
1494 6: [1, 19], +
1495 8: [2, 3] +
1496 }, o($V6, [2, 8], { +
1497 13: [1, 20] +
1498 }), o($V6, [2, 10]), o($V6, [2, 11]), o($V6, [2, 16], { +
1499 22: 21, +
1500 24: 24, +
1501 25: 25, +
1502 13: [1, 23], +
1503 23: [1, 22], +
1504 26: $V7, +
1505 27: $V8, +
1506 28: $V9, +
1507 29: $Va, +
1508 30: $Vb, +
1509 31: $Vc +
1510 }), { +
1511 10: 32, +
1512 11: 14, +
1513 45: $V3, +
1514 46: $V4, +
1515 47: $V5 +
1516 }, o($V6, [2, 18]), o($V6, [2, 19]), o($Vd, [2, 7], { +
1517 11: 14, +
1518 10: 33, +
1519 45: $V3, +
1520 46: $V4, +
1521 47: $V5 +
1522 }), o($Ve, [2, 47]), o($Ve, [2, 48]), o($Ve, [2, 49]), { +
1523 1: [2, 2] +
1524 }, { +
1525 7: 34, +
1526 8: [2, 4], +
1527 9: 6, +
1528 10: 10, +
1529 11: 14, +
1530 12: 7, +
1531 14: 8, +
1532 15: 9, +
1533 16: $V0, +
1534 20: $V1, +
1535 21: $V2, +
1536 45: $V3, +
1537 46: $V4, +
1538 47: $V5 +
1539 }, o($V6, [2, 9]), { +
1540 10: 35, +
1541 11: 14, +
1542 23: [1, 36], +
1543 45: $V3, +
1544 46: $V4, +
1545 47: $V5 +
1546 }, { +
1547 22: 37, +
1548 24: 24, +
1549 25: 25, +
1550 26: $V7, +
1551 27: $V8, +
1552 28: $V9, +
1553 29: $Va, +
1554 30: $Vb, +
1555 31: $Vc +
1556 }, o($V6, [2, 17]), { +
1557 25: 38, +
1558 30: $Vb, +
1559 31: $Vc +
1560 }, o($Vf, [2, 27], { +
1561 24: 39, +
1562 26: $V7, +
1563 27: $V8, +
1564 28: $V9, +
1565 29: $Va +
1566 }), o($Vg, [2, 28]), o($Vg, [2, 29]), o($Vg, [2, 30]), o($Vg, [2, 31]), o($Vh, [2, 32]), o($Vh, [2, 33]), o($V6, [2, 12], { +
1567 17: [1, 40] +
1568 }), o($Vd, [2, 6]), { +
1569 8: [2, 5] +
1570 }, o($Vi, [2, 20]), { +
1571 10: 41, +
1572 11: 14, +
1573 45: $V3, +
1574 46: $V4, +
1575 47: $V5 +
1576 }, { +
1577 10: 42, +
1578 11: 14, +
1579 23: [1, 43], +
1580 45: $V3, +
1581 46: $V4, +
1582 47: $V5 +
1583 }, o($Vf, [2, 26], { +
1584 24: 44, +
1585 26: $V7, +
1586 27: $V8, +
1587 28: $V9, +
1588 29: $Va +
1589 }), o($Vf, [2, 25]), { +
1590 18: 45, +
1591 20: $Vj +
1592 }, o($Vi, [2, 22]), o($Vi, [2, 21]), { +
1593 10: 47, +
1594 11: 14, +
1595 45: $V3, +
1596 46: $V4, +
1597 47: $V5 +
1598 }, o($Vf, [2, 24]), { +
1599 19: [1, 48] +
1600 }, { +
1601 18: 49, +
1602 19: [2, 14], +
1603 20: $Vj +
1604 }, o($Vi, [2, 23]), o($V6, [2, 13]), { +
1605 19: [2, 15] +
1606 }], +
1607 defaultActions: { +
1608 2: [2, 1], +
1609 18: [2, 2], +
1610 34: [2, 5], +
1611 49: [2, 15] +
1612 }, +
1613 parseError: function parseError(str, hash) { +
1614 if (hash.recoverable) { +
1615 this.trace(str); +
1616 } else { +
1617 var error = new Error(str); +
1618 error.hash = hash; +
1619 throw error; +
1620 } +
1621 }, +
1622 parse: function parse(input) { +
1623 var self = this, +
1624 stack = [0], +
1625 tstack = [], +
1626 vstack = [null], +
1627 lstack = [], +
1628 table = this.table, +
1629 yytext = '', +
1630 yylineno = 0, +
1631 yyleng = 0, +
1632 recovering = 0, +
1633 TERROR = 2, +
1634 EOF = 1; +
1635 var args = lstack.slice.call(arguments, 1); +
1636 var lexer = Object.create(this.lexer); +
1637 var sharedState = { +
1638 yy: {} +
1639 }; +
1640 +
1641 for (var k in this.yy) { +
1642 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
1643 sharedState.yy[k] = this.yy[k]; +
1644 } +
1645 } +
1646 +
1647 lexer.setInput(input, sharedState.yy); +
1648 sharedState.yy.lexer = lexer; +
1649 sharedState.yy.parser = this; +
1650 +
1651 if (typeof lexer.yylloc == 'undefined') { +
1652 lexer.yylloc = {}; +
1653 } +
1654 +
1655 var yyloc = lexer.yylloc; +
1656 lstack.push(yyloc); +
1657 var ranges = lexer.options && lexer.options.ranges; +
1658 +
1659 if (typeof sharedState.yy.parseError === 'function') { +
1660 this.parseError = sharedState.yy.parseError; +
1661 } else { +
1662 this.parseError = Object.getPrototypeOf(this).parseError; +
1663 } +
1664 +
1665 function popStack(n) { +
1666 stack.length = stack.length - 2 * n; +
1667 vstack.length = vstack.length - n; +
1668 lstack.length = lstack.length - n; +
1669 } +
1670 +
1671 function lex() { +
1672 var token; +
1673 token = tstack.pop() || lexer.lex() || EOF; +
1674 +
1675 if (typeof token !== 'number') { +
1676 if (token instanceof Array) { +
1677 tstack = token; +
1678 token = tstack.pop(); +
1679 } +
1680 +
1681 token = self.symbols_[token] || token; +
1682 } +
1683 +
1684 return token; +
1685 } +
1686 +
1687 var symbol, +
1688 preErrorSymbol, +
1689 state, +
1690 action, +
1691 a, +
1692 r, +
1693 yyval = {}, +
1694 p, +
1695 len, +
1696 newState, +
1697 expected; +
1698 +
1699 while (true) { +
1700 state = stack[stack.length - 1]; +
1701 +
1702 if (this.defaultActions[state]) { +
1703 action = this.defaultActions[state]; +
1704 } else { +
1705 if (symbol === null || typeof symbol == 'undefined') { +
1706 symbol = lex(); +
1707 } +
1708 +
1709 action = table[state] && table[state][symbol]; +
1710 } +
1711 +
1712 if (typeof action === 'undefined' || !action.length || !action[0]) { +
1713 var errStr = ''; +
1714 expected = []; +
1715 +
1716 for (p in table[state]) { +
1717 if (this.terminals_[p] && p > TERROR) { +
1718 expected.push('\'' + this.terminals_[p] + '\''); +
1719 } +
1720 } +
1721 +
1722 if (lexer.showPosition) { +
1723 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
1724 } else { +
1725 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
1726 } +
1727 +
1728 this.parseError(errStr, { +
1729 text: lexer.match, +
1730 token: this.terminals_[symbol] || symbol, +
1731 line: lexer.yylineno, +
1732 loc: yyloc, +
1733 expected: expected +
1734 }); +
1735 } +
1736 +
1737 if (action[0] instanceof Array && action.length > 1) { +
1738 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
1739 } +
1740 +
1741 switch (action[0]) { +
1742 case 1: +
1743 stack.push(symbol); +
1744 vstack.push(lexer.yytext); +
1745 lstack.push(lexer.yylloc); +
1746 stack.push(action[1]); +
1747 symbol = null; +
1748 +
1749 if (!preErrorSymbol) { +
1750 yyleng = lexer.yyleng; +
1751 yytext = lexer.yytext; +
1752 yylineno = lexer.yylineno; +
1753 yyloc = lexer.yylloc; +
1754 +
1755 if (recovering > 0) { +
1756 recovering--; +
1757 } +
1758 } else { +
1759 symbol = preErrorSymbol; +
1760 preErrorSymbol = null; +
1761 } +
1762 +
1763 break; +
1764 +
1765 case 2: +
1766 len = this.productions_[action[1]][1]; +
1767 yyval.$ = vstack[vstack.length - len]; +
1768 yyval._$ = { +
1769 first_line: lstack[lstack.length - (len || 1)].first_line, +
1770 last_line: lstack[lstack.length - 1].last_line, +
1771 first_column: lstack[lstack.length - (len || 1)].first_column, +
1772 last_column: lstack[lstack.length - 1].last_column +
1773 }; +
1774 +
1775 if (ranges) { +
1776 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
1777 } +
1778 +
1779 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
1780 +
1781 if (typeof r !== 'undefined') { +
1782 return r; +
1783 } +
1784 +
1785 if (len) { +
1786 stack = stack.slice(0, -1 * len * 2); +
1787 vstack = vstack.slice(0, -1 * len); +
1788 lstack = lstack.slice(0, -1 * len); +
1789 } +
1790 +
1791 stack.push(this.productions_[action[1]][0]); +
1792 vstack.push(yyval.$); +
1793 lstack.push(yyval._$); +
1794 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
1795 stack.push(newState); +
1796 break; +
1797 +
1798 case 3: +
1799 return true; +
1800 } +
1801 } +
1802 +
1803 return true; +
1804 } +
1805 }; +
1806 /* generated by jison-lex 0.3.4 */ +
1807 +
1808 var lexer = function () { +
1809 var lexer = { +
1810 EOF: 1, +
1811 parseError: function parseError(str, hash) { +
1812 if (this.yy.parser) { +
1813 this.yy.parser.parseError(str, hash); +
1814 } else { +
1815 throw new Error(str); +
1816 } +
1817 }, +
1818 // resets the lexer, sets new input +
1819 setInput: function (input, yy) { +
1820 this.yy = yy || this.yy || {}; +
1821 this._input = input; +
1822 this._more = this._backtrack = this.done = false; +
1823 this.yylineno = this.yyleng = 0; +
1824 this.yytext = this.matched = this.match = ''; +
1825 this.conditionStack = ['INITIAL']; +
1826 this.yylloc = { +
1827 first_line: 1, +
1828 first_column: 0, +
1829 last_line: 1, +
1830 last_column: 0 +
1831 }; +
1832 +
1833 if (this.options.ranges) { +
1834 this.yylloc.range = [0, 0]; +
1835 } +
1836 +
1837 this.offset = 0; +
1838 return this; +
1839 }, +
1840 // consumes and returns one char from the input +
1841 input: function () { +
1842 var ch = this._input[0]; +
1843 this.yytext += ch; +
1844 this.yyleng++; +
1845 this.offset++; +
1846 this.match += ch; +
1847 this.matched += ch; +
1848 var lines = ch.match(/(?:\r\n?|\n).*/g); +
1849 +
1850 if (lines) { +
1851 this.yylineno++; +
1852 this.yylloc.last_line++; +
1853 } else { +
1854 this.yylloc.last_column++; +
1855 } +
1856 +
1857 if (this.options.ranges) { +
1858 this.yylloc.range[1]++; +
1859 } +
1860 +
1861 this._input = this._input.slice(1); +
1862 return ch; +
1863 }, +
1864 // unshifts one char (or a string) into the input +
1865 unput: function (ch) { +
1866 var len = ch.length; +
1867 var lines = ch.split(/(?:\r\n?|\n)/g); +
1868 this._input = ch + this._input; +
1869 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
1870 +
1871 this.offset -= len; +
1872 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
1873 this.match = this.match.substr(0, this.match.length - 1); +
1874 this.matched = this.matched.substr(0, this.matched.length - 1); +
1875 +
1876 if (lines.length - 1) { +
1877 this.yylineno -= lines.length - 1; +
1878 } +
1879 +
1880 var r = this.yylloc.range; +
1881 this.yylloc = { +
1882 first_line: this.yylloc.first_line, +
1883 last_line: this.yylineno + 1, +
1884 first_column: this.yylloc.first_column, +
1885 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
1886 }; +
1887 +
1888 if (this.options.ranges) { +
1889 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
1890 } +
1891 +
1892 this.yyleng = this.yytext.length; +
1893 return this; +
1894 }, +
1895 // When called from action, caches matched text and appends it on next action +
1896 more: function () { +
1897 this._more = true; +
1898 return this; +
1899 }, +
1900 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
1901 reject: function () { +
1902 if (this.options.backtrack_lexer) { +
1903 this._backtrack = true; +
1904 } else { +
1905 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
1906 text: "", +
1907 token: null, +
1908 line: this.yylineno +
1909 }); +
1910 } +
1911 +
1912 return this; +
1913 }, +
1914 // retain first n characters of the match +
1915 less: function (n) { +
1916 this.unput(this.match.slice(n)); +
1917 }, +
1918 // displays already matched input, i.e. for error messages +
1919 pastInput: function () { +
1920 var past = this.matched.substr(0, this.matched.length - this.match.length); +
1921 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
1922 }, +
1923 // displays upcoming input, i.e. for error messages +
1924 upcomingInput: function () { +
1925 var next = this.match; +
1926 +
1927 if (next.length < 20) { +
1928 next += this._input.substr(0, 20 - next.length); +
1929 } +
1930 +
1931 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
1932 }, +
1933 // displays the character position where the lexing error occurred, i.e. for error messages +
1934 showPosition: function () { +
1935 var pre = this.pastInput(); +
1936 var c = new Array(pre.length + 1).join("-"); +
1937 return pre + this.upcomingInput() + "\n" + c + "^"; +
1938 }, +
1939 // test the lexed token: return FALSE when not a match, otherwise return token +
1940 test_match: function (match, indexed_rule) { +
1941 var token, lines, backup; +
1942 +
1943 if (this.options.backtrack_lexer) { +
1944 // save context +
1945 backup = { +
1946 yylineno: this.yylineno, +
1947 yylloc: { +
1948 first_line: this.yylloc.first_line, +
1949 last_line: this.last_line, +
1950 first_column: this.yylloc.first_column, +
1951 last_column: this.yylloc.last_column +
1952 }, +
1953 yytext: this.yytext, +
1954 match: this.match, +
1955 matches: this.matches, +
1956 matched: this.matched, +
1957 yyleng: this.yyleng, +
1958 offset: this.offset, +
1959 _more: this._more, +
1960 _input: this._input, +
1961 yy: this.yy, +
1962 conditionStack: this.conditionStack.slice(0), +
1963 done: this.done +
1964 }; +
1965 +
1966 if (this.options.ranges) { +
1967 backup.yylloc.range = this.yylloc.range.slice(0); +
1968 } +
1969 } +
1970 +
1971 lines = match[0].match(/(?:\r\n?|\n).*/g); +
1972 +
1973 if (lines) { +
1974 this.yylineno += lines.length; +
1975 } +
1976 +
1977 this.yylloc = { +
1978 first_line: this.yylloc.last_line, +
1979 last_line: this.yylineno + 1, +
1980 first_column: this.yylloc.last_column, +
1981 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
1982 }; +
1983 this.yytext += match[0]; +
1984 this.match += match[0]; +
1985 this.matches = match; +
1986 this.yyleng = this.yytext.length; +
1987 +
1988 if (this.options.ranges) { +
1989 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
1990 } +
1991 +
1992 this._more = false; +
1993 this._backtrack = false; +
1994 this._input = this._input.slice(match[0].length); +
1995 this.matched += match[0]; +
1996 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
1997 +
1998 if (this.done && this._input) { +
1999 this.done = false; +
2000 } +
2001 +
2002 if (token) { +
2003 return token; +
2004 } else if (this._backtrack) { +
2005 // recover context +
2006 for (var k in backup) { +
2007 this[k] = backup[k]; +
2008 } +
2009 +
2010 return false; // rule action called reject() implying the next rule should be tested instead. +
2011 } +
2012 +
2013 return false; +
2014 }, +
2015 // return next match in input +
2016 next: function () { +
2017 if (this.done) { +
2018 return this.EOF; +
2019 } +
2020 +
2021 if (!this._input) { +
2022 this.done = true; +
2023 } +
2024 +
2025 var token, match, tempMatch, index; +
2026 +
2027 if (!this._more) { +
2028 this.yytext = ''; +
2029 this.match = ''; +
2030 } +
2031 +
2032 var rules = this._currentRules(); +
2033 +
2034 for (var i = 0; i < rules.length; i++) { +
2035 tempMatch = this._input.match(this.rules[rules[i]]); +
2036 +
2037 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
2038 match = tempMatch; +
2039 index = i; +
2040 +
2041 if (this.options.backtrack_lexer) { +
2042 token = this.test_match(tempMatch, rules[i]); +
2043 +
2044 if (token !== false) { +
2045 return token; +
2046 } else if (this._backtrack) { +
2047 match = false; +
2048 continue; // rule action called reject() implying a rule MISmatch. +
2049 } else { +
2050 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
2051 return false; +
2052 } +
2053 } else if (!this.options.flex) { +
2054 break; +
2055 } +
2056 } +
2057 } +
2058 +
2059 if (match) { +
2060 token = this.test_match(match, rules[index]); +
2061 +
2062 if (token !== false) { +
2063 return token; +
2064 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
2065 +
2066 +
2067 return false; +
2068 } +
2069 +
2070 if (this._input === "") { +
2071 return this.EOF; +
2072 } else { +
2073 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
2074 text: "", +
2075 token: null, +
2076 line: this.yylineno +
2077 }); +
2078 } +
2079 }, +
2080 // return next match that has a token +
2081 lex: function lex() { +
2082 var r = this.next(); +
2083 +
2084 if (r) { +
2085 return r; +
2086 } else { +
2087 return this.lex(); +
2088 } +
2089 }, +
2090 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
2091 begin: function begin(condition) { +
2092 this.conditionStack.push(condition); +
2093 }, +
2094 // pop the previously active lexer condition state off the condition stack +
2095 popState: function popState() { +
2096 var n = this.conditionStack.length - 1; +
2097 +
2098 if (n > 0) { +
2099 return this.conditionStack.pop(); +
2100 } else { +
2101 return this.conditionStack[0]; +
2102 } +
2103 }, +
2104 // produce the lexer rule set which is active for the currently active lexer condition state +
2105 _currentRules: function _currentRules() { +
2106 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
2107 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
2108 } else { +
2109 return this.conditions["INITIAL"].rules; +
2110 } +
2111 }, +
2112 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
2113 topState: function topState(n) { +
2114 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
2115 +
2116 if (n >= 0) { +
2117 return this.conditionStack[n]; +
2118 } else { +
2119 return "INITIAL"; +
2120 } +
2121 }, +
2122 // alias for begin(condition) +
2123 pushState: function pushState(condition) { +
2124 this.begin(condition); +
2125 }, +
2126 // return the number of states currently on the stack +
2127 stateStackSize: function stateStackSize() { +
2128 return this.conditionStack.length; +
2129 }, +
2130 options: {}, +
2131 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
2132 var YYSTATE = YY_START; +
2133 +
2134 switch ($avoiding_name_collisions) { +
2135 case 0: +
2136 /* do nothing */ +
2137 break; +
2138 +
2139 case 1: +
2140 return 6; +
2141 break; +
2142 +
2143 case 2: +
2144 /* skip whitespace */ +
2145 break; +
2146 +
2147 case 3: +
2148 return 5; +
2149 break; +
2150 +
2151 case 4: +
2152 this.begin("struct"); +
2153 /*console.log('Starting struct');*/ +
2154 +
2155 return 17; +
2156 break; +
2157 +
2158 case 5: +
2159 /*console.log('Ending struct');*/ +
2160 this.popState(); +
2161 return 19; +
2162 break; +
2163 +
2164 case 6: +
2165 /* nothing */ +
2166 break; +
2167 +
2168 case 7: +
2169 /*console.log('lex-member: ' + yy_.yytext);*/ +
2170 return "MEMBER"; +
2171 break; +
2172 +
2173 case 8: +
2174 return 16; +
2175 break; +
2176 +
2177 case 9: +
2178 this.begin("string"); +
2179 break; +
2180 +
2181 case 10: +
2182 this.popState(); +
2183 break; +
2184 +
2185 case 11: +
2186 return "STR"; +
2187 break; +
2188 +
2189 case 12: +
2190 return 27; +
2191 break; +
2192 +
2193 case 13: +
2194 return 27; +
2195 break; +
2196 +
2197 case 14: +
2198 return 29; +
2199 break; +
2200 +
2201 case 15: +
2202 return 29; +
2203 break; +
2204 +
2205 case 16: +
2206 return 28; +
2207 break; +
2208 +
2209 case 17: +
2210 return 26; +
2211 break; +
2212 +
2213 case 18: +
2214 return 30; +
2215 break; +
2216 +
2217 case 19: +
2218 return 31; +
2219 break; +
2220 +
2221 case 20: +
2222 return 13; +
2223 break; +
2224 +
2225 case 21: +
2226 return 43; +
2227 break; +
2228 +
2229 case 22: +
2230 return 'DOT'; +
2231 break; +
2232 +
2233 case 23: +
2234 return 'PLUS'; +
2235 break; +
2236 +
2237 case 24: +
2238 return 40; +
2239 break; +
2240 +
2241 case 25: +
2242 return 'EQUALS'; +
2243 break; +
2244 +
2245 case 26: +
2246 return 'EQUALS'; +
2247 break; +
2248 +
2249 case 27: +
2250 return 47; +
2251 break; +
2252 +
2253 case 28: +
2254 return 'PUNCTUATION'; +
2255 break; +
2256 +
2257 case 29: +
2258 return 46; +
2259 break; +
2260 +
2261 case 30: +
2262 return 45; +
2263 break; +
2264 +
2265 case 31: +
2266 return 42; +
2267 break; +
2268 +
2269 case 32: +
2270 return 8; +
2271 break; +
2272 } +
2273 }, +
2274 rules: [/^(?:%%[^\n]*)/, /^(?:\n+)/, /^(?:\s+)/, /^(?:classDiagram\b)/, /^(?:[\{])/, /^(?:\})/, /^(?:[\n])/, /^(?:[^\{\}\n]*)/, /^(?:class\b)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:--)/, /^(?:\.\.)/, /^(?::[^#\n;]+)/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:[A-Za-z]+)/, /^(?:[!"#$%&'*+,-.`?\\_\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:$)/], +
2275 conditions: { +
2276 "string": { +
2277 "rules": [10, 11], +
2278 "inclusive": false +
2279 }, +
2280 "struct": { +
2281 "rules": [5, 6, 7], +
2282 "inclusive": false +
2283 }, +
2284 "INITIAL": { +
2285 "rules": [0, 1, 2, 3, 4, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], +
2286 "inclusive": true +
2287 } +
2288 } +
2289 }; +
2290 return lexer; +
2291 }(); +
2292 +
2293 parser.lexer = lexer; +
2294 +
2295 function Parser() { +
2296 this.yy = {}; +
2297 } +
2298 +
2299 Parser.prototype = parser; +
2300 parser.Parser = Parser; +
2301 return new Parser(); +
2302}(); +
2303 +
2304if (true) { +
2305 exports.parser = parser; +
2306 exports.Parser = parser.Parser; +
2307 +
2308 exports.parse = function () { +
2309 return parser.parse.apply(parser, arguments); +
2310 }; +
2311 +
2312 exports.main = function commonjsMain(args) { +
2313 if (!args[1]) { +
2314 console.log('Usage: ' + args[0] + ' FILE'); +
2315 process.exit(1); +
2316 } +
2317 +
2318 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
2319 +
2320 return exports.parser.parse(source); +
2321 }; +
2322 +
2323 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
2324 exports.main(process.argv.slice(1)); +
2325 } +
2326} +
2327/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
2328 +
2329/***/ }), +
2330 +
2331/***/ "./src/diagrams/flowchart/flowDb.js": +
2332/*!******************************************!*\ +
2333 !*** ./src/diagrams/flowchart/flowDb.js ***! +
2334 \******************************************/ +
2335/*! exports provided: addVertex, addLink, updateLinkInterpolate, updateLink, addClass, setDirection, setClass, setLink, getTooltip, setClickEvent, bindFunctions, getDirection, getVertices, getEdges, getClasses, clear, defaultStyle, addSubGraph, getDepthFirstPos, indexNodes, getSubGraphs, default */ +
2336/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2337 +
2338"use strict"; +
2339__webpack_require__.r(__webpack_exports__); +
2340/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addVertex", function() { return addVertex; }); +
2341/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addLink", function() { return addLink; }); +
2342/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateLinkInterpolate", function() { return updateLinkInterpolate; }); +
2343/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateLink", function() { return updateLink; }); +
2344/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addClass", function() { return addClass; }); +
2345/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDirection", function() { return setDirection; }); +
2346/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setClass", function() { return setClass; }); +
2347/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLink", function() { return setLink; }); +
2348/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTooltip", function() { return getTooltip; }); +
2349/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setClickEvent", function() { return setClickEvent; }); +
2350/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindFunctions", function() { return bindFunctions; }); +
2351/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDirection", function() { return getDirection; }); +
2352/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVertices", function() { return getVertices; }); +
2353/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEdges", function() { return getEdges; }); +
2354/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClasses", function() { return getClasses; }); +
2355/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
2356/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultStyle", function() { return defaultStyle; }); +
2357/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSubGraph", function() { return addSubGraph; }); +
2358/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDepthFirstPos", function() { return getDepthFirstPos; }); +
2359/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "indexNodes", function() { return indexNodes; }); +
2360/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSubGraphs", function() { return getSubGraphs; }); +
2361/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "d3"); +
2362/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__); +
2363/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
2364/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils */ "./src/utils.js"); +
2365 +
2366 +
2367 +
2368let vertices = {}; +
2369let edges = []; +
2370let classes = []; +
2371let subGraphs = []; +
2372let subGraphLookup = {}; +
2373let tooltips = {}; +
2374let subCount = 0; +
2375let direction; // Functions to be run after graph rendering +
2376 +
2377let funs = []; +
2378/** +
2379 * Function called by parser when a node definition has been found +
2380 * @param id +
2381 * @param text +
2382 * @param type +
2383 * @param style +
2384 * @param classes +
2385 */ +
2386 +
2387const addVertex = function (id, text, type, style, classes) { +
2388 let txt; +
2389 +
2390 if (typeof id === 'undefined') { +
2391 return; +
2392 } +
2393 +
2394 if (id.trim().length === 0) { +
2395 return; +
2396 } +
2397 +
2398 if (typeof vertices[id] === 'undefined') { +
2399 vertices[id] = { +
2400 id: id, +
2401 styles: [], +
2402 classes: [] +
2403 }; +
2404 } +
2405 +
2406 if (typeof text !== 'undefined') { +
2407 txt = text.trim(); // strip quotes if string starts and exnds with a quote +
2408 +
2409 if (txt[0] === '"' && txt[txt.length - 1] === '"') { +
2410 txt = txt.substring(1, txt.length - 1); +
2411 } +
2412 +
2413 vertices[id].text = txt; +
2414 } +
2415 +
2416 if (typeof type !== 'undefined') { +
2417 vertices[id].type = type; +
2418 } +
2419 +
2420 if (typeof style !== 'undefined') { +
2421 if (style !== null) { +
2422 style.forEach(function (s) { +
2423 vertices[id].styles.push(s); +
2424 }); +
2425 } +
2426 } +
2427 +
2428 if (typeof classes !== 'undefined') { +
2429 if (classes !== null) { +
2430 classes.forEach(function (s) { +
2431 vertices[id].classes.push(s); +
2432 }); +
2433 } +
2434 } +
2435}; +
2436/** +
2437 * Function called by parser when a link/edge definition has been found +
2438 * @param start +
2439 * @param end +
2440 * @param type +
2441 * @param linktext +
2442 */ +
2443 +
2444const addLink = function (start, end, type, linktext) { +
2445 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].info('Got edge...', start, end); +
2446 const edge = { +
2447 start: start, +
2448 end: end, +
2449 type: undefined, +
2450 text: '' +
2451 }; +
2452 linktext = type.text; +
2453 +
2454 if (typeof linktext !== 'undefined') { +
2455 edge.text = linktext.trim(); // strip quotes if string starts and exnds with a quote +
2456 +
2457 if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { +
2458 edge.text = edge.text.substring(1, edge.text.length - 1); +
2459 } +
2460 } +
2461 +
2462 if (typeof type !== 'undefined') { +
2463 edge.type = type.type; +
2464 edge.stroke = type.stroke; +
2465 } +
2466 +
2467 edges.push(edge); +
2468}; +
2469/** +
2470 * Updates a link's line interpolation algorithm +
2471 * @param pos +
2472 * @param interpolate +
2473 */ +
2474 +
2475const updateLinkInterpolate = function (positions, interp) { +
2476 positions.forEach(function (pos) { +
2477 if (pos === 'default') { +
2478 edges.defaultInterpolate = interp; +
2479 } else { +
2480 edges[pos].interpolate = interp; +
2481 } +
2482 }); +
2483}; +
2484/** +
2485 * Updates a link with a style +
2486 * @param pos +
2487 * @param style +
2488 */ +
2489 +
2490const updateLink = function (positions, style) { +
2491 positions.forEach(function (pos) { +
2492 if (pos === 'default') { +
2493 edges.defaultStyle = style; +
2494 } else { +
2495 if (_utils__WEBPACK_IMPORTED_MODULE_2__["default"].isSubstringInArray('fill', style) === -1) { +
2496 style.push('fill:none'); +
2497 } +
2498 +
2499 edges[pos].style = style; +
2500 } +
2501 }); +
2502}; +
2503const addClass = function (id, style) { +
2504 if (typeof classes[id] === 'undefined') { +
2505 classes[id] = { +
2506 id: id, +
2507 styles: [] +
2508 }; +
2509 } +
2510 +
2511 if (typeof style !== 'undefined') { +
2512 if (style !== null) { +
2513 style.forEach(function (s) { +
2514 classes[id].styles.push(s); +
2515 }); +
2516 } +
2517 } +
2518}; +
2519/** +
2520 * Called by parser when a graph definition is found, stores the direction of the chart. +
2521 * @param dir +
2522 */ +
2523 +
2524const setDirection = function (dir) { +
2525 direction = dir; +
2526}; +
2527/** +
2528 * Called by parser when a special node is found, e.g. a clickable element. +
2529 * @param ids Comma separated list of ids +
2530 * @param className Class to add +
2531 */ +
2532 +
2533const setClass = function (ids, className) { +
2534 ids.split(',').forEach(function (id) { +
2535 if (typeof vertices[id] !== 'undefined') { +
2536 vertices[id].classes.push(className); +
2537 } +
2538 +
2539 if (typeof subGraphLookup[id] !== 'undefined') { +
2540 subGraphLookup[id].classes.push(className); +
2541 } +
2542 }); +
2543}; +
2544 +
2545const setTooltip = function (ids, tooltip) { +
2546 ids.split(',').forEach(function (id) { +
2547 if (typeof tooltip !== 'undefined') { +
2548 tooltips[id] = tooltip; +
2549 } +
2550 }); +
2551}; +
2552 +
2553const setClickFun = function (id, functionName) { +
2554 if (typeof functionName === 'undefined') { +
2555 return; +
2556 } +
2557 +
2558 if (typeof vertices[id] !== 'undefined') { +
2559 funs.push(function (element) { +
2560 const elem = d3__WEBPACK_IMPORTED_MODULE_0__["select"](element).select(`[id="${id}"]`); +
2561 +
2562 if (elem !== null) { +
2563 elem.on('click', function () { +
2564 window[functionName](id); +
2565 }); +
2566 } +
2567 }); +
2568 } +
2569}; +
2570/** +
2571 * Called by parser when a link is found. Adds the URL to the vertex data. +
2572 * @param ids Comma separated list of ids +
2573 * @param linkStr URL to create a link for +
2574 * @param tooltip Tooltip for the clickable element +
2575 */ +
2576 +
2577 +
2578const setLink = function (ids, linkStr, tooltip) { +
2579 ids.split(',').forEach(function (id) { +
2580 if (typeof vertices[id] !== 'undefined') { +
2581 vertices[id].link = linkStr; +
2582 } +
2583 }); +
2584 setTooltip(ids, tooltip); +
2585 setClass(ids, 'clickable'); +
2586}; +
2587const getTooltip = function (id) { +
2588 return tooltips[id]; +
2589}; +
2590/** +
2591 * Called by parser when a click definition is found. Registers an event handler. +
2592 * @param ids Comma separated list of ids +
2593 * @param functionName Function to be called on click +
2594 * @param tooltip Tooltip for the clickable element +
2595 */ +
2596 +
2597const setClickEvent = function (ids, functionName, tooltip) { +
2598 ids.split(',').forEach(function (id) { +
2599 setClickFun(id, functionName); +
2600 }); +
2601 setTooltip(ids, tooltip); +
2602 setClass(ids, 'clickable'); +
2603}; +
2604const bindFunctions = function (element) { +
2605 funs.forEach(function (fun) { +
2606 fun(element); +
2607 }); +
2608}; +
2609const getDirection = function () { +
2610 return direction; +
2611}; +
2612/** +
2613 * Retrieval function for fetching the found nodes after parsing has completed. +
2614 * @returns {{}|*|vertices} +
2615 */ +
2616 +
2617const getVertices = function () { +
2618 return vertices; +
2619}; +
2620/** +
2621 * Retrieval function for fetching the found links after parsing has completed. +
2622 * @returns {{}|*|edges} +
2623 */ +
2624 +
2625const getEdges = function () { +
2626 return edges; +
2627}; +
2628/** +
2629 * Retrieval function for fetching the found class definitions after parsing has completed. +
2630 * @returns {{}|*|classes} +
2631 */ +
2632 +
2633const getClasses = function () { +
2634 return classes; +
2635}; +
2636 +
2637const setupToolTips = function (element) { +
2638 let tooltipElem = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('.mermaidTooltip'); +
2639 +
2640 if ((tooltipElem._groups || tooltipElem)[0][0] === null) { +
2641 tooltipElem = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('body').append('div').attr('class', 'mermaidTooltip').style('opacity', 0); +
2642 } +
2643 +
2644 const svg = d3__WEBPACK_IMPORTED_MODULE_0__["select"](element).select('svg'); +
2645 const nodes = svg.selectAll('g.node'); +
2646 nodes.on('mouseover', function () { +
2647 const el = d3__WEBPACK_IMPORTED_MODULE_0__["select"](this); +
2648 const title = el.attr('title'); // Dont try to draw a tooltip if no data is provided +
2649 +
2650 if (title === null) { +
2651 return; +
2652 } +
2653 +
2654 const rect = this.getBoundingClientRect(); +
2655 tooltipElem.transition().duration(200).style('opacity', '.9'); +
2656 tooltipElem.html(el.attr('title')).style('left', rect.left + (rect.right - rect.left) / 2 + 'px').style('top', rect.top - 14 + document.body.scrollTop + 'px'); +
2657 el.classed('hover', true); +
2658 }).on('mouseout', function () { +
2659 tooltipElem.transition().duration(500).style('opacity', 0); +
2660 const el = d3__WEBPACK_IMPORTED_MODULE_0__["select"](this); +
2661 el.classed('hover', false); +
2662 }); +
2663}; +
2664 +
2665funs.push(setupToolTips); +
2666/** +
2667 * Clears the internal graph db so that a new graph can be parsed. +
2668 */ +
2669 +
2670const clear = function () { +
2671 vertices = {}; +
2672 classes = {}; +
2673 edges = []; +
2674 funs = []; +
2675 funs.push(setupToolTips); +
2676 subGraphs = []; +
2677 subGraphLookup = {}; +
2678 subCount = 0; +
2679 tooltips = []; +
2680}; +
2681/** +
2682 * +
2683 * @returns {string} +
2684 */ +
2685 +
2686const defaultStyle = function () { +
2687 return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'; +
2688}; +
2689/** +
2690 * Clears the internal graph db so that a new graph can be parsed. +
2691 */ +
2692 +
2693const addSubGraph = function (id, list, title) { +
2694 function uniq(a) { +
2695 const prims = { +
2696 'boolean': {}, +
2697 'number': {}, +
2698 'string': {} +
2699 }; +
2700 const objs = []; +
2701 return a.filter(function (item) { +
2702 const type = typeof item; +
2703 +
2704 if (item.trim() === '') { +
2705 return false; +
2706 } +
2707 +
2708 if (type in prims) { +
2709 return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; +
2710 } else { +
2711 return objs.indexOf(item) >= 0 ? false : objs.push(item); +
2712 } +
2713 }); +
2714 } +
2715 +
2716 let nodeList = []; +
2717 nodeList = uniq(nodeList.concat.apply(nodeList, list)); +
2718 id = id || 'subGraph' + subCount; +
2719 title = title || ''; +
2720 subCount = subCount + 1; +
2721 const subGraph = { +
2722 id: id, +
2723 nodes: nodeList, +
2724 title: title.trim(), +
2725 classes: [] +
2726 }; +
2727 subGraphs.push(subGraph); +
2728 subGraphLookup[id] = subGraph; +
2729 return id; +
2730}; +
2731 +
2732const getPosForId = function (id) { +
2733 for (let i = 0; i < subGraphs.length; i++) { +
2734 if (subGraphs[i].id === id) { +
2735 return i; +
2736 } +
2737 } +
2738 +
2739 return -1; +
2740}; +
2741 +
2742let secCount = -1; +
2743const posCrossRef = []; +
2744 +
2745const indexNodes2 = function (id, pos) { +
2746 const nodes = subGraphs[pos].nodes; +
2747 secCount = secCount + 1; +
2748 +
2749 if (secCount > 2000) { +
2750 return; +
2751 } +
2752 +
2753 posCrossRef[secCount] = pos; // Check if match +
2754 +
2755 if (subGraphs[pos].id === id) { +
2756 return { +
2757 result: true, +
2758 count: 0 +
2759 }; +
2760 } +
2761 +
2762 let count = 0; +
2763 let posCount = 1; +
2764 +
2765 while (count < nodes.length) { +
2766 const childPos = getPosForId(nodes[count]); // Ignore regular nodes (pos will be -1) +
2767 +
2768 if (childPos >= 0) { +
2769 const res = indexNodes2(id, childPos); +
2770 +
2771 if (res.result) { +
2772 return { +
2773 result: true, +
2774 count: posCount + res.count +
2775 }; +
2776 } else { +
2777 posCount = posCount + res.count; +
2778 } +
2779 } +
2780 +
2781 count = count + 1; +
2782 } +
2783 +
2784 return { +
2785 result: false, +
2786 count: posCount +
2787 }; +
2788}; +
2789 +
2790const getDepthFirstPos = function (pos) { +
2791 return posCrossRef[pos]; +
2792}; +
2793const indexNodes = function () { +
2794 secCount = -1; +
2795 +
2796 if (subGraphs.length > 0) { +
2797 indexNodes2('none', subGraphs.length - 1, 0); +
2798 } +
2799}; +
2800const getSubGraphs = function () { +
2801 return subGraphs; +
2802}; +
2803/* harmony default export */ __webpack_exports__["default"] = ({ +
2804 addVertex, +
2805 addLink, +
2806 updateLinkInterpolate, +
2807 updateLink, +
2808 addClass, +
2809 setDirection, +
2810 setClass, +
2811 getTooltip, +
2812 setClickEvent, +
2813 setLink, +
2814 bindFunctions, +
2815 getDirection, +
2816 getVertices, +
2817 getEdges, +
2818 getClasses, +
2819 clear, +
2820 defaultStyle, +
2821 addSubGraph, +
2822 getDepthFirstPos, +
2823 indexNodes, +
2824 getSubGraphs +
2825}); +
2826 +
2827/***/ }), +
2828 +
2829/***/ "./src/diagrams/flowchart/flowRenderer.js": +
2830/*!************************************************!*\ +
2831 !*** ./src/diagrams/flowchart/flowRenderer.js ***! +
2832 \************************************************/ +
2833/*! exports provided: setConf, addVertices, addEdges, getClasses, draw, default */ +
2834/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2835 +
2836"use strict"; +
2837__webpack_require__.r(__webpack_exports__); +
2838/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
2839/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addVertices", function() { return addVertices; }); +
2840/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addEdges", function() { return addEdges; }); +
2841/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClasses", function() { return getClasses; }); +
2842/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
2843/* harmony import */ var graphlibrary__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! graphlibrary */ "graphlibrary"); +
2844/* harmony import */ var graphlibrary__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(graphlibrary__WEBPACK_IMPORTED_MODULE_0__); +
2845/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3 */ "d3"); +
2846/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_1__); +
2847/* harmony import */ var _flowDb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./flowDb */ "./src/diagrams/flowchart/flowDb.js"); +
2848/* harmony import */ var _parser_flow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parser/flow */ "./src/diagrams/flowchart/parser/flow.js"); +
2849/* harmony import */ var _parser_flow__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_parser_flow__WEBPACK_IMPORTED_MODULE_3__); +
2850/* harmony import */ var dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dagre-d3-renderer */ "dagre-d3-renderer"); +
2851/* harmony import */ var dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4__); +
2852/* harmony import */ var dagre_d3_renderer_lib_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! dagre-d3-renderer/lib/label/add-html-label.js */ "dagre-d3-renderer/lib/label/add-html-label.js"); +
2853/* harmony import */ var dagre_d3_renderer_lib_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(dagre_d3_renderer_lib_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_5__); +
2854/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
2855/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils */ "./src/utils.js"); +
2856 +
2857 +
2858 +
2859 +
2860 +
2861 +
2862 +
2863 +
2864const conf = {}; +
2865const setConf = function (cnf) { +
2866 const keys = Object.keys(cnf); +
2867 +
2868 for (let i = 0; i < keys.length; i++) { +
2869 conf[keys[i]] = cnf[keys[i]]; +
2870 } +
2871}; +
2872/** +
2873 * Function that adds the vertices found in the graph definition to the graph to be rendered. +
2874 * @param vert Object containing the vertices. +
2875 * @param g The graph that is to be drawn. +
2876 */ +
2877 +
2878const addVertices = function (vert, g, svgId) { +
2879 const svg = d3__WEBPACK_IMPORTED_MODULE_1__["select"](`[id="${svgId}"]`); +
2880 const keys = Object.keys(vert); +
2881 +
2882 const styleFromStyleArr = function (styleStr, arr) { +
2883 // Create a compound style definition from the style definitions found for the node in the graph definition +
2884 for (let i = 0; i < arr.length; i++) { +
2885 if (typeof arr[i] !== 'undefined') { +
2886 styleStr = styleStr + arr[i] + ';'; +
2887 } +
2888 } +
2889 +
2890 return styleStr; +
2891 }; // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition +
2892 +
2893 +
2894 keys.forEach(function (id) { +
2895 const vertex = vert[id]; +
2896 /** +
2897 * Variable for storing the classes for the vertex +
2898 * @type {string} +
2899 */ +
2900 +
2901 let classStr = ''; +
2902 +
2903 if (vertex.classes.length > 0) { +
2904 classStr = vertex.classes.join(' '); +
2905 } +
2906 /** +
2907 * Variable for storing the extracted style for the vertex +
2908 * @type {string} +
2909 */ +
2910 +
2911 +
2912 let style = ''; // Create a compound style definition from the style definitions found for the node in the graph definition +
2913 +
2914 style = styleFromStyleArr(style, vertex.styles); // Use vertex id as text in the box if no text is provided by the graph definition +
2915 +
2916 let vertexText = vertex.text !== undefined ? vertex.text : vertex.id; // We create a SVG label, either by delegating to addHtmlLabel or manually +
2917 +
2918 let vertexNode; +
2919 +
2920 if (conf.htmlLabels) { +
2921 // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that? +
2922 const node = { +
2923 label: vertexText.replace(/fa[lrsb]?:fa-[\w-]+/g, s => `<i class='${s.replace(':', ' ')}'></i>`) +
2924 }; +
2925 vertexNode = dagre_d3_renderer_lib_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_5___default()(svg, node).node(); +
2926 vertexNode.parentNode.removeChild(vertexNode); +
2927 } else { +
2928 const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); +
2929 const rows = vertexText.split(/<br[/]{0,1}>/); +
2930 +
2931 for (let j = 0; j < rows.length; j++) { +
2932 const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan'); +
2933 tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); +
2934 tspan.setAttribute('dy', '1em'); +
2935 tspan.setAttribute('x', '1'); +
2936 tspan.textContent = rows[j]; +
2937 svgLabel.appendChild(tspan); +
2938 } +
2939 +
2940 vertexNode = svgLabel; +
2941 } // If the node has a link, we wrap it in a SVG link +
2942 +
2943 +
2944 if (vertex.link) { +
2945 const link = document.createElementNS('http://www.w3.org/2000/svg', 'a'); +
2946 link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link); +
2947 link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener'); +
2948 link.appendChild(vertexNode); +
2949 vertexNode = link; +
2950 } +
2951 +
2952 let radious = 0; +
2953 let _shape = ''; // Set the shape based parameters +
2954 +
2955 switch (vertex.type) { +
2956 case 'round': +
2957 radious = 5; +
2958 _shape = 'rect'; +
2959 break; +
2960 +
2961 case 'square': +
2962 _shape = 'rect'; +
2963 break; +
2964 +
2965 case 'diamond': +
2966 _shape = 'question'; +
2967 break; +
2968 +
2969 case 'odd': +
2970 _shape = 'rect_left_inv_arrow'; +
2971 break; +
2972 +
2973 case 'odd_right': +
2974 _shape = 'rect_left_inv_arrow'; +
2975 break; +
2976 +
2977 case 'circle': +
2978 _shape = 'circle'; +
2979 break; +
2980 +
2981 case 'ellipse': +
2982 _shape = 'ellipse'; +
2983 break; +
2984 +
2985 case 'group': +
2986 _shape = 'rect'; +
2987 break; +
2988 +
2989 default: +
2990 _shape = 'rect'; +
2991 } // Add the node +
2992 +
2993 +
2994 g.setNode(vertex.id, { +
2995 labelType: 'svg', +
2996 shape: _shape, +
2997 label: vertexNode, +
2998 rx: radious, +
2999 ry: radious, +
3000 'class': classStr, +
3001 style: style, +
3002 id: vertex.id +
3003 }); +
3004 }); +
3005}; +
3006/** +
3007 * Add edges to graph based on parsed graph defninition +
3008 * @param {Object} edges The edges to add to the graph +
3009 * @param {Object} g The graph object +
3010 */ +
3011 +
3012const addEdges = function (edges, g) { +
3013 let cnt = 0; +
3014 let defaultStyle; +
3015 +
3016 if (typeof edges.defaultStyle !== 'undefined') { +
3017 defaultStyle = edges.defaultStyle.toString().replace(/,/g, ';'); +
3018 } +
3019 +
3020 edges.forEach(function (edge) { +
3021 cnt++; +
3022 const edgeData = {}; // Set link type for rendering +
3023 +
3024 if (edge.type === 'arrow_open') { +
3025 edgeData.arrowhead = 'none'; +
3026 } else { +
3027 edgeData.arrowhead = 'normal'; +
3028 } +
3029 +
3030 let style = ''; +
3031 +
3032 if (typeof edge.style !== 'undefined') { +
3033 edge.style.forEach(function (s) { +
3034 style = style + s + ';'; +
3035 }); +
3036 } else { +
3037 switch (edge.stroke) { +
3038 case 'normal': +
3039 style = 'fill:none'; +
3040 +
3041 if (typeof defaultStyle !== 'undefined') { +
3042 style = defaultStyle; +
3043 } +
3044 +
3045 break; +
3046 +
3047 case 'dotted': +
3048 style = 'stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;'; +
3049 break; +
3050 +
3051 case 'thick': +
3052 style = 'stroke: #333; stroke-width: 3.5px;fill:none'; +
3053 break; +
3054 } +
3055 } +
3056 +
3057 edgeData.style = style; +
3058 +
3059 if (typeof edge.interpolate !== 'undefined') { +
3060 edgeData.curve = Object(_utils__WEBPACK_IMPORTED_MODULE_7__["interpolateToCurve"])(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__["curveLinear"]); +
3061 } else if (typeof edges.defaultInterpolate !== 'undefined') { +
3062 edgeData.curve = Object(_utils__WEBPACK_IMPORTED_MODULE_7__["interpolateToCurve"])(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__["curveLinear"]); +
3063 } else { +
3064 edgeData.curve = Object(_utils__WEBPACK_IMPORTED_MODULE_7__["interpolateToCurve"])(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__["curveLinear"]); +
3065 } +
3066 +
3067 if (typeof edge.text === 'undefined') { +
3068 if (typeof edge.style !== 'undefined') { +
3069 edgeData.arrowheadStyle = 'fill: #333'; +
3070 } +
3071 } else { +
3072 edgeData.arrowheadStyle = 'fill: #333'; +
3073 +
3074 if (typeof edge.style === 'undefined') { +
3075 edgeData.labelpos = 'c'; +
3076 +
3077 if (conf.htmlLabels) { +
3078 edgeData.labelType = 'html'; +
3079 edgeData.label = '<span class="edgeLabel">' + edge.text + '</span>'; +
3080 } else { +
3081 edgeData.labelType = 'text'; +
3082 edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none'; +
3083 edgeData.label = edge.text.replace(/<br>/g, '\n'); +
3084 } +
3085 } else { +
3086 edgeData.label = edge.text.replace(/<br>/g, '\n'); +
3087 } +
3088 } // Add the edge to the graph +
3089 +
3090 +
3091 g.setEdge(edge.start, edge.end, edgeData, cnt); +
3092 }); +
3093}; +
3094/** +
3095 * Returns the all the styles from classDef statements in the graph definition. +
3096 * @returns {object} classDef styles +
3097 */ +
3098 +
3099const getClasses = function (text) { +
3100 _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].clear(); +
3101 const parser = _parser_flow__WEBPACK_IMPORTED_MODULE_3___default.a.parser; +
3102 parser.yy = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"]; // Parse the graph definition +
3103 +
3104 parser.parse(text); +
3105 return _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getClasses(); +
3106}; +
3107/** +
3108 * Draws a flowchart in the tag with id: id based on the graph definition in text. +
3109 * @param text +
3110 * @param id +
3111 */ +
3112 +
3113const draw = function (text, id) { +
3114 _logger__WEBPACK_IMPORTED_MODULE_6__["logger"].debug('Drawing flowchart'); +
3115 _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].clear(); +
3116 const parser = _parser_flow__WEBPACK_IMPORTED_MODULE_3___default.a.parser; +
3117 parser.yy = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"]; // Parse the graph definition +
3118 +
3119 try { +
3120 parser.parse(text); +
3121 } catch (err) { +
3122 _logger__WEBPACK_IMPORTED_MODULE_6__["logger"].debug('Parsing failed'); +
3123 } // Fetch the default direction, use TD if none was found +
3124 +
3125 +
3126 let dir = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getDirection(); +
3127 +
3128 if (typeof dir === 'undefined') { +
3129 dir = 'TD'; +
3130 } // Create the input mermaid.graph +
3131 +
3132 +
3133 const g = new graphlibrary__WEBPACK_IMPORTED_MODULE_0___default.a.Graph({ +
3134 multigraph: true, +
3135 compound: true +
3136 }).setGraph({ +
3137 rankdir: dir, +
3138 marginx: 20, +
3139 marginy: 20 +
3140 }).setDefaultEdgeLabel(function () { +
3141 return {}; +
3142 }); +
3143 let subG; +
3144 const subGraphs = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getSubGraphs(); +
3145 +
3146 for (let i = subGraphs.length - 1; i >= 0; i--) { +
3147 subG = subGraphs[i]; +
3148 _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].addVertex(subG.id, subG.title, 'group', undefined, subG.classes); +
3149 } // Fetch the verices/nodes and edges/links from the parsed graph definition +
3150 +
3151 +
3152 const vert = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getVertices(); +
3153 const edges = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getEdges(); +
3154 let i = 0; +
3155 +
3156 for (i = subGraphs.length - 1; i >= 0; i--) { +
3157 subG = subGraphs[i]; +
3158 d3__WEBPACK_IMPORTED_MODULE_1__["selectAll"]('cluster').append('text'); +
3159 +
3160 for (let j = 0; j < subG.nodes.length; j++) { +
3161 g.setParent(subG.nodes[j], subG.id); +
3162 } +
3163 } +
3164 +
3165 addVertices(vert, g, id); +
3166 addEdges(edges, g); // Create the renderer +
3167 +
3168 const Render = dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.render; +
3169 const render = new Render(); // Add custom shape for rhombus type of boc (decision) +
3170 +
3171 render.shapes().question = function (parent, bbox, node) { +
3172 const w = bbox.width; +
3173 const h = bbox.height; +
3174 const s = (w + h) * 0.9; +
3175 const points = [{ +
3176 x: s / 2, +
3177 y: 0 +
3178 }, { +
3179 x: s, +
3180 y: -s / 2 +
3181 }, { +
3182 x: s / 2, +
3183 y: -s +
3184 }, { +
3185 x: 0, +
3186 y: -s / 2 +
3187 }]; +
3188 const shapeSvg = parent.insert('polygon', ':first-child').attr('points', points.map(function (d) { +
3189 return d.x + ',' + d.y; +
3190 }).join(' ')).attr('rx', 5).attr('ry', 5).attr('transform', 'translate(' + -s / 2 + ',' + s * 2 / 4 + ')'); +
3191 +
3192 node.intersect = function (point) { +
3193 return dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.intersect.polygon(node, points, point); +
3194 }; +
3195 +
3196 return shapeSvg; +
3197 }; // Add custom shape for box with inverted arrow on left side +
3198 +
3199 +
3200 render.shapes().rect_left_inv_arrow = function (parent, bbox, node) { +
3201 const w = bbox.width; +
3202 const h = bbox.height; +
3203 const points = [{ +
3204 x: -h / 2, +
3205 y: 0 +
3206 }, { +
3207 x: w, +
3208 y: 0 +
3209 }, { +
3210 x: w, +
3211 y: -h +
3212 }, { +
3213 x: -h / 2, +
3214 y: -h +
3215 }, { +
3216 x: 0, +
3217 y: -h / 2 +
3218 }]; +
3219 const shapeSvg = parent.insert('polygon', ':first-child').attr('points', points.map(function (d) { +
3220 return d.x + ',' + d.y; +
3221 }).join(' ')).attr('transform', 'translate(' + -w / 2 + ',' + h * 2 / 4 + ')'); +
3222 +
3223 node.intersect = function (point) { +
3224 return dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.intersect.polygon(node, points, point); +
3225 }; +
3226 +
3227 return shapeSvg; +
3228 }; // Add custom shape for box with inverted arrow on right side +
3229 +
3230 +
3231 render.shapes().rect_right_inv_arrow = function (parent, bbox, node) { +
3232 const w = bbox.width; +
3233 const h = bbox.height; +
3234 const points = [{ +
3235 x: 0, +
3236 y: 0 +
3237 }, { +
3238 x: w + h / 2, +
3239 y: 0 +
3240 }, { +
3241 x: w, +
3242 y: -h / 2 +
3243 }, { +
3244 x: w + h / 2, +
3245 y: -h +
3246 }, { +
3247 x: 0, +
3248 y: -h +
3249 }]; +
3250 const shapeSvg = parent.insert('polygon', ':first-child').attr('points', points.map(function (d) { +
3251 return d.x + ',' + d.y; +
3252 }).join(' ')).attr('transform', 'translate(' + -w / 2 + ',' + h * 2 / 4 + ')'); +
3253 +
3254 node.intersect = function (point) { +
3255 return dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.intersect.polygon(node, points, point); +
3256 }; +
3257 +
3258 return shapeSvg; +
3259 }; // Add our custom arrow - an empty arrowhead +
3260 +
3261 +
3262 render.arrows().none = function normal(parent, id, edge, type) { +
3263 const marker = parent.append('marker').attr('id', id).attr('viewBox', '0 0 10 10').attr('refX', 9).attr('refY', 5).attr('markerUnits', 'strokeWidth').attr('markerWidth', 8).attr('markerHeight', 6).attr('orient', 'auto'); +
3264 const path = marker.append('path').attr('d', 'M 0 0 L 0 0 L 0 0 z'); +
3265 dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.util.applyStyle(path, edge[type + 'Style']); +
3266 }; // Override normal arrowhead defined in d3. Remove style & add class to allow css styling. +
3267 +
3268 +
3269 render.arrows().normal = function normal(parent, id, edge, type) { +
3270 const marker = parent.append('marker').attr('id', id).attr('viewBox', '0 0 10 10').attr('refX', 9).attr('refY', 5).attr('markerUnits', 'strokeWidth').attr('markerWidth', 8).attr('markerHeight', 6).attr('orient', 'auto'); +
3271 marker.append('path').attr('d', 'M 0 0 L 10 5 L 0 10 z').attr('class', 'arrowheadPath').style('stroke-width', 1).style('stroke-dasharray', '1,0'); +
3272 }; // Set up an SVG group so that we can translate the final graph. +
3273 +
3274 +
3275 const svg = d3__WEBPACK_IMPORTED_MODULE_1__["select"](`[id="${id}"]`); // Run the renderer. This is what draws the final graph. +
3276 +
3277 const element = d3__WEBPACK_IMPORTED_MODULE_1__["select"]('#' + id + ' g'); +
3278 render(element, g); +
3279 element.selectAll('g.node').attr('title', function () { +
3280 return _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getTooltip(this.id); +
3281 }); +
3282 const padding = 8; +
3283 const width = g.maxX - g.minX + padding * 2; +
3284 const height = g.maxY - g.minY + padding * 2; +
3285 svg.attr('width', '100%'); +
3286 svg.attr('style', `max-width: ${width}px;`); +
3287 svg.attr('viewBox', `0 0 ${width} ${height}`); +
3288 svg.select('g').attr('transform', `translate(${padding - g.minX}, ${padding - g.minY})`); // Index nodes +
3289 +
3290 _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].indexNodes('subGraph' + i); // reposition labels +
3291 +
3292 for (i = 0; i < subGraphs.length; i++) { +
3293 subG = subGraphs[i]; +
3294 +
3295 if (subG.title !== 'undefined') { +
3296 const clusterRects = document.querySelectorAll('#' + id + ' #' + subG.id + ' rect'); +
3297 const clusterEl = document.querySelectorAll('#' + id + ' #' + subG.id); +
3298 const xPos = clusterRects[0].x.baseVal.value; +
3299 const yPos = clusterRects[0].y.baseVal.value; +
3300 const width = clusterRects[0].width.baseVal.value; +
3301 const cluster = d3__WEBPACK_IMPORTED_MODULE_1__["select"](clusterEl[0]); +
3302 const te = cluster.select('.label'); +
3303 te.attr('transform', `translate(${xPos + width / 2}, ${yPos + 14})`); +
3304 te.attr('id', id + 'Text'); +
3305 } +
3306 } // Add label rects for non html labels +
3307 +
3308 +
3309 if (!conf.htmlLabels) { +
3310 const labels = document.querySelectorAll('#' + id + ' .edgeLabel .label'); +
3311 +
3312 for (let k = 0; k < labels.length; k++) { +
3313 const label = labels[k]; // Get dimensions of label +
3314 +
3315 const dim = label.getBBox(); +
3316 const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); +
3317 rect.setAttribute('rx', 0); +
3318 rect.setAttribute('ry', 0); +
3319 rect.setAttribute('width', dim.width); +
3320 rect.setAttribute('height', dim.height); +
3321 rect.setAttribute('style', 'fill:#e8e8e8;'); +
3322 label.insertBefore(rect, label.firstChild); +
3323 } +
3324 } +
3325}; +
3326/* harmony default export */ __webpack_exports__["default"] = ({ +
3327 setConf, +
3328 addVertices, +
3329 addEdges, +
3330 getClasses, +
3331 draw +
3332}); +
3333 +
3334/***/ }), +
3335 +
3336/***/ "./src/diagrams/flowchart/parser/flow.js": +
3337/*!***********************************************!*\ +
3338 !*** ./src/diagrams/flowchart/parser/flow.js ***! +
3339 \***********************************************/ +
3340/*! no static exports found */ +
3341/***/ (function(module, exports, __webpack_require__) { +
3342 +
3343/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
3344 +
3345/* +
3346 Returns a Parser object of the following structure: +
3347 +
3348 Parser: { +
3349 yy: {} +
3350 } +
3351 +
3352 Parser.prototype: { +
3353 yy: {}, +
3354 trace: function(), +
3355 symbols_: {associative list: name ==> number}, +
3356 terminals_: {associative list: number ==> name}, +
3357 productions_: [...], +
3358 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
3359 table: [...], +
3360 defaultActions: {...}, +
3361 parseError: function(str, hash), +
3362 parse: function(input), +
3363 +
3364 lexer: { +
3365 EOF: 1, +
3366 parseError: function(str, hash), +
3367 setInput: function(input), +
3368 input: function(), +
3369 unput: function(str), +
3370 more: function(), +
3371 less: function(n), +
3372 pastInput: function(), +
3373 upcomingInput: function(), +
3374 showPosition: function(), +
3375 test_match: function(regex_match_array, rule_index), +
3376 next: function(), +
3377 lex: function(), +
3378 begin: function(condition), +
3379 popState: function(), +
3380 _currentRules: function(), +
3381 topState: function(), +
3382 pushState: function(condition), +
3383 +
3384 options: { +
3385 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
3386 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
3387 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
3388 }, +
3389 +
3390 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
3391 rules: [...], +
3392 conditions: {associative list: name ==> set}, +
3393 } +
3394 } +
3395 +
3396 +
3397 token location info (@$, _$, etc.): { +
3398 first_line: n, +
3399 last_line: n, +
3400 first_column: n, +
3401 last_column: n, +
3402 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
3403 } +
3404 +
3405 +
3406 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
3407 text: (matched text) +
3408 token: (the produced terminal token, if any) +
3409 line: (yylineno) +
3410 } +
3411 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
3412 loc: (yylloc) +
3413 expected: (string describing the set of expected tokens) +
3414 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
3415 } +
3416*/ +
3417var parser = function () { +
3418 var o = function (k, v, o, l) { +
3419 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
3420 +
3421 return o; +
3422 }, +
3423 $V0 = [1, 4], +
3424 $V1 = [1, 3], +
3425 $V2 = [1, 5], +
3426 $V3 = [1, 8, 9, 10, 11, 13, 18, 30, 47, 71, 72, 73, 74, 75, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
3427 $V4 = [2, 2], +
3428 $V5 = [1, 12], +
3429 $V6 = [1, 13], +
3430 $V7 = [1, 14], +
3431 $V8 = [1, 15], +
3432 $V9 = [1, 31], +
3433 $Va = [1, 33], +
3434 $Vb = [1, 22], +
3435 $Vc = [1, 34], +
3436 $Vd = [1, 24], +
3437 $Ve = [1, 25], +
3438 $Vf = [1, 26], +
3439 $Vg = [1, 27], +
3440 $Vh = [1, 28], +
3441 $Vi = [1, 38], +
3442 $Vj = [1, 40], +
3443 $Vk = [1, 35], +
3444 $Vl = [1, 39], +
3445 $Vm = [1, 45], +
3446 $Vn = [1, 44], +
3447 $Vo = [1, 36], +
3448 $Vp = [1, 37], +
3449 $Vq = [1, 41], +
3450 $Vr = [1, 42], +
3451 $Vs = [1, 43], +
3452 $Vt = [1, 8, 9, 10, 11, 13, 18, 30, 35, 47, 71, 72, 73, 74, 75, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
3453 $Vu = [1, 53], +
3454 $Vv = [1, 52], +
3455 $Vw = [1, 54], +
3456 $Vx = [8, 9, 11], +
3457 $Vy = [8, 9, 11, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65], +
3458 $Vz = [1, 91], +
3459 $VA = [8, 9, 10, 11, 13, 15, 18, 32, 39, 41, 43, 47, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
3460 $VB = [8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 30, 32, 34, 35, 39, 40, 41, 42, 43, 44, 47, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 71, 72, 73, 74, 75, 78, 84, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
3461 $VC = [1, 93], +
3462 $VD = [1, 94], +
3463 $VE = [8, 9, 10, 11, 13, 18, 30, 35, 47, 71, 72, 73, 74, 75, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
3464 $VF = [13, 18, 47, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
3465 $VG = [1, 118], +
3466 $VH = [1, 126], +
3467 $VI = [1, 127], +
3468 $VJ = [1, 112], +
3469 $VK = [1, 111], +
3470 $VL = [1, 131], +
3471 $VM = [1, 130], +
3472 $VN = [1, 128], +
3473 $VO = [1, 129], +
3474 $VP = [1, 109], +
3475 $VQ = [1, 119], +
3476 $VR = [1, 114], +
3477 $VS = [1, 113], +
3478 $VT = [1, 121], +
3479 $VU = [1, 122], +
3480 $VV = [1, 123], +
3481 $VW = [1, 124], +
3482 $VX = [1, 125], +
3483 $VY = [1, 116], +
3484 $VZ = [1, 115], +
3485 $V_ = [13, 18, 47, 50, 66, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
3486 $V$ = [10, 12, 13, 15, 16, 17, 18, 30, 34, 35, 40, 42, 44, 47, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 71, 72, 73, 74, 75, 78, 84, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
3487 $V01 = [10, 86], +
3488 $V11 = [1, 198], +
3489 $V21 = [1, 195], +
3490 $V31 = [1, 202], +
3491 $V41 = [1, 199], +
3492 $V51 = [1, 203], +
3493 $V61 = [1, 196], +
3494 $V71 = [1, 193], +
3495 $V81 = [1, 194], +
3496 $V91 = [1, 197], +
3497 $Va1 = [1, 200], +
3498 $Vb1 = [1, 201], +
3499 $Vc1 = [1, 224], +
3500 $Vd1 = [8, 9, 11, 86], +
3501 $Ve1 = [8, 9, 10, 11, 47, 71, 80, 84, 85, 86, 89, 90, 91, 92, 93]; +
3502 +
3503 var parser = { +
3504 trace: function trace() {}, +
3505 yy: {}, +
3506 symbols_: { +
3507 "error": 2, +
3508 "mermaidDoc": 3, +
3509 "graphConfig": 4, +
3510 "document": 5, +
3511 "line": 6, +
3512 "statement": 7, +
3513 "SEMI": 8, +
3514 "NEWLINE": 9, +
3515 "SPACE": 10, +
3516 "EOF": 11, +
3517 "GRAPH": 12, +
3518 "DIR": 13, +
3519 "FirstStmtSeperator": 14, +
3520 "TAGEND": 15, +
3521 "TAGSTART": 16, +
3522 "UP": 17, +
3523 "DOWN": 18, +
3524 "ending": 19, +
3525 "endToken": 20, +
3526 "spaceList": 21, +
3527 "spaceListNewline": 22, +
3528 "verticeStatement": 23, +
3529 "separator": 24, +
3530 "styleStatement": 25, +
3531 "linkStyleStatement": 26, +
3532 "classDefStatement": 27, +
3533 "classStatement": 28, +
3534 "clickStatement": 29, +
3535 "subgraph": 30, +
3536 "alphaNum": 31, +
3537 "SQS": 32, +
3538 "text": 33, +
3539 "SQE": 34, +
3540 "end": 35, +
3541 "STR": 36, +
3542 "vertex": 37, +
3543 "link": 38, +
3544 "PS": 39, +
3545 "PE": 40, +
3546 "(-": 41, +
3547 "-)": 42, +
3548 "DIAMOND_START": 43, +
3549 "DIAMOND_STOP": 44, +
3550 "alphaNumStatement": 45, +
3551 "alphaNumToken": 46, +
3552 "MINUS": 47, +
3553 "linkStatement": 48, +
3554 "arrowText": 49, +
3555 "TESTSTR": 50, +
3556 "--": 51, +
3557 "ARROW_POINT": 52, +
3558 "ARROW_CIRCLE": 53, +
3559 "ARROW_CROSS": 54, +
3560 "ARROW_OPEN": 55, +
3561 "-.": 56, +
3562 "DOTTED_ARROW_POINT": 57, +
3563 "DOTTED_ARROW_CIRCLE": 58, +
3564 "DOTTED_ARROW_CROSS": 59, +
3565 "DOTTED_ARROW_OPEN": 60, +
3566 "==": 61, +
3567 "THICK_ARROW_POINT": 62, +
3568 "THICK_ARROW_CIRCLE": 63, +
3569 "THICK_ARROW_CROSS": 64, +
3570 "THICK_ARROW_OPEN": 65, +
3571 "PIPE": 66, +
3572 "textToken": 67, +
3573 "commentText": 68, +
3574 "commentToken": 69, +
3575 "keywords": 70, +
3576 "STYLE": 71, +
3577 "LINKSTYLE": 72, +
3578 "CLASSDEF": 73, +
3579 "CLASS": 74, +
3580 "CLICK": 75, +
3581 "textNoTags": 76, +
3582 "textNoTagsToken": 77, +
3583 "DEFAULT": 78, +
3584 "stylesOpt": 79, +
3585 "HEX": 80, +
3586 "numList": 81, +
3587 "INTERPOLATE": 82, +
3588 "commentStatement": 83, +
3589 "PCT": 84, +
3590 "NUM": 85, +
3591 "COMMA": 86, +
3592 "style": 87, +
3593 "styleComponent": 88, +
3594 "ALPHA": 89, +
3595 "COLON": 90, +
3596 "UNIT": 91, +
3597 "BRKT": 92, +
3598 "DOT": 93, +
3599 "graphCodeTokens": 94, +
3600 "PUNCTUATION": 95, +
3601 "UNICODE_TEXT": 96, +
3602 "PLUS": 97, +
3603 "EQUALS": 98, +
3604 "MULT": 99, +
3605 "TAG_START": 100, +
3606 "TAG_END": 101, +
3607 "QUOTE": 102, +
3608 "$accept": 0, +
3609 "$end": 1 +
3610 }, +
3611 terminals_: { +
3612 2: "error", +
3613 8: "SEMI", +
3614 9: "NEWLINE", +
3615 10: "SPACE", +
3616 11: "EOF", +
3617 12: "GRAPH", +
3618 13: "DIR", +
3619 15: "TAGEND", +
3620 16: "TAGSTART", +
3621 17: "UP", +
3622 18: "DOWN", +
3623 30: "subgraph", +
3624 32: "SQS", +
3625 34: "SQE", +
3626 35: "end", +
3627 36: "STR", +
3628 39: "PS", +
3629 40: "PE", +
3630 41: "(-", +
3631 42: "-)", +
3632 43: "DIAMOND_START", +
3633 44: "DIAMOND_STOP", +
3634 47: "MINUS", +
3635 50: "TESTSTR", +
3636 51: "--", +
3637 52: "ARROW_POINT", +
3638 53: "ARROW_CIRCLE", +
3639 54: "ARROW_CROSS", +
3640 55: "ARROW_OPEN", +
3641 56: "-.", +
3642 57: "DOTTED_ARROW_POINT", +
3643 58: "DOTTED_ARROW_CIRCLE", +
3644 59: "DOTTED_ARROW_CROSS", +
3645 60: "DOTTED_ARROW_OPEN", +
3646 61: "==", +
3647 62: "THICK_ARROW_POINT", +
3648 63: "THICK_ARROW_CIRCLE", +
3649 64: "THICK_ARROW_CROSS", +
3650 65: "THICK_ARROW_OPEN", +
3651 66: "PIPE", +
3652 71: "STYLE", +
3653 72: "LINKSTYLE", +
3654 73: "CLASSDEF", +
3655 74: "CLASS", +
3656 75: "CLICK", +
3657 78: "DEFAULT", +
3658 80: "HEX", +
3659 82: "INTERPOLATE", +
3660 84: "PCT", +
3661 85: "NUM", +
3662 86: "COMMA", +
3663 89: "ALPHA", +
3664 90: "COLON", +
3665 91: "UNIT", +
3666 92: "BRKT", +
3667 93: "DOT", +
3668 95: "PUNCTUATION", +
3669 96: "UNICODE_TEXT", +
3670 97: "PLUS", +
3671 98: "EQUALS", +
3672 99: "MULT", +
3673 100: "TAG_START", +
3674 101: "TAG_END", +
3675 102: "QUOTE" +
3676 }, +
3677 productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [19, 2], [19, 1], [20, 1], [20, 1], [20, 1], [14, 1], [14, 1], [14, 2], [22, 2], [22, 2], [22, 1], [22, 1], [21, 2], [21, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 6], [7, 4], [24, 1], [24, 1], [24, 1], [23, 3], [23, 1], [37, 4], [37, 5], [37, 6], [37, 7], [37, 4], [37, 5], [37, 4], [37, 5], [37, 4], [37, 5], [37, 4], [37, 5], [37, 1], [37, 2], [31, 1], [31, 2], [45, 1], [45, 1], [45, 1], [45, 1], [38, 2], [38, 3], [38, 3], [38, 1], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [49, 3], [33, 1], [33, 2], [33, 1], [68, 1], [68, 2], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [76, 1], [76, 2], [27, 5], [27, 5], [28, 5], [29, 5], [29, 7], [29, 5], [29, 7], [25, 5], [25, 5], [26, 5], [26, 5], [26, 9], [26, 9], [26, 7], [26, 7], [83, 3], [81, 1], [81, 3], [79, 1], [79, 3], [87, 1], [87, 2], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [69, 1], [69, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [77, 1], [77, 1], [77, 1], [77, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1]], +
3678 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
3679 /* action[1] */ +
3680 , $$ +
3681 /* vstack */ +
3682 , _$ +
3683 /* lstack */ +
3684 ) { +
3685 /* this == yyval */ +
3686 var $0 = $$.length - 1; +
3687 +
3688 switch (yystate) { +
3689 case 2: +
3690 this.$ = []; +
3691 break; +
3692 +
3693 case 3: +
3694 if ($$[$0] !== []) { +
3695 $$[$0 - 1].push($$[$0]); +
3696 } +
3697 +
3698 this.$ = $$[$0 - 1]; +
3699 break; +
3700 +
3701 case 4: +
3702 case 59: +
3703 case 61: +
3704 case 62: +
3705 case 94: +
3706 case 96: +
3707 case 97: +
3708 case 110: +
3709 this.$ = $$[$0]; +
3710 break; +
3711 +
3712 case 11: +
3713 yy.setDirection($$[$0 - 1]); +
3714 this.$ = $$[$0 - 1]; +
3715 break; +
3716 +
3717 case 12: +
3718 yy.setDirection("LR"); +
3719 this.$ = $$[$0 - 1]; +
3720 break; +
3721 +
3722 case 13: +
3723 yy.setDirection("RL"); +
3724 this.$ = $$[$0 - 1]; +
3725 break; +
3726 +
3727 case 14: +
3728 yy.setDirection("BT"); +
3729 this.$ = $$[$0 - 1]; +
3730 break; +
3731 +
3732 case 15: +
3733 yy.setDirection("TB"); +
3734 this.$ = $$[$0 - 1]; +
3735 break; +
3736 +
3737 case 30: +
3738 this.$ = $$[$0 - 1]; +
3739 break; +
3740 +
3741 case 31: +
3742 case 32: +
3743 case 33: +
3744 case 34: +
3745 case 35: +
3746 this.$ = []; +
3747 break; +
3748 +
3749 case 36: +
3750 this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); +
3751 break; +
3752 +
3753 case 37: +
3754 this.$ = yy.addSubGraph(undefined, $$[$0 - 1], $$[$0 - 3]); +
3755 break; +
3756 +
3757 case 38: +
3758 this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); +
3759 break; +
3760 +
3761 case 39: +
3762 this.$ = yy.addSubGraph(undefined, $$[$0 - 1], undefined); +
3763 break; +
3764 +
3765 case 43: +
3766 yy.addLink($$[$0 - 2], $$[$0], $$[$0 - 1]); +
3767 this.$ = [$$[$0 - 2], $$[$0]]; +
3768 break; +
3769 +
3770 case 44: +
3771 this.$ = [$$[$0]]; +
3772 break; +
3773 +
3774 case 45: +
3775 this.$ = $$[$0 - 3]; +
3776 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'square'); +
3777 break; +
3778 +
3779 case 46: +
3780 this.$ = $$[$0 - 4]; +
3781 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'square'); +
3782 break; +
3783 +
3784 case 47: +
3785 this.$ = $$[$0 - 5]; +
3786 yy.addVertex($$[$0 - 5], $$[$0 - 2], 'circle'); +
3787 break; +
3788 +
3789 case 48: +
3790 this.$ = $$[$0 - 6]; +
3791 yy.addVertex($$[$0 - 6], $$[$0 - 3], 'circle'); +
3792 break; +
3793 +
3794 case 49: +
3795 this.$ = $$[$0 - 3]; +
3796 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'ellipse'); +
3797 break; +
3798 +
3799 case 50: +
3800 this.$ = $$[$0 - 4]; +
3801 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'ellipse'); +
3802 break; +
3803 +
3804 case 51: +
3805 this.$ = $$[$0 - 3]; +
3806 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'round'); +
3807 break; +
3808 +
3809 case 52: +
3810 this.$ = $$[$0 - 4]; +
3811 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'round'); +
3812 break; +
3813 +
3814 case 53: +
3815 this.$ = $$[$0 - 3]; +
3816 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'diamond'); +
3817 break; +
3818 +
3819 case 54: +
3820 this.$ = $$[$0 - 4]; +
3821 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'diamond'); +
3822 break; +
3823 +
3824 case 55: +
3825 this.$ = $$[$0 - 3]; +
3826 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'odd'); +
3827 break; +
3828 +
3829 case 56: +
3830 this.$ = $$[$0 - 4]; +
3831 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'odd'); +
3832 break; +
3833 +
3834 case 57: +
3835 this.$ = $$[$0]; +
3836 yy.addVertex($$[$0]); +
3837 break; +
3838 +
3839 case 58: +
3840 this.$ = $$[$0 - 1]; +
3841 yy.addVertex($$[$0 - 1]); +
3842 break; +
3843 +
3844 case 60: +
3845 case 95: +
3846 case 98: +
3847 case 111: +
3848 this.$ = $$[$0 - 1] + '' + $$[$0]; +
3849 break; +
3850 +
3851 case 63: +
3852 this.$ = 'v'; +
3853 break; +
3854 +
3855 case 64: +
3856 this.$ = '-'; +
3857 break; +
3858 +
3859 case 65: +
3860 $$[$0 - 1].text = $$[$0]; +
3861 this.$ = $$[$0 - 1]; +
3862 break; +
3863 +
3864 case 66: +
3865 case 67: +
3866 $$[$0 - 2].text = $$[$0 - 1]; +
3867 this.$ = $$[$0 - 2]; +
3868 break; +
3869 +
3870 case 68: +
3871 this.$ = $$[$0]; +
3872 break; +
3873 +
3874 case 69: +
3875 this.$ = { +
3876 "type": "arrow", +
3877 "stroke": "normal", +
3878 "text": $$[$0 - 1] +
3879 }; +
3880 break; +
3881 +
3882 case 70: +
3883 this.$ = { +
3884 "type": "arrow_circle", +
3885 "stroke": "normal", +
3886 "text": $$[$0 - 1] +
3887 }; +
3888 break; +
3889 +
3890 case 71: +
3891 this.$ = { +
3892 "type": "arrow_cross", +
3893 "stroke": "normal", +
3894 "text": $$[$0 - 1] +
3895 }; +
3896 break; +
3897 +
3898 case 72: +
3899 this.$ = { +
3900 "type": "arrow_open", +
3901 "stroke": "normal", +
3902 "text": $$[$0 - 1] +
3903 }; +
3904 break; +
3905 +
3906 case 73: +
3907 this.$ = { +
3908 "type": "arrow", +
3909 "stroke": "dotted", +
3910 "text": $$[$0 - 1] +
3911 }; +
3912 break; +
3913 +
3914 case 74: +
3915 this.$ = { +
3916 "type": "arrow_circle", +
3917 "stroke": "dotted", +
3918 "text": $$[$0 - 1] +
3919 }; +
3920 break; +
3921 +
3922 case 75: +
3923 this.$ = { +
3924 "type": "arrow_cross", +
3925 "stroke": "dotted", +
3926 "text": $$[$0 - 1] +
3927 }; +
3928 break; +
3929 +
3930 case 76: +
3931 this.$ = { +
3932 "type": "arrow_open", +
3933 "stroke": "dotted", +
3934 "text": $$[$0 - 1] +
3935 }; +
3936 break; +
3937 +
3938 case 77: +
3939 this.$ = { +
3940 "type": "arrow", +
3941 "stroke": "thick", +
3942 "text": $$[$0 - 1] +
3943 }; +
3944 break; +
3945 +
3946 case 78: +
3947 this.$ = { +
3948 "type": "arrow_circle", +
3949 "stroke": "thick", +
3950 "text": $$[$0 - 1] +
3951 }; +
3952 break; +
3953 +
3954 case 79: +
3955 this.$ = { +
3956 "type": "arrow_cross", +
3957 "stroke": "thick", +
3958 "text": $$[$0 - 1] +
3959 }; +
3960 break; +
3961 +
3962 case 80: +
3963 this.$ = { +
3964 "type": "arrow_open", +
3965 "stroke": "thick", +
3966 "text": $$[$0 - 1] +
3967 }; +
3968 break; +
3969 +
3970 case 81: +
3971 this.$ = { +
3972 "type": "arrow", +
3973 "stroke": "normal" +
3974 }; +
3975 break; +
3976 +
3977 case 82: +
3978 this.$ = { +
3979 "type": "arrow_circle", +
3980 "stroke": "normal" +
3981 }; +
3982 break; +
3983 +
3984 case 83: +
3985 this.$ = { +
3986 "type": "arrow_cross", +
3987 "stroke": "normal" +
3988 }; +
3989 break; +
3990 +
3991 case 84: +
3992 this.$ = { +
3993 "type": "arrow_open", +
3994 "stroke": "normal" +
3995 }; +
3996 break; +
3997 +
3998 case 85: +
3999 this.$ = { +
4000 "type": "arrow", +
4001 "stroke": "dotted" +
4002 }; +
4003 break; +
4004 +
4005 case 86: +
4006 this.$ = { +
4007 "type": "arrow_circle", +
4008 "stroke": "dotted" +
4009 }; +
4010 break; +
4011 +
4012 case 87: +
4013 this.$ = { +
4014 "type": "arrow_cross", +
4015 "stroke": "dotted" +
4016 }; +
4017 break; +
4018 +
4019 case 88: +
4020 this.$ = { +
4021 "type": "arrow_open", +
4022 "stroke": "dotted" +
4023 }; +
4024 break; +
4025 +
4026 case 89: +
4027 this.$ = { +
4028 "type": "arrow", +
4029 "stroke": "thick" +
4030 }; +
4031 break; +
4032 +
4033 case 90: +
4034 this.$ = { +
4035 "type": "arrow_circle", +
4036 "stroke": "thick" +
4037 }; +
4038 break; +
4039 +
4040 case 91: +
4041 this.$ = { +
4042 "type": "arrow_cross", +
4043 "stroke": "thick" +
4044 }; +
4045 break; +
4046 +
4047 case 92: +
4048 this.$ = { +
4049 "type": "arrow_open", +
4050 "stroke": "thick" +
4051 }; +
4052 break; +
4053 +
4054 case 93: +
4055 this.$ = $$[$0 - 1]; +
4056 break; +
4057 +
4058 case 112: +
4059 case 113: +
4060 this.$ = $$[$0 - 4]; +
4061 yy.addClass($$[$0 - 2], $$[$0]); +
4062 break; +
4063 +
4064 case 114: +
4065 this.$ = $$[$0 - 4]; +
4066 yy.setClass($$[$0 - 2], $$[$0]); +
4067 break; +
4068 +
4069 case 115: +
4070 this.$ = $$[$0 - 4]; +
4071 yy.setClickEvent($$[$0 - 2], $$[$0], undefined); +
4072 break; +
4073 +
4074 case 116: +
4075 this.$ = $$[$0 - 6]; +
4076 yy.setClickEvent($$[$0 - 4], $$[$0 - 2], $$[$0]); +
4077 break; +
4078 +
4079 case 117: +
4080 this.$ = $$[$0 - 4]; +
4081 yy.setLink($$[$0 - 2], $$[$0], undefined); +
4082 break; +
4083 +
4084 case 118: +
4085 this.$ = $$[$0 - 6]; +
4086 yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); +
4087 break; +
4088 +
4089 case 119: +
4090 this.$ = $$[$0 - 4]; +
4091 yy.addVertex($$[$0 - 2], undefined, undefined, $$[$0]); +
4092 break; +
4093 +
4094 case 120: +
4095 case 122: +
4096 this.$ = $$[$0 - 4]; +
4097 yy.updateLink($$[$0 - 2], $$[$0]); +
4098 break; +
4099 +
4100 case 121: +
4101 this.$ = $$[$0 - 4]; +
4102 yy.updateLink([$$[$0 - 2]], $$[$0]); +
4103 break; +
4104 +
4105 case 123: +
4106 this.$ = $$[$0 - 8]; +
4107 yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); +
4108 yy.updateLink([$$[$0 - 6]], $$[$0]); +
4109 break; +
4110 +
4111 case 124: +
4112 this.$ = $$[$0 - 8]; +
4113 yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); +
4114 yy.updateLink($$[$0 - 6], $$[$0]); +
4115 break; +
4116 +
4117 case 125: +
4118 this.$ = $$[$0 - 6]; +
4119 yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); +
4120 break; +
4121 +
4122 case 126: +
4123 this.$ = $$[$0 - 6]; +
4124 yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); +
4125 break; +
4126 +
4127 case 128: +
4128 case 130: +
4129 this.$ = [$$[$0]]; +
4130 break; +
4131 +
4132 case 129: +
4133 case 131: +
4134 $$[$0 - 2].push($$[$0]); +
4135 this.$ = $$[$0 - 2]; +
4136 break; +
4137 +
4138 case 133: +
4139 this.$ = $$[$0 - 1] + $$[$0]; +
4140 break; +
4141 } +
4142 }, +
4143 table: [{ +
4144 3: 1, +
4145 4: 2, +
4146 9: $V0, +
4147 10: $V1, +
4148 12: $V2 +
4149 }, { +
4150 1: [3] +
4151 }, o($V3, $V4, { +
4152 5: 6 +
4153 }), { +
4154 4: 7, +
4155 9: $V0, +
4156 10: $V1, +
4157 12: $V2 +
4158 }, { +
4159 4: 8, +
4160 9: $V0, +
4161 10: $V1, +
4162 12: $V2 +
4163 }, { +
4164 10: [1, 9] +
4165 }, { +
4166 1: [2, 1], +
4167 6: 10, +
4168 7: 11, +
4169 8: $V5, +
4170 9: $V6, +
4171 10: $V7, +
4172 11: $V8, +
4173 13: $V9, +
4174 18: $Va, +
4175 23: 16, +
4176 25: 17, +
4177 26: 18, +
4178 27: 19, +
4179 28: 20, +
4180 29: 21, +
4181 30: $Vb, +
4182 31: 29, +
4183 37: 23, +
4184 45: 30, +
4185 46: 32, +
4186 47: $Vc, +
4187 71: $Vd, +
4188 72: $Ve, +
4189 73: $Vf, +
4190 74: $Vg, +
4191 75: $Vh, +
4192 85: $Vi, +
4193 86: $Vj, +
4194 89: $Vk, +
4195 90: $Vl, +
4196 92: $Vm, +
4197 93: $Vn, +
4198 95: $Vo, +
4199 96: $Vp, +
4200 97: $Vq, +
4201 98: $Vr, +
4202 99: $Vs +
4203 }, o($V3, [2, 9]), o($V3, [2, 10]), { +
4204 13: [1, 46], +
4205 15: [1, 47], +
4206 16: [1, 48], +
4207 17: [1, 49], +
4208 18: [1, 50] +
4209 }, o($Vt, [2, 3]), o($Vt, [2, 4]), o($Vt, [2, 5]), o($Vt, [2, 6]), o($Vt, [2, 7]), o($Vt, [2, 8]), { +
4210 8: $Vu, +
4211 9: $Vv, +
4212 11: $Vw, +
4213 24: 51 +
4214 }, { +
4215 8: $Vu, +
4216 9: $Vv, +
4217 11: $Vw, +
4218 24: 55 +
4219 }, { +
4220 8: $Vu, +
4221 9: $Vv, +
4222 11: $Vw, +
4223 24: 56 +
4224 }, { +
4225 8: $Vu, +
4226 9: $Vv, +
4227 11: $Vw, +
4228 24: 57 +
4229 }, { +
4230 8: $Vu, +
4231 9: $Vv, +
4232 11: $Vw, +
4233 24: 58 +
4234 }, { +
4235 8: $Vu, +
4236 9: $Vv, +
4237 11: $Vw, +
4238 24: 59 +
4239 }, { +
4240 8: $Vu, +
4241 9: $Vv, +
4242 10: [1, 60], +
4243 11: $Vw, +
4244 24: 61 +
4245 }, o($Vx, [2, 44], { +
4246 38: 62, +
4247 48: 63, +
4248 51: [1, 64], +
4249 52: [1, 67], +
4250 53: [1, 68], +
4251 54: [1, 69], +
4252 55: [1, 70], +
4253 56: [1, 65], +
4254 57: [1, 71], +
4255 58: [1, 72], +
4256 59: [1, 73], +
4257 60: [1, 74], +
4258 61: [1, 66], +
4259 62: [1, 75], +
4260 63: [1, 76], +
4261 64: [1, 77], +
4262 65: [1, 78] +
4263 }), { +
4264 10: [1, 79] +
4265 }, { +
4266 10: [1, 80] +
4267 }, { +
4268 10: [1, 81] +
4269 }, { +
4270 10: [1, 82] +
4271 }, { +
4272 10: [1, 83] +
4273 }, o($Vy, [2, 57], { +
4274 46: 32, +
4275 21: 89, +
4276 45: 90, +
4277 10: $Vz, +
4278 13: $V9, +
4279 15: [1, 88], +
4280 18: $Va, +
4281 32: [1, 84], +
4282 39: [1, 85], +
4283 41: [1, 86], +
4284 43: [1, 87], +
4285 47: $Vc, +
4286 85: $Vi, +
4287 86: $Vj, +
4288 89: $Vk, +
4289 90: $Vl, +
4290 92: $Vm, +
4291 93: $Vn, +
4292 95: $Vo, +
4293 96: $Vp, +
4294 97: $Vq, +
4295 98: $Vr, +
4296 99: $Vs +
4297 }), o($VA, [2, 59]), o($VA, [2, 61]), o($VA, [2, 62]), o($VA, [2, 63]), o($VA, [2, 64]), o($VB, [2, 158]), o($VB, [2, 159]), o($VB, [2, 160]), o($VB, [2, 161]), o($VB, [2, 162]), o($VB, [2, 163]), o($VB, [2, 164]), o($VB, [2, 165]), o($VB, [2, 166]), o($VB, [2, 167]), o($VB, [2, 168]), { +
4298 8: $VC, +
4299 9: $VD, +
4300 10: $Vz, +
4301 14: 92, +
4302 21: 95 +
4303 }, { +
4304 8: $VC, +
4305 9: $VD, +
4306 10: $Vz, +
4307 14: 96, +
4308 21: 95 +
4309 }, { +
4310 8: $VC, +
4311 9: $VD, +
4312 10: $Vz, +
4313 14: 97, +
4314 21: 95 +
4315 }, { +
4316 8: $VC, +
4317 9: $VD, +
4318 10: $Vz, +
4319 14: 98, +
4320 21: 95 +
4321 }, { +
4322 8: $VC, +
4323 9: $VD, +
4324 10: $Vz, +
4325 14: 99, +
4326 21: 95 +
4327 }, o($Vt, [2, 30]), o($Vt, [2, 40]), o($Vt, [2, 41]), o($Vt, [2, 42]), o($Vt, [2, 31]), o($Vt, [2, 32]), o($Vt, [2, 33]), o($Vt, [2, 34]), o($Vt, [2, 35]), { +
4328 13: $V9, +
4329 18: $Va, +
4330 31: 100, +
4331 36: [1, 101], +
4332 45: 30, +
4333 46: 32, +
4334 47: $Vc, +
4335 85: $Vi, +
4336 86: $Vj, +
4337 89: $Vk, +
4338 90: $Vl, +
4339 92: $Vm, +
4340 93: $Vn, +
4341 95: $Vo, +
4342 96: $Vp, +
4343 97: $Vq, +
4344 98: $Vr, +
4345 99: $Vs +
4346 }, o($VE, $V4, { +
4347 5: 102 +
4348 }), { +
4349 13: $V9, +
4350 18: $Va, +
4351 31: 29, +
4352 37: 103, +
4353 45: 30, +
4354 46: 32, +
4355 47: $Vc, +
4356 85: $Vi, +
4357 86: $Vj, +
4358 89: $Vk, +
4359 90: $Vl, +
4360 92: $Vm, +
4361 93: $Vn, +
4362 95: $Vo, +
4363 96: $Vp, +
4364 97: $Vq, +
4365 98: $Vr, +
4366 99: $Vs +
4367 }, o($VF, [2, 68], { +
4368 49: 104, +
4369 50: [1, 105], +
4370 66: [1, 106] +
4371 }), { +
4372 10: $VG, +
4373 12: $VH, +
4374 13: $VI, +
4375 15: $VJ, +
4376 16: $VK, +
4377 17: $VL, +
4378 18: $VM, +
4379 30: $VN, +
4380 33: 107, +
4381 35: $VO, +
4382 36: $VP, +
4383 46: 117, +
4384 47: $VQ, +
4385 51: $VR, +
4386 61: $VS, +
4387 67: 108, +
4388 70: 120, +
4389 71: $VT, +
4390 72: $VU, +
4391 73: $VV, +
4392 74: $VW, +
4393 75: $VX, +
4394 77: 110, +
4395 78: $VY, +
4396 84: $VZ, +
4397 85: $Vi, +
4398 86: $Vj, +
4399 89: $Vk, +
4400 90: $Vl, +
4401 92: $Vm, +
4402 93: $Vn, +
4403 95: $Vo, +
4404 96: $Vp, +
4405 97: $Vq, +
4406 98: $Vr, +
4407 99: $Vs +
4408 }, { +
4409 10: $VG, +
4410 12: $VH, +
4411 13: $VI, +
4412 15: $VJ, +
4413 16: $VK, +
4414 17: $VL, +
4415 18: $VM, +
4416 30: $VN, +
4417 33: 132, +
4418 35: $VO, +
4419 36: $VP, +
4420 46: 117, +
4421 47: $VQ, +
4422 51: $VR, +
4423 61: $VS, +
4424 67: 108, +
4425 70: 120, +
4426 71: $VT, +
4427 72: $VU, +
4428 73: $VV, +
4429 74: $VW, +
4430 75: $VX, +
4431 77: 110, +
4432 78: $VY, +
4433 84: $VZ, +
4434 85: $Vi, +
4435 86: $Vj, +
4436 89: $Vk, +
4437 90: $Vl, +
4438 92: $Vm, +
4439 93: $Vn, +
4440 95: $Vo, +
4441 96: $Vp, +
4442 97: $Vq, +
4443 98: $Vr, +
4444 99: $Vs +
4445 }, { +
4446 10: $VG, +
4447 12: $VH, +
4448 13: $VI, +
4449 15: $VJ, +
4450 16: $VK, +
4451 17: $VL, +
4452 18: $VM, +
4453 30: $VN, +
4454 33: 133, +
4455 35: $VO, +
4456 36: $VP, +
4457 46: 117, +
4458 47: $VQ, +
4459 51: $VR, +
4460 61: $VS, +
4461 67: 108, +
4462 70: 120, +
4463 71: $VT, +
4464 72: $VU, +
4465 73: $VV, +
4466 74: $VW, +
4467 75: $VX, +
4468 77: 110, +
4469 78: $VY, +
4470 84: $VZ, +
4471 85: $Vi, +
4472 86: $Vj, +
4473 89: $Vk, +
4474 90: $Vl, +
4475 92: $Vm, +
4476 93: $Vn, +
4477 95: $Vo, +
4478 96: $Vp, +
4479 97: $Vq, +
4480 98: $Vr, +
4481 99: $Vs +
4482 }, o($V_, [2, 81]), o($V_, [2, 82]), o($V_, [2, 83]), o($V_, [2, 84]), o($V_, [2, 85]), o($V_, [2, 86]), o($V_, [2, 87]), o($V_, [2, 88]), o($V_, [2, 89]), o($V_, [2, 90]), o($V_, [2, 91]), o($V_, [2, 92]), { +
4483 13: $V9, +
4484 18: $Va, +
4485 31: 134, +
4486 45: 30, +
4487 46: 32, +
4488 47: $Vc, +
4489 80: [1, 135], +
4490 85: $Vi, +
4491 86: $Vj, +
4492 89: $Vk, +
4493 90: $Vl, +
4494 92: $Vm, +
4495 93: $Vn, +
4496 95: $Vo, +
4497 96: $Vp, +
4498 97: $Vq, +
4499 98: $Vr, +
4500 99: $Vs +
4501 }, { +
4502 78: [1, 136], +
4503 81: 137, +
4504 85: [1, 138] +
4505 }, { +
4506 13: $V9, +
4507 18: $Va, +
4508 31: 140, +
4509 45: 30, +
4510 46: 32, +
4511 47: $Vc, +
4512 78: [1, 139], +
4513 85: $Vi, +
4514 86: $Vj, +
4515 89: $Vk, +
4516 90: $Vl, +
4517 92: $Vm, +
4518 93: $Vn, +
4519 95: $Vo, +
4520 96: $Vp, +
4521 97: $Vq, +
4522 98: $Vr, +
4523 99: $Vs +
4524 }, { +
4525 13: $V9, +
4526 18: $Va, +
4527 31: 141, +
4528 45: 30, +
4529 46: 32, +
4530 47: $Vc, +
4531 85: $Vi, +
4532 86: $Vj, +
4533 89: $Vk, +
4534 90: $Vl, +
4535 92: $Vm, +
4536 93: $Vn, +
4537 95: $Vo, +
4538 96: $Vp, +
4539 97: $Vq, +
4540 98: $Vr, +
4541 99: $Vs +
4542 }, { +
4543 13: $V9, +
4544 18: $Va, +
4545 31: 142, +
4546 45: 30, +
4547 46: 32, +
4548 47: $Vc, +
4549 85: $Vi, +
4550 86: $Vj, +
4551 89: $Vk, +
4552 90: $Vl, +
4553 92: $Vm, +
4554 93: $Vn, +
4555 95: $Vo, +
4556 96: $Vp, +
4557 97: $Vq, +
4558 98: $Vr, +
4559 99: $Vs +
4560 }, { +
4561 10: $VG, +
4562 12: $VH, +
4563 13: $VI, +
4564 15: $VJ, +
4565 16: $VK, +
4566 17: $VL, +
4567 18: $VM, +
4568 30: $VN, +
4569 33: 143, +
4570 35: $VO, +
4571 36: $VP, +
4572 46: 117, +
4573 47: $VQ, +
4574 51: $VR, +
4575 61: $VS, +
4576 67: 108, +
4577 70: 120, +
4578 71: $VT, +
4579 72: $VU, +
4580 73: $VV, +
4581 74: $VW, +
4582 75: $VX, +
4583 77: 110, +
4584 78: $VY, +
4585 84: $VZ, +
4586 85: $Vi, +
4587 86: $Vj, +
4588 89: $Vk, +
4589 90: $Vl, +
4590 92: $Vm, +
4591 93: $Vn, +
4592 95: $Vo, +
4593 96: $Vp, +
4594 97: $Vq, +
4595 98: $Vr, +
4596 99: $Vs +
4597 }, { +
4598 10: $VG, +
4599 12: $VH, +
4600 13: $VI, +
4601 15: $VJ, +
4602 16: $VK, +
4603 17: $VL, +
4604 18: $VM, +
4605 30: $VN, +
4606 33: 145, +
4607 35: $VO, +
4608 36: $VP, +
4609 39: [1, 144], +
4610 46: 117, +
4611 47: $VQ, +
4612 51: $VR, +
4613 61: $VS, +
4614 67: 108, +
4615 70: 120, +
4616 71: $VT, +
4617 72: $VU, +
4618 73: $VV, +
4619 74: $VW, +
4620 75: $VX, +
4621 77: 110, +
4622 78: $VY, +
4623 84: $VZ, +
4624 85: $Vi, +
4625 86: $Vj, +
4626 89: $Vk, +
4627 90: $Vl, +
4628 92: $Vm, +
4629 93: $Vn, +
4630 95: $Vo, +
4631 96: $Vp, +
4632 97: $Vq, +
4633 98: $Vr, +
4634 99: $Vs +
4635 }, { +
4636 10: $VG, +
4637 12: $VH, +
4638 13: $VI, +
4639 15: $VJ, +
4640 16: $VK, +
4641 17: $VL, +
4642 18: $VM, +
4643 30: $VN, +
4644 33: 146, +
4645 35: $VO, +
4646 36: $VP, +
4647 46: 117, +
4648 47: $VQ, +
4649 51: $VR, +
4650 61: $VS, +
4651 67: 108, +
4652 70: 120, +
4653 71: $VT, +
4654 72: $VU, +
4655 73: $VV, +
4656 74: $VW, +
4657 75: $VX, +
4658 77: 110, +
4659 78: $VY, +
4660 84: $VZ, +
4661 85: $Vi, +
4662 86: $Vj, +
4663 89: $Vk, +
4664 90: $Vl, +
4665 92: $Vm, +
4666 93: $Vn, +
4667 95: $Vo, +
4668 96: $Vp, +
4669 97: $Vq, +
4670 98: $Vr, +
4671 99: $Vs +
4672 }, { +
4673 10: $VG, +
4674 12: $VH, +
4675 13: $VI, +
4676 15: $VJ, +
4677 16: $VK, +
4678 17: $VL, +
4679 18: $VM, +
4680 30: $VN, +
4681 33: 147, +
4682 35: $VO, +
4683 36: $VP, +
4684 46: 117, +
4685 47: $VQ, +
4686 51: $VR, +
4687 61: $VS, +
4688 67: 108, +
4689 70: 120, +
4690 71: $VT, +
4691 72: $VU, +
4692 73: $VV, +
4693 74: $VW, +
4694 75: $VX, +
4695 77: 110, +
4696 78: $VY, +
4697 84: $VZ, +
4698 85: $Vi, +
4699 86: $Vj, +
4700 89: $Vk, +
4701 90: $Vl, +
4702 92: $Vm, +
4703 93: $Vn, +
4704 95: $Vo, +
4705 96: $Vp, +
4706 97: $Vq, +
4707 98: $Vr, +
4708 99: $Vs +
4709 }, { +
4710 10: $VG, +
4711 12: $VH, +
4712 13: $VI, +
4713 15: $VJ, +
4714 16: $VK, +
4715 17: $VL, +
4716 18: $VM, +
4717 30: $VN, +
4718 33: 148, +
4719 35: $VO, +
4720 36: $VP, +
4721 46: 117, +
4722 47: $VQ, +
4723 51: $VR, +
4724 61: $VS, +
4725 67: 108, +
4726 70: 120, +
4727 71: $VT, +
4728 72: $VU, +
4729 73: $VV, +
4730 74: $VW, +
4731 75: $VX, +
4732 77: 110, +
4733 78: $VY, +
4734 84: $VZ, +
4735 85: $Vi, +
4736 86: $Vj, +
4737 89: $Vk, +
4738 90: $Vl, +
4739 92: $Vm, +
4740 93: $Vn, +
4741 95: $Vo, +
4742 96: $Vp, +
4743 97: $Vq, +
4744 98: $Vr, +
4745 99: $Vs +
4746 }, o($Vy, [2, 58]), o($VA, [2, 60]), o($Vy, [2, 29], { +
4747 21: 149, +
4748 10: $Vz +
4749 }), o($V3, [2, 11]), o($V3, [2, 21]), o($V3, [2, 22]), { +
4750 9: [1, 150] +
4751 }, o($V3, [2, 12]), o($V3, [2, 13]), o($V3, [2, 14]), o($V3, [2, 15]), { +
4752 8: $Vu, +
4753 9: $Vv, +
4754 11: $Vw, +
4755 13: $V9, +
4756 18: $Va, +
4757 24: 152, +
4758 32: [1, 151], +
4759 45: 90, +
4760 46: 32, +
4761 47: $Vc, +
4762 85: $Vi, +
4763 86: $Vj, +
4764 89: $Vk, +
4765 90: $Vl, +
4766 92: $Vm, +
4767 93: $Vn, +
4768 95: $Vo, +
4769 96: $Vp, +
4770 97: $Vq, +
4771 98: $Vr, +
4772 99: $Vs +
4773 }, { +
4774 8: $Vu, +
4775 9: $Vv, +
4776 11: $Vw, +
4777 24: 153 +
4778 }, { +
4779 6: 10, +
4780 7: 11, +
4781 8: $V5, +
4782 9: $V6, +
4783 10: $V7, +
4784 11: $V8, +
4785 13: $V9, +
4786 18: $Va, +
4787 23: 16, +
4788 25: 17, +
4789 26: 18, +
4790 27: 19, +
4791 28: 20, +
4792 29: 21, +
4793 30: $Vb, +
4794 31: 29, +
4795 35: [1, 154], +
4796 37: 23, +
4797 45: 30, +
4798 46: 32, +
4799 47: $Vc, +
4800 71: $Vd, +
4801 72: $Ve, +
4802 73: $Vf, +
4803 74: $Vg, +
4804 75: $Vh, +
4805 85: $Vi, +
4806 86: $Vj, +
4807 89: $Vk, +
4808 90: $Vl, +
4809 92: $Vm, +
4810 93: $Vn, +
4811 95: $Vo, +
4812 96: $Vp, +
4813 97: $Vq, +
4814 98: $Vr, +
4815 99: $Vs +
4816 }, o($Vx, [2, 43]), o($VF, [2, 65], { +
4817 10: [1, 155] +
4818 }), { +
4819 10: [1, 156] +
4820 }, { +
4821 10: $VG, +
4822 12: $VH, +
4823 13: $VI, +
4824 15: $VJ, +
4825 16: $VK, +
4826 17: $VL, +
4827 18: $VM, +
4828 30: $VN, +
4829 33: 157, +
4830 35: $VO, +
4831 36: $VP, +
4832 46: 117, +
4833 47: $VQ, +
4834 51: $VR, +
4835 61: $VS, +
4836 67: 108, +
4837 70: 120, +
4838 71: $VT, +
4839 72: $VU, +
4840 73: $VV, +
4841 74: $VW, +
4842 75: $VX, +
4843 77: 110, +
4844 78: $VY, +
4845 84: $VZ, +
4846 85: $Vi, +
4847 86: $Vj, +
4848 89: $Vk, +
4849 90: $Vl, +
4850 92: $Vm, +
4851 93: $Vn, +
4852 95: $Vo, +
4853 96: $Vp, +
4854 97: $Vq, +
4855 98: $Vr, +
4856 99: $Vs +
4857 }, { +
4858 10: $VG, +
4859 12: $VH, +
4860 13: $VI, +
4861 15: $VJ, +
4862 16: $VK, +
4863 17: $VL, +
4864 18: $VM, +
4865 30: $VN, +
4866 35: $VO, +
4867 46: 117, +
4868 47: $VQ, +
4869 51: $VR, +
4870 52: [1, 158], +
4871 53: [1, 159], +
4872 54: [1, 160], +
4873 55: [1, 161], +
4874 61: $VS, +
4875 67: 162, +
4876 70: 120, +
4877 71: $VT, +
4878 72: $VU, +
4879 73: $VV, +
4880 74: $VW, +
4881 75: $VX, +
4882 77: 110, +
4883 78: $VY, +
4884 84: $VZ, +
4885 85: $Vi, +
4886 86: $Vj, +
4887 89: $Vk, +
4888 90: $Vl, +
4889 92: $Vm, +
4890 93: $Vn, +
4891 95: $Vo, +
4892 96: $Vp, +
4893 97: $Vq, +
4894 98: $Vr, +
4895 99: $Vs +
4896 }, o($V$, [2, 94]), o($V$, [2, 96]), o($V$, [2, 147]), o($V$, [2, 148]), o($V$, [2, 149]), o($V$, [2, 150]), o($V$, [2, 151]), o($V$, [2, 152]), o($V$, [2, 153]), o($V$, [2, 154]), o($V$, [2, 155]), o($V$, [2, 156]), o($V$, [2, 157]), o($V$, [2, 99]), o($V$, [2, 100]), o($V$, [2, 101]), o($V$, [2, 102]), o($V$, [2, 103]), o($V$, [2, 104]), o($V$, [2, 105]), o($V$, [2, 106]), o($V$, [2, 107]), o($V$, [2, 108]), o($V$, [2, 109]), { +
4897 10: $VG, +
4898 12: $VH, +
4899 13: $VI, +
4900 15: $VJ, +
4901 16: $VK, +
4902 17: $VL, +
4903 18: $VM, +
4904 30: $VN, +
4905 35: $VO, +
4906 46: 117, +
4907 47: $VQ, +
4908 51: $VR, +
4909 57: [1, 163], +
4910 58: [1, 164], +
4911 59: [1, 165], +
4912 60: [1, 166], +
4913 61: $VS, +
4914 67: 162, +
4915 70: 120, +
4916 71: $VT, +
4917 72: $VU, +
4918 73: $VV, +
4919 74: $VW, +
4920 75: $VX, +
4921 77: 110, +
4922 78: $VY, +
4923 84: $VZ, +
4924 85: $Vi, +
4925 86: $Vj, +
4926 89: $Vk, +
4927 90: $Vl, +
4928 92: $Vm, +
4929 93: $Vn, +
4930 95: $Vo, +
4931 96: $Vp, +
4932 97: $Vq, +
4933 98: $Vr, +
4934 99: $Vs +
4935 }, { +
4936 10: $VG, +
4937 12: $VH, +
4938 13: $VI, +
4939 15: $VJ, +
4940 16: $VK, +
4941 17: $VL, +
4942 18: $VM, +
4943 30: $VN, +
4944 35: $VO, +
4945 46: 117, +
4946 47: $VQ, +
4947 51: $VR, +
4948 61: $VS, +
4949 62: [1, 167], +
4950 63: [1, 168], +
4951 64: [1, 169], +
4952 65: [1, 170], +
4953 67: 162, +
4954 70: 120, +
4955 71: $VT, +
4956 72: $VU, +
4957 73: $VV, +
4958 74: $VW, +
4959 75: $VX, +
4960 77: 110, +
4961 78: $VY, +
4962 84: $VZ, +
4963 85: $Vi, +
4964 86: $Vj, +
4965 89: $Vk, +
4966 90: $Vl, +
4967 92: $Vm, +
4968 93: $Vn, +
4969 95: $Vo, +
4970 96: $Vp, +
4971 97: $Vq, +
4972 98: $Vr, +
4973 99: $Vs +
4974 }, { +
4975 10: [1, 171], +
4976 13: $V9, +
4977 18: $Va, +
4978 45: 90, +
4979 46: 32, +
4980 47: $Vc, +
4981 85: $Vi, +
4982 86: $Vj, +
4983 89: $Vk, +
4984 90: $Vl, +
4985 92: $Vm, +
4986 93: $Vn, +
4987 95: $Vo, +
4988 96: $Vp, +
4989 97: $Vq, +
4990 98: $Vr, +
4991 99: $Vs +
4992 }, { +
4993 10: [1, 172] +
4994 }, { +
4995 10: [1, 173] +
4996 }, { +
4997 10: [1, 174], +
4998 86: [1, 175] +
4999 }, o($V01, [2, 128]), { +
5000 10: [1, 176] +
5001 }, { +
5002 10: [1, 177], +
5003 13: $V9, +
5004 18: $Va, +
5005 45: 90, +
5006 46: 32, +
5007 47: $Vc, +
5008 85: $Vi, +
5009 86: $Vj, +
5010 89: $Vk, +
5011 90: $Vl, +
5012 92: $Vm, +
5013 93: $Vn, +
5014 95: $Vo, +
5015 96: $Vp, +
5016 97: $Vq, +
5017 98: $Vr, +
5018 99: $Vs +
5019 }, { +
5020 10: [1, 178], +
5021 13: $V9, +
5022 18: $Va, +
5023 45: 90, +
5024 46: 32, +
5025 47: $Vc, +
5026 85: $Vi, +
5027 86: $Vj, +
5028 89: $Vk, +
5029 90: $Vl, +
5030 92: $Vm, +
5031 93: $Vn, +
5032 95: $Vo, +
5033 96: $Vp, +
5034 97: $Vq, +
5035 98: $Vr, +
5036 99: $Vs +
5037 }, { +
5038 10: [1, 179], +
5039 13: $V9, +
5040 18: $Va, +
5041 45: 90, +
5042 46: 32, +
5043 47: $Vc, +
5044 85: $Vi, +
5045 86: $Vj, +
5046 89: $Vk, +
5047 90: $Vl, +
5048 92: $Vm, +
5049 93: $Vn, +
5050 95: $Vo, +
5051 96: $Vp, +
5052 97: $Vq, +
5053 98: $Vr, +
5054 99: $Vs +
5055 }, { +
5056 10: $VG, +
5057 12: $VH, +
5058 13: $VI, +
5059 15: $VJ, +
5060 16: $VK, +
5061 17: $VL, +
5062 18: $VM, +
5063 30: $VN, +
5064 34: [1, 180], +
5065 35: $VO, +
5066 46: 117, +
5067 47: $VQ, +
5068 51: $VR, +
5069 61: $VS, +
5070 67: 162, +
5071 70: 120, +
5072 71: $VT, +
5073 72: $VU, +
5074 73: $VV, +
5075 74: $VW, +
5076 75: $VX, +
5077 77: 110, +
5078 78: $VY, +
5079 84: $VZ, +
5080 85: $Vi, +
5081 86: $Vj, +
5082 89: $Vk, +
5083 90: $Vl, +
5084 92: $Vm, +
5085 93: $Vn, +
5086 95: $Vo, +
5087 96: $Vp, +
5088 97: $Vq, +
5089 98: $Vr, +
5090 99: $Vs +
5091 }, { +
5092 10: $VG, +
5093 12: $VH, +
5094 13: $VI, +
5095 15: $VJ, +
5096 16: $VK, +
5097 17: $VL, +
5098 18: $VM, +
5099 30: $VN, +
5100 33: 181, +
5101 35: $VO, +
5102 36: $VP, +
5103 46: 117, +
5104 47: $VQ, +
5105 51: $VR, +
5106 61: $VS, +
5107 67: 108, +
5108 70: 120, +
5109 71: $VT, +
5110 72: $VU, +
5111 73: $VV, +
5112 74: $VW, +
5113 75: $VX, +
5114 77: 110, +
5115 78: $VY, +
5116 84: $VZ, +
5117 85: $Vi, +
5118 86: $Vj, +
5119 89: $Vk, +
5120 90: $Vl, +
5121 92: $Vm, +
5122 93: $Vn, +
5123 95: $Vo, +
5124 96: $Vp, +
5125 97: $Vq, +
5126 98: $Vr, +
5127 99: $Vs +
5128 }, { +
5129 10: $VG, +
5130 12: $VH, +
5131 13: $VI, +
5132 15: $VJ, +
5133 16: $VK, +
5134 17: $VL, +
5135 18: $VM, +
5136 30: $VN, +
5137 35: $VO, +
5138 40: [1, 182], +
5139 46: 117, +
5140 47: $VQ, +
5141 51: $VR, +
5142 61: $VS, +
5143 67: 162, +
5144 70: 120, +
5145 71: $VT, +
5146 72: $VU, +
5147 73: $VV, +
5148 74: $VW, +
5149 75: $VX, +
5150 77: 110, +
5151 78: $VY, +
5152 84: $VZ, +
5153 85: $Vi, +
5154 86: $Vj, +
5155 89: $Vk, +
5156 90: $Vl, +
5157 92: $Vm, +
5158 93: $Vn, +
5159 95: $Vo, +
5160 96: $Vp, +
5161 97: $Vq, +
5162 98: $Vr, +
5163 99: $Vs +
5164 }, { +
5165 10: $VG, +
5166 12: $VH, +
5167 13: $VI, +
5168 15: $VJ, +
5169 16: $VK, +
5170 17: $VL, +
5171 18: $VM, +
5172 30: $VN, +
5173 35: $VO, +
5174 42: [1, 183], +
5175 46: 117, +
5176 47: $VQ, +
5177 51: $VR, +
5178 61: $VS, +
5179 67: 162, +
5180 70: 120, +
5181 71: $VT, +
5182 72: $VU, +
5183 73: $VV, +
5184 74: $VW, +
5185 75: $VX, +
5186 77: 110, +
5187 78: $VY, +
5188 84: $VZ, +
5189 85: $Vi, +
5190 86: $Vj, +
5191 89: $Vk, +
5192 90: $Vl, +
5193 92: $Vm, +
5194 93: $Vn, +
5195 95: $Vo, +
5196 96: $Vp, +
5197 97: $Vq, +
5198 98: $Vr, +
5199 99: $Vs +
5200 }, { +
5201 10: $VG, +
5202 12: $VH, +
5203 13: $VI, +
5204 15: $VJ, +
5205 16: $VK, +
5206 17: $VL, +
5207 18: $VM, +
5208 30: $VN, +
5209 35: $VO, +
5210 44: [1, 184], +
5211 46: 117, +
5212 47: $VQ, +
5213 51: $VR, +
5214 61: $VS, +
5215 67: 162, +
5216 70: 120, +
5217 71: $VT, +
5218 72: $VU, +
5219 73: $VV, +
5220 74: $VW, +
5221 75: $VX, +
5222 77: 110, +
5223 78: $VY, +
5224 84: $VZ, +
5225 85: $Vi, +
5226 86: $Vj, +
5227 89: $Vk, +
5228 90: $Vl, +
5229 92: $Vm, +
5230 93: $Vn, +
5231 95: $Vo, +
5232 96: $Vp, +
5233 97: $Vq, +
5234 98: $Vr, +
5235 99: $Vs +
5236 }, { +
5237 10: $VG, +
5238 12: $VH, +
5239 13: $VI, +
5240 15: $VJ, +
5241 16: $VK, +
5242 17: $VL, +
5243 18: $VM, +
5244 30: $VN, +
5245 34: [1, 185], +
5246 35: $VO, +
5247 46: 117, +
5248 47: $VQ, +
5249 51: $VR, +
5250 61: $VS, +
5251 67: 162, +
5252 70: 120, +
5253 71: $VT, +
5254 72: $VU, +
5255 73: $VV, +
5256 74: $VW, +
5257 75: $VX, +
5258 77: 110, +
5259 78: $VY, +
5260 84: $VZ, +
5261 85: $Vi, +
5262 86: $Vj, +
5263 89: $Vk, +
5264 90: $Vl, +
5265 92: $Vm, +
5266 93: $Vn, +
5267 95: $Vo, +
5268 96: $Vp, +
5269 97: $Vq, +
5270 98: $Vr, +
5271 99: $Vs +
5272 }, o($Vy, [2, 28]), o($V3, [2, 23]), { +
5273 10: $VG, +
5274 12: $VH, +
5275 13: $VI, +
5276 15: $VJ, +
5277 16: $VK, +
5278 17: $VL, +
5279 18: $VM, +
5280 30: $VN, +
5281 33: 186, +
5282 35: $VO, +
5283 36: $VP, +
5284 46: 117, +
5285 47: $VQ, +
5286 51: $VR, +
5287 61: $VS, +
5288 67: 108, +
5289 70: 120, +
5290 71: $VT, +
5291 72: $VU, +
5292 73: $VV, +
5293 74: $VW, +
5294 75: $VX, +
5295 77: 110, +
5296 78: $VY, +
5297 84: $VZ, +
5298 85: $Vi, +
5299 86: $Vj, +
5300 89: $Vk, +
5301 90: $Vl, +
5302 92: $Vm, +
5303 93: $Vn, +
5304 95: $Vo, +
5305 96: $Vp, +
5306 97: $Vq, +
5307 98: $Vr, +
5308 99: $Vs +
5309 }, o($VE, $V4, { +
5310 5: 187 +
5311 }), o($VE, $V4, { +
5312 5: 188 +
5313 }), o($Vt, [2, 39]), o($VF, [2, 67]), o($VF, [2, 66]), { +
5314 10: $VG, +
5315 12: $VH, +
5316 13: $VI, +
5317 15: $VJ, +
5318 16: $VK, +
5319 17: $VL, +
5320 18: $VM, +
5321 30: $VN, +
5322 35: $VO, +
5323 46: 117, +
5324 47: $VQ, +
5325 51: $VR, +
5326 61: $VS, +
5327 66: [1, 189], +
5328 67: 162, +
5329 70: 120, +
5330 71: $VT, +
5331 72: $VU, +
5332 73: $VV, +
5333 74: $VW, +
5334 75: $VX, +
5335 77: 110, +
5336 78: $VY, +
5337 84: $VZ, +
5338 85: $Vi, +
5339 86: $Vj, +
5340 89: $Vk, +
5341 90: $Vl, +
5342 92: $Vm, +
5343 93: $Vn, +
5344 95: $Vo, +
5345 96: $Vp, +
5346 97: $Vq, +
5347 98: $Vr, +
5348 99: $Vs +
5349 }, o($VF, [2, 69]), o($VF, [2, 70]), o($VF, [2, 71]), o($VF, [2, 72]), o($V$, [2, 95]), o($VF, [2, 73]), o($VF, [2, 74]), o($VF, [2, 75]), o($VF, [2, 76]), o($VF, [2, 77]), o($VF, [2, 78]), o($VF, [2, 79]), o($VF, [2, 80]), { +
5350 10: $V11, +
5351 47: $V21, +
5352 71: $V31, +
5353 79: 190, +
5354 80: $V41, +
5355 84: $V51, +
5356 85: $V61, +
5357 87: 191, +
5358 88: 192, +
5359 89: $V71, +
5360 90: $V81, +
5361 91: $V91, +
5362 92: $Va1, +
5363 93: $Vb1 +
5364 }, { +
5365 10: $V11, +
5366 47: $V21, +
5367 71: $V31, +
5368 79: 204, +
5369 80: $V41, +
5370 84: $V51, +
5371 85: $V61, +
5372 87: 191, +
5373 88: 192, +
5374 89: $V71, +
5375 90: $V81, +
5376 91: $V91, +
5377 92: $Va1, +
5378 93: $Vb1 +
5379 }, { +
5380 10: $V11, +
5381 47: $V21, +
5382 71: $V31, +
5383 79: 205, +
5384 80: $V41, +
5385 82: [1, 206], +
5386 84: $V51, +
5387 85: $V61, +
5388 87: 191, +
5389 88: 192, +
5390 89: $V71, +
5391 90: $V81, +
5392 91: $V91, +
5393 92: $Va1, +
5394 93: $Vb1 +
5395 }, { +
5396 10: $V11, +
5397 47: $V21, +
5398 71: $V31, +
5399 79: 207, +
5400 80: $V41, +
5401 82: [1, 208], +
5402 84: $V51, +
5403 85: $V61, +
5404 87: 191, +
5405 88: 192, +
5406 89: $V71, +
5407 90: $V81, +
5408 91: $V91, +
5409 92: $Va1, +
5410 93: $Vb1 +
5411 }, { +
5412 85: [1, 209] +
5413 }, { +
5414 10: $V11, +
5415 47: $V21, +
5416 71: $V31, +
5417 79: 210, +
5418 80: $V41, +
5419 84: $V51, +
5420 85: $V61, +
5421 87: 191, +
5422 88: 192, +
5423 89: $V71, +
5424 90: $V81, +
5425 91: $V91, +
5426 92: $Va1, +
5427 93: $Vb1 +
5428 }, { +
5429 10: $V11, +
5430 47: $V21, +
5431 71: $V31, +
5432 79: 211, +
5433 80: $V41, +
5434 84: $V51, +
5435 85: $V61, +
5436 87: 191, +
5437 88: 192, +
5438 89: $V71, +
5439 90: $V81, +
5440 91: $V91, +
5441 92: $Va1, +
5442 93: $Vb1 +
5443 }, { +
5444 13: $V9, +
5445 18: $Va, +
5446 31: 212, +
5447 45: 30, +
5448 46: 32, +
5449 47: $Vc, +
5450 85: $Vi, +
5451 86: $Vj, +
5452 89: $Vk, +
5453 90: $Vl, +
5454 92: $Vm, +
5455 93: $Vn, +
5456 95: $Vo, +
5457 96: $Vp, +
5458 97: $Vq, +
5459 98: $Vr, +
5460 99: $Vs +
5461 }, { +
5462 13: $V9, +
5463 18: $Va, +
5464 31: 213, +
5465 36: [1, 214], +
5466 45: 30, +
5467 46: 32, +
5468 47: $Vc, +
5469 85: $Vi, +
5470 86: $Vj, +
5471 89: $Vk, +
5472 90: $Vl, +
5473 92: $Vm, +
5474 93: $Vn, +
5475 95: $Vo, +
5476 96: $Vp, +
5477 97: $Vq, +
5478 98: $Vr, +
5479 99: $Vs +
5480 }, o($Vy, [2, 45], { +
5481 21: 215, +
5482 10: $Vz +
5483 }), { +
5484 10: $VG, +
5485 12: $VH, +
5486 13: $VI, +
5487 15: $VJ, +
5488 16: $VK, +
5489 17: $VL, +
5490 18: $VM, +
5491 30: $VN, +
5492 35: $VO, +
5493 40: [1, 216], +
5494 46: 117, +
5495 47: $VQ, +
5496 51: $VR, +
5497 61: $VS, +
5498 67: 162, +
5499 70: 120, +
5500 71: $VT, +
5501 72: $VU, +
5502 73: $VV, +
5503 74: $VW, +
5504 75: $VX, +
5505 77: 110, +
5506 78: $VY, +
5507 84: $VZ, +
5508 85: $Vi, +
5509 86: $Vj, +
5510 89: $Vk, +
5511 90: $Vl, +
5512 92: $Vm, +
5513 93: $Vn, +
5514 95: $Vo, +
5515 96: $Vp, +
5516 97: $Vq, +
5517 98: $Vr, +
5518 99: $Vs +
5519 }, o($Vy, [2, 51], { +
5520 21: 217, +
5521 10: $Vz +
5522 }), o($Vy, [2, 49], { +
5523 21: 218, +
5524 10: $Vz +
5525 }), o($Vy, [2, 53], { +
5526 21: 219, +
5527 10: $Vz +
5528 }), o($Vy, [2, 55], { +
5529 21: 220, +
5530 10: $Vz +
5531 }), { +
5532 10: $VG, +
5533 12: $VH, +
5534 13: $VI, +
5535 15: $VJ, +
5536 16: $VK, +
5537 17: $VL, +
5538 18: $VM, +
5539 30: $VN, +
5540 34: [1, 221], +
5541 35: $VO, +
5542 46: 117, +
5543 47: $VQ, +
5544 51: $VR, +
5545 61: $VS, +
5546 67: 162, +
5547 70: 120, +
5548 71: $VT, +
5549 72: $VU, +
5550 73: $VV, +
5551 74: $VW, +
5552 75: $VX, +
5553 77: 110, +
5554 78: $VY, +
5555 84: $VZ, +
5556 85: $Vi, +
5557 86: $Vj, +
5558 89: $Vk, +
5559 90: $Vl, +
5560 92: $Vm, +
5561 93: $Vn, +
5562 95: $Vo, +
5563 96: $Vp, +
5564 97: $Vq, +
5565 98: $Vr, +
5566 99: $Vs +
5567 }, { +
5568 6: 10, +
5569 7: 11, +
5570 8: $V5, +
5571 9: $V6, +
5572 10: $V7, +
5573 11: $V8, +
5574 13: $V9, +
5575 18: $Va, +
5576 23: 16, +
5577 25: 17, +
5578 26: 18, +
5579 27: 19, +
5580 28: 20, +
5581 29: 21, +
5582 30: $Vb, +
5583 31: 29, +
5584 35: [1, 222], +
5585 37: 23, +
5586 45: 30, +
5587 46: 32, +
5588 47: $Vc, +
5589 71: $Vd, +
5590 72: $Ve, +
5591 73: $Vf, +
5592 74: $Vg, +
5593 75: $Vh, +
5594 85: $Vi, +
5595 86: $Vj, +
5596 89: $Vk, +
5597 90: $Vl, +
5598 92: $Vm, +
5599 93: $Vn, +
5600 95: $Vo, +
5601 96: $Vp, +
5602 97: $Vq, +
5603 98: $Vr, +
5604 99: $Vs +
5605 }, { +
5606 6: 10, +
5607 7: 11, +
5608 8: $V5, +
5609 9: $V6, +
5610 10: $V7, +
5611 11: $V8, +
5612 13: $V9, +
5613 18: $Va, +
5614 23: 16, +
5615 25: 17, +
5616 26: 18, +
5617 27: 19, +
5618 28: 20, +
5619 29: 21, +
5620 30: $Vb, +
5621 31: 29, +
5622 35: [1, 223], +
5623 37: 23, +
5624 45: 30, +
5625 46: 32, +
5626 47: $Vc, +
5627 71: $Vd, +
5628 72: $Ve, +
5629 73: $Vf, +
5630 74: $Vg, +
5631 75: $Vh, +
5632 85: $Vi, +
5633 86: $Vj, +
5634 89: $Vk, +
5635 90: $Vl, +
5636 92: $Vm, +
5637 93: $Vn, +
5638 95: $Vo, +
5639 96: $Vp, +
5640 97: $Vq, +
5641 98: $Vr, +
5642 99: $Vs +
5643 }, o([10, 13, 18, 47, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], [2, 93]), o($Vx, [2, 119], { +
5644 86: $Vc1 +
5645 }), o($Vd1, [2, 130], { +
5646 88: 225, +
5647 10: $V11, +
5648 47: $V21, +
5649 71: $V31, +
5650 80: $V41, +
5651 84: $V51, +
5652 85: $V61, +
5653 89: $V71, +
5654 90: $V81, +
5655 91: $V91, +
5656 92: $Va1, +
5657 93: $Vb1 +
5658 }), o($Ve1, [2, 132]), o($Ve1, [2, 134]), o($Ve1, [2, 135]), o($Ve1, [2, 136]), o($Ve1, [2, 137]), o($Ve1, [2, 138]), o($Ve1, [2, 139]), o($Ve1, [2, 140]), o($Ve1, [2, 141]), o($Ve1, [2, 142]), o($Ve1, [2, 143]), o($Ve1, [2, 144]), o($Vx, [2, 120], { +
5659 86: $Vc1 +
5660 }), o($Vx, [2, 121], { +
5661 86: $Vc1 +
5662 }), { +
5663 10: [1, 226] +
5664 }, o($Vx, [2, 122], { +
5665 86: $Vc1 +
5666 }), { +
5667 10: [1, 227] +
5668 }, o($V01, [2, 129]), o($Vx, [2, 112], { +
5669 86: $Vc1 +
5670 }), o($Vx, [2, 113], { +
5671 86: $Vc1 +
5672 }), o($Vx, [2, 114], { +
5673 46: 32, +
5674 45: 90, +
5675 13: $V9, +
5676 18: $Va, +
5677 47: $Vc, +
5678 85: $Vi, +
5679 86: $Vj, +
5680 89: $Vk, +
5681 90: $Vl, +
5682 92: $Vm, +
5683 93: $Vn, +
5684 95: $Vo, +
5685 96: $Vp, +
5686 97: $Vq, +
5687 98: $Vr, +
5688 99: $Vs +
5689 }), o($Vx, [2, 115], { +
5690 46: 32, +
5691 45: 90, +
5692 10: [1, 228], +
5693 13: $V9, +
5694 18: $Va, +
5695 47: $Vc, +
5696 85: $Vi, +
5697 86: $Vj, +
5698 89: $Vk, +
5699 90: $Vl, +
5700 92: $Vm, +
5701 93: $Vn, +
5702 95: $Vo, +
5703 96: $Vp, +
5704 97: $Vq, +
5705 98: $Vr, +
5706 99: $Vs +
5707 }), o($Vx, [2, 117], { +
5708 10: [1, 229] +
5709 }), o($Vy, [2, 46]), { +
5710 40: [1, 230] +
5711 }, o($Vy, [2, 52]), o($Vy, [2, 50]), o($Vy, [2, 54]), o($Vy, [2, 56]), { +
5712 8: $Vu, +
5713 9: $Vv, +
5714 11: $Vw, +
5715 24: 231 +
5716 }, o($Vt, [2, 38]), o($Vt, [2, 37]), { +
5717 10: $V11, +
5718 47: $V21, +
5719 71: $V31, +
5720 80: $V41, +
5721 84: $V51, +
5722 85: $V61, +
5723 87: 232, +
5724 88: 192, +
5725 89: $V71, +
5726 90: $V81, +
5727 91: $V91, +
5728 92: $Va1, +
5729 93: $Vb1 +
5730 }, o($Ve1, [2, 133]), { +
5731 13: $V9, +
5732 18: $Va, +
5733 31: 233, +
5734 45: 30, +
5735 46: 32, +
5736 47: $Vc, +
5737 85: $Vi, +
5738 86: $Vj, +
5739 89: $Vk, +
5740 90: $Vl, +
5741 92: $Vm, +
5742 93: $Vn, +
5743 95: $Vo, +
5744 96: $Vp, +
5745 97: $Vq, +
5746 98: $Vr, +
5747 99: $Vs +
5748 }, { +
5749 13: $V9, +
5750 18: $Va, +
5751 31: 234, +
5752 45: 30, +
5753 46: 32, +
5754 47: $Vc, +
5755 85: $Vi, +
5756 86: $Vj, +
5757 89: $Vk, +
5758 90: $Vl, +
5759 92: $Vm, +
5760 93: $Vn, +
5761 95: $Vo, +
5762 96: $Vp, +
5763 97: $Vq, +
5764 98: $Vr, +
5765 99: $Vs +
5766 }, { +
5767 36: [1, 235] +
5768 }, { +
5769 36: [1, 236] +
5770 }, o($Vy, [2, 47], { +
5771 21: 237, +
5772 10: $Vz +
5773 }), o($VE, $V4, { +
5774 5: 238 +
5775 }), o($Vd1, [2, 131], { +
5776 88: 225, +
5777 10: $V11, +
5778 47: $V21, +
5779 71: $V31, +
5780 80: $V41, +
5781 84: $V51, +
5782 85: $V61, +
5783 89: $V71, +
5784 90: $V81, +
5785 91: $V91, +
5786 92: $Va1, +
5787 93: $Vb1 +
5788 }), o($Vx, [2, 125], { +
5789 46: 32, +
5790 45: 90, +
5791 10: [1, 239], +
5792 13: $V9, +
5793 18: $Va, +
5794 47: $Vc, +
5795 85: $Vi, +
5796 86: $Vj, +
5797 89: $Vk, +
5798 90: $Vl, +
5799 92: $Vm, +
5800 93: $Vn, +
5801 95: $Vo, +
5802 96: $Vp, +
5803 97: $Vq, +
5804 98: $Vr, +
5805 99: $Vs +
5806 }), o($Vx, [2, 126], { +
5807 46: 32, +
5808 45: 90, +
5809 10: [1, 240], +
5810 13: $V9, +
5811 18: $Va, +
5812 47: $Vc, +
5813 85: $Vi, +
5814 86: $Vj, +
5815 89: $Vk, +
5816 90: $Vl, +
5817 92: $Vm, +
5818 93: $Vn, +
5819 95: $Vo, +
5820 96: $Vp, +
5821 97: $Vq, +
5822 98: $Vr, +
5823 99: $Vs +
5824 }), o($Vx, [2, 116]), o($Vx, [2, 118]), o($Vy, [2, 48]), { +
5825 6: 10, +
5826 7: 11, +
5827 8: $V5, +
5828 9: $V6, +
5829 10: $V7, +
5830 11: $V8, +
5831 13: $V9, +
5832 18: $Va, +
5833 23: 16, +
5834 25: 17, +
5835 26: 18, +
5836 27: 19, +
5837 28: 20, +
5838 29: 21, +
5839 30: $Vb, +
5840 31: 29, +
5841 35: [1, 241], +
5842 37: 23, +
5843 45: 30, +
5844 46: 32, +
5845 47: $Vc, +
5846 71: $Vd, +
5847 72: $Ve, +
5848 73: $Vf, +
5849 74: $Vg, +
5850 75: $Vh, +
5851 85: $Vi, +
5852 86: $Vj, +
5853 89: $Vk, +
5854 90: $Vl, +
5855 92: $Vm, +
5856 93: $Vn, +
5857 95: $Vo, +
5858 96: $Vp, +
5859 97: $Vq, +
5860 98: $Vr, +
5861 99: $Vs +
5862 }, { +
5863 10: $V11, +
5864 47: $V21, +
5865 71: $V31, +
5866 79: 242, +
5867 80: $V41, +
5868 84: $V51, +
5869 85: $V61, +
5870 87: 191, +
5871 88: 192, +
5872 89: $V71, +
5873 90: $V81, +
5874 91: $V91, +
5875 92: $Va1, +
5876 93: $Vb1 +
5877 }, { +
5878 10: $V11, +
5879 47: $V21, +
5880 71: $V31, +
5881 79: 243, +
5882 80: $V41, +
5883 84: $V51, +
5884 85: $V61, +
5885 87: 191, +
5886 88: 192, +
5887 89: $V71, +
5888 90: $V81, +
5889 91: $V91, +
5890 92: $Va1, +
5891 93: $Vb1 +
5892 }, o($Vt, [2, 36]), o($Vx, [2, 123], { +
5893 86: $Vc1 +
5894 }), o($Vx, [2, 124], { +
5895 86: $Vc1 +
5896 })], +
5897 defaultActions: {}, +
5898 parseError: function parseError(str, hash) { +
5899 if (hash.recoverable) { +
5900 this.trace(str); +
5901 } else { +
5902 var error = new Error(str); +
5903 error.hash = hash; +
5904 throw error; +
5905 } +
5906 }, +
5907 parse: function parse(input) { +
5908 var self = this, +
5909 stack = [0], +
5910 tstack = [], +
5911 vstack = [null], +
5912 lstack = [], +
5913 table = this.table, +
5914 yytext = '', +
5915 yylineno = 0, +
5916 yyleng = 0, +
5917 recovering = 0, +
5918 TERROR = 2, +
5919 EOF = 1; +
5920 var args = lstack.slice.call(arguments, 1); +
5921 var lexer = Object.create(this.lexer); +
5922 var sharedState = { +
5923 yy: {} +
5924 }; +
5925 +
5926 for (var k in this.yy) { +
5927 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
5928 sharedState.yy[k] = this.yy[k]; +
5929 } +
5930 } +
5931 +
5932 lexer.setInput(input, sharedState.yy); +
5933 sharedState.yy.lexer = lexer; +
5934 sharedState.yy.parser = this; +
5935 +
5936 if (typeof lexer.yylloc == 'undefined') { +
5937 lexer.yylloc = {}; +
5938 } +
5939 +
5940 var yyloc = lexer.yylloc; +
5941 lstack.push(yyloc); +
5942 var ranges = lexer.options && lexer.options.ranges; +
5943 +
5944 if (typeof sharedState.yy.parseError === 'function') { +
5945 this.parseError = sharedState.yy.parseError; +
5946 } else { +
5947 this.parseError = Object.getPrototypeOf(this).parseError; +
5948 } +
5949 +
5950 function popStack(n) { +
5951 stack.length = stack.length - 2 * n; +
5952 vstack.length = vstack.length - n; +
5953 lstack.length = lstack.length - n; +
5954 } +
5955 +
5956 function lex() { +
5957 var token; +
5958 token = tstack.pop() || lexer.lex() || EOF; +
5959 +
5960 if (typeof token !== 'number') { +
5961 if (token instanceof Array) { +
5962 tstack = token; +
5963 token = tstack.pop(); +
5964 } +
5965 +
5966 token = self.symbols_[token] || token; +
5967 } +
5968 +
5969 return token; +
5970 } +
5971 +
5972 var symbol, +
5973 preErrorSymbol, +
5974 state, +
5975 action, +
5976 a, +
5977 r, +
5978 yyval = {}, +
5979 p, +
5980 len, +
5981 newState, +
5982 expected; +
5983 +
5984 while (true) { +
5985 state = stack[stack.length - 1]; +
5986 +
5987 if (this.defaultActions[state]) { +
5988 action = this.defaultActions[state]; +
5989 } else { +
5990 if (symbol === null || typeof symbol == 'undefined') { +
5991 symbol = lex(); +
5992 } +
5993 +
5994 action = table[state] && table[state][symbol]; +
5995 } +
5996 +
5997 if (typeof action === 'undefined' || !action.length || !action[0]) { +
5998 var errStr = ''; +
5999 expected = []; +
6000 +
6001 for (p in table[state]) { +
6002 if (this.terminals_[p] && p > TERROR) { +
6003 expected.push('\'' + this.terminals_[p] + '\''); +
6004 } +
6005 } +
6006 +
6007 if (lexer.showPosition) { +
6008 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
6009 } else { +
6010 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
6011 } +
6012 +
6013 this.parseError(errStr, { +
6014 text: lexer.match, +
6015 token: this.terminals_[symbol] || symbol, +
6016 line: lexer.yylineno, +
6017 loc: yyloc, +
6018 expected: expected +
6019 }); +
6020 } +
6021 +
6022 if (action[0] instanceof Array && action.length > 1) { +
6023 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
6024 } +
6025 +
6026 switch (action[0]) { +
6027 case 1: +
6028 stack.push(symbol); +
6029 vstack.push(lexer.yytext); +
6030 lstack.push(lexer.yylloc); +
6031 stack.push(action[1]); +
6032 symbol = null; +
6033 +
6034 if (!preErrorSymbol) { +
6035 yyleng = lexer.yyleng; +
6036 yytext = lexer.yytext; +
6037 yylineno = lexer.yylineno; +
6038 yyloc = lexer.yylloc; +
6039 +
6040 if (recovering > 0) { +
6041 recovering--; +
6042 } +
6043 } else { +
6044 symbol = preErrorSymbol; +
6045 preErrorSymbol = null; +
6046 } +
6047 +
6048 break; +
6049 +
6050 case 2: +
6051 len = this.productions_[action[1]][1]; +
6052 yyval.$ = vstack[vstack.length - len]; +
6053 yyval._$ = { +
6054 first_line: lstack[lstack.length - (len || 1)].first_line, +
6055 last_line: lstack[lstack.length - 1].last_line, +
6056 first_column: lstack[lstack.length - (len || 1)].first_column, +
6057 last_column: lstack[lstack.length - 1].last_column +
6058 }; +
6059 +
6060 if (ranges) { +
6061 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
6062 } +
6063 +
6064 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
6065 +
6066 if (typeof r !== 'undefined') { +
6067 return r; +
6068 } +
6069 +
6070 if (len) { +
6071 stack = stack.slice(0, -1 * len * 2); +
6072 vstack = vstack.slice(0, -1 * len); +
6073 lstack = lstack.slice(0, -1 * len); +
6074 } +
6075 +
6076 stack.push(this.productions_[action[1]][0]); +
6077 vstack.push(yyval.$); +
6078 lstack.push(yyval._$); +
6079 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
6080 stack.push(newState); +
6081 break; +
6082 +
6083 case 3: +
6084 return true; +
6085 } +
6086 } +
6087 +
6088 return true; +
6089 } +
6090 }; +
6091 /* generated by jison-lex 0.3.4 */ +
6092 +
6093 var lexer = function () { +
6094 var lexer = { +
6095 EOF: 1, +
6096 parseError: function parseError(str, hash) { +
6097 if (this.yy.parser) { +
6098 this.yy.parser.parseError(str, hash); +
6099 } else { +
6100 throw new Error(str); +
6101 } +
6102 }, +
6103 // resets the lexer, sets new input +
6104 setInput: function (input, yy) { +
6105 this.yy = yy || this.yy || {}; +
6106 this._input = input; +
6107 this._more = this._backtrack = this.done = false; +
6108 this.yylineno = this.yyleng = 0; +
6109 this.yytext = this.matched = this.match = ''; +
6110 this.conditionStack = ['INITIAL']; +
6111 this.yylloc = { +
6112 first_line: 1, +
6113 first_column: 0, +
6114 last_line: 1, +
6115 last_column: 0 +
6116 }; +
6117 +
6118 if (this.options.ranges) { +
6119 this.yylloc.range = [0, 0]; +
6120 } +
6121 +
6122 this.offset = 0; +
6123 return this; +
6124 }, +
6125 // consumes and returns one char from the input +
6126 input: function () { +
6127 var ch = this._input[0]; +
6128 this.yytext += ch; +
6129 this.yyleng++; +
6130 this.offset++; +
6131 this.match += ch; +
6132 this.matched += ch; +
6133 var lines = ch.match(/(?:\r\n?|\n).*/g); +
6134 +
6135 if (lines) { +
6136 this.yylineno++; +
6137 this.yylloc.last_line++; +
6138 } else { +
6139 this.yylloc.last_column++; +
6140 } +
6141 +
6142 if (this.options.ranges) { +
6143 this.yylloc.range[1]++; +
6144 } +
6145 +
6146 this._input = this._input.slice(1); +
6147 return ch; +
6148 }, +
6149 // unshifts one char (or a string) into the input +
6150 unput: function (ch) { +
6151 var len = ch.length; +
6152 var lines = ch.split(/(?:\r\n?|\n)/g); +
6153 this._input = ch + this._input; +
6154 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
6155 +
6156 this.offset -= len; +
6157 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
6158 this.match = this.match.substr(0, this.match.length - 1); +
6159 this.matched = this.matched.substr(0, this.matched.length - 1); +
6160 +
6161 if (lines.length - 1) { +
6162 this.yylineno -= lines.length - 1; +
6163 } +
6164 +
6165 var r = this.yylloc.range; +
6166 this.yylloc = { +
6167 first_line: this.yylloc.first_line, +
6168 last_line: this.yylineno + 1, +
6169 first_column: this.yylloc.first_column, +
6170 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
6171 }; +
6172 +
6173 if (this.options.ranges) { +
6174 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
6175 } +
6176 +
6177 this.yyleng = this.yytext.length; +
6178 return this; +
6179 }, +
6180 // When called from action, caches matched text and appends it on next action +
6181 more: function () { +
6182 this._more = true; +
6183 return this; +
6184 }, +
6185 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
6186 reject: function () { +
6187 if (this.options.backtrack_lexer) { +
6188 this._backtrack = true; +
6189 } else { +
6190 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
6191 text: "", +
6192 token: null, +
6193 line: this.yylineno +
6194 }); +
6195 } +
6196 +
6197 return this; +
6198 }, +
6199 // retain first n characters of the match +
6200 less: function (n) { +
6201 this.unput(this.match.slice(n)); +
6202 }, +
6203 // displays already matched input, i.e. for error messages +
6204 pastInput: function () { +
6205 var past = this.matched.substr(0, this.matched.length - this.match.length); +
6206 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
6207 }, +
6208 // displays upcoming input, i.e. for error messages +
6209 upcomingInput: function () { +
6210 var next = this.match; +
6211 +
6212 if (next.length < 20) { +
6213 next += this._input.substr(0, 20 - next.length); +
6214 } +
6215 +
6216 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
6217 }, +
6218 // displays the character position where the lexing error occurred, i.e. for error messages +
6219 showPosition: function () { +
6220 var pre = this.pastInput(); +
6221 var c = new Array(pre.length + 1).join("-"); +
6222 return pre + this.upcomingInput() + "\n" + c + "^"; +
6223 }, +
6224 // test the lexed token: return FALSE when not a match, otherwise return token +
6225 test_match: function (match, indexed_rule) { +
6226 var token, lines, backup; +
6227 +
6228 if (this.options.backtrack_lexer) { +
6229 // save context +
6230 backup = { +
6231 yylineno: this.yylineno, +
6232 yylloc: { +
6233 first_line: this.yylloc.first_line, +
6234 last_line: this.last_line, +
6235 first_column: this.yylloc.first_column, +
6236 last_column: this.yylloc.last_column +
6237 }, +
6238 yytext: this.yytext, +
6239 match: this.match, +
6240 matches: this.matches, +
6241 matched: this.matched, +
6242 yyleng: this.yyleng, +
6243 offset: this.offset, +
6244 _more: this._more, +
6245 _input: this._input, +
6246 yy: this.yy, +
6247 conditionStack: this.conditionStack.slice(0), +
6248 done: this.done +
6249 }; +
6250 +
6251 if (this.options.ranges) { +
6252 backup.yylloc.range = this.yylloc.range.slice(0); +
6253 } +
6254 } +
6255 +
6256 lines = match[0].match(/(?:\r\n?|\n).*/g); +
6257 +
6258 if (lines) { +
6259 this.yylineno += lines.length; +
6260 } +
6261 +
6262 this.yylloc = { +
6263 first_line: this.yylloc.last_line, +
6264 last_line: this.yylineno + 1, +
6265 first_column: this.yylloc.last_column, +
6266 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
6267 }; +
6268 this.yytext += match[0]; +
6269 this.match += match[0]; +
6270 this.matches = match; +
6271 this.yyleng = this.yytext.length; +
6272 +
6273 if (this.options.ranges) { +
6274 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
6275 } +
6276 +
6277 this._more = false; +
6278 this._backtrack = false; +
6279 this._input = this._input.slice(match[0].length); +
6280 this.matched += match[0]; +
6281 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
6282 +
6283 if (this.done && this._input) { +
6284 this.done = false; +
6285 } +
6286 +
6287 if (token) { +
6288 return token; +
6289 } else if (this._backtrack) { +
6290 // recover context +
6291 for (var k in backup) { +
6292 this[k] = backup[k]; +
6293 } +
6294 +
6295 return false; // rule action called reject() implying the next rule should be tested instead. +
6296 } +
6297 +
6298 return false; +
6299 }, +
6300 // return next match in input +
6301 next: function () { +
6302 if (this.done) { +
6303 return this.EOF; +
6304 } +
6305 +
6306 if (!this._input) { +
6307 this.done = true; +
6308 } +
6309 +
6310 var token, match, tempMatch, index; +
6311 +
6312 if (!this._more) { +
6313 this.yytext = ''; +
6314 this.match = ''; +
6315 } +
6316 +
6317 var rules = this._currentRules(); +
6318 +
6319 for (var i = 0; i < rules.length; i++) { +
6320 tempMatch = this._input.match(this.rules[rules[i]]); +
6321 +
6322 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
6323 match = tempMatch; +
6324 index = i; +
6325 +
6326 if (this.options.backtrack_lexer) { +
6327 token = this.test_match(tempMatch, rules[i]); +
6328 +
6329 if (token !== false) { +
6330 return token; +
6331 } else if (this._backtrack) { +
6332 match = false; +
6333 continue; // rule action called reject() implying a rule MISmatch. +
6334 } else { +
6335 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
6336 return false; +
6337 } +
6338 } else if (!this.options.flex) { +
6339 break; +
6340 } +
6341 } +
6342 } +
6343 +
6344 if (match) { +
6345 token = this.test_match(match, rules[index]); +
6346 +
6347 if (token !== false) { +
6348 return token; +
6349 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
6350 +
6351 +
6352 return false; +
6353 } +
6354 +
6355 if (this._input === "") { +
6356 return this.EOF; +
6357 } else { +
6358 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
6359 text: "", +
6360 token: null, +
6361 line: this.yylineno +
6362 }); +
6363 } +
6364 }, +
6365 // return next match that has a token +
6366 lex: function lex() { +
6367 var r = this.next(); +
6368 +
6369 if (r) { +
6370 return r; +
6371 } else { +
6372 return this.lex(); +
6373 } +
6374 }, +
6375 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
6376 begin: function begin(condition) { +
6377 this.conditionStack.push(condition); +
6378 }, +
6379 // pop the previously active lexer condition state off the condition stack +
6380 popState: function popState() { +
6381 var n = this.conditionStack.length - 1; +
6382 +
6383 if (n > 0) { +
6384 return this.conditionStack.pop(); +
6385 } else { +
6386 return this.conditionStack[0]; +
6387 } +
6388 }, +
6389 // produce the lexer rule set which is active for the currently active lexer condition state +
6390 _currentRules: function _currentRules() { +
6391 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
6392 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
6393 } else { +
6394 return this.conditions["INITIAL"].rules; +
6395 } +
6396 }, +
6397 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
6398 topState: function topState(n) { +
6399 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
6400 +
6401 if (n >= 0) { +
6402 return this.conditionStack[n]; +
6403 } else { +
6404 return "INITIAL"; +
6405 } +
6406 }, +
6407 // alias for begin(condition) +
6408 pushState: function pushState(condition) { +
6409 this.begin(condition); +
6410 }, +
6411 // return the number of states currently on the stack +
6412 stateStackSize: function stateStackSize() { +
6413 return this.conditionStack.length; +
6414 }, +
6415 options: {}, +
6416 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
6417 var YYSTATE = YY_START; +
6418 +
6419 switch ($avoiding_name_collisions) { +
6420 case 0: +
6421 /* do nothing */ +
6422 break; +
6423 +
6424 case 1: +
6425 this.begin("string"); +
6426 break; +
6427 +
6428 case 2: +
6429 this.popState(); +
6430 break; +
6431 +
6432 case 3: +
6433 return "STR"; +
6434 break; +
6435 +
6436 case 4: +
6437 return 71; +
6438 break; +
6439 +
6440 case 5: +
6441 return 78; +
6442 break; +
6443 +
6444 case 6: +
6445 return 72; +
6446 break; +
6447 +
6448 case 7: +
6449 return 82; +
6450 break; +
6451 +
6452 case 8: +
6453 return 73; +
6454 break; +
6455 +
6456 case 9: +
6457 return 74; +
6458 break; +
6459 +
6460 case 10: +
6461 return 75; +
6462 break; +
6463 +
6464 case 11: +
6465 return 12; +
6466 break; +
6467 +
6468 case 12: +
6469 return 30; +
6470 break; +
6471 +
6472 case 13: +
6473 return 35; +
6474 break; +
6475 +
6476 case 14: +
6477 return 13; +
6478 break; +
6479 +
6480 case 15: +
6481 return 13; +
6482 break; +
6483 +
6484 case 16: +
6485 return 13; +
6486 break; +
6487 +
6488 case 17: +
6489 return 13; +
6490 break; +
6491 +
6492 case 18: +
6493 return 13; +
6494 break; +
6495 +
6496 case 19: +
6497 return 13; +
6498 break; +
6499 +
6500 case 20: +
6501 return 85; +
6502 break; +
6503 +
6504 case 21: +
6505 return 92; +
6506 break; +
6507 +
6508 case 22: +
6509 return 90; +
6510 break; +
6511 +
6512 case 23: +
6513 return 8; +
6514 break; +
6515 +
6516 case 24: +
6517 return 86; +
6518 break; +
6519 +
6520 case 25: +
6521 return 99; +
6522 break; +
6523 +
6524 case 26: +
6525 return 16; +
6526 break; +
6527 +
6528 case 27: +
6529 return 15; +
6530 break; +
6531 +
6532 case 28: +
6533 return 17; +
6534 break; +
6535 +
6536 case 29: +
6537 return 18; +
6538 break; +
6539 +
6540 case 30: +
6541 return 54; +
6542 break; +
6543 +
6544 case 31: +
6545 return 52; +
6546 break; +
6547 +
6548 case 32: +
6549 return 53; +
6550 break; +
6551 +
6552 case 33: +
6553 return 55; +
6554 break; +
6555 +
6556 case 34: +
6557 return 59; +
6558 break; +
6559 +
6560 case 35: +
6561 return 57; +
6562 break; +
6563 +
6564 case 36: +
6565 return 58; +
6566 break; +
6567 +
6568 case 37: +
6569 return 60; +
6570 break; +
6571 +
6572 case 38: +
6573 return 59; +
6574 break; +
6575 +
6576 case 39: +
6577 return 57; +
6578 break; +
6579 +
6580 case 40: +
6581 return 58; +
6582 break; +
6583 +
6584 case 41: +
6585 return 60; +
6586 break; +
6587 +
6588 case 42: +
6589 return 64; +
6590 break; +
6591 +
6592 case 43: +
6593 return 62; +
6594 break; +
6595 +
6596 case 44: +
6597 return 63; +
6598 break; +
6599 +
6600 case 45: +
6601 return 65; +
6602 break; +
6603 +
6604 case 46: +
6605 return 51; +
6606 break; +
6607 +
6608 case 47: +
6609 return 56; +
6610 break; +
6611 +
6612 case 48: +
6613 return 61; +
6614 break; +
6615 +
6616 case 49: +
6617 return 41; +
6618 break; +
6619 +
6620 case 50: +
6621 return 42; +
6622 break; +
6623 +
6624 case 51: +
6625 return 47; +
6626 break; +
6627 +
6628 case 52: +
6629 return 93; +
6630 break; +
6631 +
6632 case 53: +
6633 return 97; +
6634 break; +
6635 +
6636 case 54: +
6637 return 84; +
6638 break; +
6639 +
6640 case 55: +
6641 return 98; +
6642 break; +
6643 +
6644 case 56: +
6645 return 98; +
6646 break; +
6647 +
6648 case 57: +
6649 return 89; +
6650 break; +
6651 +
6652 case 58: +
6653 return 95; +
6654 break; +
6655 +
6656 case 59: +
6657 return 96; +
6658 break; +
6659 +
6660 case 60: +
6661 return 66; +
6662 break; +
6663 +
6664 case 61: +
6665 return 39; +
6666 break; +
6667 +
6668 case 62: +
6669 return 40; +
6670 break; +
6671 +
6672 case 63: +
6673 return 32; +
6674 break; +
6675 +
6676 case 64: +
6677 return 34; +
6678 break; +
6679 +
6680 case 65: +
6681 return 43; +
6682 break; +
6683 +
6684 case 66: +
6685 return 44; +
6686 break; +
6687 +
6688 case 67: +
6689 return 102; +
6690 break; +
6691 +
6692 case 68: +
6693 return 9; +
6694 break; +
6695 +
6696 case 69: +
6697 return 10; +
6698 break; +
6699 +
6700 case 70: +
6701 return 11; +
6702 break; +
6703 } +
6704 }, +
6705 rules: [/^(?:%%[^\n]*)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:click\b)/, /^(?:graph\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:LR\b)/, /^(?:RL\b)/, /^(?:TB\b)/, /^(?:BT\b)/, /^(?:TD\b)/, /^(?:BR\b)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:v\b)/, /^(?:\s*--[x]\s*)/, /^(?:\s*-->\s*)/, /^(?:\s*--[o]\s*)/, /^(?:\s*---\s*)/, /^(?:\s*-\.-[x]\s*)/, /^(?:\s*-\.->\s*)/, /^(?:\s*-\.-[o]\s*)/, /^(?:\s*-\.-\s*)/, /^(?:\s*.-[x]\s*)/, /^(?:\s*\.->\s*)/, /^(?:\s*\.-[o]\s*)/, /^(?:\s*\.-\s*)/, /^(?:\s*==[x]\s*)/, /^(?:\s*==>\s*)/, /^(?:\s*==[o]\s*)/, /^(?:\s*==[\=]\s*)/, /^(?:\s*--\s*)/, /^(?:\s*-\.\s*)/, /^(?:\s*==\s*)/, /^(?:\(-)/, /^(?:-\))/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:[A-Za-z]+)/, /^(?:[!"#$%&'*+,-.`?\\_\/])/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\()/, /^(?:\))/, /^(?:\[)/, /^(?:\])/, /^(?:\{)/, /^(?:\})/, /^(?:")/, /^(?:\n+)/, /^(?:\s)/, /^(?:$)/], +
6706 conditions: { +
6707 "string": { +
6708 "rules": [2, 3], +
6709 "inclusive": false +
6710 }, +
6711 "INITIAL": { +
6712 "rules": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70], +
6713 "inclusive": true +
6714 } +
6715 } +
6716 }; +
6717 return lexer; +
6718 }(); +
6719 +
6720 parser.lexer = lexer; +
6721 +
6722 function Parser() { +
6723 this.yy = {}; +
6724 } +
6725 +
6726 Parser.prototype = parser; +
6727 parser.Parser = Parser; +
6728 return new Parser(); +
6729}(); +
6730 +
6731if (true) { +
6732 exports.parser = parser; +
6733 exports.Parser = parser.Parser; +
6734 +
6735 exports.parse = function () { +
6736 return parser.parse.apply(parser, arguments); +
6737 }; +
6738 +
6739 exports.main = function commonjsMain(args) { +
6740 if (!args[1]) { +
6741 console.log('Usage: ' + args[0] + ' FILE'); +
6742 process.exit(1); +
6743 } +
6744 +
6745 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
6746 +
6747 return exports.parser.parse(source); +
6748 }; +
6749 +
6750 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
6751 exports.main(process.argv.slice(1)); +
6752 } +
6753} +
6754/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
6755 +
6756/***/ }), +
6757 +
6758/***/ "./src/diagrams/gantt/ganttDb.js": +
6759/*!***************************************!*\ +
6760 !*** ./src/diagrams/gantt/ganttDb.js ***! +
6761 \***************************************/ +
6762/*! exports provided: clear, setAxisFormat, getAxisFormat, setDateFormat, setExcludes, setTitle, getTitle, addSection, getTasks, addTask, findTaskById, addTaskOrg, setLink, setClass, setClickEvent, bindFunctions, default */ +
6763/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6764 +
6765"use strict"; +
6766__webpack_require__.r(__webpack_exports__); +
6767/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
6768/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAxisFormat", function() { return setAxisFormat; }); +
6769/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAxisFormat", function() { return getAxisFormat; }); +
6770/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDateFormat", function() { return setDateFormat; }); +
6771/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setExcludes", function() { return setExcludes; }); +
6772/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTitle", function() { return setTitle; }); +
6773/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTitle", function() { return getTitle; }); +
6774/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSection", function() { return addSection; }); +
6775/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTasks", function() { return getTasks; }); +
6776/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addTask", function() { return addTask; }); +
6777/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findTaskById", function() { return findTaskById; }); +
6778/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addTaskOrg", function() { return addTaskOrg; }); +
6779/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLink", function() { return setLink; }); +
6780/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setClass", function() { return setClass; }); +
6781/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setClickEvent", function() { return setClickEvent; }); +
6782/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindFunctions", function() { return bindFunctions; }); +
6783/* harmony import */ var moment_mini__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment-mini */ "moment-mini"); +
6784/* harmony import */ var moment_mini__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment_mini__WEBPACK_IMPORTED_MODULE_0__); +
6785/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
6786/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3 */ "d3"); +
6787/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_2__); +
6788 +
6789 +
6790 +
6791let dateFormat = ''; +
6792let axisFormat = ''; +
6793let excludes = []; +
6794let title = ''; +
6795let sections = []; +
6796let tasks = []; +
6797let currentSection = ''; +
6798const tags = ['active', 'done', 'crit', 'milestone']; +
6799let funs = []; +
6800const clear = function () { +
6801 sections = []; +
6802 tasks = []; +
6803 currentSection = ''; +
6804 funs = []; +
6805 title = ''; +
6806 taskCnt = 0; +
6807 lastTask = undefined; +
6808 lastTaskID = undefined; +
6809 rawTasks = []; +
6810}; +
6811const setAxisFormat = function (txt) { +
6812 axisFormat = txt; +
6813}; +
6814const getAxisFormat = function () { +
6815 return axisFormat; +
6816}; +
6817const setDateFormat = function (txt) { +
6818 dateFormat = txt; +
6819}; +
6820const setExcludes = function (txt) { +
6821 excludes = txt.toLowerCase().split(/[\s,]+/); +
6822}; +
6823const setTitle = function (txt) { +
6824 title = txt; +
6825}; +
6826const getTitle = function () { +
6827 return title; +
6828}; +
6829const addSection = function (txt) { +
6830 currentSection = txt; +
6831 sections.push(txt); +
6832}; +
6833const getTasks = function () { +
6834 let allItemsPricessed = compileTasks(); +
6835 const maxDepth = 10; +
6836 let iterationCount = 0; +
6837 +
6838 while (!allItemsPricessed && iterationCount < maxDepth) { +
6839 allItemsPricessed = compileTasks(); +
6840 iterationCount++; +
6841 } +
6842 +
6843 tasks = rawTasks; +
6844 return tasks; +
6845}; +
6846 +
6847const isInvalidDate = function (date, dateFormat, excludes) { +
6848 if (date.isoWeekday() >= 6 && excludes.indexOf('weekends') >= 0) { +
6849 return true; +
6850 } +
6851 +
6852 if (excludes.indexOf(date.format('dddd').toLowerCase()) >= 0) { +
6853 return true; +
6854 } +
6855 +
6856 return excludes.indexOf(date.format(dateFormat.trim())) >= 0; +
6857}; +
6858 +
6859const checkTaskDates = function (task, dateFormat, excludes) { +
6860 if (!excludes.length || task.manualEndTime) return; +
6861 let startTime = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(task.startTime, dateFormat, true); +
6862 startTime.add(1, 'd'); +
6863 let endTime = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(task.endTime, dateFormat, true); +
6864 let renderEndTime = fixTaskDates(startTime, endTime, dateFormat, excludes); +
6865 task.endTime = endTime.toDate(); +
6866 task.renderEndTime = renderEndTime; +
6867}; +
6868 +
6869const fixTaskDates = function (startTime, endTime, dateFormat, excludes) { +
6870 let invalid = false; +
6871 let renderEndTime = null; +
6872 +
6873 while (startTime.date() <= endTime.date()) { +
6874 if (!invalid) { +
6875 renderEndTime = endTime.toDate(); +
6876 } +
6877 +
6878 invalid = isInvalidDate(startTime, dateFormat, excludes); +
6879 +
6880 if (invalid) { +
6881 endTime.add(1, 'd'); +
6882 } +
6883 +
6884 startTime.add(1, 'd'); +
6885 } +
6886 +
6887 return renderEndTime; +
6888}; +
6889 +
6890const getStartDate = function (prevTime, dateFormat, str) { +
6891 str = str.trim(); // Test for after +
6892 +
6893 const re = /^after\s+([\d\w-]+)/; +
6894 const afterStatement = re.exec(str.trim()); +
6895 +
6896 if (afterStatement !== null) { +
6897 const task = findTaskById(afterStatement[1]); +
6898 +
6899 if (typeof task === 'undefined') { +
6900 const dt = new Date(); +
6901 dt.setHours(0, 0, 0, 0); +
6902 return dt; +
6903 } +
6904 +
6905 return task.endTime; +
6906 } // Check for actual date set +
6907 +
6908 +
6909 let mDate = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(str, dateFormat.trim(), true); +
6910 +
6911 if (mDate.isValid()) { +
6912 return mDate.toDate(); +
6913 } else { +
6914 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('Invalid date:' + str); +
6915 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('With date format:' + dateFormat.trim()); +
6916 } // Default date - now +
6917 +
6918 +
6919 return new Date(); +
6920}; +
6921 +
6922const getEndDate = function (prevTime, dateFormat, str) { +
6923 str = str.trim(); // Check for actual date +
6924 +
6925 let mDate = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(str, dateFormat.trim(), true); +
6926 +
6927 if (mDate.isValid()) { +
6928 return mDate.toDate(); +
6929 } +
6930 +
6931 const d = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(prevTime); // Check for length +
6932 +
6933 const re = /^([\d]+)([wdhms])/; +
6934 const durationStatement = re.exec(str.trim()); +
6935 +
6936 if (durationStatement !== null) { +
6937 switch (durationStatement[2]) { +
6938 case 's': +
6939 d.add(durationStatement[1], 'seconds'); +
6940 break; +
6941 +
6942 case 'm': +
6943 d.add(durationStatement[1], 'minutes'); +
6944 break; +
6945 +
6946 case 'h': +
6947 d.add(durationStatement[1], 'hours'); +
6948 break; +
6949 +
6950 case 'd': +
6951 d.add(durationStatement[1], 'days'); +
6952 break; +
6953 +
6954 case 'w': +
6955 d.add(durationStatement[1], 'weeks'); +
6956 break; +
6957 } +
6958 } // Default date - now +
6959 +
6960 +
6961 return d.toDate(); +
6962}; +
6963 +
6964let taskCnt = 0; +
6965 +
6966const parseId = function (idStr) { +
6967 if (typeof idStr === 'undefined') { +
6968 taskCnt = taskCnt + 1; +
6969 return 'task' + taskCnt; +
6970 } +
6971 +
6972 return idStr; +
6973}; // id, startDate, endDate +
6974// id, startDate, length +
6975// id, after x, endDate +
6976// id, after x, length +
6977// startDate, endDate +
6978// startDate, length +
6979// after x, endDate +
6980// after x, length +
6981// endDate +
6982// length +
6983 +
6984 +
6985const compileData = function (prevTask, dataStr) { +
6986 let ds; +
6987 +
6988 if (dataStr.substr(0, 1) === ':') { +
6989 ds = dataStr.substr(1, dataStr.length); +
6990 } else { +
6991 ds = dataStr; +
6992 } +
6993 +
6994 const data = ds.split(','); +
6995 const task = {}; // Get tags like active, done, crit and milestone +
6996 +
6997 getTaskTags(data, task, tags); +
6998 +
6999 for (let i = 0; i < data.length; i++) { +
7000 data[i] = data[i].trim(); +
7001 } +
7002 +
7003 let endTimeData = ''; +
7004 +
7005 switch (data.length) { +
7006 case 1: +
7007 task.id = parseId(); +
7008 task.startTime = prevTask.endTime; +
7009 endTimeData = data[0]; +
7010 break; +
7011 +
7012 case 2: +
7013 task.id = parseId(); +
7014 task.startTime = getStartDate(undefined, dateFormat, data[0]); +
7015 endTimeData = data[1]; +
7016 break; +
7017 +
7018 case 3: +
7019 task.id = parseId(data[0]); +
7020 task.startTime = getStartDate(undefined, dateFormat, data[1]); +
7021 endTimeData = data[2]; +
7022 break; +
7023 +
7024 default: +
7025 } +
7026 +
7027 if (endTimeData) { +
7028 task.endTime = getEndDate(task.startTime, dateFormat, endTimeData); +
7029 task.manualEndTime = endTimeData === moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(task.endTime).format(dateFormat.trim()); +
7030 checkTaskDates(task, dateFormat, excludes); +
7031 } +
7032 +
7033 return task; +
7034}; +
7035 +
7036const parseData = function (prevTaskId, dataStr) { +
7037 let ds; +
7038 +
7039 if (dataStr.substr(0, 1) === ':') { +
7040 ds = dataStr.substr(1, dataStr.length); +
7041 } else { +
7042 ds = dataStr; +
7043 } +
7044 +
7045 const data = ds.split(','); +
7046 const task = {}; // Get tags like active, done, crit and milestone +
7047 +
7048 getTaskTags(data, task, tags); +
7049 +
7050 for (let i = 0; i < data.length; i++) { +
7051 data[i] = data[i].trim(); +
7052 } +
7053 +
7054 switch (data.length) { +
7055 case 1: +
7056 task.id = parseId(); +
7057 task.startTime = { +
7058 type: 'prevTaskEnd', +
7059 id: prevTaskId +
7060 }; +
7061 task.endTime = { +
7062 data: data[0] +
7063 }; +
7064 break; +
7065 +
7066 case 2: +
7067 task.id = parseId(); +
7068 task.startTime = { +
7069 type: 'getStartDate', +
7070 startData: data[0] +
7071 }; +
7072 task.endTime = { +
7073 data: data[1] +
7074 }; +
7075 break; +
7076 +
7077 case 3: +
7078 task.id = parseId(data[0]); +
7079 task.startTime = { +
7080 type: 'getStartDate', +
7081 startData: data[1] +
7082 }; +
7083 task.endTime = { +
7084 data: data[2] +
7085 }; +
7086 break; +
7087 +
7088 default: +
7089 } +
7090 +
7091 return task; +
7092}; +
7093 +
7094let lastTask; +
7095let lastTaskID; +
7096let rawTasks = []; +
7097const taskDb = {}; +
7098const addTask = function (descr, data) { +
7099 const rawTask = { +
7100 section: currentSection, +
7101 type: currentSection, +
7102 processed: false, +
7103 manualEndTime: false, +
7104 renderEndTime: null, +
7105 raw: { +
7106 data: data +
7107 }, +
7108 task: descr, +
7109 classes: [] +
7110 }; +
7111 const taskInfo = parseData(lastTaskID, data); +
7112 rawTask.raw.startTime = taskInfo.startTime; +
7113 rawTask.raw.endTime = taskInfo.endTime; +
7114 rawTask.id = taskInfo.id; +
7115 rawTask.prevTaskId = lastTaskID; +
7116 rawTask.active = taskInfo.active; +
7117 rawTask.done = taskInfo.done; +
7118 rawTask.crit = taskInfo.crit; +
7119 rawTask.milestone = taskInfo.milestone; +
7120 const pos = rawTasks.push(rawTask); +
7121 lastTaskID = rawTask.id; // Store cross ref +
7122 +
7123 taskDb[rawTask.id] = pos - 1; +
7124}; +
7125const findTaskById = function (id) { +
7126 const pos = taskDb[id]; +
7127 return rawTasks[pos]; +
7128}; +
7129const addTaskOrg = function (descr, data) { +
7130 const newTask = { +
7131 section: currentSection, +
7132 type: currentSection, +
7133 description: descr, +
7134 task: descr, +
7135 classes: [] +
7136 }; +
7137 const taskInfo = compileData(lastTask, data); +
7138 newTask.startTime = taskInfo.startTime; +
7139 newTask.endTime = taskInfo.endTime; +
7140 newTask.id = taskInfo.id; +
7141 newTask.active = taskInfo.active; +
7142 newTask.done = taskInfo.done; +
7143 newTask.crit = taskInfo.crit; +
7144 newTask.milestone = taskInfo.milestone; +
7145 lastTask = newTask; +
7146 tasks.push(newTask); +
7147}; +
7148 +
7149const compileTasks = function () { +
7150 const compileTask = function (pos) { +
7151 const task = rawTasks[pos]; +
7152 let startTime = ''; +
7153 +
7154 switch (rawTasks[pos].raw.startTime.type) { +
7155 case 'prevTaskEnd': +
7156 const prevTask = findTaskById(task.prevTaskId); +
7157 task.startTime = prevTask.endTime; +
7158 break; +
7159 +
7160 case 'getStartDate': +
7161 startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData); +
7162 +
7163 if (startTime) { +
7164 rawTasks[pos].startTime = startTime; +
7165 } +
7166 +
7167 break; +
7168 } +
7169 +
7170 if (rawTasks[pos].startTime) { +
7171 rawTasks[pos].endTime = getEndDate(rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data); +
7172 +
7173 if (rawTasks[pos].endTime) { +
7174 rawTasks[pos].processed = true; +
7175 rawTasks[pos].manualEndTime = rawTasks[pos].raw.endTime.data === moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(rawTasks[pos].endTime).format(dateFormat.trim()); +
7176 checkTaskDates(rawTasks[pos], dateFormat, excludes); +
7177 } +
7178 } +
7179 +
7180 return rawTasks[pos].processed; +
7181 }; +
7182 +
7183 let allProcessed = true; +
7184 +
7185 for (let i = 0; i < rawTasks.length; i++) { +
7186 compileTask(i); +
7187 allProcessed = allProcessed && rawTasks[i].processed; +
7188 } +
7189 +
7190 return allProcessed; +
7191}; +
7192/** +
7193 * Called by parser when a link is found. Adds the URL to the vertex data. +
7194 * @param ids Comma separated list of ids +
7195 * @param linkStr URL to create a link for +
7196 */ +
7197 +
7198 +
7199const setLink = function (ids, linkStr) { +
7200 ids.split(',').forEach(function (id) { +
7201 let rawTask = findTaskById(id); +
7202 +
7203 if (typeof rawTask !== 'undefined') { +
7204 pushFun(id, () => { +
7205 window.open(linkStr, '_self'); +
7206 }); +
7207 } +
7208 }); +
7209 setClass(ids, 'clickable'); +
7210}; +
7211/** +
7212 * Called by parser when a special node is found, e.g. a clickable element. +
7213 * @param ids Comma separated list of ids +
7214 * @param className Class to add +
7215 */ +
7216 +
7217const setClass = function (ids, className) { +
7218 ids.split(',').forEach(function (id) { +
7219 let rawTask = findTaskById(id); +
7220 +
7221 if (typeof rawTask !== 'undefined') { +
7222 rawTask.classes.push(className); +
7223 } +
7224 }); +
7225}; +
7226 +
7227const setClickFun = function (id, functionName, functionArgs) { +
7228 if (typeof functionName === 'undefined') { +
7229 return; +
7230 } +
7231 +
7232 let argList = []; +
7233 +
7234 if (typeof functionArgs === 'string') { +
7235 /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ +
7236 argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); +
7237 +
7238 for (let i = 0; i < argList.length; i++) { +
7239 let item = argList[i].trim(); +
7240 /* Removes all double quotes at the start and end of an argument */ +
7241 +
7242 /* This preserves all starting and ending whitespace inside */ +
7243 +
7244 if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { +
7245 item = item.substr(1, item.length - 2); +
7246 } +
7247 +
7248 argList[i] = item; +
7249 } +
7250 } +
7251 +
7252 let rawTask = findTaskById(id); +
7253 +
7254 if (typeof rawTask !== 'undefined') { +
7255 pushFun(id, () => { +
7256 window[functionName](...argList); +
7257 }); +
7258 } +
7259}; +
7260/** +
7261 * The callbackFunction is executed in a click event bound to the task with the specified id or the task's assigned text +
7262 * @param id The task's id +
7263 * @param callbackFunction A function to be executed when clicked on the task or the task's text +
7264 */ +
7265 +
7266 +
7267const pushFun = function (id, callbackFunction) { +
7268 funs.push(function (element) { +
7269 const elem = d3__WEBPACK_IMPORTED_MODULE_2__["select"](element).select(`[id="${id}"]`); +
7270 +
7271 if (elem !== null) { +
7272 elem.on('click', function () { +
7273 callbackFunction(); +
7274 }); +
7275 } +
7276 }); +
7277 funs.push(function (element) { +
7278 const elem = d3__WEBPACK_IMPORTED_MODULE_2__["select"](element).select(`[id="${id}-text"]`); +
7279 +
7280 if (elem !== null) { +
7281 elem.on('click', function () { +
7282 callbackFunction(); +
7283 }); +
7284 } +
7285 }); +
7286}; +
7287/** +
7288 * Called by parser when a click definition is found. Registers an event handler. +
7289 * @param ids Comma separated list of ids +
7290 * @param functionName Function to be called on click +
7291 * @param functionArgs Function args the function should be called with +
7292 */ +
7293 +
7294 +
7295const setClickEvent = function (ids, functionName, functionArgs) { +
7296 ids.split(',').forEach(function (id) { +
7297 setClickFun(id, functionName, functionArgs); +
7298 }); +
7299 setClass(ids, 'clickable'); +
7300}; +
7301/** +
7302 * Binds all functions previously added to fun (specified through click) to the element +
7303 * @param element +
7304 */ +
7305 +
7306const bindFunctions = function (element) { +
7307 funs.forEach(function (fun) { +
7308 fun(element); +
7309 }); +
7310}; +
7311/* harmony default export */ __webpack_exports__["default"] = ({ +
7312 clear, +
7313 setDateFormat, +
7314 setAxisFormat, +
7315 getAxisFormat, +
7316 setTitle, +
7317 getTitle, +
7318 addSection, +
7319 getTasks, +
7320 addTask, +
7321 findTaskById, +
7322 addTaskOrg, +
7323 setExcludes, +
7324 setClickEvent, +
7325 setLink, +
7326 bindFunctions +
7327}); +
7328 +
7329function getTaskTags(data, task, tags) { +
7330 let matchFound = true; +
7331 +
7332 while (matchFound) { +
7333 matchFound = false; +
7334 tags.forEach(function (t) { +
7335 const pattern = '^\\s*' + t + '\\s*$'; +
7336 const regex = new RegExp(pattern); +
7337 +
7338 if (data[0].match(regex)) { +
7339 task[t] = true; +
7340 data.shift(1); +
7341 matchFound = true; +
7342 } +
7343 }); +
7344 } +
7345} +
7346 +
7347/***/ }), +
7348 +
7349/***/ "./src/diagrams/gantt/ganttRenderer.js": +
7350/*!*********************************************!*\ +
7351 !*** ./src/diagrams/gantt/ganttRenderer.js ***! +
7352 \*********************************************/ +
7353/*! exports provided: setConf, draw, default */ +
7354/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7355 +
7356"use strict"; +
7357__webpack_require__.r(__webpack_exports__); +
7358/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
7359/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
7360/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "d3"); +
7361/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__); +
7362/* harmony import */ var _parser_gantt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parser/gantt */ "./src/diagrams/gantt/parser/gantt.js"); +
7363/* harmony import */ var _parser_gantt__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_parser_gantt__WEBPACK_IMPORTED_MODULE_1__); +
7364/* harmony import */ var _ganttDb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ganttDb */ "./src/diagrams/gantt/ganttDb.js"); +
7365 +
7366 +
7367 +
7368_parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy = _ganttDb__WEBPACK_IMPORTED_MODULE_2__["default"]; +
7369const conf = { +
7370 titleTopMargin: 25, +
7371 barHeight: 20, +
7372 barGap: 4, +
7373 topPadding: 50, +
7374 rightPadding: 75, +
7375 leftPadding: 75, +
7376 gridLineStartPadding: 35, +
7377 fontSize: 11, +
7378 fontFamily: '"Open-Sans", "sans-serif"' +
7379}; +
7380const setConf = function (cnf) { +
7381 const keys = Object.keys(cnf); +
7382 keys.forEach(function (key) { +
7383 conf[key] = cnf[key]; +
7384 }); +
7385}; +
7386let w; +
7387const draw = function (text, id) { +
7388 _parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy.clear(); +
7389 _parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].parse(text); +
7390 const elem = document.getElementById(id); +
7391 w = elem.parentElement.offsetWidth; +
7392 +
7393 if (typeof w === 'undefined') { +
7394 w = 1200; +
7395 } +
7396 +
7397 if (typeof conf.useWidth !== 'undefined') { +
7398 w = conf.useWidth; +
7399 } +
7400 +
7401 const taskArray = _parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy.getTasks(); // Set height based on number of tasks +
7402 +
7403 const h = taskArray.length * (conf.barHeight + conf.barGap) + 2 * conf.topPadding; +
7404 elem.setAttribute('height', '100%'); // Set viewBox +
7405 +
7406 elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h); +
7407 const svg = d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id="${id}"]`); // Set timescale +
7408 +
7409 const timeScale = d3__WEBPACK_IMPORTED_MODULE_0__["scaleTime"]().domain([d3__WEBPACK_IMPORTED_MODULE_0__["min"](taskArray, function (d) { +
7410 return d.startTime; +
7411 }), d3__WEBPACK_IMPORTED_MODULE_0__["max"](taskArray, function (d) { +
7412 return d.endTime; +
7413 })]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]); +
7414 let categories = []; +
7415 +
7416 for (let i = 0; i < taskArray.length; i++) { +
7417 categories.push(taskArray[i].type); +
7418 } +
7419 +
7420 const catsUnfiltered = categories; // for vert labels +
7421 +
7422 categories = checkUnique(categories); +
7423 makeGant(taskArray, w, h); +
7424 +
7425 if (typeof conf.useWidth !== 'undefined') { +
7426 elem.setAttribute('width', w); +
7427 } +
7428 +
7429 svg.append('text').text(_parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy.getTitle()).attr('x', w / 2).attr('y', conf.titleTopMargin).attr('class', 'titleText'); +
7430 +
7431 function makeGant(tasks, pageWidth, pageHeight) { +
7432 const barHeight = conf.barHeight; +
7433 const gap = barHeight + conf.barGap; +
7434 const topPadding = conf.topPadding; +
7435 const leftPadding = conf.leftPadding; +
7436 const colorScale = d3__WEBPACK_IMPORTED_MODULE_0__["scaleLinear"]().domain([0, categories.length]).range(['#00B9FA', '#F95002']).interpolate(d3__WEBPACK_IMPORTED_MODULE_0__["interpolateHcl"]); +
7437 makeGrid(leftPadding, topPadding, pageWidth, pageHeight); +
7438 drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight); +
7439 vertLabels(gap, topPadding, leftPadding, barHeight, colorScale); +
7440 drawToday(leftPadding, topPadding, pageWidth, pageHeight); +
7441 } +
7442 +
7443 function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w, h) { +
7444 // Draw background rects covering the entire width of the graph, these form the section rows. +
7445 svg.append('g').selectAll('rect').data(theArray).enter().append('rect').attr('x', 0).attr('y', function (d, i) { +
7446 return i * theGap + theTopPad - 2; +
7447 }).attr('width', function () { +
7448 return w - conf.rightPadding / 2; +
7449 }).attr('height', theGap).attr('class', function (d) { +
7450 for (let i = 0; i < categories.length; i++) { +
7451 if (d.type === categories[i]) { +
7452 return 'section section' + i % conf.numberSectionStyles; +
7453 } +
7454 } +
7455 +
7456 return 'section section0'; +
7457 }); // Draw the rects representing the tasks +
7458 +
7459 const rectangles = svg.append('g').selectAll('rect').data(theArray).enter(); +
7460 rectangles.append('rect').attr('id', function (d) { +
7461 return d.id; +
7462 }).attr('rx', 3).attr('ry', 3).attr('x', function (d) { +
7463 if (d.milestone) { +
7464 return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; +
7465 } +
7466 +
7467 return timeScale(d.startTime) + theSidePad; +
7468 }).attr('y', function (d, i) { +
7469 return i * theGap + theTopPad; +
7470 }).attr('width', function (d) { +
7471 if (d.milestone) { +
7472 return theBarHeight; +
7473 } +
7474 +
7475 return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime); +
7476 }).attr('height', theBarHeight).attr('transform-origin', function (d, i) { +
7477 return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + 'px ' + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + 'px'; +
7478 }).attr('class', function (d) { +
7479 const res = 'task'; +
7480 let classStr = ''; +
7481 +
7482 if (d.classes.length > 0) { +
7483 classStr = d.classes.join(' '); +
7484 } +
7485 +
7486 let secNum = 0; +
7487 +
7488 for (let i = 0; i < categories.length; i++) { +
7489 if (d.type === categories[i]) { +
7490 secNum = i % conf.numberSectionStyles; +
7491 } +
7492 } +
7493 +
7494 let taskClass = ''; +
7495 +
7496 if (d.active) { +
7497 if (d.crit) { +
7498 taskClass += ' activeCrit'; +
7499 } else { +
7500 taskClass = ' active'; +
7501 } +
7502 } else if (d.done) { +
7503 if (d.crit) { +
7504 taskClass = ' doneCrit'; +
7505 } else { +
7506 taskClass = ' done'; +
7507 } +
7508 } else { +
7509 if (d.crit) { +
7510 taskClass += ' crit'; +
7511 } +
7512 } +
7513 +
7514 if (taskClass.length === 0) { +
7515 taskClass = ' task'; +
7516 } +
7517 +
7518 if (d.milestone) { +
7519 taskClass = ' milestone ' + taskClass; +
7520 } +
7521 +
7522 taskClass += secNum; +
7523 taskClass += ' ' + classStr; +
7524 return res + taskClass; +
7525 }); // Append task labels +
7526 +
7527 rectangles.append('text').text(function (d) { +
7528 return d.task; +
7529 }).attr('font-size', conf.fontSize).attr('x', function (d) { +
7530 let startX = timeScale(d.startTime); +
7531 let endX = timeScale(d.renderEndTime || d.endTime); +
7532 +
7533 if (d.milestone) { +
7534 startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; +
7535 } +
7536 +
7537 if (d.milestone) { +
7538 endX = startX + theBarHeight; +
7539 } +
7540 +
7541 const textWidth = this.getBBox().width; // Check id text width > width of rectangle +
7542 +
7543 if (textWidth > endX - startX) { +
7544 if (endX + textWidth + 1.5 * conf.leftPadding > w) { +
7545 return startX + theSidePad - 5; +
7546 } else { +
7547 return endX + theSidePad + 5; +
7548 } +
7549 } else { +
7550 return (endX - startX) / 2 + startX + theSidePad; +
7551 } +
7552 }).attr('y', function (d, i) { +
7553 return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad; +
7554 }).attr('text-height', theBarHeight).attr('class', function (d) { +
7555 const startX = timeScale(d.startTime); +
7556 let endX = timeScale(d.endTime); +
7557 +
7558 if (d.milestone) { +
7559 endX = startX + theBarHeight; +
7560 } +
7561 +
7562 const textWidth = this.getBBox().width; +
7563 let classStr = ''; +
7564 +
7565 if (d.classes.length > 0) { +
7566 classStr = d.classes.join(' '); +
7567 } +
7568 +
7569 let secNum = 0; +
7570 +
7571 for (let i = 0; i < categories.length; i++) { +
7572 if (d.type === categories[i]) { +
7573 secNum = i % conf.numberSectionStyles; +
7574 } +
7575 } +
7576 +
7577 let taskType = ''; +
7578 +
7579 if (d.active) { +
7580 if (d.crit) { +
7581 taskType = 'activeCritText' + secNum; +
7582 } else { +
7583 taskType = 'activeText' + secNum; +
7584 } +
7585 } +
7586 +
7587 if (d.done) { +
7588 if (d.crit) { +
7589 taskType = taskType + ' doneCritText' + secNum; +
7590 } else { +
7591 taskType = taskType + ' doneText' + secNum; +
7592 } +
7593 } else { +
7594 if (d.crit) { +
7595 taskType = taskType + ' critText' + secNum; +
7596 } +
7597 } +
7598 +
7599 if (d.milestone) { +
7600 taskType += ' milestoneText'; +
7601 } // Check id text width > width of rectangle +
7602 +
7603 +
7604 if (textWidth > endX - startX) { +
7605 if (endX + textWidth + 1.5 * conf.leftPadding > w) { +
7606 return classStr + ' taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType; +
7607 } else { +
7608 return classStr + ' taskTextOutsideRight taskTextOutside' + secNum + ' ' + taskType; +
7609 } +
7610 } else { +
7611 return classStr + ' taskText taskText' + secNum + ' ' + taskType; +
7612 } +
7613 }); +
7614 } +
7615 +
7616 function makeGrid(theSidePad, theTopPad, w, h) { +
7617 let xAxis = d3__WEBPACK_IMPORTED_MODULE_0__["axisBottom"](timeScale).tickSize(-h + theTopPad + conf.gridLineStartPadding).tickFormat(d3__WEBPACK_IMPORTED_MODULE_0__["timeFormat"](_parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy.getAxisFormat() || conf.axisFormat || '%Y-%m-%d')); +
7618 svg.append('g').attr('class', 'grid').attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')').call(xAxis).selectAll('text').style('text-anchor', 'middle').attr('fill', '#000').attr('stroke', 'none').attr('font-size', 10).attr('dy', '1em'); +
7619 } +
7620 +
7621 function vertLabels(theGap, theTopPad) { +
7622 const numOccurances = []; +
7623 let prevGap = 0; +
7624 +
7625 for (let i = 0; i < categories.length; i++) { +
7626 numOccurances[i] = [categories[i], getCount(categories[i], catsUnfiltered)]; +
7627 } +
7628 +
7629 svg.append('g') // without doing this, impossible to put grid lines behind text +
7630 .selectAll('text').data(numOccurances).enter().append('text').text(function (d) { +
7631 return d[0]; +
7632 }).attr('x', 10).attr('y', function (d, i) { +
7633 if (i > 0) { +
7634 for (let j = 0; j < i; j++) { +
7635 prevGap += numOccurances[i - 1][1]; +
7636 return d[1] * theGap / 2 + prevGap * theGap + theTopPad; +
7637 } +
7638 } else { +
7639 return d[1] * theGap / 2 + theTopPad; +
7640 } +
7641 }).attr('class', function (d) { +
7642 for (let i = 0; i < categories.length; i++) { +
7643 if (d[0] === categories[i]) { +
7644 return 'sectionTitle sectionTitle' + i % conf.numberSectionStyles; +
7645 } +
7646 } +
7647 +
7648 return 'sectionTitle'; +
7649 }); +
7650 } +
7651 +
7652 function drawToday(theSidePad, theTopPad, w, h) { +
7653 const todayG = svg.append('g').attr('class', 'today'); +
7654 const today = new Date(); +
7655 todayG.append('line').attr('x1', timeScale(today) + theSidePad).attr('x2', timeScale(today) + theSidePad).attr('y1', conf.titleTopMargin).attr('y2', h - conf.titleTopMargin).attr('class', 'today'); +
7656 } // from this stackexchange question: http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript +
7657 +
7658 +
7659 function checkUnique(arr) { +
7660 const hash = {}; +
7661 const result = []; +
7662 +
7663 for (let i = 0, l = arr.length; i < l; ++i) { +
7664 if (!hash.hasOwnProperty(arr[i])) { +
7665 // it works with objects! in FF, at least +
7666 hash[arr[i]] = true; +
7667 result.push(arr[i]); +
7668 } +
7669 } +
7670 +
7671 return result; +
7672 } // from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array +
7673 +
7674 +
7675 function getCounts(arr) { +
7676 let i = arr.length; // const to loop over +
7677 +
7678 const obj = {}; // obj to store results +
7679 +
7680 while (i) { +
7681 obj[arr[--i]] = (obj[arr[i]] || 0) + 1; // count occurrences +
7682 } +
7683 +
7684 return obj; +
7685 } // get specific from everything +
7686 +
7687 +
7688 function getCount(word, arr) { +
7689 return getCounts(arr)[word] || 0; +
7690 } +
7691}; +
7692/* harmony default export */ __webpack_exports__["default"] = ({ +
7693 setConf, +
7694 draw +
7695}); +
7696 +
7697/***/ }), +
7698 +
7699/***/ "./src/diagrams/gantt/parser/gantt.js": +
7700/*!********************************************!*\ +
7701 !*** ./src/diagrams/gantt/parser/gantt.js ***! +
7702 \********************************************/ +
7703/*! no static exports found */ +
7704/***/ (function(module, exports, __webpack_require__) { +
7705 +
7706/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
7707 +
7708/* +
7709 Returns a Parser object of the following structure: +
7710 +
7711 Parser: { +
7712 yy: {} +
7713 } +
7714 +
7715 Parser.prototype: { +
7716 yy: {}, +
7717 trace: function(), +
7718 symbols_: {associative list: name ==> number}, +
7719 terminals_: {associative list: number ==> name}, +
7720 productions_: [...], +
7721 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
7722 table: [...], +
7723 defaultActions: {...}, +
7724 parseError: function(str, hash), +
7725 parse: function(input), +
7726 +
7727 lexer: { +
7728 EOF: 1, +
7729 parseError: function(str, hash), +
7730 setInput: function(input), +
7731 input: function(), +
7732 unput: function(str), +
7733 more: function(), +
7734 less: function(n), +
7735 pastInput: function(), +
7736 upcomingInput: function(), +
7737 showPosition: function(), +
7738 test_match: function(regex_match_array, rule_index), +
7739 next: function(), +
7740 lex: function(), +
7741 begin: function(condition), +
7742 popState: function(), +
7743 _currentRules: function(), +
7744 topState: function(), +
7745 pushState: function(condition), +
7746 +
7747 options: { +
7748 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
7749 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
7750 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
7751 }, +
7752 +
7753 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
7754 rules: [...], +
7755 conditions: {associative list: name ==> set}, +
7756 } +
7757 } +
7758 +
7759 +
7760 token location info (@$, _$, etc.): { +
7761 first_line: n, +
7762 last_line: n, +
7763 first_column: n, +
7764 last_column: n, +
7765 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
7766 } +
7767 +
7768 +
7769 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
7770 text: (matched text) +
7771 token: (the produced terminal token, if any) +
7772 line: (yylineno) +
7773 } +
7774 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
7775 loc: (yylloc) +
7776 expected: (string describing the set of expected tokens) +
7777 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
7778 } +
7779*/ +
7780var parser = function () { +
7781 var o = function (k, v, o, l) { +
7782 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
7783 +
7784 return o; +
7785 }, +
7786 $V0 = [6, 8, 10, 11, 12, 13, 14, 15, 17, 19], +
7787 $V1 = [1, 9], +
7788 $V2 = [1, 10], +
7789 $V3 = [1, 11], +
7790 $V4 = [1, 12], +
7791 $V5 = [1, 13], +
7792 $V6 = [1, 15], +
7793 $V7 = [1, 16]; +
7794 +
7795 var parser = { +
7796 trace: function trace() {}, +
7797 yy: {}, +
7798 symbols_: { +
7799 "error": 2, +
7800 "start": 3, +
7801 "gantt": 4, +
7802 "document": 5, +
7803 "EOF": 6, +
7804 "line": 7, +
7805 "SPACE": 8, +
7806 "statement": 9, +
7807 "NL": 10, +
7808 "dateFormat": 11, +
7809 "axisFormat": 12, +
7810 "excludes": 13, +
7811 "title": 14, +
7812 "section": 15, +
7813 "clickStatement": 16, +
7814 "taskTxt": 17, +
7815 "taskData": 18, +
7816 "click": 19, +
7817 "callbackname": 20, +
7818 "callbackargs": 21, +
7819 "href": 22, +
7820 "clickStatementDebug": 23, +
7821 "$accept": 0, +
7822 "$end": 1 +
7823 }, +
7824 terminals_: { +
7825 2: "error", +
7826 4: "gantt", +
7827 6: "EOF", +
7828 8: "SPACE", +
7829 10: "NL", +
7830 11: "dateFormat", +
7831 12: "axisFormat", +
7832 13: "excludes", +
7833 14: "title", +
7834 15: "section", +
7835 17: "taskTxt", +
7836 18: "taskData", +
7837 19: "click", +
7838 20: "callbackname", +
7839 21: "callbackargs", +
7840 22: "href" +
7841 }, +
7842 productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [16, 2], [16, 3], [16, 3], [16, 4], [16, 3], [16, 4], [16, 2], [23, 2], [23, 3], [23, 3], [23, 4], [23, 3], [23, 4], [23, 2]], +
7843 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
7844 /* action[1] */ +
7845 , $$ +
7846 /* vstack */ +
7847 , _$ +
7848 /* lstack */ +
7849 ) { +
7850 /* this == yyval */ +
7851 var $0 = $$.length - 1; +
7852 +
7853 switch (yystate) { +
7854 case 1: +
7855 return $$[$0 - 1]; +
7856 break; +
7857 +
7858 case 2: +
7859 this.$ = []; +
7860 break; +
7861 +
7862 case 3: +
7863 $$[$0 - 1].push($$[$0]); +
7864 this.$ = $$[$0 - 1]; +
7865 break; +
7866 +
7867 case 4: +
7868 case 5: +
7869 this.$ = $$[$0]; +
7870 break; +
7871 +
7872 case 6: +
7873 case 7: +
7874 this.$ = []; +
7875 break; +
7876 +
7877 case 8: +
7878 yy.setDateFormat($$[$0].substr(11)); +
7879 this.$ = $$[$0].substr(11); +
7880 break; +
7881 +
7882 case 9: +
7883 yy.setAxisFormat($$[$0].substr(11)); +
7884 this.$ = $$[$0].substr(11); +
7885 break; +
7886 +
7887 case 10: +
7888 yy.setExcludes($$[$0].substr(9)); +
7889 this.$ = $$[$0].substr(9); +
7890 break; +
7891 +
7892 case 11: +
7893 yy.setTitle($$[$0].substr(6)); +
7894 this.$ = $$[$0].substr(6); +
7895 break; +
7896 +
7897 case 12: +
7898 yy.addSection($$[$0].substr(8)); +
7899 this.$ = $$[$0].substr(8); +
7900 break; +
7901 +
7902 case 14: +
7903 yy.addTask($$[$0 - 1], $$[$0]); +
7904 this.$ = 'task'; +
7905 break; +
7906 +
7907 case 15: +
7908 this.$ = $$[$0 - 1]; +
7909 yy.setClickEvent($$[$0 - 1], $$[$0], null); +
7910 break; +
7911 +
7912 case 16: +
7913 this.$ = $$[$0 - 2]; +
7914 yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); +
7915 break; +
7916 +
7917 case 17: +
7918 this.$ = $$[$0 - 2]; +
7919 yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null); +
7920 yy.setLink($$[$0 - 2], $$[$0]); +
7921 break; +
7922 +
7923 case 18: +
7924 this.$ = $$[$0 - 3]; +
7925 yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); +
7926 yy.setLink($$[$0 - 3], $$[$0]); +
7927 break; +
7928 +
7929 case 19: +
7930 this.$ = $$[$0 - 2]; +
7931 yy.setClickEvent($$[$0 - 2], $$[$0], null); +
7932 yy.setLink($$[$0 - 2], $$[$0 - 1]); +
7933 break; +
7934 +
7935 case 20: +
7936 this.$ = $$[$0 - 3]; +
7937 yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]); +
7938 yy.setLink($$[$0 - 3], $$[$0 - 2]); +
7939 break; +
7940 +
7941 case 21: +
7942 this.$ = $$[$0 - 1]; +
7943 yy.setLink($$[$0 - 1], $$[$0]); +
7944 break; +
7945 +
7946 case 22: +
7947 case 28: +
7948 this.$ = $$[$0 - 1] + ' ' + $$[$0]; +
7949 break; +
7950 +
7951 case 23: +
7952 case 24: +
7953 case 26: +
7954 this.$ = $$[$0 - 2] + ' ' + $$[$0 - 1] + ' ' + $$[$0]; +
7955 break; +
7956 +
7957 case 25: +
7958 case 27: +
7959 this.$ = $$[$0 - 3] + ' ' + $$[$0 - 2] + ' ' + $$[$0 - 1] + ' ' + $$[$0]; +
7960 break; +
7961 } +
7962 }, +
7963 table: [{ +
7964 3: 1, +
7965 4: [1, 2] +
7966 }, { +
7967 1: [3] +
7968 }, o($V0, [2, 2], { +
7969 5: 3 +
7970 }), { +
7971 6: [1, 4], +
7972 7: 5, +
7973 8: [1, 6], +
7974 9: 7, +
7975 10: [1, 8], +
7976 11: $V1, +
7977 12: $V2, +
7978 13: $V3, +
7979 14: $V4, +
7980 15: $V5, +
7981 16: 14, +
7982 17: $V6, +
7983 19: $V7 +
7984 }, o($V0, [2, 7], { +
7985 1: [2, 1] +
7986 }), o($V0, [2, 3]), { +
7987 9: 17, +
7988 11: $V1, +
7989 12: $V2, +
7990 13: $V3, +
7991 14: $V4, +
7992 15: $V5, +
7993 16: 14, +
7994 17: $V6, +
7995 19: $V7 +
7996 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 8]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), { +
7997 18: [1, 18] +
7998 }, { +
7999 20: [1, 19], +
8000 22: [1, 20] +
8001 }, o($V0, [2, 4]), o($V0, [2, 14]), o($V0, [2, 15], { +
8002 21: [1, 21], +
8003 22: [1, 22] +
8004 }), o($V0, [2, 21], { +
8005 20: [1, 23] +
8006 }), o($V0, [2, 16], { +
8007 22: [1, 24] +
8008 }), o($V0, [2, 17]), o($V0, [2, 19], { +
8009 21: [1, 25] +
8010 }), o($V0, [2, 18]), o($V0, [2, 20])], +
8011 defaultActions: {}, +
8012 parseError: function parseError(str, hash) { +
8013 if (hash.recoverable) { +
8014 this.trace(str); +
8015 } else { +
8016 var error = new Error(str); +
8017 error.hash = hash; +
8018 throw error; +
8019 } +
8020 }, +
8021 parse: function parse(input) { +
8022 var self = this, +
8023 stack = [0], +
8024 tstack = [], +
8025 vstack = [null], +
8026 lstack = [], +
8027 table = this.table, +
8028 yytext = '', +
8029 yylineno = 0, +
8030 yyleng = 0, +
8031 recovering = 0, +
8032 TERROR = 2, +
8033 EOF = 1; +
8034 var args = lstack.slice.call(arguments, 1); +
8035 var lexer = Object.create(this.lexer); +
8036 var sharedState = { +
8037 yy: {} +
8038 }; +
8039 +
8040 for (var k in this.yy) { +
8041 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
8042 sharedState.yy[k] = this.yy[k]; +
8043 } +
8044 } +
8045 +
8046 lexer.setInput(input, sharedState.yy); +
8047 sharedState.yy.lexer = lexer; +
8048 sharedState.yy.parser = this; +
8049 +
8050 if (typeof lexer.yylloc == 'undefined') { +
8051 lexer.yylloc = {}; +
8052 } +
8053 +
8054 var yyloc = lexer.yylloc; +
8055 lstack.push(yyloc); +
8056 var ranges = lexer.options && lexer.options.ranges; +
8057 +
8058 if (typeof sharedState.yy.parseError === 'function') { +
8059 this.parseError = sharedState.yy.parseError; +
8060 } else { +
8061 this.parseError = Object.getPrototypeOf(this).parseError; +
8062 } +
8063 +
8064 function popStack(n) { +
8065 stack.length = stack.length - 2 * n; +
8066 vstack.length = vstack.length - n; +
8067 lstack.length = lstack.length - n; +
8068 } +
8069 +
8070 function lex() { +
8071 var token; +
8072 token = tstack.pop() || lexer.lex() || EOF; +
8073 +
8074 if (typeof token !== 'number') { +
8075 if (token instanceof Array) { +
8076 tstack = token; +
8077 token = tstack.pop(); +
8078 } +
8079 +
8080 token = self.symbols_[token] || token; +
8081 } +
8082 +
8083 return token; +
8084 } +
8085 +
8086 var symbol, +
8087 preErrorSymbol, +
8088 state, +
8089 action, +
8090 a, +
8091 r, +
8092 yyval = {}, +
8093 p, +
8094 len, +
8095 newState, +
8096 expected; +
8097 +
8098 while (true) { +
8099 state = stack[stack.length - 1]; +
8100 +
8101 if (this.defaultActions[state]) { +
8102 action = this.defaultActions[state]; +
8103 } else { +
8104 if (symbol === null || typeof symbol == 'undefined') { +
8105 symbol = lex(); +
8106 } +
8107 +
8108 action = table[state] && table[state][symbol]; +
8109 } +
8110 +
8111 if (typeof action === 'undefined' || !action.length || !action[0]) { +
8112 var errStr = ''; +
8113 expected = []; +
8114 +
8115 for (p in table[state]) { +
8116 if (this.terminals_[p] && p > TERROR) { +
8117 expected.push('\'' + this.terminals_[p] + '\''); +
8118 } +
8119 } +
8120 +
8121 if (lexer.showPosition) { +
8122 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
8123 } else { +
8124 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
8125 } +
8126 +
8127 this.parseError(errStr, { +
8128 text: lexer.match, +
8129 token: this.terminals_[symbol] || symbol, +
8130 line: lexer.yylineno, +
8131 loc: yyloc, +
8132 expected: expected +
8133 }); +
8134 } +
8135 +
8136 if (action[0] instanceof Array && action.length > 1) { +
8137 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
8138 } +
8139 +
8140 switch (action[0]) { +
8141 case 1: +
8142 stack.push(symbol); +
8143 vstack.push(lexer.yytext); +
8144 lstack.push(lexer.yylloc); +
8145 stack.push(action[1]); +
8146 symbol = null; +
8147 +
8148 if (!preErrorSymbol) { +
8149 yyleng = lexer.yyleng; +
8150 yytext = lexer.yytext; +
8151 yylineno = lexer.yylineno; +
8152 yyloc = lexer.yylloc; +
8153 +
8154 if (recovering > 0) { +
8155 recovering--; +
8156 } +
8157 } else { +
8158 symbol = preErrorSymbol; +
8159 preErrorSymbol = null; +
8160 } +
8161 +
8162 break; +
8163 +
8164 case 2: +
8165 len = this.productions_[action[1]][1]; +
8166 yyval.$ = vstack[vstack.length - len]; +
8167 yyval._$ = { +
8168 first_line: lstack[lstack.length - (len || 1)].first_line, +
8169 last_line: lstack[lstack.length - 1].last_line, +
8170 first_column: lstack[lstack.length - (len || 1)].first_column, +
8171 last_column: lstack[lstack.length - 1].last_column +
8172 }; +
8173 +
8174 if (ranges) { +
8175 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
8176 } +
8177 +
8178 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
8179 +
8180 if (typeof r !== 'undefined') { +
8181 return r; +
8182 } +
8183 +
8184 if (len) { +
8185 stack = stack.slice(0, -1 * len * 2); +
8186 vstack = vstack.slice(0, -1 * len); +
8187 lstack = lstack.slice(0, -1 * len); +
8188 } +
8189 +
8190 stack.push(this.productions_[action[1]][0]); +
8191 vstack.push(yyval.$); +
8192 lstack.push(yyval._$); +
8193 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
8194 stack.push(newState); +
8195 break; +
8196 +
8197 case 3: +
8198 return true; +
8199 } +
8200 } +
8201 +
8202 return true; +
8203 } +
8204 }; +
8205 /* generated by jison-lex 0.3.4 */ +
8206 +
8207 var lexer = function () { +
8208 var lexer = { +
8209 EOF: 1, +
8210 parseError: function parseError(str, hash) { +
8211 if (this.yy.parser) { +
8212 this.yy.parser.parseError(str, hash); +
8213 } else { +
8214 throw new Error(str); +
8215 } +
8216 }, +
8217 // resets the lexer, sets new input +
8218 setInput: function (input, yy) { +
8219 this.yy = yy || this.yy || {}; +
8220 this._input = input; +
8221 this._more = this._backtrack = this.done = false; +
8222 this.yylineno = this.yyleng = 0; +
8223 this.yytext = this.matched = this.match = ''; +
8224 this.conditionStack = ['INITIAL']; +
8225 this.yylloc = { +
8226 first_line: 1, +
8227 first_column: 0, +
8228 last_line: 1, +
8229 last_column: 0 +
8230 }; +
8231 +
8232 if (this.options.ranges) { +
8233 this.yylloc.range = [0, 0]; +
8234 } +
8235 +
8236 this.offset = 0; +
8237 return this; +
8238 }, +
8239 // consumes and returns one char from the input +
8240 input: function () { +
8241 var ch = this._input[0]; +
8242 this.yytext += ch; +
8243 this.yyleng++; +
8244 this.offset++; +
8245 this.match += ch; +
8246 this.matched += ch; +
8247 var lines = ch.match(/(?:\r\n?|\n).*/g); +
8248 +
8249 if (lines) { +
8250 this.yylineno++; +
8251 this.yylloc.last_line++; +
8252 } else { +
8253 this.yylloc.last_column++; +
8254 } +
8255 +
8256 if (this.options.ranges) { +
8257 this.yylloc.range[1]++; +
8258 } +
8259 +
8260 this._input = this._input.slice(1); +
8261 return ch; +
8262 }, +
8263 // unshifts one char (or a string) into the input +
8264 unput: function (ch) { +
8265 var len = ch.length; +
8266 var lines = ch.split(/(?:\r\n?|\n)/g); +
8267 this._input = ch + this._input; +
8268 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
8269 +
8270 this.offset -= len; +
8271 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
8272 this.match = this.match.substr(0, this.match.length - 1); +
8273 this.matched = this.matched.substr(0, this.matched.length - 1); +
8274 +
8275 if (lines.length - 1) { +
8276 this.yylineno -= lines.length - 1; +
8277 } +
8278 +
8279 var r = this.yylloc.range; +
8280 this.yylloc = { +
8281 first_line: this.yylloc.first_line, +
8282 last_line: this.yylineno + 1, +
8283 first_column: this.yylloc.first_column, +
8284 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
8285 }; +
8286 +
8287 if (this.options.ranges) { +
8288 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
8289 } +
8290 +
8291 this.yyleng = this.yytext.length; +
8292 return this; +
8293 }, +
8294 // When called from action, caches matched text and appends it on next action +
8295 more: function () { +
8296 this._more = true; +
8297 return this; +
8298 }, +
8299 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
8300 reject: function () { +
8301 if (this.options.backtrack_lexer) { +
8302 this._backtrack = true; +
8303 } else { +
8304 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
8305 text: "", +
8306 token: null, +
8307 line: this.yylineno +
8308 }); +
8309 } +
8310 +
8311 return this; +
8312 }, +
8313 // retain first n characters of the match +
8314 less: function (n) { +
8315 this.unput(this.match.slice(n)); +
8316 }, +
8317 // displays already matched input, i.e. for error messages +
8318 pastInput: function () { +
8319 var past = this.matched.substr(0, this.matched.length - this.match.length); +
8320 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
8321 }, +
8322 // displays upcoming input, i.e. for error messages +
8323 upcomingInput: function () { +
8324 var next = this.match; +
8325 +
8326 if (next.length < 20) { +
8327 next += this._input.substr(0, 20 - next.length); +
8328 } +
8329 +
8330 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
8331 }, +
8332 // displays the character position where the lexing error occurred, i.e. for error messages +
8333 showPosition: function () { +
8334 var pre = this.pastInput(); +
8335 var c = new Array(pre.length + 1).join("-"); +
8336 return pre + this.upcomingInput() + "\n" + c + "^"; +
8337 }, +
8338 // test the lexed token: return FALSE when not a match, otherwise return token +
8339 test_match: function (match, indexed_rule) { +
8340 var token, lines, backup; +
8341 +
8342 if (this.options.backtrack_lexer) { +
8343 // save context +
8344 backup = { +
8345 yylineno: this.yylineno, +
8346 yylloc: { +
8347 first_line: this.yylloc.first_line, +
8348 last_line: this.last_line, +
8349 first_column: this.yylloc.first_column, +
8350 last_column: this.yylloc.last_column +
8351 }, +
8352 yytext: this.yytext, +
8353 match: this.match, +
8354 matches: this.matches, +
8355 matched: this.matched, +
8356 yyleng: this.yyleng, +
8357 offset: this.offset, +
8358 _more: this._more, +
8359 _input: this._input, +
8360 yy: this.yy, +
8361 conditionStack: this.conditionStack.slice(0), +
8362 done: this.done +
8363 }; +
8364 +
8365 if (this.options.ranges) { +
8366 backup.yylloc.range = this.yylloc.range.slice(0); +
8367 } +
8368 } +
8369 +
8370 lines = match[0].match(/(?:\r\n?|\n).*/g); +
8371 +
8372 if (lines) { +
8373 this.yylineno += lines.length; +
8374 } +
8375 +
8376 this.yylloc = { +
8377 first_line: this.yylloc.last_line, +
8378 last_line: this.yylineno + 1, +
8379 first_column: this.yylloc.last_column, +
8380 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
8381 }; +
8382 this.yytext += match[0]; +
8383 this.match += match[0]; +
8384 this.matches = match; +
8385 this.yyleng = this.yytext.length; +
8386 +
8387 if (this.options.ranges) { +
8388 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
8389 } +
8390 +
8391 this._more = false; +
8392 this._backtrack = false; +
8393 this._input = this._input.slice(match[0].length); +
8394 this.matched += match[0]; +
8395 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
8396 +
8397 if (this.done && this._input) { +
8398 this.done = false; +
8399 } +
8400 +
8401 if (token) { +
8402 return token; +
8403 } else if (this._backtrack) { +
8404 // recover context +
8405 for (var k in backup) { +
8406 this[k] = backup[k]; +
8407 } +
8408 +
8409 return false; // rule action called reject() implying the next rule should be tested instead. +
8410 } +
8411 +
8412 return false; +
8413 }, +
8414 // return next match in input +
8415 next: function () { +
8416 if (this.done) { +
8417 return this.EOF; +
8418 } +
8419 +
8420 if (!this._input) { +
8421 this.done = true; +
8422 } +
8423 +
8424 var token, match, tempMatch, index; +
8425 +
8426 if (!this._more) { +
8427 this.yytext = ''; +
8428 this.match = ''; +
8429 } +
8430 +
8431 var rules = this._currentRules(); +
8432 +
8433 for (var i = 0; i < rules.length; i++) { +
8434 tempMatch = this._input.match(this.rules[rules[i]]); +
8435 +
8436 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
8437 match = tempMatch; +
8438 index = i; +
8439 +
8440 if (this.options.backtrack_lexer) { +
8441 token = this.test_match(tempMatch, rules[i]); +
8442 +
8443 if (token !== false) { +
8444 return token; +
8445 } else if (this._backtrack) { +
8446 match = false; +
8447 continue; // rule action called reject() implying a rule MISmatch. +
8448 } else { +
8449 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
8450 return false; +
8451 } +
8452 } else if (!this.options.flex) { +
8453 break; +
8454 } +
8455 } +
8456 } +
8457 +
8458 if (match) { +
8459 token = this.test_match(match, rules[index]); +
8460 +
8461 if (token !== false) { +
8462 return token; +
8463 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
8464 +
8465 +
8466 return false; +
8467 } +
8468 +
8469 if (this._input === "") { +
8470 return this.EOF; +
8471 } else { +
8472 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
8473 text: "", +
8474 token: null, +
8475 line: this.yylineno +
8476 }); +
8477 } +
8478 }, +
8479 // return next match that has a token +
8480 lex: function lex() { +
8481 var r = this.next(); +
8482 +
8483 if (r) { +
8484 return r; +
8485 } else { +
8486 return this.lex(); +
8487 } +
8488 }, +
8489 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
8490 begin: function begin(condition) { +
8491 this.conditionStack.push(condition); +
8492 }, +
8493 // pop the previously active lexer condition state off the condition stack +
8494 popState: function popState() { +
8495 var n = this.conditionStack.length - 1; +
8496 +
8497 if (n > 0) { +
8498 return this.conditionStack.pop(); +
8499 } else { +
8500 return this.conditionStack[0]; +
8501 } +
8502 }, +
8503 // produce the lexer rule set which is active for the currently active lexer condition state +
8504 _currentRules: function _currentRules() { +
8505 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
8506 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
8507 } else { +
8508 return this.conditions["INITIAL"].rules; +
8509 } +
8510 }, +
8511 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
8512 topState: function topState(n) { +
8513 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
8514 +
8515 if (n >= 0) { +
8516 return this.conditionStack[n]; +
8517 } else { +
8518 return "INITIAL"; +
8519 } +
8520 }, +
8521 // alias for begin(condition) +
8522 pushState: function pushState(condition) { +
8523 this.begin(condition); +
8524 }, +
8525 // return the number of states currently on the stack +
8526 stateStackSize: function stateStackSize() { +
8527 return this.conditionStack.length; +
8528 }, +
8529 options: { +
8530 "case-insensitive": true +
8531 }, +
8532 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
8533 var YYSTATE = YY_START; +
8534 +
8535 switch ($avoiding_name_collisions) { +
8536 case 0: +
8537 return 10; +
8538 break; +
8539 +
8540 case 1: +
8541 /* skip whitespace */ +
8542 break; +
8543 +
8544 case 2: +
8545 /* skip comments */ +
8546 break; +
8547 +
8548 case 3: +
8549 /* skip comments */ +
8550 break; +
8551 +
8552 case 4: +
8553 this.begin("href"); +
8554 break; +
8555 +
8556 case 5: +
8557 this.popState(); +
8558 break; +
8559 +
8560 case 6: +
8561 return 22; +
8562 break; +
8563 +
8564 case 7: +
8565 this.begin("callbackname"); +
8566 break; +
8567 +
8568 case 8: +
8569 this.popState(); +
8570 break; +
8571 +
8572 case 9: +
8573 this.popState(); +
8574 this.begin("callbackargs"); +
8575 break; +
8576 +
8577 case 10: +
8578 return 20; +
8579 break; +
8580 +
8581 case 11: +
8582 this.popState(); +
8583 break; +
8584 +
8585 case 12: +
8586 return 21; +
8587 break; +
8588 +
8589 case 13: +
8590 this.begin("click"); +
8591 break; +
8592 +
8593 case 14: +
8594 this.popState(); +
8595 break; +
8596 +
8597 case 15: +
8598 return 19; +
8599 break; +
8600 +
8601 case 16: +
8602 return 4; +
8603 break; +
8604 +
8605 case 17: +
8606 return 11; +
8607 break; +
8608 +
8609 case 18: +
8610 return 12; +
8611 break; +
8612 +
8613 case 19: +
8614 return 13; +
8615 break; +
8616 +
8617 case 20: +
8618 return 'date'; +
8619 break; +
8620 +
8621 case 21: +
8622 return 14; +
8623 break; +
8624 +
8625 case 22: +
8626 return 15; +
8627 break; +
8628 +
8629 case 23: +
8630 return 17; +
8631 break; +
8632 +
8633 case 24: +
8634 return 18; +
8635 break; +
8636 +
8637 case 25: +
8638 return ':'; +
8639 break; +
8640 +
8641 case 26: +
8642 return 6; +
8643 break; +
8644 +
8645 case 27: +
8646 return 'INVALID'; +
8647 break; +
8648 } +
8649 }, +
8650 rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], +
8651 conditions: { +
8652 "callbackargs": { +
8653 "rules": [11, 12], +
8654 "inclusive": false +
8655 }, +
8656 "callbackname": { +
8657 "rules": [8, 9, 10], +
8658 "inclusive": false +
8659 }, +
8660 "href": { +
8661 "rules": [5, 6], +
8662 "inclusive": false +
8663 }, +
8664 "click": { +
8665 "rules": [14, 15], +
8666 "inclusive": false +
8667 }, +
8668 "INITIAL": { +
8669 "rules": [0, 1, 2, 3, 4, 7, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], +
8670 "inclusive": true +
8671 } +
8672 } +
8673 }; +
8674 return lexer; +
8675 }(); +
8676 +
8677 parser.lexer = lexer; +
8678 +
8679 function Parser() { +
8680 this.yy = {}; +
8681 } +
8682 +
8683 Parser.prototype = parser; +
8684 parser.Parser = Parser; +
8685 return new Parser(); +
8686}(); +
8687 +
8688if (true) { +
8689 exports.parser = parser; +
8690 exports.Parser = parser.Parser; +
8691 +
8692 exports.parse = function () { +
8693 return parser.parse.apply(parser, arguments); +
8694 }; +
8695 +
8696 exports.main = function commonjsMain(args) { +
8697 if (!args[1]) { +
8698 console.log('Usage: ' + args[0] + ' FILE'); +
8699 process.exit(1); +
8700 } +
8701 +
8702 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
8703 +
8704 return exports.parser.parse(source); +
8705 }; +
8706 +
8707 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
8708 exports.main(process.argv.slice(1)); +
8709 } +
8710} +
8711/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
8712 +
8713/***/ }), +
8714 +
8715/***/ "./src/diagrams/git/gitGraphAst.js": +
8716/*!*****************************************!*\ +
8717 !*** ./src/diagrams/git/gitGraphAst.js ***! +
8718 \*****************************************/ +
8719/*! exports provided: setDirection, setOptions, getOptions, commit, branch, merge, checkout, reset, prettyPrint, clear, getBranchesAsObjArray, getBranches, getCommits, getCommitsArray, getCurrentBranch, getDirection, getHead, default */ +
8720/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8721 +
8722"use strict"; +
8723__webpack_require__.r(__webpack_exports__); +
8724/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDirection", function() { return setDirection; }); +
8725/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setOptions", function() { return setOptions; }); +
8726/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOptions", function() { return getOptions; }); +
8727/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "commit", function() { return commit; }); +
8728/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "branch", function() { return branch; }); +
8729/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; }); +
8730/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkout", function() { return checkout; }); +
8731/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return reset; }); +
8732/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prettyPrint", function() { return prettyPrint; }); +
8733/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
8734/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBranchesAsObjArray", function() { return getBranchesAsObjArray; }); +
8735/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBranches", function() { return getBranches; }); +
8736/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCommits", function() { return getCommits; }); +
8737/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCommitsArray", function() { return getCommitsArray; }); +
8738/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentBranch", function() { return getCurrentBranch; }); +
8739/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDirection", function() { return getDirection; }); +
8740/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getHead", function() { return getHead; }); +
8741/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "lodash"); +
8742/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__); +
8743/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
8744 +
8745 +
8746let commits = {}; +
8747let head = null; +
8748let branches = { +
8749 'master': head +
8750}; +
8751let curBranch = 'master'; +
8752let direction = 'LR'; +
8753let seq = 0; +
8754 +
8755function getRandomInt(min, max) { +
8756 return Math.floor(Math.random() * (max - min)) + min; +
8757} +
8758 +
8759function getId() { +
8760 const pool = '0123456789abcdef'; +
8761 let id = ''; +
8762 +
8763 for (let i = 0; i < 7; i++) { +
8764 id += pool[getRandomInt(0, 16)]; +
8765 } +
8766 +
8767 return id; +
8768} +
8769 +
8770function isfastforwardable(currentCommit, otherCommit) { +
8771 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id); +
8772 +
8773 while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit) { +
8774 // only if other branch has more commits +
8775 if (otherCommit.parent == null) break; +
8776 +
8777 if (Array.isArray(otherCommit.parent)) { +
8778 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('In merge commit:', otherCommit.parent); +
8779 return isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) || isfastforwardable(currentCommit, commits[otherCommit.parent[1]]); +
8780 } else { +
8781 otherCommit = commits[otherCommit.parent]; +
8782 } +
8783 } +
8784 +
8785 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(currentCommit.id, otherCommit.id); +
8786 return currentCommit.id === otherCommit.id; +
8787} +
8788 +
8789function isReachableFrom(currentCommit, otherCommit) { +
8790 const currentSeq = currentCommit.seq; +
8791 const otherSeq = otherCommit.seq; +
8792 if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit); +
8793 return false; +
8794} +
8795 +
8796const setDirection = function (dir) { +
8797 direction = dir; +
8798}; +
8799let options = {}; +
8800const setOptions = function (rawOptString) { +
8801 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('options str', rawOptString); +
8802 rawOptString = rawOptString && rawOptString.trim(); +
8803 rawOptString = rawOptString || '{}'; +
8804 +
8805 try { +
8806 options = JSON.parse(rawOptString); +
8807 } catch (e) { +
8808 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].error('error while parsing gitGraph options', e.message); +
8809 } +
8810}; +
8811const getOptions = function () { +
8812 return options; +
8813}; +
8814const commit = function (msg) { +
8815 const commit = { +
8816 id: getId(), +
8817 message: msg, +
8818 seq: seq++, +
8819 parent: head == null ? null : head.id +
8820 }; +
8821 head = commit; +
8822 commits[commit.id] = commit; +
8823 branches[curBranch] = commit.id; +
8824 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in pushCommit ' + commit.id); +
8825}; +
8826const branch = function (name) { +
8827 branches[name] = head != null ? head.id : null; +
8828 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in createBranch'); +
8829}; +
8830const merge = function (otherBranch) { +
8831 const currentCommit = commits[branches[curBranch]]; +
8832 const otherCommit = commits[branches[otherBranch]]; +
8833 +
8834 if (isReachableFrom(currentCommit, otherCommit)) { +
8835 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('Already merged'); +
8836 return; +
8837 } +
8838 +
8839 if (isfastforwardable(currentCommit, otherCommit)) { +
8840 branches[curBranch] = branches[otherBranch]; +
8841 head = commits[branches[curBranch]]; +
8842 } else { +
8843 // create merge commit +
8844 const commit = { +
8845 id: getId(), +
8846 message: 'merged branch ' + otherBranch + ' into ' + curBranch, +
8847 seq: seq++, +
8848 parent: [head == null ? null : head.id, branches[otherBranch]] +
8849 }; +
8850 head = commit; +
8851 commits[commit.id] = commit; +
8852 branches[curBranch] = commit.id; +
8853 } +
8854 +
8855 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(branches); +
8856 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in mergeBranch'); +
8857}; +
8858const checkout = function (branch) { +
8859 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in checkout'); +
8860 curBranch = branch; +
8861 const id = branches[curBranch]; +
8862 head = commits[id]; +
8863}; +
8864const reset = function (commitRef) { +
8865 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in reset', commitRef); +
8866 const ref = commitRef.split(':')[0]; +
8867 let parentCount = parseInt(commitRef.split(':')[1]); +
8868 let commit = ref === 'HEAD' ? head : commits[branches[ref]]; +
8869 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(commit, parentCount); +
8870 +
8871 while (parentCount > 0) { +
8872 commit = commits[commit.parent]; +
8873 parentCount--; +
8874 +
8875 if (!commit) { +
8876 const err = 'Critical error - unique parent commit not found during reset'; +
8877 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].error(err); +
8878 throw err; +
8879 } +
8880 } +
8881 +
8882 head = commit; +
8883 branches[curBranch] = commit.id; +
8884}; +
8885 +
8886function upsert(arr, key, newval) { +
8887 const index = arr.indexOf(key); +
8888 +
8889 if (index === -1) { +
8890 arr.push(newval); +
8891 } else { +
8892 arr.splice(index, 1, newval); +
8893 } +
8894} +
8895 +
8896function prettyPrintCommitHistory(commitArr) { +
8897 const commit = lodash__WEBPACK_IMPORTED_MODULE_0___default.a.maxBy(commitArr, 'seq'); +
8898 +
8899 let line = ''; +
8900 commitArr.forEach(function (c) { +
8901 if (c === commit) { +
8902 line += '\t*'; +
8903 } else { +
8904 line += '\t|'; +
8905 } +
8906 }); +
8907 const label = [line, commit.id, commit.seq]; +
8908 +
8909 for (let branch in branches) { +
8910 if (branches[branch] === commit.id) label.push(branch); +
8911 } +
8912 +
8913 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(label.join(' ')); +
8914 +
8915 if (Array.isArray(commit.parent)) { +
8916 const newCommit = commits[commit.parent[0]]; +
8917 upsert(commitArr, commit, newCommit); +
8918 commitArr.push(commits[commit.parent[1]]); +
8919 } else if (commit.parent == null) { +
8920 return; +
8921 } else { +
8922 const nextCommit = commits[commit.parent]; +
8923 upsert(commitArr, commit, nextCommit); +
8924 } +
8925 +
8926 commitArr = lodash__WEBPACK_IMPORTED_MODULE_0___default.a.uniqBy(commitArr, 'id'); +
8927 prettyPrintCommitHistory(commitArr); +
8928} +
8929 +
8930const prettyPrint = function () { +
8931 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(commits); +
8932 const node = getCommitsArray()[0]; +
8933 prettyPrintCommitHistory([node]); +
8934}; +
8935const clear = function () { +
8936 commits = {}; +
8937 head = null; +
8938 branches = { +
8939 'master': head +
8940 }; +
8941 curBranch = 'master'; +
8942 seq = 0; +
8943}; +
8944const getBranchesAsObjArray = function () { +
8945 const branchArr = []; +
8946 +
8947 for (let branch in branches) { +
8948 branchArr.push({ +
8949 name: branch, +
8950 commit: commits[branches[branch]] +
8951 }); +
8952 } +
8953 +
8954 return branchArr; +
8955}; +
8956const getBranches = function () { +
8957 return branches; +
8958}; +
8959const getCommits = function () { +
8960 return commits; +
8961}; +
8962const getCommitsArray = function () { +
8963 const commitArr = Object.keys(commits).map(function (key) { +
8964 return commits[key]; +
8965 }); +
8966 commitArr.forEach(function (o) { +
8967 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(o.id); +
8968 }); +
8969 return lodash__WEBPACK_IMPORTED_MODULE_0___default.a.orderBy(commitArr, ['seq'], ['desc']); +
8970}; +
8971const getCurrentBranch = function () { +
8972 return curBranch; +
8973}; +
8974const getDirection = function () { +
8975 return direction; +
8976}; +
8977const getHead = function () { +
8978 return head; +
8979}; +
8980/* harmony default export */ __webpack_exports__["default"] = ({ +
8981 setDirection, +
8982 setOptions, +
8983 getOptions, +
8984 commit, +
8985 branch, +
8986 merge, +
8987 checkout, +
8988 reset, +
8989 prettyPrint, +
8990 clear, +
8991 getBranchesAsObjArray, +
8992 getBranches, +
8993 getCommits, +
8994 getCommitsArray, +
8995 getCurrentBranch, +
8996 getDirection, +
8997 getHead +
8998}); +
8999 +
9000/***/ }), +
9001 +
9002/***/ "./src/diagrams/git/gitGraphRenderer.js": +
9003/*!**********************************************!*\ +
9004 !*** ./src/diagrams/git/gitGraphRenderer.js ***! +
9005 \**********************************************/ +
9006/*! exports provided: setConf, draw, default */ +
9007/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9008 +
9009"use strict"; +
9010__webpack_require__.r(__webpack_exports__); +
9011/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
9012/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
9013/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "d3"); +
9014/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__); +
9015/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash"); +
9016/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__); +
9017/* harmony import */ var _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gitGraphAst */ "./src/diagrams/git/gitGraphAst.js"); +
9018/* harmony import */ var _parser_gitGraph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parser/gitGraph */ "./src/diagrams/git/parser/gitGraph.js"); +
9019/* harmony import */ var _parser_gitGraph__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_parser_gitGraph__WEBPACK_IMPORTED_MODULE_3__); +
9020/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
9021/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils */ "./src/utils.js"); +
9022 +
9023 +
9024 +
9025 +
9026 +
9027 +
9028let allCommitsDict = {}; +
9029let branchNum; +
9030let config = { +
9031 nodeSpacing: 150, +
9032 nodeFillColor: 'yellow', +
9033 nodeStrokeWidth: 2, +
9034 nodeStrokeColor: 'grey', +
9035 lineStrokeWidth: 4, +
9036 branchOffset: 50, +
9037 lineColor: 'grey', +
9038 leftMargin: 50, +
9039 branchColors: ['#442f74', '#983351', '#609732', '#AA9A39'], +
9040 nodeRadius: 10, +
9041 nodeLabel: { +
9042 width: 75, +
9043 height: 100, +
9044 x: -25, +
9045 y: 0 +
9046 } +
9047}; +
9048let apiConfig = {}; +
9049const setConf = function (c) { +
9050 apiConfig = c; +
9051}; +
9052 +
9053function svgCreateDefs(svg) { +
9054 svg.append('defs').append('g').attr('id', 'def-commit').append('circle').attr('r', config.nodeRadius).attr('cx', 0).attr('cy', 0); +
9055 svg.select('#def-commit').append('foreignObject').attr('width', config.nodeLabel.width).attr('height', config.nodeLabel.height).attr('x', config.nodeLabel.x).attr('y', config.nodeLabel.y).attr('class', 'node-label').attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility').append('p').html(''); +
9056} +
9057 +
9058function svgDrawLine(svg, points, colorIdx, interpolate) { +
9059 const curve = Object(_utils__WEBPACK_IMPORTED_MODULE_5__["interpolateToCurve"])(interpolate, d3__WEBPACK_IMPORTED_MODULE_0__["curveBasis"]); +
9060 const color = config.branchColors[colorIdx % config.branchColors.length]; +
9061 const lineGen = d3__WEBPACK_IMPORTED_MODULE_0__["line"]().x(function (d) { +
9062 return Math.round(d.x); +
9063 }).y(function (d) { +
9064 return Math.round(d.y); +
9065 }).curve(curve); +
9066 svg.append('svg:path').attr('d', lineGen(points)).style('stroke', color).style('stroke-width', config.lineStrokeWidth).style('fill', 'none'); +
9067} // Pass in the element and its pre-transform coords +
9068 +
9069 +
9070function getElementCoords(element, coords) { +
9071 coords = coords || element.node().getBBox(); +
9072 const ctm = element.node().getCTM(); +
9073 const xn = ctm.e + coords.x * ctm.a; +
9074 const yn = ctm.f + coords.y * ctm.d; +
9075 return { +
9076 left: xn, +
9077 top: yn, +
9078 width: coords.width, +
9079 height: coords.height +
9080 }; +
9081} +
9082 +
9083function svgDrawLineForCommits(svg, fromId, toId, direction, color) { +
9084 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('svgDrawLineForCommits: ', fromId, toId); +
9085 const fromBbox = getElementCoords(svg.select('#node-' + fromId + ' circle')); +
9086 const toBbox = getElementCoords(svg.select('#node-' + toId + ' circle')); +
9087 +
9088 switch (direction) { +
9089 case 'LR': +
9090 // (toBbox) +
9091 // +-------- +
9092 // + (fromBbox) +
9093 if (fromBbox.left - toBbox.left > config.nodeSpacing) { +
9094 const lineStart = { +
9095 x: fromBbox.left - config.nodeSpacing, +
9096 y: toBbox.top + toBbox.height / 2 +
9097 }; +
9098 const lineEnd = { +
9099 x: toBbox.left + toBbox.width, +
9100 y: toBbox.top + toBbox.height / 2 +
9101 }; +
9102 svgDrawLine(svg, [lineStart, lineEnd], color, 'linear'); +
9103 svgDrawLine(svg, [{ +
9104 x: fromBbox.left, +
9105 y: fromBbox.top + fromBbox.height / 2 +
9106 }, { +
9107 x: fromBbox.left - config.nodeSpacing / 2, +
9108 y: fromBbox.top + fromBbox.height / 2 +
9109 }, { +
9110 x: fromBbox.left - config.nodeSpacing / 2, +
9111 y: lineStart.y +
9112 }, lineStart], color); +
9113 } else { +
9114 svgDrawLine(svg, [{ +
9115 'x': fromBbox.left, +
9116 'y': fromBbox.top + fromBbox.height / 2 +
9117 }, { +
9118 'x': fromBbox.left - config.nodeSpacing / 2, +
9119 'y': fromBbox.top + fromBbox.height / 2 +
9120 }, { +
9121 'x': fromBbox.left - config.nodeSpacing / 2, +
9122 'y': toBbox.top + toBbox.height / 2 +
9123 }, { +
9124 'x': toBbox.left + toBbox.width, +
9125 'y': toBbox.top + toBbox.height / 2 +
9126 }], color); +
9127 } +
9128 +
9129 break; +
9130 +
9131 case 'BT': +
9132 // + (fromBbox) +
9133 // | +
9134 // | +
9135 // + (toBbox) +
9136 if (toBbox.top - fromBbox.top > config.nodeSpacing) { +
9137 const lineStart = { +
9138 x: toBbox.left + toBbox.width / 2, +
9139 y: fromBbox.top + fromBbox.height + config.nodeSpacing +
9140 }; +
9141 const lineEnd = { +
9142 x: toBbox.left + toBbox.width / 2, +
9143 y: toBbox.top +
9144 }; +
9145 svgDrawLine(svg, [lineStart, lineEnd], color, 'linear'); +
9146 svgDrawLine(svg, [{ +
9147 x: fromBbox.left + fromBbox.width / 2, +
9148 y: fromBbox.top + fromBbox.height +
9149 }, { +
9150 x: fromBbox.left + fromBbox.width / 2, +
9151 y: fromBbox.top + fromBbox.height + config.nodeSpacing / 2 +
9152 }, { +
9153 x: toBbox.left + toBbox.width / 2, +
9154 y: lineStart.y - config.nodeSpacing / 2 +
9155 }, lineStart], color); +
9156 } else { +
9157 svgDrawLine(svg, [{ +
9158 'x': fromBbox.left + fromBbox.width / 2, +
9159 'y': fromBbox.top + fromBbox.height +
9160 }, { +
9161 'x': fromBbox.left + fromBbox.width / 2, +
9162 'y': fromBbox.top + config.nodeSpacing / 2 +
9163 }, { +
9164 'x': toBbox.left + toBbox.width / 2, +
9165 'y': toBbox.top - config.nodeSpacing / 2 +
9166 }, { +
9167 'x': toBbox.left + toBbox.width / 2, +
9168 'y': toBbox.top +
9169 }], color); +
9170 } +
9171 +
9172 break; +
9173 } +
9174} +
9175 +
9176function cloneNode(svg, selector) { +
9177 return svg.select(selector).node().cloneNode(true); +
9178} +
9179 +
9180function renderCommitHistory(svg, commitid, branches, direction) { +
9181 let commit; +
9182 const numCommits = Object.keys(allCommitsDict).length; +
9183 +
9184 if (typeof commitid === 'string') { +
9185 do { +
9186 commit = allCommitsDict[commitid]; +
9187 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('in renderCommitHistory', commit.id, commit.seq); +
9188 +
9189 if (svg.select('#node-' + commitid).size() > 0) { +
9190 return; +
9191 } +
9192 +
9193 svg.append(function () { +
9194 return cloneNode(svg, '#def-commit'); +
9195 }).attr('class', 'commit').attr('id', function () { +
9196 return 'node-' + commit.id; +
9197 }).attr('transform', function () { +
9198 switch (direction) { +
9199 case 'LR': +
9200 return 'translate(' + (commit.seq * config.nodeSpacing + config.leftMargin) + ', ' + branchNum * config.branchOffset + ')'; +
9201 +
9202 case 'BT': +
9203 return 'translate(' + (branchNum * config.branchOffset + config.leftMargin) + ', ' + (numCommits - commit.seq) * config.nodeSpacing + ')'; +
9204 } +
9205 }).attr('fill', config.nodeFillColor).attr('stroke', config.nodeStrokeColor).attr('stroke-width', config.nodeStrokeWidth); +
9206 let branch; +
9207 +
9208 for (let branchName in branches) { +
9209 if (branches[branchName].commit === commit) { +
9210 branch = branches[branchName]; +
9211 break; +
9212 } +
9213 } +
9214 +
9215 if (branch) { +
9216 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('found branch ', branch.name); +
9217 svg.select('#node-' + commit.id + ' p').append('xhtml:span').attr('class', 'branch-label').text(branch.name + ', '); +
9218 } +
9219 +
9220 svg.select('#node-' + commit.id + ' p').append('xhtml:span').attr('class', 'commit-id').text(commit.id); +
9221 +
9222 if (commit.message !== '' && direction === 'BT') { +
9223 svg.select('#node-' + commit.id + ' p').append('xhtml:span').attr('class', 'commit-msg').text(', ' + commit.message); +
9224 } +
9225 +
9226 commitid = commit.parent; +
9227 } while (commitid && allCommitsDict[commitid]); +
9228 } +
9229 +
9230 if (Array.isArray(commitid)) { +
9231 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('found merge commmit', commitid); +
9232 renderCommitHistory(svg, commitid[0], branches, direction); +
9233 branchNum++; +
9234 renderCommitHistory(svg, commitid[1], branches, direction); +
9235 branchNum--; +
9236 } +
9237} +
9238 +
9239function renderLines(svg, commit, direction, branchColor) { +
9240 branchColor = branchColor || 0; +
9241 +
9242 while (commit.seq > 0 && !commit.lineDrawn) { +
9243 if (typeof commit.parent === 'string') { +
9244 svgDrawLineForCommits(svg, commit.id, commit.parent, direction, branchColor); +
9245 commit.lineDrawn = true; +
9246 commit = allCommitsDict[commit.parent]; +
9247 } else if (Array.isArray(commit.parent)) { +
9248 svgDrawLineForCommits(svg, commit.id, commit.parent[0], direction, branchColor); +
9249 svgDrawLineForCommits(svg, commit.id, commit.parent[1], direction, branchColor + 1); +
9250 renderLines(svg, allCommitsDict[commit.parent[1]], direction, branchColor + 1); +
9251 commit.lineDrawn = true; +
9252 commit = allCommitsDict[commit.parent[0]]; +
9253 } +
9254 } +
9255} +
9256 +
9257const draw = function (txt, id, ver) { +
9258 try { +
9259 const parser = _parser_gitGraph__WEBPACK_IMPORTED_MODULE_3___default.a.parser; +
9260 parser.yy = _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"]; +
9261 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('in gitgraph renderer', txt, id, ver); // Parse the graph definition +
9262 +
9263 parser.parse(txt + '\n'); +
9264 config = lodash__WEBPACK_IMPORTED_MODULE_1___default.a.assign(config, apiConfig, _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"].getOptions()); +
9265 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('effective options', config); +
9266 const direction = _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"].getDirection(); +
9267 allCommitsDict = _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"].getCommits(); +
9268 const branches = _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"].getBranchesAsObjArray(); +
9269 +
9270 if (direction === 'BT') { +
9271 config.nodeLabel.x = branches.length * config.branchOffset; +
9272 config.nodeLabel.width = '100%'; +
9273 config.nodeLabel.y = -1 * 2 * config.nodeRadius; +
9274 } +
9275 +
9276 const svg = d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id="${id}"]`); +
9277 svgCreateDefs(svg); +
9278 branchNum = 1; +
9279 +
9280 for (let branch in branches) { +
9281 const v = branches[branch]; +
9282 renderCommitHistory(svg, v.commit.id, branches, direction); +
9283 renderLines(svg, v.commit, direction); +
9284 branchNum++; +
9285 } +
9286 +
9287 svg.attr('height', function () { +
9288 if (direction === 'BT') return Object.keys(allCommitsDict).length * config.nodeSpacing; +
9289 return (branches.length + 1) * config.branchOffset; +
9290 }); +
9291 } catch (e) { +
9292 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].error('Error while rendering gitgraph'); +
9293 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].error(e.message); +
9294 } +
9295}; +
9296/* harmony default export */ __webpack_exports__["default"] = ({ +
9297 setConf, +
9298 draw +
9299}); +
9300 +
9301/***/ }), +
9302 +
9303/***/ "./src/diagrams/git/parser/gitGraph.js": +
9304/*!*********************************************!*\ +
9305 !*** ./src/diagrams/git/parser/gitGraph.js ***! +
9306 \*********************************************/ +
9307/*! no static exports found */ +
9308/***/ (function(module, exports, __webpack_require__) { +
9309 +
9310/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
9311 +
9312/* +
9313 Returns a Parser object of the following structure: +
9314 +
9315 Parser: { +
9316 yy: {} +
9317 } +
9318 +
9319 Parser.prototype: { +
9320 yy: {}, +
9321 trace: function(), +
9322 symbols_: {associative list: name ==> number}, +
9323 terminals_: {associative list: number ==> name}, +
9324 productions_: [...], +
9325 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
9326 table: [...], +
9327 defaultActions: {...}, +
9328 parseError: function(str, hash), +
9329 parse: function(input), +
9330 +
9331 lexer: { +
9332 EOF: 1, +
9333 parseError: function(str, hash), +
9334 setInput: function(input), +
9335 input: function(), +
9336 unput: function(str), +
9337 more: function(), +
9338 less: function(n), +
9339 pastInput: function(), +
9340 upcomingInput: function(), +
9341 showPosition: function(), +
9342 test_match: function(regex_match_array, rule_index), +
9343 next: function(), +
9344 lex: function(), +
9345 begin: function(condition), +
9346 popState: function(), +
9347 _currentRules: function(), +
9348 topState: function(), +
9349 pushState: function(condition), +
9350 +
9351 options: { +
9352 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
9353 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
9354 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
9355 }, +
9356 +
9357 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
9358 rules: [...], +
9359 conditions: {associative list: name ==> set}, +
9360 } +
9361 } +
9362 +
9363 +
9364 token location info (@$, _$, etc.): { +
9365 first_line: n, +
9366 last_line: n, +
9367 first_column: n, +
9368 last_column: n, +
9369 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
9370 } +
9371 +
9372 +
9373 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
9374 text: (matched text) +
9375 token: (the produced terminal token, if any) +
9376 line: (yylineno) +
9377 } +
9378 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
9379 loc: (yylloc) +
9380 expected: (string describing the set of expected tokens) +
9381 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
9382 } +
9383*/ +
9384var parser = function () { +
9385 var o = function (k, v, o, l) { +
9386 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
9387 +
9388 return o; +
9389 }, +
9390 $V0 = [2, 3], +
9391 $V1 = [1, 7], +
9392 $V2 = [7, 12, 15, 17, 19, 20, 21], +
9393 $V3 = [7, 11, 12, 15, 17, 19, 20, 21], +
9394 $V4 = [2, 20], +
9395 $V5 = [1, 32]; +
9396 +
9397 var parser = { +
9398 trace: function trace() {}, +
9399 yy: {}, +
9400 symbols_: { +
9401 "error": 2, +
9402 "start": 3, +
9403 "GG": 4, +
9404 ":": 5, +
9405 "document": 6, +
9406 "EOF": 7, +
9407 "DIR": 8, +
9408 "options": 9, +
9409 "body": 10, +
9410 "OPT": 11, +
9411 "NL": 12, +
9412 "line": 13, +
9413 "statement": 14, +
9414 "COMMIT": 15, +
9415 "commit_arg": 16, +
9416 "BRANCH": 17, +
9417 "ID": 18, +
9418 "CHECKOUT": 19, +
9419 "MERGE": 20, +
9420 "RESET": 21, +
9421 "reset_arg": 22, +
9422 "STR": 23, +
9423 "HEAD": 24, +
9424 "reset_parents": 25, +
9425 "CARET": 26, +
9426 "$accept": 0, +
9427 "$end": 1 +
9428 }, +
9429 terminals_: { +
9430 2: "error", +
9431 4: "GG", +
9432 5: ":", +
9433 7: "EOF", +
9434 8: "DIR", +
9435 11: "OPT", +
9436 12: "NL", +
9437 15: "COMMIT", +
9438 17: "BRANCH", +
9439 18: "ID", +
9440 19: "CHECKOUT", +
9441 20: "MERGE", +
9442 21: "RESET", +
9443 23: "STR", +
9444 24: "HEAD", +
9445 26: "CARET" +
9446 }, +
9447 productions_: [0, [3, 4], [3, 5], [6, 0], [6, 2], [9, 2], [9, 1], [10, 0], [10, 2], [13, 2], [13, 1], [14, 2], [14, 2], [14, 2], [14, 2], [14, 2], [16, 0], [16, 1], [22, 2], [22, 2], [25, 0], [25, 2]], +
9448 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
9449 /* action[1] */ +
9450 , $$ +
9451 /* vstack */ +
9452 , _$ +
9453 /* lstack */ +
9454 ) { +
9455 /* this == yyval */ +
9456 var $0 = $$.length - 1; +
9457 +
9458 switch (yystate) { +
9459 case 1: +
9460 return $$[$0 - 1]; +
9461 break; +
9462 +
9463 case 2: +
9464 yy.setDirection($$[$0 - 3]); +
9465 return $$[$0 - 1]; +
9466 break; +
9467 +
9468 case 4: +
9469 yy.setOptions($$[$0 - 1]); +
9470 this.$ = $$[$0]; +
9471 break; +
9472 +
9473 case 5: +
9474 $$[$0 - 1] += $$[$0]; +
9475 this.$ = $$[$0 - 1]; +
9476 break; +
9477 +
9478 case 7: +
9479 this.$ = []; +
9480 break; +
9481 +
9482 case 8: +
9483 $$[$0 - 1].push($$[$0]); +
9484 this.$ = $$[$0 - 1]; +
9485 break; +
9486 +
9487 case 9: +
9488 this.$ = $$[$0 - 1]; +
9489 break; +
9490 +
9491 case 11: +
9492 yy.commit($$[$0]); +
9493 break; +
9494 +
9495 case 12: +
9496 yy.branch($$[$0]); +
9497 break; +
9498 +
9499 case 13: +
9500 yy.checkout($$[$0]); +
9501 break; +
9502 +
9503 case 14: +
9504 yy.merge($$[$0]); +
9505 break; +
9506 +
9507 case 15: +
9508 yy.reset($$[$0]); +
9509 break; +
9510 +
9511 case 16: +
9512 this.$ = ""; +
9513 break; +
9514 +
9515 case 17: +
9516 this.$ = $$[$0]; +
9517 break; +
9518 +
9519 case 18: +
9520 this.$ = $$[$0 - 1] + ":" + $$[$0]; +
9521 break; +
9522 +
9523 case 19: +
9524 this.$ = $$[$0 - 1] + ":" + yy.count; +
9525 yy.count = 0; +
9526 break; +
9527 +
9528 case 20: +
9529 yy.count = 0; +
9530 break; +
9531 +
9532 case 21: +
9533 yy.count += 1; +
9534 break; +
9535 } +
9536 }, +
9537 table: [{ +
9538 3: 1, +
9539 4: [1, 2] +
9540 }, { +
9541 1: [3] +
9542 }, { +
9543 5: [1, 3], +
9544 8: [1, 4] +
9545 }, { +
9546 6: 5, +
9547 7: $V0, +
9548 9: 6, +
9549 12: $V1 +
9550 }, { +
9551 5: [1, 8] +
9552 }, { +
9553 7: [1, 9] +
9554 }, o($V2, [2, 7], { +
9555 10: 10, +
9556 11: [1, 11] +
9557 }), o($V3, [2, 6]), { +
9558 6: 12, +
9559 7: $V0, +
9560 9: 6, +
9561 12: $V1 +
9562 }, { +
9563 1: [2, 1] +
9564 }, { +
9565 7: [2, 4], +
9566 12: [1, 15], +
9567 13: 13, +
9568 14: 14, +
9569 15: [1, 16], +
9570 17: [1, 17], +
9571 19: [1, 18], +
9572 20: [1, 19], +
9573 21: [1, 20] +
9574 }, o($V3, [2, 5]), { +
9575 7: [1, 21] +
9576 }, o($V2, [2, 8]), { +
9577 12: [1, 22] +
9578 }, o($V2, [2, 10]), { +
9579 12: [2, 16], +
9580 16: 23, +
9581 23: [1, 24] +
9582 }, { +
9583 18: [1, 25] +
9584 }, { +
9585 18: [1, 26] +
9586 }, { +
9587 18: [1, 27] +
9588 }, { +
9589 18: [1, 30], +
9590 22: 28, +
9591 24: [1, 29] +
9592 }, { +
9593 1: [2, 2] +
9594 }, o($V2, [2, 9]), { +
9595 12: [2, 11] +
9596 }, { +
9597 12: [2, 17] +
9598 }, { +
9599 12: [2, 12] +
9600 }, { +
9601 12: [2, 13] +
9602 }, { +
9603 12: [2, 14] +
9604 }, { +
9605 12: [2, 15] +
9606 }, { +
9607 12: $V4, +
9608 25: 31, +
9609 26: $V5 +
9610 }, { +
9611 12: $V4, +
9612 25: 33, +
9613 26: $V5 +
9614 }, { +
9615 12: [2, 18] +
9616 }, { +
9617 12: $V4, +
9618 25: 34, +
9619 26: $V5 +
9620 }, { +
9621 12: [2, 19] +
9622 }, { +
9623 12: [2, 21] +
9624 }], +
9625 defaultActions: { +
9626 9: [2, 1], +
9627 21: [2, 2], +
9628 23: [2, 11], +
9629 24: [2, 17], +
9630 25: [2, 12], +
9631 26: [2, 13], +
9632 27: [2, 14], +
9633 28: [2, 15], +
9634 31: [2, 18], +
9635 33: [2, 19], +
9636 34: [2, 21] +
9637 }, +
9638 parseError: function parseError(str, hash) { +
9639 if (hash.recoverable) { +
9640 this.trace(str); +
9641 } else { +
9642 var error = new Error(str); +
9643 error.hash = hash; +
9644 throw error; +
9645 } +
9646 }, +
9647 parse: function parse(input) { +
9648 var self = this, +
9649 stack = [0], +
9650 tstack = [], +
9651 vstack = [null], +
9652 lstack = [], +
9653 table = this.table, +
9654 yytext = '', +
9655 yylineno = 0, +
9656 yyleng = 0, +
9657 recovering = 0, +
9658 TERROR = 2, +
9659 EOF = 1; +
9660 var args = lstack.slice.call(arguments, 1); +
9661 var lexer = Object.create(this.lexer); +
9662 var sharedState = { +
9663 yy: {} +
9664 }; +
9665 +
9666 for (var k in this.yy) { +
9667 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
9668 sharedState.yy[k] = this.yy[k]; +
9669 } +
9670 } +
9671 +
9672 lexer.setInput(input, sharedState.yy); +
9673 sharedState.yy.lexer = lexer; +
9674 sharedState.yy.parser = this; +
9675 +
9676 if (typeof lexer.yylloc == 'undefined') { +
9677 lexer.yylloc = {}; +
9678 } +
9679 +
9680 var yyloc = lexer.yylloc; +
9681 lstack.push(yyloc); +
9682 var ranges = lexer.options && lexer.options.ranges; +
9683 +
9684 if (typeof sharedState.yy.parseError === 'function') { +
9685 this.parseError = sharedState.yy.parseError; +
9686 } else { +
9687 this.parseError = Object.getPrototypeOf(this).parseError; +
9688 } +
9689 +
9690 function popStack(n) { +
9691 stack.length = stack.length - 2 * n; +
9692 vstack.length = vstack.length - n; +
9693 lstack.length = lstack.length - n; +
9694 } +
9695 +
9696 function lex() { +
9697 var token; +
9698 token = tstack.pop() || lexer.lex() || EOF; +
9699 +
9700 if (typeof token !== 'number') { +
9701 if (token instanceof Array) { +
9702 tstack = token; +
9703 token = tstack.pop(); +
9704 } +
9705 +
9706 token = self.symbols_[token] || token; +
9707 } +
9708 +
9709 return token; +
9710 } +
9711 +
9712 var symbol, +
9713 preErrorSymbol, +
9714 state, +
9715 action, +
9716 a, +
9717 r, +
9718 yyval = {}, +
9719 p, +
9720 len, +
9721 newState, +
9722 expected; +
9723 +
9724 while (true) { +
9725 state = stack[stack.length - 1]; +
9726 +
9727 if (this.defaultActions[state]) { +
9728 action = this.defaultActions[state]; +
9729 } else { +
9730 if (symbol === null || typeof symbol == 'undefined') { +
9731 symbol = lex(); +
9732 } +
9733 +
9734 action = table[state] && table[state][symbol]; +
9735 } +
9736 +
9737 if (typeof action === 'undefined' || !action.length || !action[0]) { +
9738 var errStr = ''; +
9739 expected = []; +
9740 +
9741 for (p in table[state]) { +
9742 if (this.terminals_[p] && p > TERROR) { +
9743 expected.push('\'' + this.terminals_[p] + '\''); +
9744 } +
9745 } +
9746 +
9747 if (lexer.showPosition) { +
9748 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
9749 } else { +
9750 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
9751 } +
9752 +
9753 this.parseError(errStr, { +
9754 text: lexer.match, +
9755 token: this.terminals_[symbol] || symbol, +
9756 line: lexer.yylineno, +
9757 loc: yyloc, +
9758 expected: expected +
9759 }); +
9760 } +
9761 +
9762 if (action[0] instanceof Array && action.length > 1) { +
9763 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
9764 } +
9765 +
9766 switch (action[0]) { +
9767 case 1: +
9768 stack.push(symbol); +
9769 vstack.push(lexer.yytext); +
9770 lstack.push(lexer.yylloc); +
9771 stack.push(action[1]); +
9772 symbol = null; +
9773 +
9774 if (!preErrorSymbol) { +
9775 yyleng = lexer.yyleng; +
9776 yytext = lexer.yytext; +
9777 yylineno = lexer.yylineno; +
9778 yyloc = lexer.yylloc; +
9779 +
9780 if (recovering > 0) { +
9781 recovering--; +
9782 } +
9783 } else { +
9784 symbol = preErrorSymbol; +
9785 preErrorSymbol = null; +
9786 } +
9787 +
9788 break; +
9789 +
9790 case 2: +
9791 len = this.productions_[action[1]][1]; +
9792 yyval.$ = vstack[vstack.length - len]; +
9793 yyval._$ = { +
9794 first_line: lstack[lstack.length - (len || 1)].first_line, +
9795 last_line: lstack[lstack.length - 1].last_line, +
9796 first_column: lstack[lstack.length - (len || 1)].first_column, +
9797 last_column: lstack[lstack.length - 1].last_column +
9798 }; +
9799 +
9800 if (ranges) { +
9801 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
9802 } +
9803 +
9804 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
9805 +
9806 if (typeof r !== 'undefined') { +
9807 return r; +
9808 } +
9809 +
9810 if (len) { +
9811 stack = stack.slice(0, -1 * len * 2); +
9812 vstack = vstack.slice(0, -1 * len); +
9813 lstack = lstack.slice(0, -1 * len); +
9814 } +
9815 +
9816 stack.push(this.productions_[action[1]][0]); +
9817 vstack.push(yyval.$); +
9818 lstack.push(yyval._$); +
9819 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
9820 stack.push(newState); +
9821 break; +
9822 +
9823 case 3: +
9824 return true; +
9825 } +
9826 } +
9827 +
9828 return true; +
9829 } +
9830 }; +
9831 /* generated by jison-lex 0.3.4 */ +
9832 +
9833 var lexer = function () { +
9834 var lexer = { +
9835 EOF: 1, +
9836 parseError: function parseError(str, hash) { +
9837 if (this.yy.parser) { +
9838 this.yy.parser.parseError(str, hash); +
9839 } else { +
9840 throw new Error(str); +
9841 } +
9842 }, +
9843 // resets the lexer, sets new input +
9844 setInput: function (input, yy) { +
9845 this.yy = yy || this.yy || {}; +
9846 this._input = input; +
9847 this._more = this._backtrack = this.done = false; +
9848 this.yylineno = this.yyleng = 0; +
9849 this.yytext = this.matched = this.match = ''; +
9850 this.conditionStack = ['INITIAL']; +
9851 this.yylloc = { +
9852 first_line: 1, +
9853 first_column: 0, +
9854 last_line: 1, +
9855 last_column: 0 +
9856 }; +
9857 +
9858 if (this.options.ranges) { +
9859 this.yylloc.range = [0, 0]; +
9860 } +
9861 +
9862 this.offset = 0; +
9863 return this; +
9864 }, +
9865 // consumes and returns one char from the input +
9866 input: function () { +
9867 var ch = this._input[0]; +
9868 this.yytext += ch; +
9869 this.yyleng++; +
9870 this.offset++; +
9871 this.match += ch; +
9872 this.matched += ch; +
9873 var lines = ch.match(/(?:\r\n?|\n).*/g); +
9874 +
9875 if (lines) { +
9876 this.yylineno++; +
9877 this.yylloc.last_line++; +
9878 } else { +
9879 this.yylloc.last_column++; +
9880 } +
9881 +
9882 if (this.options.ranges) { +
9883 this.yylloc.range[1]++; +
9884 } +
9885 +
9886 this._input = this._input.slice(1); +
9887 return ch; +
9888 }, +
9889 // unshifts one char (or a string) into the input +
9890 unput: function (ch) { +
9891 var len = ch.length; +
9892 var lines = ch.split(/(?:\r\n?|\n)/g); +
9893 this._input = ch + this._input; +
9894 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
9895 +
9896 this.offset -= len; +
9897 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
9898 this.match = this.match.substr(0, this.match.length - 1); +
9899 this.matched = this.matched.substr(0, this.matched.length - 1); +
9900 +
9901 if (lines.length - 1) { +
9902 this.yylineno -= lines.length - 1; +
9903 } +
9904 +
9905 var r = this.yylloc.range; +
9906 this.yylloc = { +
9907 first_line: this.yylloc.first_line, +
9908 last_line: this.yylineno + 1, +
9909 first_column: this.yylloc.first_column, +
9910 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
9911 }; +
9912 +
9913 if (this.options.ranges) { +
9914 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
9915 } +
9916 +
9917 this.yyleng = this.yytext.length; +
9918 return this; +
9919 }, +
9920 // When called from action, caches matched text and appends it on next action +
9921 more: function () { +
9922 this._more = true; +
9923 return this; +
9924 }, +
9925 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
9926 reject: function () { +
9927 if (this.options.backtrack_lexer) { +
9928 this._backtrack = true; +
9929 } else { +
9930 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
9931 text: "", +
9932 token: null, +
9933 line: this.yylineno +
9934 }); +
9935 } +
9936 +
9937 return this; +
9938 }, +
9939 // retain first n characters of the match +
9940 less: function (n) { +
9941 this.unput(this.match.slice(n)); +
9942 }, +
9943 // displays already matched input, i.e. for error messages +
9944 pastInput: function () { +
9945 var past = this.matched.substr(0, this.matched.length - this.match.length); +
9946 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
9947 }, +
9948 // displays upcoming input, i.e. for error messages +
9949 upcomingInput: function () { +
9950 var next = this.match; +
9951 +
9952 if (next.length < 20) { +
9953 next += this._input.substr(0, 20 - next.length); +
9954 } +
9955 +
9956 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
9957 }, +
9958 // displays the character position where the lexing error occurred, i.e. for error messages +
9959 showPosition: function () { +
9960 var pre = this.pastInput(); +
9961 var c = new Array(pre.length + 1).join("-"); +
9962 return pre + this.upcomingInput() + "\n" + c + "^"; +
9963 }, +
9964 // test the lexed token: return FALSE when not a match, otherwise return token +
9965 test_match: function (match, indexed_rule) { +
9966 var token, lines, backup; +
9967 +
9968 if (this.options.backtrack_lexer) { +
9969 // save context +
9970 backup = { +
9971 yylineno: this.yylineno, +
9972 yylloc: { +
9973 first_line: this.yylloc.first_line, +
9974 last_line: this.last_line, +
9975 first_column: this.yylloc.first_column, +
9976 last_column: this.yylloc.last_column +
9977 }, +
9978 yytext: this.yytext, +
9979 match: this.match, +
9980 matches: this.matches, +
9981 matched: this.matched, +
9982 yyleng: this.yyleng, +
9983 offset: this.offset, +
9984 _more: this._more, +
9985 _input: this._input, +
9986 yy: this.yy, +
9987 conditionStack: this.conditionStack.slice(0), +
9988 done: this.done +
9989 }; +
9990 +
9991 if (this.options.ranges) { +
9992 backup.yylloc.range = this.yylloc.range.slice(0); +
9993 } +
9994 } +
9995 +
9996 lines = match[0].match(/(?:\r\n?|\n).*/g); +
9997 +
9998 if (lines) { +
9999 this.yylineno += lines.length; +
10000 } +
10001 +
10002 this.yylloc = { +
10003 first_line: this.yylloc.last_line, +
10004 last_line: this.yylineno + 1, +
10005 first_column: this.yylloc.last_column, +
10006 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
10007 }; +
10008 this.yytext += match[0]; +
10009 this.match += match[0]; +
10010 this.matches = match; +
10011 this.yyleng = this.yytext.length; +
10012 +
10013 if (this.options.ranges) { +
10014 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
10015 } +
10016 +
10017 this._more = false; +
10018 this._backtrack = false; +
10019 this._input = this._input.slice(match[0].length); +
10020 this.matched += match[0]; +
10021 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
10022 +
10023 if (this.done && this._input) { +
10024 this.done = false; +
10025 } +
10026 +
10027 if (token) { +
10028 return token; +
10029 } else if (this._backtrack) { +
10030 // recover context +
10031 for (var k in backup) { +
10032 this[k] = backup[k]; +
10033 } +
10034 +
10035 return false; // rule action called reject() implying the next rule should be tested instead. +
10036 } +
10037 +
10038 return false; +
10039 }, +
10040 // return next match in input +
10041 next: function () { +
10042 if (this.done) { +
10043 return this.EOF; +
10044 } +
10045 +
10046 if (!this._input) { +
10047 this.done = true; +
10048 } +
10049 +
10050 var token, match, tempMatch, index; +
10051 +
10052 if (!this._more) { +
10053 this.yytext = ''; +
10054 this.match = ''; +
10055 } +
10056 +
10057 var rules = this._currentRules(); +
10058 +
10059 for (var i = 0; i < rules.length; i++) { +
10060 tempMatch = this._input.match(this.rules[rules[i]]); +
10061 +
10062 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
10063 match = tempMatch; +
10064 index = i; +
10065 +
10066 if (this.options.backtrack_lexer) { +
10067 token = this.test_match(tempMatch, rules[i]); +
10068 +
10069 if (token !== false) { +
10070 return token; +
10071 } else if (this._backtrack) { +
10072 match = false; +
10073 continue; // rule action called reject() implying a rule MISmatch. +
10074 } else { +
10075 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
10076 return false; +
10077 } +
10078 } else if (!this.options.flex) { +
10079 break; +
10080 } +
10081 } +
10082 } +
10083 +
10084 if (match) { +
10085 token = this.test_match(match, rules[index]); +
10086 +
10087 if (token !== false) { +
10088 return token; +
10089 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
10090 +
10091 +
10092 return false; +
10093 } +
10094 +
10095 if (this._input === "") { +
10096 return this.EOF; +
10097 } else { +
10098 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
10099 text: "", +
10100 token: null, +
10101 line: this.yylineno +
10102 }); +
10103 } +
10104 }, +
10105 // return next match that has a token +
10106 lex: function lex() { +
10107 var r = this.next(); +
10108 +
10109 if (r) { +
10110 return r; +
10111 } else { +
10112 return this.lex(); +
10113 } +
10114 }, +
10115 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
10116 begin: function begin(condition) { +
10117 this.conditionStack.push(condition); +
10118 }, +
10119 // pop the previously active lexer condition state off the condition stack +
10120 popState: function popState() { +
10121 var n = this.conditionStack.length - 1; +
10122 +
10123 if (n > 0) { +
10124 return this.conditionStack.pop(); +
10125 } else { +
10126 return this.conditionStack[0]; +
10127 } +
10128 }, +
10129 // produce the lexer rule set which is active for the currently active lexer condition state +
10130 _currentRules: function _currentRules() { +
10131 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
10132 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
10133 } else { +
10134 return this.conditions["INITIAL"].rules; +
10135 } +
10136 }, +
10137 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
10138 topState: function topState(n) { +
10139 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
10140 +
10141 if (n >= 0) { +
10142 return this.conditionStack[n]; +
10143 } else { +
10144 return "INITIAL"; +
10145 } +
10146 }, +
10147 // alias for begin(condition) +
10148 pushState: function pushState(condition) { +
10149 this.begin(condition); +
10150 }, +
10151 // return the number of states currently on the stack +
10152 stateStackSize: function stateStackSize() { +
10153 return this.conditionStack.length; +
10154 }, +
10155 options: { +
10156 "case-insensitive": true +
10157 }, +
10158 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
10159 var YYSTATE = YY_START; +
10160 +
10161 switch ($avoiding_name_collisions) { +
10162 case 0: +
10163 return 12; +
10164 break; +
10165 +
10166 case 1: +
10167 /* skip all whitespace */ +
10168 break; +
10169 +
10170 case 2: +
10171 /* skip comments */ +
10172 break; +
10173 +
10174 case 3: +
10175 /* skip comments */ +
10176 break; +
10177 +
10178 case 4: +
10179 return 4; +
10180 break; +
10181 +
10182 case 5: +
10183 return 15; +
10184 break; +
10185 +
10186 case 6: +
10187 return 17; +
10188 break; +
10189 +
10190 case 7: +
10191 return 20; +
10192 break; +
10193 +
10194 case 8: +
10195 return 21; +
10196 break; +
10197 +
10198 case 9: +
10199 return 19; +
10200 break; +
10201 +
10202 case 10: +
10203 return 8; +
10204 break; +
10205 +
10206 case 11: +
10207 return 8; +
10208 break; +
10209 +
10210 case 12: +
10211 return 5; +
10212 break; +
10213 +
10214 case 13: +
10215 return 26; +
10216 break; +
10217 +
10218 case 14: +
10219 this.begin("options"); +
10220 break; +
10221 +
10222 case 15: +
10223 this.popState(); +
10224 break; +
10225 +
10226 case 16: +
10227 return 11; +
10228 break; +
10229 +
10230 case 17: +
10231 this.begin("string"); +
10232 break; +
10233 +
10234 case 18: +
10235 this.popState(); +
10236 break; +
10237 +
10238 case 19: +
10239 return 23; +
10240 break; +
10241 +
10242 case 20: +
10243 return 18; +
10244 break; +
10245 +
10246 case 21: +
10247 return 7; +
10248 break; +
10249 } +
10250 }, +
10251 rules: [/^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:gitGraph\b)/i, /^(?:commit\b)/i, /^(?:branch\b)/i, /^(?:merge\b)/i, /^(?:reset\b)/i, /^(?:checkout\b)/i, /^(?:LR\b)/i, /^(?:BT\b)/i, /^(?::)/i, /^(?:\^)/i, /^(?:options\r?\n)/i, /^(?:end\r?\n)/i, /^(?:[^\n]+\r?\n)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[a-zA-Z][a-zA-Z0-9_]+)/i, /^(?:$)/i], +
10252 conditions: { +
10253 "options": { +
10254 "rules": [15, 16], +
10255 "inclusive": false +
10256 }, +
10257 "string": { +
10258 "rules": [18, 19], +
10259 "inclusive": false +
10260 }, +
10261 "INITIAL": { +
10262 "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20, 21], +
10263 "inclusive": true +
10264 } +
10265 } +
10266 }; +
10267 return lexer; +
10268 }(); +
10269 +
10270 parser.lexer = lexer; +
10271 +
10272 function Parser() { +
10273 this.yy = {}; +
10274 } +
10275 +
10276 Parser.prototype = parser; +
10277 parser.Parser = Parser; +
10278 return new Parser(); +
10279}(); +
10280 +
10281if (true) { +
10282 exports.parser = parser; +
10283 exports.Parser = parser.Parser; +
10284 +
10285 exports.parse = function () { +
10286 return parser.parse.apply(parser, arguments); +
10287 }; +
10288 +
10289 exports.main = function commonjsMain(args) { +
10290 if (!args[1]) { +
10291 console.log('Usage: ' + args[0] + ' FILE'); +
10292 process.exit(1); +
10293 } +
10294 +
10295 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
10296 +
10297 return exports.parser.parse(source); +
10298 }; +
10299 +
10300 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
10301 exports.main(process.argv.slice(1)); +
10302 } +
10303} +
10304/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
10305 +
10306/***/ }), +
10307 +
10308/***/ "./src/diagrams/info/infoDb.js": +
10309/*!*************************************!*\ +
10310 !*** ./src/diagrams/info/infoDb.js ***! +
10311 \*************************************/ +
10312/*! exports provided: setMessage, getMessage, setInfo, getInfo, default */ +
10313/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10314 +
10315"use strict"; +
10316__webpack_require__.r(__webpack_exports__); +
10317/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setMessage", function() { return setMessage; }); +
10318/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMessage", function() { return getMessage; }); +
10319/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setInfo", function() { return setInfo; }); +
10320/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getInfo", function() { return getInfo; }); +
10321/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
10322/** +
10323 * Created by knut on 15-01-14. +
10324 */ +
10325 +
10326var message = ''; +
10327var info = false; +
10328const setMessage = txt => { +
10329 _logger__WEBPACK_IMPORTED_MODULE_0__["logger"].debug('Setting message to: ' + txt); +
10330 message = txt; +
10331}; +
10332const getMessage = () => { +
10333 return message; +
10334}; +
10335const setInfo = inf => { +
10336 info = inf; +
10337}; +
10338const getInfo = () => { +
10339 return info; +
10340}; // export const parseError = (err, hash) => { +
10341// global.mermaidAPI.parseError(err, hash) +
10342// } +
10343 +
10344/* harmony default export */ __webpack_exports__["default"] = ({ +
10345 setMessage, +
10346 getMessage, +
10347 setInfo, +
10348 getInfo // parseError +
10349 +
10350}); +
10351 +
10352/***/ }), +
10353 +
10354/***/ "./src/diagrams/info/infoRenderer.js": +
10355/*!*******************************************!*\ +
10356 !*** ./src/diagrams/info/infoRenderer.js ***! +
10357 \*******************************************/ +
10358/*! exports provided: setConf, draw, default */ +
10359/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10360 +
10361"use strict"; +
10362__webpack_require__.r(__webpack_exports__); +
10363/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
10364/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
10365/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "d3"); +
10366/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__); +
10367/* harmony import */ var _infoDb__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./infoDb */ "./src/diagrams/info/infoDb.js"); +
10368/* harmony import */ var _parser_info_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parser/info.js */ "./src/diagrams/info/parser/info.js"); +
10369/* harmony import */ var _parser_info_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_parser_info_js__WEBPACK_IMPORTED_MODULE_2__); +
10370/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
10371/** +
10372 * Created by knut on 14-12-11. +
10373 */ +
10374 +
10375 +
10376 +
10377 +
10378const conf = {}; +
10379const setConf = function (cnf) { +
10380 const keys = Object.keys(cnf); +
10381 keys.forEach(function (key) { +
10382 conf[key] = cnf[key]; +
10383 }); +
10384}; +
10385/** +
10386 * Draws a an info picture in the tag with id: id based on the graph definition in text. +
10387 * @param text +
10388 * @param id +
10389 */ +
10390 +
10391const draw = (txt, id, ver) => { +
10392 try { +
10393 const parser = _parser_info_js__WEBPACK_IMPORTED_MODULE_2___default.a.parser; +
10394 parser.yy = _infoDb__WEBPACK_IMPORTED_MODULE_1__["default"]; +
10395 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Renering info diagram\n' + txt); // Parse the graph definition +
10396 +
10397 parser.parse(txt); +
10398 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Parsed info diagram'); // Fetch the default direction, use TD if none was found +
10399 +
10400 const svg = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#' + id); +
10401 const g = svg.append('g'); +
10402 g.append('text') // text label for the x axis +
10403 .attr('x', 100).attr('y', 40).attr('class', 'version').attr('font-size', '32px').style('text-anchor', 'middle').text('v ' + ver); +
10404 svg.attr('height', 100); +
10405 svg.attr('width', 400); // svg.attr('viewBox', '0 0 300 150'); +
10406 } catch (e) { +
10407 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].error('Error while rendering info diagram'); +
10408 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].error(e.message); +
10409 } +
10410}; +
10411/* harmony default export */ __webpack_exports__["default"] = ({ +
10412 setConf, +
10413 draw +
10414}); +
10415 +
10416/***/ }), +
10417 +
10418/***/ "./src/diagrams/info/parser/info.js": +
10419/*!******************************************!*\ +
10420 !*** ./src/diagrams/info/parser/info.js ***! +
10421 \******************************************/ +
10422/*! no static exports found */ +
10423/***/ (function(module, exports, __webpack_require__) { +
10424 +
10425/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
10426 +
10427/* +
10428 Returns a Parser object of the following structure: +
10429 +
10430 Parser: { +
10431 yy: {} +
10432 } +
10433 +
10434 Parser.prototype: { +
10435 yy: {}, +
10436 trace: function(), +
10437 symbols_: {associative list: name ==> number}, +
10438 terminals_: {associative list: number ==> name}, +
10439 productions_: [...], +
10440 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
10441 table: [...], +
10442 defaultActions: {...}, +
10443 parseError: function(str, hash), +
10444 parse: function(input), +
10445 +
10446 lexer: { +
10447 EOF: 1, +
10448 parseError: function(str, hash), +
10449 setInput: function(input), +
10450 input: function(), +
10451 unput: function(str), +
10452 more: function(), +
10453 less: function(n), +
10454 pastInput: function(), +
10455 upcomingInput: function(), +
10456 showPosition: function(), +
10457 test_match: function(regex_match_array, rule_index), +
10458 next: function(), +
10459 lex: function(), +
10460 begin: function(condition), +
10461 popState: function(), +
10462 _currentRules: function(), +
10463 topState: function(), +
10464 pushState: function(condition), +
10465 +
10466 options: { +
10467 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
10468 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
10469 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
10470 }, +
10471 +
10472 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
10473 rules: [...], +
10474 conditions: {associative list: name ==> set}, +
10475 } +
10476 } +
10477 +
10478 +
10479 token location info (@$, _$, etc.): { +
10480 first_line: n, +
10481 last_line: n, +
10482 first_column: n, +
10483 last_column: n, +
10484 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
10485 } +
10486 +
10487 +
10488 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
10489 text: (matched text) +
10490 token: (the produced terminal token, if any) +
10491 line: (yylineno) +
10492 } +
10493 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
10494 loc: (yylloc) +
10495 expected: (string describing the set of expected tokens) +
10496 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
10497 } +
10498*/ +
10499var parser = function () { +
10500 var o = function (k, v, o, l) { +
10501 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
10502 +
10503 return o; +
10504 }, +
10505 $V0 = [6, 9, 10, 12]; +
10506 +
10507 var parser = { +
10508 trace: function trace() {}, +
10509 yy: {}, +
10510 symbols_: { +
10511 "error": 2, +
10512 "start": 3, +
10513 "info": 4, +
10514 "document": 5, +
10515 "EOF": 6, +
10516 "line": 7, +
10517 "statement": 8, +
10518 "NL": 9, +
10519 "showInfo": 10, +
10520 "message": 11, +
10521 "say": 12, +
10522 "TXT": 13, +
10523 "$accept": 0, +
10524 "$end": 1 +
10525 }, +
10526 terminals_: { +
10527 2: "error", +
10528 4: "info", +
10529 6: "EOF", +
10530 9: "NL", +
10531 10: "showInfo", +
10532 12: "say", +
10533 13: "TXT" +
10534 }, +
10535 productions_: [0, [3, 3], [5, 0], [5, 2], [7, 1], [7, 1], [8, 1], [8, 1], [11, 2]], +
10536 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
10537 /* action[1] */ +
10538 , $$ +
10539 /* vstack */ +
10540 , _$ +
10541 /* lstack */ +
10542 ) { +
10543 /* this == yyval */ +
10544 var $0 = $$.length - 1; +
10545 +
10546 switch (yystate) { +
10547 case 1: +
10548 return yy; +
10549 break; +
10550 +
10551 case 4: +
10552 break; +
10553 +
10554 case 6: +
10555 yy.setInfo(true); +
10556 break; +
10557 +
10558 case 7: +
10559 yy.setMessage($$[$0]); +
10560 break; +
10561 +
10562 case 8: +
10563 this.$ = $$[$0 - 1].substring(1).trim().replace(/\\n/gm, "\n"); +
10564 break; +
10565 } +
10566 }, +
10567 table: [{ +
10568 3: 1, +
10569 4: [1, 2] +
10570 }, { +
10571 1: [3] +
10572 }, o($V0, [2, 2], { +
10573 5: 3 +
10574 }), { +
10575 6: [1, 4], +
10576 7: 5, +
10577 8: 6, +
10578 9: [1, 7], +
10579 10: [1, 8], +
10580 11: 9, +
10581 12: [1, 10] +
10582 }, { +
10583 1: [2, 1] +
10584 }, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 7]), { +
10585 13: [1, 11] +
10586 }, o($V0, [2, 8])], +
10587 defaultActions: { +
10588 4: [2, 1] +
10589 }, +
10590 parseError: function parseError(str, hash) { +
10591 if (hash.recoverable) { +
10592 this.trace(str); +
10593 } else { +
10594 var error = new Error(str); +
10595 error.hash = hash; +
10596 throw error; +
10597 } +
10598 }, +
10599 parse: function parse(input) { +
10600 var self = this, +
10601 stack = [0], +
10602 tstack = [], +
10603 vstack = [null], +
10604 lstack = [], +
10605 table = this.table, +
10606 yytext = '', +
10607 yylineno = 0, +
10608 yyleng = 0, +
10609 recovering = 0, +
10610 TERROR = 2, +
10611 EOF = 1; +
10612 var args = lstack.slice.call(arguments, 1); +
10613 var lexer = Object.create(this.lexer); +
10614 var sharedState = { +
10615 yy: {} +
10616 }; +
10617 +
10618 for (var k in this.yy) { +
10619 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
10620 sharedState.yy[k] = this.yy[k]; +
10621 } +
10622 } +
10623 +
10624 lexer.setInput(input, sharedState.yy); +
10625 sharedState.yy.lexer = lexer; +
10626 sharedState.yy.parser = this; +
10627 +
10628 if (typeof lexer.yylloc == 'undefined') { +
10629 lexer.yylloc = {}; +
10630 } +
10631 +
10632 var yyloc = lexer.yylloc; +
10633 lstack.push(yyloc); +
10634 var ranges = lexer.options && lexer.options.ranges; +
10635 +
10636 if (typeof sharedState.yy.parseError === 'function') { +
10637 this.parseError = sharedState.yy.parseError; +
10638 } else { +
10639 this.parseError = Object.getPrototypeOf(this).parseError; +
10640 } +
10641 +
10642 function popStack(n) { +
10643 stack.length = stack.length - 2 * n; +
10644 vstack.length = vstack.length - n; +
10645 lstack.length = lstack.length - n; +
10646 } +
10647 +
10648 function lex() { +
10649 var token; +
10650 token = tstack.pop() || lexer.lex() || EOF; +
10651 +
10652 if (typeof token !== 'number') { +
10653 if (token instanceof Array) { +
10654 tstack = token; +
10655 token = tstack.pop(); +
10656 } +
10657 +
10658 token = self.symbols_[token] || token; +
10659 } +
10660 +
10661 return token; +
10662 } +
10663 +
10664 var symbol, +
10665 preErrorSymbol, +
10666 state, +
10667 action, +
10668 a, +
10669 r, +
10670 yyval = {}, +
10671 p, +
10672 len, +
10673 newState, +
10674 expected; +
10675 +
10676 while (true) { +
10677 state = stack[stack.length - 1]; +
10678 +
10679 if (this.defaultActions[state]) { +
10680 action = this.defaultActions[state]; +
10681 } else { +
10682 if (symbol === null || typeof symbol == 'undefined') { +
10683 symbol = lex(); +
10684 } +
10685 +
10686 action = table[state] && table[state][symbol]; +
10687 } +
10688 +
10689 if (typeof action === 'undefined' || !action.length || !action[0]) { +
10690 var errStr = ''; +
10691 expected = []; +
10692 +
10693 for (p in table[state]) { +
10694 if (this.terminals_[p] && p > TERROR) { +
10695 expected.push('\'' + this.terminals_[p] + '\''); +
10696 } +
10697 } +
10698 +
10699 if (lexer.showPosition) { +
10700 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
10701 } else { +
10702 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
10703 } +
10704 +
10705 this.parseError(errStr, { +
10706 text: lexer.match, +
10707 token: this.terminals_[symbol] || symbol, +
10708 line: lexer.yylineno, +
10709 loc: yyloc, +
10710 expected: expected +
10711 }); +
10712 } +
10713 +
10714 if (action[0] instanceof Array && action.length > 1) { +
10715 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
10716 } +
10717 +
10718 switch (action[0]) { +
10719 case 1: +
10720 stack.push(symbol); +
10721 vstack.push(lexer.yytext); +
10722 lstack.push(lexer.yylloc); +
10723 stack.push(action[1]); +
10724 symbol = null; +
10725 +
10726 if (!preErrorSymbol) { +
10727 yyleng = lexer.yyleng; +
10728 yytext = lexer.yytext; +
10729 yylineno = lexer.yylineno; +
10730 yyloc = lexer.yylloc; +
10731 +
10732 if (recovering > 0) { +
10733 recovering--; +
10734 } +
10735 } else { +
10736 symbol = preErrorSymbol; +
10737 preErrorSymbol = null; +
10738 } +
10739 +
10740 break; +
10741 +
10742 case 2: +
10743 len = this.productions_[action[1]][1]; +
10744 yyval.$ = vstack[vstack.length - len]; +
10745 yyval._$ = { +
10746 first_line: lstack[lstack.length - (len || 1)].first_line, +
10747 last_line: lstack[lstack.length - 1].last_line, +
10748 first_column: lstack[lstack.length - (len || 1)].first_column, +
10749 last_column: lstack[lstack.length - 1].last_column +
10750 }; +
10751 +
10752 if (ranges) { +
10753 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
10754 } +
10755 +
10756 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
10757 +
10758 if (typeof r !== 'undefined') { +
10759 return r; +
10760 } +
10761 +
10762 if (len) { +
10763 stack = stack.slice(0, -1 * len * 2); +
10764 vstack = vstack.slice(0, -1 * len); +
10765 lstack = lstack.slice(0, -1 * len); +
10766 } +
10767 +
10768 stack.push(this.productions_[action[1]][0]); +
10769 vstack.push(yyval.$); +
10770 lstack.push(yyval._$); +
10771 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
10772 stack.push(newState); +
10773 break; +
10774 +
10775 case 3: +
10776 return true; +
10777 } +
10778 } +
10779 +
10780 return true; +
10781 } +
10782 }; +
10783 /* generated by jison-lex 0.3.4 */ +
10784 +
10785 var lexer = function () { +
10786 var lexer = { +
10787 EOF: 1, +
10788 parseError: function parseError(str, hash) { +
10789 if (this.yy.parser) { +
10790 this.yy.parser.parseError(str, hash); +
10791 } else { +
10792 throw new Error(str); +
10793 } +
10794 }, +
10795 // resets the lexer, sets new input +
10796 setInput: function (input, yy) { +
10797 this.yy = yy || this.yy || {}; +
10798 this._input = input; +
10799 this._more = this._backtrack = this.done = false; +
10800 this.yylineno = this.yyleng = 0; +
10801 this.yytext = this.matched = this.match = ''; +
10802 this.conditionStack = ['INITIAL']; +
10803 this.yylloc = { +
10804 first_line: 1, +
10805 first_column: 0, +
10806 last_line: 1, +
10807 last_column: 0 +
10808 }; +
10809 +
10810 if (this.options.ranges) { +
10811 this.yylloc.range = [0, 0]; +
10812 } +
10813 +
10814 this.offset = 0; +
10815 return this; +
10816 }, +
10817 // consumes and returns one char from the input +
10818 input: function () { +
10819 var ch = this._input[0]; +
10820 this.yytext += ch; +
10821 this.yyleng++; +
10822 this.offset++; +
10823 this.match += ch; +
10824 this.matched += ch; +
10825 var lines = ch.match(/(?:\r\n?|\n).*/g); +
10826 +
10827 if (lines) { +
10828 this.yylineno++; +
10829 this.yylloc.last_line++; +
10830 } else { +
10831 this.yylloc.last_column++; +
10832 } +
10833 +
10834 if (this.options.ranges) { +
10835 this.yylloc.range[1]++; +
10836 } +
10837 +
10838 this._input = this._input.slice(1); +
10839 return ch; +
10840 }, +
10841 // unshifts one char (or a string) into the input +
10842 unput: function (ch) { +
10843 var len = ch.length; +
10844 var lines = ch.split(/(?:\r\n?|\n)/g); +
10845 this._input = ch + this._input; +
10846 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
10847 +
10848 this.offset -= len; +
10849 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
10850 this.match = this.match.substr(0, this.match.length - 1); +
10851 this.matched = this.matched.substr(0, this.matched.length - 1); +
10852 +
10853 if (lines.length - 1) { +
10854 this.yylineno -= lines.length - 1; +
10855 } +
10856 +
10857 var r = this.yylloc.range; +
10858 this.yylloc = { +
10859 first_line: this.yylloc.first_line, +
10860 last_line: this.yylineno + 1, +
10861 first_column: this.yylloc.first_column, +
10862 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
10863 }; +
10864 +
10865 if (this.options.ranges) { +
10866 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
10867 } +
10868 +
10869 this.yyleng = this.yytext.length; +
10870 return this; +
10871 }, +
10872 // When called from action, caches matched text and appends it on next action +
10873 more: function () { +
10874 this._more = true; +
10875 return this; +
10876 }, +
10877 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
10878 reject: function () { +
10879 if (this.options.backtrack_lexer) { +
10880 this._backtrack = true; +
10881 } else { +
10882 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
10883 text: "", +
10884 token: null, +
10885 line: this.yylineno +
10886 }); +
10887 } +
10888 +
10889 return this; +
10890 }, +
10891 // retain first n characters of the match +
10892 less: function (n) { +
10893 this.unput(this.match.slice(n)); +
10894 }, +
10895 // displays already matched input, i.e. for error messages +
10896 pastInput: function () { +
10897 var past = this.matched.substr(0, this.matched.length - this.match.length); +
10898 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
10899 }, +
10900 // displays upcoming input, i.e. for error messages +
10901 upcomingInput: function () { +
10902 var next = this.match; +
10903 +
10904 if (next.length < 20) { +
10905 next += this._input.substr(0, 20 - next.length); +
10906 } +
10907 +
10908 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
10909 }, +
10910 // displays the character position where the lexing error occurred, i.e. for error messages +
10911 showPosition: function () { +
10912 var pre = this.pastInput(); +
10913 var c = new Array(pre.length + 1).join("-"); +
10914 return pre + this.upcomingInput() + "\n" + c + "^"; +
10915 }, +
10916 // test the lexed token: return FALSE when not a match, otherwise return token +
10917 test_match: function (match, indexed_rule) { +
10918 var token, lines, backup; +
10919 +
10920 if (this.options.backtrack_lexer) { +
10921 // save context +
10922 backup = { +
10923 yylineno: this.yylineno, +
10924 yylloc: { +
10925 first_line: this.yylloc.first_line, +
10926 last_line: this.last_line, +
10927 first_column: this.yylloc.first_column, +
10928 last_column: this.yylloc.last_column +
10929 }, +
10930 yytext: this.yytext, +
10931 match: this.match, +
10932 matches: this.matches, +
10933 matched: this.matched, +
10934 yyleng: this.yyleng, +
10935 offset: this.offset, +
10936 _more: this._more, +
10937 _input: this._input, +
10938 yy: this.yy, +
10939 conditionStack: this.conditionStack.slice(0), +
10940 done: this.done +
10941 }; +
10942 +
10943 if (this.options.ranges) { +
10944 backup.yylloc.range = this.yylloc.range.slice(0); +
10945 } +
10946 } +
10947 +
10948 lines = match[0].match(/(?:\r\n?|\n).*/g); +
10949 +
10950 if (lines) { +
10951 this.yylineno += lines.length; +
10952 } +
10953 +
10954 this.yylloc = { +
10955 first_line: this.yylloc.last_line, +
10956 last_line: this.yylineno + 1, +
10957 first_column: this.yylloc.last_column, +
10958 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
10959 }; +
10960 this.yytext += match[0]; +
10961 this.match += match[0]; +
10962 this.matches = match; +
10963 this.yyleng = this.yytext.length; +
10964 +
10965 if (this.options.ranges) { +
10966 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
10967 } +
10968 +
10969 this._more = false; +
10970 this._backtrack = false; +
10971 this._input = this._input.slice(match[0].length); +
10972 this.matched += match[0]; +
10973 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
10974 +
10975 if (this.done && this._input) { +
10976 this.done = false; +
10977 } +
10978 +
10979 if (token) { +
10980 return token; +
10981 } else if (this._backtrack) { +
10982 // recover context +
10983 for (var k in backup) { +
10984 this[k] = backup[k]; +
10985 } +
10986 +
10987 return false; // rule action called reject() implying the next rule should be tested instead. +
10988 } +
10989 +
10990 return false; +
10991 }, +
10992 // return next match in input +
10993 next: function () { +
10994 if (this.done) { +
10995 return this.EOF; +
10996 } +
10997 +
10998 if (!this._input) { +
10999 this.done = true; +
11000 } +
11001 +
11002 var token, match, tempMatch, index; +
11003 +
11004 if (!this._more) { +
11005 this.yytext = ''; +
11006 this.match = ''; +
11007 } +
11008 +
11009 var rules = this._currentRules(); +
11010 +
11011 for (var i = 0; i < rules.length; i++) { +
11012 tempMatch = this._input.match(this.rules[rules[i]]); +
11013 +
11014 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
11015 match = tempMatch; +
11016 index = i; +
11017 +
11018 if (this.options.backtrack_lexer) { +
11019 token = this.test_match(tempMatch, rules[i]); +
11020 +
11021 if (token !== false) { +
11022 return token; +
11023 } else if (this._backtrack) { +
11024 match = false; +
11025 continue; // rule action called reject() implying a rule MISmatch. +
11026 } else { +
11027 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
11028 return false; +
11029 } +
11030 } else if (!this.options.flex) { +
11031 break; +
11032 } +
11033 } +
11034 } +
11035 +
11036 if (match) { +
11037 token = this.test_match(match, rules[index]); +
11038 +
11039 if (token !== false) { +
11040 return token; +
11041 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
11042 +
11043 +
11044 return false; +
11045 } +
11046 +
11047 if (this._input === "") { +
11048 return this.EOF; +
11049 } else { +
11050 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
11051 text: "", +
11052 token: null, +
11053 line: this.yylineno +
11054 }); +
11055 } +
11056 }, +
11057 // return next match that has a token +
11058 lex: function lex() { +
11059 var r = this.next(); +
11060 +
11061 if (r) { +
11062 return r; +
11063 } else { +
11064 return this.lex(); +
11065 } +
11066 }, +
11067 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
11068 begin: function begin(condition) { +
11069 this.conditionStack.push(condition); +
11070 }, +
11071 // pop the previously active lexer condition state off the condition stack +
11072 popState: function popState() { +
11073 var n = this.conditionStack.length - 1; +
11074 +
11075 if (n > 0) { +
11076 return this.conditionStack.pop(); +
11077 } else { +
11078 return this.conditionStack[0]; +
11079 } +
11080 }, +
11081 // produce the lexer rule set which is active for the currently active lexer condition state +
11082 _currentRules: function _currentRules() { +
11083 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
11084 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
11085 } else { +
11086 return this.conditions["INITIAL"].rules; +
11087 } +
11088 }, +
11089 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
11090 topState: function topState(n) { +
11091 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
11092 +
11093 if (n >= 0) { +
11094 return this.conditionStack[n]; +
11095 } else { +
11096 return "INITIAL"; +
11097 } +
11098 }, +
11099 // alias for begin(condition) +
11100 pushState: function pushState(condition) { +
11101 this.begin(condition); +
11102 }, +
11103 // return the number of states currently on the stack +
11104 stateStackSize: function stateStackSize() { +
11105 return this.conditionStack.length; +
11106 }, +
11107 options: { +
11108 "case-insensitive": true +
11109 }, +
11110 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
11111 // Pre-lexer code can go here +
11112 var YYSTATE = YY_START; +
11113 +
11114 switch ($avoiding_name_collisions) { +
11115 case 0: +
11116 return 4; +
11117 break; +
11118 +
11119 case 1: +
11120 return 9; +
11121 break; +
11122 +
11123 case 2: +
11124 return 'space'; +
11125 break; +
11126 +
11127 case 3: +
11128 return 10; +
11129 break; +
11130 +
11131 case 4: +
11132 return 12; +
11133 break; +
11134 +
11135 case 5: +
11136 return 6; +
11137 break; +
11138 +
11139 case 6: +
11140 return 13; +
11141 break; +
11142 } +
11143 }, +
11144 rules: [/^(?:info\b)/i, /^(?:[\s\n\r]+)/i, /^(?:[\s]+)/i, /^(?:showInfo\b)/i, /^(?:say\b)/i, /^(?:$)/i, /^(?:.)/i], +
11145 conditions: { +
11146 "INITIAL": { +
11147 "rules": [0, 1, 2, 3, 4, 5, 6], +
11148 "inclusive": true +
11149 } +
11150 } +
11151 }; +
11152 return lexer; +
11153 }(); +
11154 +
11155 parser.lexer = lexer; +
11156 +
11157 function Parser() { +
11158 this.yy = {}; +
11159 } +
11160 +
11161 Parser.prototype = parser; +
11162 parser.Parser = Parser; +
11163 return new Parser(); +
11164}(); +
11165 +
11166if (true) { +
11167 exports.parser = parser; +
11168 exports.Parser = parser.Parser; +
11169 +
11170 exports.parse = function () { +
11171 return parser.parse.apply(parser, arguments); +
11172 }; +
11173 +
11174 exports.main = function commonjsMain(args) { +
11175 if (!args[1]) { +
11176 console.log('Usage: ' + args[0] + ' FILE'); +
11177 process.exit(1); +
11178 } +
11179 +
11180 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
11181 +
11182 return exports.parser.parse(source); +
11183 }; +
11184 +
11185 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
11186 exports.main(process.argv.slice(1)); +
11187 } +
11188} +
11189/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
11190 +
11191/***/ }), +
11192 +
11193/***/ "./src/diagrams/sequence/parser/sequenceDiagram.js": +
11194/*!*********************************************************!*\ +
11195 !*** ./src/diagrams/sequence/parser/sequenceDiagram.js ***! +
11196 \*********************************************************/ +
11197/*! no static exports found */ +
11198/***/ (function(module, exports, __webpack_require__) { +
11199 +
11200/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
11201 +
11202/* +
11203 Returns a Parser object of the following structure: +
11204 +
11205 Parser: { +
11206 yy: {} +
11207 } +
11208 +
11209 Parser.prototype: { +
11210 yy: {}, +
11211 trace: function(), +
11212 symbols_: {associative list: name ==> number}, +
11213 terminals_: {associative list: number ==> name}, +
11214 productions_: [...], +
11215 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
11216 table: [...], +
11217 defaultActions: {...}, +
11218 parseError: function(str, hash), +
11219 parse: function(input), +
11220 +
11221 lexer: { +
11222 EOF: 1, +
11223 parseError: function(str, hash), +
11224 setInput: function(input), +
11225 input: function(), +
11226 unput: function(str), +
11227 more: function(), +
11228 less: function(n), +
11229 pastInput: function(), +
11230 upcomingInput: function(), +
11231 showPosition: function(), +
11232 test_match: function(regex_match_array, rule_index), +
11233 next: function(), +
11234 lex: function(), +
11235 begin: function(condition), +
11236 popState: function(), +
11237 _currentRules: function(), +
11238 topState: function(), +
11239 pushState: function(condition), +
11240 +
11241 options: { +
11242 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
11243 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
11244 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
11245 }, +
11246 +
11247 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
11248 rules: [...], +
11249 conditions: {associative list: name ==> set}, +
11250 } +
11251 } +
11252 +
11253 +
11254 token location info (@$, _$, etc.): { +
11255 first_line: n, +
11256 last_line: n, +
11257 first_column: n, +
11258 last_column: n, +
11259 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
11260 } +
11261 +
11262 +
11263 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
11264 text: (matched text) +
11265 token: (the produced terminal token, if any) +
11266 line: (yylineno) +
11267 } +
11268 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
11269 loc: (yylloc) +
11270 expected: (string describing the set of expected tokens) +
11271 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
11272 } +
11273*/ +
11274var parser = function () { +
11275 var o = function (k, v, o, l) { +
11276 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
11277 +
11278 return o; +
11279 }, +
11280 $V0 = [1, 2], +
11281 $V1 = [1, 3], +
11282 $V2 = [1, 4], +
11283 $V3 = [2, 4], +
11284 $V4 = [1, 9], +
11285 $V5 = [1, 11], +
11286 $V6 = [1, 12], +
11287 $V7 = [1, 14], +
11288 $V8 = [1, 15], +
11289 $V9 = [1, 17], +
11290 $Va = [1, 18], +
11291 $Vb = [1, 19], +
11292 $Vc = [1, 20], +
11293 $Vd = [1, 21], +
11294 $Ve = [1, 23], +
11295 $Vf = [1, 24], +
11296 $Vg = [1, 4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 25, 27, 28, 29, 40], +
11297 $Vh = [1, 32], +
11298 $Vi = [4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 25, 29, 40], +
11299 $Vj = [4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 25, 28, 29, 40], +
11300 $Vk = [4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 25, 27, 29, 40], +
11301 $Vl = [38, 39, 40]; +
11302 +
11303 var parser = { +
11304 trace: function trace() {}, +
11305 yy: {}, +
11306 symbols_: { +
11307 "error": 2, +
11308 "start": 3, +
11309 "SPACE": 4, +
11310 "NL": 5, +
11311 "SD": 6, +
11312 "document": 7, +
11313 "line": 8, +
11314 "statement": 9, +
11315 "participant": 10, +
11316 "actor": 11, +
11317 "AS": 12, +
11318 "restOfLine": 13, +
11319 "signal": 14, +
11320 "activate": 15, +
11321 "deactivate": 16, +
11322 "note_statement": 17, +
11323 "title": 18, +
11324 "text2": 19, +
11325 "loop": 20, +
11326 "end": 21, +
11327 "opt": 22, +
11328 "alt": 23, +
11329 "else_sections": 24, +
11330 "par": 25, +
11331 "par_sections": 26, +
11332 "and": 27, +
11333 "else": 28, +
11334 "note": 29, +
11335 "placement": 30, +
11336 "over": 31, +
11337 "actor_pair": 32, +
11338 "spaceList": 33, +
11339 ",": 34, +
11340 "left_of": 35, +
11341 "right_of": 36, +
11342 "signaltype": 37, +
11343 "+": 38, +
11344 "-": 39, +
11345 "ACTOR": 40, +
11346 "SOLID_OPEN_ARROW": 41, +
11347 "DOTTED_OPEN_ARROW": 42, +
11348 "SOLID_ARROW": 43, +
11349 "DOTTED_ARROW": 44, +
11350 "SOLID_CROSS": 45, +
11351 "DOTTED_CROSS": 46, +
11352 "TXT": 47, +
11353 "$accept": 0, +
11354 "$end": 1 +
11355 }, +
11356 terminals_: { +
11357 2: "error", +
11358 4: "SPACE", +
11359 5: "NL", +
11360 6: "SD", +
11361 10: "participant", +
11362 12: "AS", +
11363 13: "restOfLine", +
11364 15: "activate", +
11365 16: "deactivate", +
11366 18: "title", +
11367 20: "loop", +
11368 21: "end", +
11369 22: "opt", +
11370 23: "alt", +
11371 25: "par", +
11372 27: "and", +
11373 28: "else", +
11374 29: "note", +
11375 31: "over", +
11376 34: ",", +
11377 35: "left_of", +
11378 36: "right_of", +
11379 38: "+", +
11380 39: "-", +
11381 40: "ACTOR", +
11382 41: "SOLID_OPEN_ARROW", +
11383 42: "DOTTED_OPEN_ARROW", +
11384 43: "SOLID_ARROW", +
11385 44: "DOTTED_ARROW", +
11386 45: "SOLID_CROSS", +
11387 46: "DOTTED_CROSS", +
11388 47: "TXT" +
11389 }, +
11390 productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 5], [9, 3], [9, 2], [9, 3], [9, 3], [9, 2], [9, 3], [9, 4], [9, 4], [9, 4], [9, 4], [26, 1], [26, 4], [24, 1], [24, 4], [17, 4], [17, 4], [33, 2], [33, 1], [32, 3], [32, 1], [30, 1], [30, 1], [14, 5], [14, 5], [14, 4], [11, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [19, 1]], +
11391 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
11392 /* action[1] */ +
11393 , $$ +
11394 /* vstack */ +
11395 , _$ +
11396 /* lstack */ +
11397 ) { +
11398 /* this == yyval */ +
11399 var $0 = $$.length - 1; +
11400 +
11401 switch (yystate) { +
11402 case 3: +
11403 yy.apply($$[$0]); +
11404 return $$[$0]; +
11405 break; +
11406 +
11407 case 4: +
11408 this.$ = []; +
11409 break; +
11410 +
11411 case 5: +
11412 $$[$0 - 1].push($$[$0]); +
11413 this.$ = $$[$0 - 1]; +
11414 break; +
11415 +
11416 case 6: +
11417 case 7: +
11418 this.$ = $$[$0]; +
11419 break; +
11420 +
11421 case 8: +
11422 this.$ = []; +
11423 break; +
11424 +
11425 case 9: +
11426 $$[$0 - 3].description = $$[$0 - 1]; +
11427 this.$ = $$[$0 - 3]; +
11428 break; +
11429 +
11430 case 10: +
11431 this.$ = $$[$0 - 1]; +
11432 break; +
11433 +
11434 case 12: +
11435 this.$ = { +
11436 type: 'activeStart', +
11437 signalType: yy.LINETYPE.ACTIVE_START, +
11438 actor: $$[$0 - 1] +
11439 }; +
11440 break; +
11441 +
11442 case 13: +
11443 this.$ = { +
11444 type: 'activeEnd', +
11445 signalType: yy.LINETYPE.ACTIVE_END, +
11446 actor: $$[$0 - 1] +
11447 }; +
11448 break; +
11449 +
11450 case 15: +
11451 this.$ = [{ +
11452 type: 'setTitle', +
11453 text: $$[$0 - 1] +
11454 }]; +
11455 break; +
11456 +
11457 case 16: +
11458 $$[$0 - 1].unshift({ +
11459 type: 'loopStart', +
11460 loopText: $$[$0 - 2], +
11461 signalType: yy.LINETYPE.LOOP_START +
11462 }); +
11463 $$[$0 - 1].push({ +
11464 type: 'loopEnd', +
11465 loopText: $$[$0 - 2], +
11466 signalType: yy.LINETYPE.LOOP_END +
11467 }); +
11468 this.$ = $$[$0 - 1]; +
11469 break; +
11470 +
11471 case 17: +
11472 $$[$0 - 1].unshift({ +
11473 type: 'optStart', +
11474 optText: $$[$0 - 2], +
11475 signalType: yy.LINETYPE.OPT_START +
11476 }); +
11477 $$[$0 - 1].push({ +
11478 type: 'optEnd', +
11479 optText: $$[$0 - 2], +
11480 signalType: yy.LINETYPE.OPT_END +
11481 }); +
11482 this.$ = $$[$0 - 1]; +
11483 break; +
11484 +
11485 case 18: +
11486 // Alt start +
11487 $$[$0 - 1].unshift({ +
11488 type: 'altStart', +
11489 altText: $$[$0 - 2], +
11490 signalType: yy.LINETYPE.ALT_START +
11491 }); // Content in alt is already in $$[$0-1] +
11492 // End +
11493 +
11494 $$[$0 - 1].push({ +
11495 type: 'altEnd', +
11496 signalType: yy.LINETYPE.ALT_END +
11497 }); +
11498 this.$ = $$[$0 - 1]; +
11499 break; +
11500 +
11501 case 19: +
11502 // Parallel start +
11503 $$[$0 - 1].unshift({ +
11504 type: 'parStart', +
11505 parText: $$[$0 - 2], +
11506 signalType: yy.LINETYPE.PAR_START +
11507 }); // Content in par is already in $$[$0-1] +
11508 // End +
11509 +
11510 $$[$0 - 1].push({ +
11511 type: 'parEnd', +
11512 signalType: yy.LINETYPE.PAR_END +
11513 }); +
11514 this.$ = $$[$0 - 1]; +
11515 break; +
11516 +
11517 case 21: +
11518 this.$ = $$[$0 - 3].concat([{ +
11519 type: 'and', +
11520 parText: $$[$0 - 1], +
11521 signalType: yy.LINETYPE.PAR_AND +
11522 }, $$[$0]]); +
11523 break; +
11524 +
11525 case 23: +
11526 this.$ = $$[$0 - 3].concat([{ +
11527 type: 'else', +
11528 altText: $$[$0 - 1], +
11529 signalType: yy.LINETYPE.ALT_ELSE +
11530 }, $$[$0]]); +
11531 break; +
11532 +
11533 case 24: +
11534 this.$ = [$$[$0 - 1], { +
11535 type: 'addNote', +
11536 placement: $$[$0 - 2], +
11537 actor: $$[$0 - 1].actor, +
11538 text: $$[$0] +
11539 }]; +
11540 break; +
11541 +
11542 case 25: +
11543 // Coerce actor_pair into a [to, from, ...] array +
11544 $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2); +
11545 $$[$0 - 2][0] = $$[$0 - 2][0].actor; +
11546 $$[$0 - 2][1] = $$[$0 - 2][1].actor; +
11547 this.$ = [$$[$0 - 1], { +
11548 type: 'addNote', +
11549 placement: yy.PLACEMENT.OVER, +
11550 actor: $$[$0 - 2].slice(0, 2), +
11551 text: $$[$0] +
11552 }]; +
11553 break; +
11554 +
11555 case 28: +
11556 this.$ = [$$[$0 - 2], $$[$0]]; +
11557 break; +
11558 +
11559 case 29: +
11560 this.$ = $$[$0]; +
11561 break; +
11562 +
11563 case 30: +
11564 this.$ = yy.PLACEMENT.LEFTOF; +
11565 break; +
11566 +
11567 case 31: +
11568 this.$ = yy.PLACEMENT.RIGHTOF; +
11569 break; +
11570 +
11571 case 32: +
11572 this.$ = [$$[$0 - 4], $$[$0 - 1], { +
11573 type: 'addMessage', +
11574 from: $$[$0 - 4].actor, +
11575 to: $$[$0 - 1].actor, +
11576 signalType: $$[$0 - 3], +
11577 msg: $$[$0] +
11578 }, { +
11579 type: 'activeStart', +
11580 signalType: yy.LINETYPE.ACTIVE_START, +
11581 actor: $$[$0 - 1] +
11582 }]; +
11583 break; +
11584 +
11585 case 33: +
11586 this.$ = [$$[$0 - 4], $$[$0 - 1], { +
11587 type: 'addMessage', +
11588 from: $$[$0 - 4].actor, +
11589 to: $$[$0 - 1].actor, +
11590 signalType: $$[$0 - 3], +
11591 msg: $$[$0] +
11592 }, { +
11593 type: 'activeEnd', +
11594 signalType: yy.LINETYPE.ACTIVE_END, +
11595 actor: $$[$0 - 4] +
11596 }]; +
11597 break; +
11598 +
11599 case 34: +
11600 this.$ = [$$[$0 - 3], $$[$0 - 1], { +
11601 type: 'addMessage', +
11602 from: $$[$0 - 3].actor, +
11603 to: $$[$0 - 1].actor, +
11604 signalType: $$[$0 - 2], +
11605 msg: $$[$0] +
11606 }]; +
11607 break; +
11608 +
11609 case 35: +
11610 this.$ = { +
11611 type: 'addActor', +
11612 actor: $$[$0] +
11613 }; +
11614 break; +
11615 +
11616 case 36: +
11617 this.$ = yy.LINETYPE.SOLID_OPEN; +
11618 break; +
11619 +
11620 case 37: +
11621 this.$ = yy.LINETYPE.DOTTED_OPEN; +
11622 break; +
11623 +
11624 case 38: +
11625 this.$ = yy.LINETYPE.SOLID; +
11626 break; +
11627 +
11628 case 39: +
11629 this.$ = yy.LINETYPE.DOTTED; +
11630 break; +
11631 +
11632 case 40: +
11633 this.$ = yy.LINETYPE.SOLID_CROSS; +
11634 break; +
11635 +
11636 case 41: +
11637 this.$ = yy.LINETYPE.DOTTED_CROSS; +
11638 break; +
11639 +
11640 case 42: +
11641 this.$ = $$[$0].substring(1).trim().replace(/\\n/gm, "\n"); +
11642 break; +
11643 } +
11644 }, +
11645 table: [{ +
11646 3: 1, +
11647 4: $V0, +
11648 5: $V1, +
11649 6: $V2 +
11650 }, { +
11651 1: [3] +
11652 }, { +
11653 3: 5, +
11654 4: $V0, +
11655 5: $V1, +
11656 6: $V2 +
11657 }, { +
11658 3: 6, +
11659 4: $V0, +
11660 5: $V1, +
11661 6: $V2 +
11662 }, o([1, 4, 5, 10, 15, 16, 18, 20, 22, 23, 25, 29, 40], $V3, { +
11663 7: 7 +
11664 }), { +
11665 1: [2, 1] +
11666 }, { +
11667 1: [2, 2] +
11668 }, { +
11669 1: [2, 3], +
11670 4: $V4, +
11671 5: $V5, +
11672 8: 8, +
11673 9: 10, +
11674 10: $V6, +
11675 11: 22, +
11676 14: 13, +
11677 15: $V7, +
11678 16: $V8, +
11679 17: 16, +
11680 18: $V9, +
11681 20: $Va, +
11682 22: $Vb, +
11683 23: $Vc, +
11684 25: $Vd, +
11685 29: $Ve, +
11686 40: $Vf +
11687 }, o($Vg, [2, 5]), { +
11688 9: 25, +
11689 10: $V6, +
11690 11: 22, +
11691 14: 13, +
11692 15: $V7, +
11693 16: $V8, +
11694 17: 16, +
11695 18: $V9, +
11696 20: $Va, +
11697 22: $Vb, +
11698 23: $Vc, +
11699 25: $Vd, +
11700 29: $Ve, +
11701 40: $Vf +
11702 }, o($Vg, [2, 7]), o($Vg, [2, 8]), { +
11703 11: 26, +
11704 40: $Vf +
11705 }, { +
11706 5: [1, 27] +
11707 }, { +
11708 11: 28, +
11709 40: $Vf +
11710 }, { +
11711 11: 29, +
11712 40: $Vf +
11713 }, { +
11714 5: [1, 30] +
11715 }, { +
11716 19: 31, +
11717 47: $Vh +
11718 }, { +
11719 13: [1, 33] +
11720 }, { +
11721 13: [1, 34] +
11722 }, { +
11723 13: [1, 35] +
11724 }, { +
11725 13: [1, 36] +
11726 }, { +
11727 37: 37, +
11728 41: [1, 38], +
11729 42: [1, 39], +
11730 43: [1, 40], +
11731 44: [1, 41], +
11732 45: [1, 42], +
11733 46: [1, 43] +
11734 }, { +
11735 30: 44, +
11736 31: [1, 45], +
11737 35: [1, 46], +
11738 36: [1, 47] +
11739 }, o([5, 12, 34, 41, 42, 43, 44, 45, 46, 47], [2, 35]), o($Vg, [2, 6]), { +
11740 5: [1, 49], +
11741 12: [1, 48] +
11742 }, o($Vg, [2, 11]), { +
11743 5: [1, 50] +
11744 }, { +
11745 5: [1, 51] +
11746 }, o($Vg, [2, 14]), { +
11747 5: [1, 52] +
11748 }, { +
11749 5: [2, 42] +
11750 }, o($Vi, $V3, { +
11751 7: 53 +
11752 }), o($Vi, $V3, { +
11753 7: 54 +
11754 }), o($Vj, $V3, { +
11755 24: 55, +
11756 7: 56 +
11757 }), o($Vk, $V3, { +
11758 26: 57, +
11759 7: 58 +
11760 }), { +
11761 11: 61, +
11762 38: [1, 59], +
11763 39: [1, 60], +
11764 40: $Vf +
11765 }, o($Vl, [2, 36]), o($Vl, [2, 37]), o($Vl, [2, 38]), o($Vl, [2, 39]), o($Vl, [2, 40]), o($Vl, [2, 41]), { +
11766 11: 62, +
11767 40: $Vf +
11768 }, { +
11769 11: 64, +
11770 32: 63, +
11771 40: $Vf +
11772 }, { +
11773 40: [2, 30] +
11774 }, { +
11775 40: [2, 31] +
11776 }, { +
11777 13: [1, 65] +
11778 }, o($Vg, [2, 10]), o($Vg, [2, 12]), o($Vg, [2, 13]), o($Vg, [2, 15]), { +
11779 4: $V4, +
11780 5: $V5, +
11781 8: 8, +
11782 9: 10, +
11783 10: $V6, +
11784 11: 22, +
11785 14: 13, +
11786 15: $V7, +
11787 16: $V8, +
11788 17: 16, +
11789 18: $V9, +
11790 20: $Va, +
11791 21: [1, 66], +
11792 22: $Vb, +
11793 23: $Vc, +
11794 25: $Vd, +
11795 29: $Ve, +
11796 40: $Vf +
11797 }, { +
11798 4: $V4, +
11799 5: $V5, +
11800 8: 8, +
11801 9: 10, +
11802 10: $V6, +
11803 11: 22, +
11804 14: 13, +
11805 15: $V7, +
11806 16: $V8, +
11807 17: 16, +
11808 18: $V9, +
11809 20: $Va, +
11810 21: [1, 67], +
11811 22: $Vb, +
11812 23: $Vc, +
11813 25: $Vd, +
11814 29: $Ve, +
11815 40: $Vf +
11816 }, { +
11817 21: [1, 68] +
11818 }, { +
11819 4: $V4, +
11820 5: $V5, +
11821 8: 8, +
11822 9: 10, +
11823 10: $V6, +
11824 11: 22, +
11825 14: 13, +
11826 15: $V7, +
11827 16: $V8, +
11828 17: 16, +
11829 18: $V9, +
11830 20: $Va, +
11831 21: [2, 22], +
11832 22: $Vb, +
11833 23: $Vc, +
11834 25: $Vd, +
11835 28: [1, 69], +
11836 29: $Ve, +
11837 40: $Vf +
11838 }, { +
11839 21: [1, 70] +
11840 }, { +
11841 4: $V4, +
11842 5: $V5, +
11843 8: 8, +
11844 9: 10, +
11845 10: $V6, +
11846 11: 22, +
11847 14: 13, +
11848 15: $V7, +
11849 16: $V8, +
11850 17: 16, +
11851 18: $V9, +
11852 20: $Va, +
11853 21: [2, 20], +
11854 22: $Vb, +
11855 23: $Vc, +
11856 25: $Vd, +
11857 27: [1, 71], +
11858 29: $Ve, +
11859 40: $Vf +
11860 }, { +
11861 11: 72, +
11862 40: $Vf +
11863 }, { +
11864 11: 73, +
11865 40: $Vf +
11866 }, { +
11867 19: 74, +
11868 47: $Vh +
11869 }, { +
11870 19: 75, +
11871 47: $Vh +
11872 }, { +
11873 19: 76, +
11874 47: $Vh +
11875 }, { +
11876 34: [1, 77], +
11877 47: [2, 29] +
11878 }, { +
11879 5: [1, 78] +
11880 }, o($Vg, [2, 16]), o($Vg, [2, 17]), o($Vg, [2, 18]), { +
11881 13: [1, 79] +
11882 }, o($Vg, [2, 19]), { +
11883 13: [1, 80] +
11884 }, { +
11885 19: 81, +
11886 47: $Vh +
11887 }, { +
11888 19: 82, +
11889 47: $Vh +
11890 }, { +
11891 5: [2, 34] +
11892 }, { +
11893 5: [2, 24] +
11894 }, { +
11895 5: [2, 25] +
11896 }, { +
11897 11: 83, +
11898 40: $Vf +
11899 }, o($Vg, [2, 9]), o($Vj, $V3, { +
11900 7: 56, +
11901 24: 84 +
11902 }), o($Vk, $V3, { +
11903 7: 58, +
11904 26: 85 +
11905 }), { +
11906 5: [2, 32] +
11907 }, { +
11908 5: [2, 33] +
11909 }, { +
11910 47: [2, 28] +
11911 }, { +
11912 21: [2, 23] +
11913 }, { +
11914 21: [2, 21] +
11915 }], +
11916 defaultActions: { +
11917 5: [2, 1], +
11918 6: [2, 2], +
11919 32: [2, 42], +
11920 46: [2, 30], +
11921 47: [2, 31], +
11922 74: [2, 34], +
11923 75: [2, 24], +
11924 76: [2, 25], +
11925 81: [2, 32], +
11926 82: [2, 33], +
11927 83: [2, 28], +
11928 84: [2, 23], +
11929 85: [2, 21] +
11930 }, +
11931 parseError: function parseError(str, hash) { +
11932 if (hash.recoverable) { +
11933 this.trace(str); +
11934 } else { +
11935 var error = new Error(str); +
11936 error.hash = hash; +
11937 throw error; +
11938 } +
11939 }, +
11940 parse: function parse(input) { +
11941 var self = this, +
11942 stack = [0], +
11943 tstack = [], +
11944 vstack = [null], +
11945 lstack = [], +
11946 table = this.table, +
11947 yytext = '', +
11948 yylineno = 0, +
11949 yyleng = 0, +
11950 recovering = 0, +
11951 TERROR = 2, +
11952 EOF = 1; +
11953 var args = lstack.slice.call(arguments, 1); +
11954 var lexer = Object.create(this.lexer); +
11955 var sharedState = { +
11956 yy: {} +
11957 }; +
11958 +
11959 for (var k in this.yy) { +
11960 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
11961 sharedState.yy[k] = this.yy[k]; +
11962 } +
11963 } +
11964 +
11965 lexer.setInput(input, sharedState.yy); +
11966 sharedState.yy.lexer = lexer; +
11967 sharedState.yy.parser = this; +
11968 +
11969 if (typeof lexer.yylloc == 'undefined') { +
11970 lexer.yylloc = {}; +
11971 } +
11972 +
11973 var yyloc = lexer.yylloc; +
11974 lstack.push(yyloc); +
11975 var ranges = lexer.options && lexer.options.ranges; +
11976 +
11977 if (typeof sharedState.yy.parseError === 'function') { +
11978 this.parseError = sharedState.yy.parseError; +
11979 } else { +
11980 this.parseError = Object.getPrototypeOf(this).parseError; +
11981 } +
11982 +
11983 function popStack(n) { +
11984 stack.length = stack.length - 2 * n; +
11985 vstack.length = vstack.length - n; +
11986 lstack.length = lstack.length - n; +
11987 } +
11988 +
11989 function lex() { +
11990 var token; +
11991 token = tstack.pop() || lexer.lex() || EOF; +
11992 +
11993 if (typeof token !== 'number') { +
11994 if (token instanceof Array) { +
11995 tstack = token; +
11996 token = tstack.pop(); +
11997 } +
11998 +
11999 token = self.symbols_[token] || token; +
12000 } +
12001 +
12002 return token; +
12003 } +
12004 +
12005 var symbol, +
12006 preErrorSymbol, +
12007 state, +
12008 action, +
12009 a, +
12010 r, +
12011 yyval = {}, +
12012 p, +
12013 len, +
12014 newState, +
12015 expected; +
12016 +
12017 while (true) { +
12018 state = stack[stack.length - 1]; +
12019 +
12020 if (this.defaultActions[state]) { +
12021 action = this.defaultActions[state]; +
12022 } else { +
12023 if (symbol === null || typeof symbol == 'undefined') { +
12024 symbol = lex(); +
12025 } +
12026 +
12027 action = table[state] && table[state][symbol]; +
12028 } +
12029 +
12030 if (typeof action === 'undefined' || !action.length || !action[0]) { +
12031 var errStr = ''; +
12032 expected = []; +
12033 +
12034 for (p in table[state]) { +
12035 if (this.terminals_[p] && p > TERROR) { +
12036 expected.push('\'' + this.terminals_[p] + '\''); +
12037 } +
12038 } +
12039 +
12040 if (lexer.showPosition) { +
12041 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
12042 } else { +
12043 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
12044 } +
12045 +
12046 this.parseError(errStr, { +
12047 text: lexer.match, +
12048 token: this.terminals_[symbol] || symbol, +
12049 line: lexer.yylineno, +
12050 loc: yyloc, +
12051 expected: expected +
12052 }); +
12053 } +
12054 +
12055 if (action[0] instanceof Array && action.length > 1) { +
12056 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
12057 } +
12058 +
12059 switch (action[0]) { +
12060 case 1: +
12061 stack.push(symbol); +
12062 vstack.push(lexer.yytext); +
12063 lstack.push(lexer.yylloc); +
12064 stack.push(action[1]); +
12065 symbol = null; +
12066 +
12067 if (!preErrorSymbol) { +
12068 yyleng = lexer.yyleng; +
12069 yytext = lexer.yytext; +
12070 yylineno = lexer.yylineno; +
12071 yyloc = lexer.yylloc; +
12072 +
12073 if (recovering > 0) { +
12074 recovering--; +
12075 } +
12076 } else { +
12077 symbol = preErrorSymbol; +
12078 preErrorSymbol = null; +
12079 } +
12080 +
12081 break; +
12082 +
12083 case 2: +
12084 len = this.productions_[action[1]][1]; +
12085 yyval.$ = vstack[vstack.length - len]; +
12086 yyval._$ = { +
12087 first_line: lstack[lstack.length - (len || 1)].first_line, +
12088 last_line: lstack[lstack.length - 1].last_line, +
12089 first_column: lstack[lstack.length - (len || 1)].first_column, +
12090 last_column: lstack[lstack.length - 1].last_column +
12091 }; +
12092 +
12093 if (ranges) { +
12094 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
12095 } +
12096 +
12097 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
12098 +
12099 if (typeof r !== 'undefined') { +
12100 return r; +
12101 } +
12102 +
12103 if (len) { +
12104 stack = stack.slice(0, -1 * len * 2); +
12105 vstack = vstack.slice(0, -1 * len); +
12106 lstack = lstack.slice(0, -1 * len); +
12107 } +
12108 +
12109 stack.push(this.productions_[action[1]][0]); +
12110 vstack.push(yyval.$); +
12111 lstack.push(yyval._$); +
12112 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
12113 stack.push(newState); +
12114 break; +
12115 +
12116 case 3: +
12117 return true; +
12118 } +
12119 } +
12120 +
12121 return true; +
12122 } +
12123 }; +
12124 /* generated by jison-lex 0.3.4 */ +
12125 +
12126 var lexer = function () { +
12127 var lexer = { +
12128 EOF: 1, +
12129 parseError: function parseError(str, hash) { +
12130 if (this.yy.parser) { +
12131 this.yy.parser.parseError(str, hash); +
12132 } else { +
12133 throw new Error(str); +
12134 } +
12135 }, +
12136 // resets the lexer, sets new input +
12137 setInput: function (input, yy) { +
12138 this.yy = yy || this.yy || {}; +
12139 this._input = input; +
12140 this._more = this._backtrack = this.done = false; +
12141 this.yylineno = this.yyleng = 0; +
12142 this.yytext = this.matched = this.match = ''; +
12143 this.conditionStack = ['INITIAL']; +
12144 this.yylloc = { +
12145 first_line: 1, +
12146 first_column: 0, +
12147 last_line: 1, +
12148 last_column: 0 +
12149 }; +
12150 +
12151 if (this.options.ranges) { +
12152 this.yylloc.range = [0, 0]; +
12153 } +
12154 +
12155 this.offset = 0; +
12156 return this; +
12157 }, +
12158 // consumes and returns one char from the input +
12159 input: function () { +
12160 var ch = this._input[0]; +
12161 this.yytext += ch; +
12162 this.yyleng++; +
12163 this.offset++; +
12164 this.match += ch; +
12165 this.matched += ch; +
12166 var lines = ch.match(/(?:\r\n?|\n).*/g); +
12167 +
12168 if (lines) { +
12169 this.yylineno++; +
12170 this.yylloc.last_line++; +
12171 } else { +
12172 this.yylloc.last_column++; +
12173 } +
12174 +
12175 if (this.options.ranges) { +
12176 this.yylloc.range[1]++; +
12177 } +
12178 +
12179 this._input = this._input.slice(1); +
12180 return ch; +
12181 }, +
12182 // unshifts one char (or a string) into the input +
12183 unput: function (ch) { +
12184 var len = ch.length; +
12185 var lines = ch.split(/(?:\r\n?|\n)/g); +
12186 this._input = ch + this._input; +
12187 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
12188 +
12189 this.offset -= len; +
12190 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
12191 this.match = this.match.substr(0, this.match.length - 1); +
12192 this.matched = this.matched.substr(0, this.matched.length - 1); +
12193 +
12194 if (lines.length - 1) { +
12195 this.yylineno -= lines.length - 1; +
12196 } +
12197 +
12198 var r = this.yylloc.range; +
12199 this.yylloc = { +
12200 first_line: this.yylloc.first_line, +
12201 last_line: this.yylineno + 1, +
12202 first_column: this.yylloc.first_column, +
12203 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
12204 }; +
12205 +
12206 if (this.options.ranges) { +
12207 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
12208 } +
12209 +
12210 this.yyleng = this.yytext.length; +
12211 return this; +
12212 }, +
12213 // When called from action, caches matched text and appends it on next action +
12214 more: function () { +
12215 this._more = true; +
12216 return this; +
12217 }, +
12218 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
12219 reject: function () { +
12220 if (this.options.backtrack_lexer) { +
12221 this._backtrack = true; +
12222 } else { +
12223 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
12224 text: "", +
12225 token: null, +
12226 line: this.yylineno +
12227 }); +
12228 } +
12229 +
12230 return this; +
12231 }, +
12232 // retain first n characters of the match +
12233 less: function (n) { +
12234 this.unput(this.match.slice(n)); +
12235 }, +
12236 // displays already matched input, i.e. for error messages +
12237 pastInput: function () { +
12238 var past = this.matched.substr(0, this.matched.length - this.match.length); +
12239 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
12240 }, +
12241 // displays upcoming input, i.e. for error messages +
12242 upcomingInput: function () { +
12243 var next = this.match; +
12244 +
12245 if (next.length < 20) { +
12246 next += this._input.substr(0, 20 - next.length); +
12247 } +
12248 +
12249 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
12250 }, +
12251 // displays the character position where the lexing error occurred, i.e. for error messages +
12252 showPosition: function () { +
12253 var pre = this.pastInput(); +
12254 var c = new Array(pre.length + 1).join("-"); +
12255 return pre + this.upcomingInput() + "\n" + c + "^"; +
12256 }, +
12257 // test the lexed token: return FALSE when not a match, otherwise return token +
12258 test_match: function (match, indexed_rule) { +
12259 var token, lines, backup; +
12260 +
12261 if (this.options.backtrack_lexer) { +
12262 // save context +
12263 backup = { +
12264 yylineno: this.yylineno, +
12265 yylloc: { +
12266 first_line: this.yylloc.first_line, +
12267 last_line: this.last_line, +
12268 first_column: this.yylloc.first_column, +
12269 last_column: this.yylloc.last_column +
12270 }, +
12271 yytext: this.yytext, +
12272 match: this.match, +
12273 matches: this.matches, +
12274 matched: this.matched, +
12275 yyleng: this.yyleng, +
12276 offset: this.offset, +
12277 _more: this._more, +
12278 _input: this._input, +
12279 yy: this.yy, +
12280 conditionStack: this.conditionStack.slice(0), +
12281 done: this.done +
12282 }; +
12283 +
12284 if (this.options.ranges) { +
12285 backup.yylloc.range = this.yylloc.range.slice(0); +
12286 } +
12287 } +
12288 +
12289 lines = match[0].match(/(?:\r\n?|\n).*/g); +
12290 +
12291 if (lines) { +
12292 this.yylineno += lines.length; +
12293 } +
12294 +
12295 this.yylloc = { +
12296 first_line: this.yylloc.last_line, +
12297 last_line: this.yylineno + 1, +
12298 first_column: this.yylloc.last_column, +
12299 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
12300 }; +
12301 this.yytext += match[0]; +
12302 this.match += match[0]; +
12303 this.matches = match; +
12304 this.yyleng = this.yytext.length; +
12305 +
12306 if (this.options.ranges) { +
12307 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
12308 } +
12309 +
12310 this._more = false; +
12311 this._backtrack = false; +
12312 this._input = this._input.slice(match[0].length); +
12313 this.matched += match[0]; +
12314 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
12315 +
12316 if (this.done && this._input) { +
12317 this.done = false; +
12318 } +
12319 +
12320 if (token) { +
12321 return token; +
12322 } else if (this._backtrack) { +
12323 // recover context +
12324 for (var k in backup) { +
12325 this[k] = backup[k]; +
12326 } +
12327 +
12328 return false; // rule action called reject() implying the next rule should be tested instead. +
12329 } +
12330 +
12331 return false; +
12332 }, +
12333 // return next match in input +
12334 next: function () { +
12335 if (this.done) { +
12336 return this.EOF; +
12337 } +
12338 +
12339 if (!this._input) { +
12340 this.done = true; +
12341 } +
12342 +
12343 var token, match, tempMatch, index; +
12344 +
12345 if (!this._more) { +
12346 this.yytext = ''; +
12347 this.match = ''; +
12348 } +
12349 +
12350 var rules = this._currentRules(); +
12351 +
12352 for (var i = 0; i < rules.length; i++) { +
12353 tempMatch = this._input.match(this.rules[rules[i]]); +
12354 +
12355 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
12356 match = tempMatch; +
12357 index = i; +
12358 +
12359 if (this.options.backtrack_lexer) { +
12360 token = this.test_match(tempMatch, rules[i]); +
12361 +
12362 if (token !== false) { +
12363 return token; +
12364 } else if (this._backtrack) { +
12365 match = false; +
12366 continue; // rule action called reject() implying a rule MISmatch. +
12367 } else { +
12368 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
12369 return false; +
12370 } +
12371 } else if (!this.options.flex) { +
12372 break; +
12373 } +
12374 } +
12375 } +
12376 +
12377 if (match) { +
12378 token = this.test_match(match, rules[index]); +
12379 +
12380 if (token !== false) { +
12381 return token; +
12382 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
12383 +
12384 +
12385 return false; +
12386 } +
12387 +
12388 if (this._input === "") { +
12389 return this.EOF; +
12390 } else { +
12391 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
12392 text: "", +
12393 token: null, +
12394 line: this.yylineno +
12395 }); +
12396 } +
12397 }, +
12398 // return next match that has a token +
12399 lex: function lex() { +
12400 var r = this.next(); +
12401 +
12402 if (r) { +
12403 return r; +
12404 } else { +
12405 return this.lex(); +
12406 } +
12407 }, +
12408 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
12409 begin: function begin(condition) { +
12410 this.conditionStack.push(condition); +
12411 }, +
12412 // pop the previously active lexer condition state off the condition stack +
12413 popState: function popState() { +
12414 var n = this.conditionStack.length - 1; +
12415 +
12416 if (n > 0) { +
12417 return this.conditionStack.pop(); +
12418 } else { +
12419 return this.conditionStack[0]; +
12420 } +
12421 }, +
12422 // produce the lexer rule set which is active for the currently active lexer condition state +
12423 _currentRules: function _currentRules() { +
12424 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
12425 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
12426 } else { +
12427 return this.conditions["INITIAL"].rules; +
12428 } +
12429 }, +
12430 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
12431 topState: function topState(n) { +
12432 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
12433 +
12434 if (n >= 0) { +
12435 return this.conditionStack[n]; +
12436 } else { +
12437 return "INITIAL"; +
12438 } +
12439 }, +
12440 // alias for begin(condition) +
12441 pushState: function pushState(condition) { +
12442 this.begin(condition); +
12443 }, +
12444 // return the number of states currently on the stack +
12445 stateStackSize: function stateStackSize() { +
12446 return this.conditionStack.length; +
12447 }, +
12448 options: { +
12449 "case-insensitive": true +
12450 }, +
12451 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
12452 var YYSTATE = YY_START; +
12453 +
12454 switch ($avoiding_name_collisions) { +
12455 case 0: +
12456 return 5; +
12457 break; +
12458 +
12459 case 1: +
12460 /* skip all whitespace */ +
12461 break; +
12462 +
12463 case 2: +
12464 /* skip same-line whitespace */ +
12465 break; +
12466 +
12467 case 3: +
12468 /* skip comments */ +
12469 break; +
12470 +
12471 case 4: +
12472 /* skip comments */ +
12473 break; +
12474 +
12475 case 5: +
12476 this.begin('ID'); +
12477 return 10; +
12478 break; +
12479 +
12480 case 6: +
12481 this.begin('ALIAS'); +
12482 return 40; +
12483 break; +
12484 +
12485 case 7: +
12486 this.popState(); +
12487 this.popState(); +
12488 this.begin('LINE'); +
12489 return 12; +
12490 break; +
12491 +
12492 case 8: +
12493 this.popState(); +
12494 this.popState(); +
12495 return 5; +
12496 break; +
12497 +
12498 case 9: +
12499 this.begin('LINE'); +
12500 return 20; +
12501 break; +
12502 +
12503 case 10: +
12504 this.begin('LINE'); +
12505 return 22; +
12506 break; +
12507 +
12508 case 11: +
12509 this.begin('LINE'); +
12510 return 23; +
12511 break; +
12512 +
12513 case 12: +
12514 this.begin('LINE'); +
12515 return 28; +
12516 break; +
12517 +
12518 case 13: +
12519 this.begin('LINE'); +
12520 return 25; +
12521 break; +
12522 +
12523 case 14: +
12524 this.begin('LINE'); +
12525 return 27; +
12526 break; +
12527 +
12528 case 15: +
12529 this.popState(); +
12530 return 13; +
12531 break; +
12532 +
12533 case 16: +
12534 return 21; +
12535 break; +
12536 +
12537 case 17: +
12538 return 35; +
12539 break; +
12540 +
12541 case 18: +
12542 return 36; +
12543 break; +
12544 +
12545 case 19: +
12546 return 31; +
12547 break; +
12548 +
12549 case 20: +
12550 return 29; +
12551 break; +
12552 +
12553 case 21: +
12554 this.begin('ID'); +
12555 return 15; +
12556 break; +
12557 +
12558 case 22: +
12559 this.begin('ID'); +
12560 return 16; +
12561 break; +
12562 +
12563 case 23: +
12564 return 18; +
12565 break; +
12566 +
12567 case 24: +
12568 return 6; +
12569 break; +
12570 +
12571 case 25: +
12572 return 34; +
12573 break; +
12574 +
12575 case 26: +
12576 return 5; +
12577 break; +
12578 +
12579 case 27: +
12580 yy_.yytext = yy_.yytext.trim(); +
12581 return 40; +
12582 break; +
12583 +
12584 case 28: +
12585 return 43; +
12586 break; +
12587 +
12588 case 29: +
12589 return 44; +
12590 break; +
12591 +
12592 case 30: +
12593 return 41; +
12594 break; +
12595 +
12596 case 31: +
12597 return 42; +
12598 break; +
12599 +
12600 case 32: +
12601 return 45; +
12602 break; +
12603 +
12604 case 33: +
12605 return 46; +
12606 break; +
12607 +
12608 case 34: +
12609 return 47; +
12610 break; +
12611 +
12612 case 35: +
12613 return 38; +
12614 break; +
12615 +
12616 case 36: +
12617 return 39; +
12618 break; +
12619 +
12620 case 37: +
12621 return 5; +
12622 break; +
12623 +
12624 case 38: +
12625 return 'INVALID'; +
12626 break; +
12627 } +
12628 }, +
12629 rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:participant\b)/i, /^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:and\b)/i, /^(?:[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\b)/i, /^(?:sequenceDiagram\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\+\->:\n,;]+)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?::[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], +
12630 conditions: { +
12631 "LINE": { +
12632 "rules": [2, 3, 15], +
12633 "inclusive": false +
12634 }, +
12635 "ALIAS": { +
12636 "rules": [2, 3, 7, 8], +
12637 "inclusive": false +
12638 }, +
12639 "ID": { +
12640 "rules": [2, 3, 6], +
12641 "inclusive": false +
12642 }, +
12643 "INITIAL": { +
12644 "rules": [0, 1, 3, 4, 5, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38], +
12645 "inclusive": true +
12646 } +
12647 } +
12648 }; +
12649 return lexer; +
12650 }(); +
12651 +
12652 parser.lexer = lexer; +
12653 +
12654 function Parser() { +
12655 this.yy = {}; +
12656 } +
12657 +
12658 Parser.prototype = parser; +
12659 parser.Parser = Parser; +
12660 return new Parser(); +
12661}(); +
12662 +
12663if (true) { +
12664 exports.parser = parser; +
12665 exports.Parser = parser.Parser; +
12666 +
12667 exports.parse = function () { +
12668 return parser.parse.apply(parser, arguments); +
12669 }; +
12670 +
12671 exports.main = function commonjsMain(args) { +
12672 if (!args[1]) { +
12673 console.log('Usage: ' + args[0] + ' FILE'); +
12674 process.exit(1); +
12675 } +
12676 +
12677 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
12678 +
12679 return exports.parser.parse(source); +
12680 }; +
12681 +
12682 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
12683 exports.main(process.argv.slice(1)); +
12684 } +
12685} +
12686/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
12687 +
12688/***/ }), +
12689 +
12690/***/ "./src/diagrams/sequence/sequenceDb.js": +
12691/*!*********************************************!*\ +
12692 !*** ./src/diagrams/sequence/sequenceDb.js ***! +
12693 \*********************************************/ +
12694/*! exports provided: addActor, addMessage, addSignal, getMessages, getActors, getActor, getActorKeys, getTitle, clear, LINETYPE, ARROWTYPE, PLACEMENT, addNote, setTitle, apply, default */ +
12695/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12696 +
12697"use strict"; +
12698__webpack_require__.r(__webpack_exports__); +
12699/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addActor", function() { return addActor; }); +
12700/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMessage", function() { return addMessage; }); +
12701/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSignal", function() { return addSignal; }); +
12702/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMessages", function() { return getMessages; }); +
12703/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActors", function() { return getActors; }); +
12704/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActor", function() { return getActor; }); +
12705/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActorKeys", function() { return getActorKeys; }); +
12706/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTitle", function() { return getTitle; }); +
12707/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
12708/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LINETYPE", function() { return LINETYPE; }); +
12709/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ARROWTYPE", function() { return ARROWTYPE; }); +
12710/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PLACEMENT", function() { return PLACEMENT; }); +
12711/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addNote", function() { return addNote; }); +
12712/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTitle", function() { return setTitle; }); +
12713/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "apply", function() { return apply; }); +
12714/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
12715 +
12716let actors = {}; +
12717let messages = []; +
12718const notes = []; +
12719let title = ''; +
12720const addActor = function (id, name, description) { +
12721 // Don't allow description nulling +
12722 const old = actors[id]; +
12723 if (old && name === old.name && description == null) return; // Don't allow null descriptions, either +
12724 +
12725 if (description == null) description = name; +
12726 actors[id] = { +
12727 name: name, +
12728 description: description +
12729 }; +
12730}; +
12731const addMessage = function (idFrom, idTo, message, answer) { +
12732 messages.push({ +
12733 from: idFrom, +
12734 to: idTo, +
12735 message: message, +
12736 answer: answer +
12737 }); +
12738}; +
12739const addSignal = function (idFrom, idTo, message, messageType) { +
12740 _logger__WEBPACK_IMPORTED_MODULE_0__["logger"].debug('Adding message from=' + idFrom + ' to=' + idTo + ' message=' + message + ' type=' + messageType); +
12741 messages.push({ +
12742 from: idFrom, +
12743 to: idTo, +
12744 message: message, +
12745 type: messageType +
12746 }); +
12747}; +
12748const getMessages = function () { +
12749 return messages; +
12750}; +
12751const getActors = function () { +
12752 return actors; +
12753}; +
12754const getActor = function (id) { +
12755 return actors[id]; +
12756}; +
12757const getActorKeys = function () { +
12758 return Object.keys(actors); +
12759}; +
12760const getTitle = function () { +
12761 return title; +
12762}; +
12763const clear = function () { +
12764 actors = {}; +
12765 messages = []; +
12766}; +
12767const LINETYPE = { +
12768 SOLID: 0, +
12769 DOTTED: 1, +
12770 NOTE: 2, +
12771 SOLID_CROSS: 3, +
12772 DOTTED_CROSS: 4, +
12773 SOLID_OPEN: 5, +
12774 DOTTED_OPEN: 6, +
12775 LOOP_START: 10, +
12776 LOOP_END: 11, +
12777 ALT_START: 12, +
12778 ALT_ELSE: 13, +
12779 ALT_END: 14, +
12780 OPT_START: 15, +
12781 OPT_END: 16, +
12782 ACTIVE_START: 17, +
12783 ACTIVE_END: 18, +
12784 PAR_START: 19, +
12785 PAR_AND: 20, +
12786 PAR_END: 21 +
12787}; +
12788const ARROWTYPE = { +
12789 FILLED: 0, +
12790 OPEN: 1 +
12791}; +
12792const PLACEMENT = { +
12793 LEFTOF: 0, +
12794 RIGHTOF: 1, +
12795 OVER: 2 +
12796}; +
12797const addNote = function (actor, placement, message) { +
12798 const note = { +
12799 actor: actor, +
12800 placement: placement, +
12801 message: message // Coerce actor into a [to, from, ...] array +
12802 +
12803 }; +
12804 const actors = [].concat(actor, actor); +
12805 notes.push(note); +
12806 messages.push({ +
12807 from: actors[0], +
12808 to: actors[1], +
12809 message: message, +
12810 type: LINETYPE.NOTE, +
12811 placement: placement +
12812 }); +
12813}; +
12814const setTitle = function (titleText) { +
12815 title = titleText; +
12816}; +
12817const apply = function (param) { +
12818 if (param instanceof Array) { +
12819 param.forEach(function (item) { +
12820 apply(item); +
12821 }); +
12822 } else { +
12823 switch (param.type) { +
12824 case 'addActor': +
12825 addActor(param.actor, param.actor, param.description); +
12826 break; +
12827 +
12828 case 'activeStart': +
12829 addSignal(param.actor, undefined, undefined, param.signalType); +
12830 break; +
12831 +
12832 case 'activeEnd': +
12833 addSignal(param.actor, undefined, undefined, param.signalType); +
12834 break; +
12835 +
12836 case 'addNote': +
12837 addNote(param.actor, param.placement, param.text); +
12838 break; +
12839 +
12840 case 'addMessage': +
12841 addSignal(param.from, param.to, param.msg, param.signalType); +
12842 break; +
12843 +
12844 case 'loopStart': +
12845 addSignal(undefined, undefined, param.loopText, param.signalType); +
12846 break; +
12847 +
12848 case 'loopEnd': +
12849 addSignal(undefined, undefined, undefined, param.signalType); +
12850 break; +
12851 +
12852 case 'optStart': +
12853 addSignal(undefined, undefined, param.optText, param.signalType); +
12854 break; +
12855 +
12856 case 'optEnd': +
12857 addSignal(undefined, undefined, undefined, param.signalType); +
12858 break; +
12859 +
12860 case 'altStart': +
12861 addSignal(undefined, undefined, param.altText, param.signalType); +
12862 break; +
12863 +
12864 case 'else': +
12865 addSignal(undefined, undefined, param.altText, param.signalType); +
12866 break; +
12867 +
12868 case 'altEnd': +
12869 addSignal(undefined, undefined, undefined, param.signalType); +
12870 break; +
12871 +
12872 case 'setTitle': +
12873 setTitle(param.text); +
12874 break; +
12875 +
12876 case 'parStart': +
12877 addSignal(undefined, undefined, param.parText, param.signalType); +
12878 break; +
12879 +
12880 case 'and': +
12881 addSignal(undefined, undefined, param.parText, param.signalType); +
12882 break; +
12883 +
12884 case 'parEnd': +
12885 addSignal(undefined, undefined, undefined, param.signalType); +
12886 break; +
12887 } +
12888 } +
12889}; +
12890/* harmony default export */ __webpack_exports__["default"] = ({ +
12891 addActor, +
12892 addMessage, +
12893 addSignal, +
12894 getMessages, +
12895 getActors, +
12896 getActor, +
12897 getActorKeys, +
12898 getTitle, +
12899 clear, +
12900 LINETYPE, +
12901 ARROWTYPE, +
12902 PLACEMENT, +
12903 addNote, +
12904 setTitle, +
12905 apply +
12906}); +
12907 +
12908/***/ }), +
12909 +
12910/***/ "./src/diagrams/sequence/sequenceRenderer.js": +
12911/*!***************************************************!*\ +
12912 !*** ./src/diagrams/sequence/sequenceRenderer.js ***! +
12913 \***************************************************/ +
12914/*! exports provided: bounds, drawActors, setConf, draw, default */ +
12915/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12916 +
12917"use strict"; +
12918__webpack_require__.r(__webpack_exports__); +
12919/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bounds", function() { return bounds; }); +
12920/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawActors", function() { return drawActors; }); +
12921/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
12922/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
12923/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "d3"); +
12924/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__); +
12925/* harmony import */ var _svgDraw__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgDraw */ "./src/diagrams/sequence/svgDraw.js"); +
12926/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
12927/* harmony import */ var _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parser/sequenceDiagram */ "./src/diagrams/sequence/parser/sequenceDiagram.js"); +
12928/* harmony import */ var _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__); +
12929/* harmony import */ var _sequenceDb__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sequenceDb */ "./src/diagrams/sequence/sequenceDb.js"); +
12930 +
12931 +
12932 +
12933 +
12934 +
12935_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy = _sequenceDb__WEBPACK_IMPORTED_MODULE_4__["default"]; +
12936const conf = { +
12937 diagramMarginX: 50, +
12938 diagramMarginY: 30, +
12939 // Margin between actors +
12940 actorMargin: 50, +
12941 // Width of actor boxes +
12942 width: 150, +
12943 // Height of actor boxes +
12944 height: 65, +
12945 actorFontSize: 14, +
12946 actorFontFamily: '"Open-Sans", "sans-serif"', +
12947 // Margin around loop boxes +
12948 boxMargin: 10, +
12949 boxTextMargin: 5, +
12950 noteMargin: 10, +
12951 // Space between messages +
12952 messageMargin: 35, +
12953 // mirror actors under diagram +
12954 mirrorActors: false, +
12955 // Depending on css styling this might need adjustment +
12956 // Prolongs the edge of the diagram downwards +
12957 bottomMarginAdj: 1, +
12958 // width of activation box +
12959 activationWidth: 10, +
12960 // text placement as: tspan | fo | old only text as before +
12961 textPlacement: 'tspan' +
12962}; +
12963const bounds = { +
12964 data: { +
12965 startx: undefined, +
12966 stopx: undefined, +
12967 starty: undefined, +
12968 stopy: undefined +
12969 }, +
12970 verticalPos: 0, +
12971 sequenceItems: [], +
12972 activations: [], +
12973 init: function () { +
12974 this.sequenceItems = []; +
12975 this.activations = []; +
12976 this.data = { +
12977 startx: undefined, +
12978 stopx: undefined, +
12979 starty: undefined, +
12980 stopy: undefined +
12981 }; +
12982 this.verticalPos = 0; +
12983 }, +
12984 updateVal: function (obj, key, val, fun) { +
12985 if (typeof obj[key] === 'undefined') { +
12986 obj[key] = val; +
12987 } else { +
12988 obj[key] = fun(val, obj[key]); +
12989 } +
12990 }, +
12991 updateBounds: function (startx, starty, stopx, stopy) { +
12992 const _self = this; +
12993 +
12994 let cnt = 0; +
12995 +
12996 function updateFn(type) { +
12997 return function updateItemBounds(item) { +
12998 cnt++; // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems +
12999 +
13000 const n = _self.sequenceItems.length - cnt + 1; +
13001 +
13002 _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min); +
13003 +
13004 _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max); +
13005 +
13006 _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min); +
13007 +
13008 _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max); +
13009 +
13010 if (!(type === 'activation')) { +
13011 _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min); +
13012 +
13013 _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max); +
13014 +
13015 _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min); +
13016 +
13017 _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max); +
13018 } +
13019 }; +
13020 } +
13021 +
13022 this.sequenceItems.forEach(updateFn()); +
13023 this.activations.forEach(updateFn('activation')); +
13024 }, +
13025 insert: function (startx, starty, stopx, stopy) { +
13026 const _startx = Math.min(startx, stopx); +
13027 +
13028 const _stopx = Math.max(startx, stopx); +
13029 +
13030 const _starty = Math.min(starty, stopy); +
13031 +
13032 const _stopy = Math.max(starty, stopy); +
13033 +
13034 this.updateVal(bounds.data, 'startx', _startx, Math.min); +
13035 this.updateVal(bounds.data, 'starty', _starty, Math.min); +
13036 this.updateVal(bounds.data, 'stopx', _stopx, Math.max); +
13037 this.updateVal(bounds.data, 'stopy', _stopy, Math.max); +
13038 this.updateBounds(_startx, _starty, _stopx, _stopy); +
13039 }, +
13040 newActivation: function (message, diagram) { +
13041 const actorRect = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getActors()[message.from.actor]; +
13042 const stackedSize = actorActivations(message.from.actor).length; +
13043 const x = actorRect.x + conf.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; +
13044 this.activations.push({ +
13045 startx: x, +
13046 starty: this.verticalPos + 2, +
13047 stopx: x + conf.activationWidth, +
13048 stopy: undefined, +
13049 actor: message.from.actor, +
13050 anchored: _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].anchorElement(diagram) +
13051 }); +
13052 }, +
13053 endActivation: function (message) { +
13054 // find most recent activation for given actor +
13055 const lastActorActivationIdx = this.activations.map(function (activation) { +
13056 return activation.actor; +
13057 }).lastIndexOf(message.from.actor); +
13058 const activation = this.activations.splice(lastActorActivationIdx, 1)[0]; +
13059 return activation; +
13060 }, +
13061 newLoop: function (title) { +
13062 this.sequenceItems.push({ +
13063 startx: undefined, +
13064 starty: this.verticalPos, +
13065 stopx: undefined, +
13066 stopy: undefined, +
13067 title: title +
13068 }); +
13069 }, +
13070 endLoop: function () { +
13071 const loop = this.sequenceItems.pop(); +
13072 return loop; +
13073 }, +
13074 addSectionToLoop: function (message) { +
13075 const loop = this.sequenceItems.pop(); +
13076 loop.sections = loop.sections || []; +
13077 loop.sectionTitles = loop.sectionTitles || []; +
13078 loop.sections.push(bounds.getVerticalPos()); +
13079 loop.sectionTitles.push(message); +
13080 this.sequenceItems.push(loop); +
13081 }, +
13082 bumpVerticalPos: function (bump) { +
13083 this.verticalPos = this.verticalPos + bump; +
13084 this.data.stopy = this.verticalPos; +
13085 }, +
13086 getVerticalPos: function () { +
13087 return this.verticalPos; +
13088 }, +
13089 getBounds: function () { +
13090 return this.data; +
13091 } +
13092}; +
13093 +
13094const _drawLongText = (text, x, y, g, width) => { +
13095 let textHeight = 0; +
13096 const lines = text.split(/<br\/?>/ig); +
13097 +
13098 for (const line of lines) { +
13099 const textObj = _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].getTextObj(); +
13100 textObj.x = x; +
13101 textObj.y = y + textHeight; +
13102 textObj.textMargin = conf.noteMargin; +
13103 textObj.dy = '1em'; +
13104 textObj.text = line; +
13105 textObj.class = 'noteText'; +
13106 const textElem = _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawText(g, textObj, width); +
13107 textHeight += (textElem._groups || textElem)[0][0].getBBox().height; +
13108 } +
13109 +
13110 return textHeight; +
13111}; +
13112/** +
13113 * Draws an actor in the diagram with the attaced line +
13114 * @param center - The center of the the actor +
13115 * @param pos The position if the actor in the liost of actors +
13116 * @param description The text in the box +
13117 */ +
13118 +
13119 +
13120const drawNote = function (elem, startx, verticalPos, msg, forceWidth) { +
13121 const rect = _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].getNoteRect(); +
13122 rect.x = startx; +
13123 rect.y = verticalPos; +
13124 rect.width = forceWidth || conf.width; +
13125 rect.class = 'note'; +
13126 let g = elem.append('g'); +
13127 const rectElem = _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawRect(g, rect); +
13128 +
13129 const textHeight = _drawLongText(msg.message, startx - 4, verticalPos + 24, g, rect.width - conf.noteMargin); +
13130 +
13131 bounds.insert(startx, verticalPos, startx + rect.width, verticalPos + 2 * conf.noteMargin + textHeight); +
13132 rectElem.attr('height', textHeight + 2 * conf.noteMargin); +
13133 bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); +
13134}; +
13135/** +
13136 * Draws a message +
13137 * @param elem +
13138 * @param startx +
13139 * @param stopx +
13140 * @param verticalPos +
13141 * @param txtCenter +
13142 * @param msg +
13143 */ +
13144 +
13145 +
13146const drawMessage = function (elem, startx, stopx, verticalPos, msg) { +
13147 const g = elem.append('g'); +
13148 const txtCenter = startx + (stopx - startx) / 2; +
13149 const textElem = g.append('text') // text label for the x axis +
13150 .attr('x', txtCenter).attr('y', verticalPos - 7).style('text-anchor', 'middle').attr('class', 'messageText').text(msg.message); +
13151 let textWidth = (textElem._groups || textElem)[0][0].getBBox().width; +
13152 let line; +
13153 +
13154 if (startx === stopx) { +
13155 if (conf.rightAngles) { +
13156 line = g.append('path').attr('d', `M ${startx},${verticalPos} H ${startx + conf.width / 2} V ${verticalPos + 25} H ${startx}`); +
13157 } else { +
13158 line = g.append('path').attr('d', 'M ' + startx + ',' + verticalPos + ' C ' + (startx + 60) + ',' + (verticalPos - 10) + ' ' + (startx + 60) + ',' + (verticalPos + 30) + ' ' + startx + ',' + (verticalPos + 20)); +
13159 } +
13160 +
13161 bounds.bumpVerticalPos(30); +
13162 const dx = Math.max(textWidth / 2, 100); +
13163 bounds.insert(startx - dx, bounds.getVerticalPos() - 10, stopx + dx, bounds.getVerticalPos()); +
13164 } else { +
13165 line = g.append('line'); +
13166 line.attr('x1', startx); +
13167 line.attr('y1', verticalPos); +
13168 line.attr('x2', stopx); +
13169 line.attr('y2', verticalPos); +
13170 bounds.insert(startx, bounds.getVerticalPos() - 10, stopx, bounds.getVerticalPos()); +
13171 } // Make an SVG Container +
13172 // Draw the line +
13173 +
13174 +
13175 if (msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED || msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED_CROSS || msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED_OPEN) { +
13176 line.style('stroke-dasharray', '3, 3'); +
13177 line.attr('class', 'messageLine1'); +
13178 } else { +
13179 line.attr('class', 'messageLine0'); +
13180 } +
13181 +
13182 let url = ''; +
13183 +
13184 if (conf.arrowMarkerAbsolute) { +
13185 url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; +
13186 url = url.replace(/\(/g, '\\('); +
13187 url = url.replace(/\)/g, '\\)'); +
13188 } +
13189 +
13190 line.attr('stroke-width', 2); +
13191 line.attr('stroke', 'black'); +
13192 line.style('fill', 'none'); // remove any fill colour +
13193 +
13194 if (msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.SOLID || msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED) { +
13195 line.attr('marker-end', 'url(' + url + '#arrowhead)'); +
13196 } +
13197 +
13198 if (msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.SOLID_CROSS || msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED_CROSS) { +
13199 line.attr('marker-end', 'url(' + url + '#crosshead)'); +
13200 } +
13201}; +
13202 +
13203const drawActors = function (diagram, actors, actorKeys, verticalPos) { +
13204 // Draw the actors +
13205 for (let i = 0; i < actorKeys.length; i++) { +
13206 const key = actorKeys[i]; // Add some rendering data to the object +
13207 +
13208 actors[key].x = i * conf.actorMargin + i * conf.width; +
13209 actors[key].y = verticalPos; +
13210 actors[key].width = conf.diagramMarginX; +
13211 actors[key].height = conf.diagramMarginY; // Draw the box with the attached line +
13212 +
13213 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawActor(diagram, actors[key].x, verticalPos, actors[key].description, conf); +
13214 bounds.insert(actors[key].x, verticalPos, actors[key].x + conf.width, conf.height); +
13215 } // Add a margin between the actor boxes and the first arrow +
13216 +
13217 +
13218 bounds.bumpVerticalPos(conf.height); +
13219}; +
13220const setConf = function (cnf) { +
13221 const keys = Object.keys(cnf); +
13222 keys.forEach(function (key) { +
13223 conf[key] = cnf[key]; +
13224 }); +
13225}; +
13226 +
13227const actorActivations = function (actor) { +
13228 return bounds.activations.filter(function (activation) { +
13229 return activation.actor === actor; +
13230 }); +
13231}; +
13232 +
13233const actorFlowVerticaBounds = function (actor) { +
13234 // handle multiple stacked activations for same actor +
13235 const actors = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getActors(); +
13236 const activations = actorActivations(actor); +
13237 const left = activations.reduce(function (acc, activation) { +
13238 return Math.min(acc, activation.startx); +
13239 }, actors[actor].x + conf.width / 2); +
13240 const right = activations.reduce(function (acc, activation) { +
13241 return Math.max(acc, activation.stopx); +
13242 }, actors[actor].x + conf.width / 2); +
13243 return [left, right]; +
13244}; +
13245/** +
13246 * Draws a flowchart in the tag with id: id based on the graph definition in text. +
13247 * @param text +
13248 * @param id +
13249 */ +
13250 +
13251 +
13252const draw = function (text, id) { +
13253 _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.clear(); +
13254 _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].parse(text + '\n'); +
13255 bounds.init(); +
13256 const diagram = d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id="${id}"]`); +
13257 let startx; +
13258 let stopx; +
13259 let forceWidth; // Fetch data from the parsing +
13260 +
13261 const actors = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getActors(); +
13262 const actorKeys = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getActorKeys(); +
13263 const messages = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getMessages(); +
13264 const title = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getTitle(); +
13265 drawActors(diagram, actors, actorKeys, 0); // The arrow head definition is attached to the svg once +
13266 +
13267 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].insertArrowHead(diagram); +
13268 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].insertArrowCrossHead(diagram); +
13269 +
13270 function activeEnd(msg, verticalPos) { +
13271 const activationData = bounds.endActivation(msg); +
13272 +
13273 if (activationData.starty + 18 > verticalPos) { +
13274 activationData.starty = verticalPos - 6; +
13275 verticalPos += 12; +
13276 } +
13277 +
13278 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawActivation(diagram, activationData, verticalPos, conf, actorActivations(msg.from.actor).length); +
13279 bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); +
13280 } // const lastMsg +
13281 // Draw the messages/signals +
13282 +
13283 +
13284 messages.forEach(function (msg) { +
13285 let loopData; +
13286 +
13287 switch (msg.type) { +
13288 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.NOTE: +
13289 bounds.bumpVerticalPos(conf.boxMargin); +
13290 startx = actors[msg.from].x; +
13291 stopx = actors[msg.to].x; +
13292 +
13293 if (msg.placement === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.PLACEMENT.RIGHTOF) { +
13294 drawNote(diagram, startx + (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg); +
13295 } else if (msg.placement === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.PLACEMENT.LEFTOF) { +
13296 drawNote(diagram, startx - (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg); +
13297 } else if (msg.to === msg.from) { +
13298 // Single-actor over +
13299 drawNote(diagram, startx, bounds.getVerticalPos(), msg); +
13300 } else { +
13301 // Multi-actor over +
13302 forceWidth = Math.abs(startx - stopx) + conf.actorMargin; +
13303 drawNote(diagram, (startx + stopx + conf.width - forceWidth) / 2, bounds.getVerticalPos(), msg, forceWidth); +
13304 } +
13305 +
13306 break; +
13307 +
13308 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ACTIVE_START: +
13309 bounds.newActivation(msg, diagram); +
13310 break; +
13311 +
13312 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ACTIVE_END: +
13313 activeEnd(msg, bounds.getVerticalPos()); +
13314 break; +
13315 +
13316 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.LOOP_START: +
13317 bounds.bumpVerticalPos(conf.boxMargin); +
13318 bounds.newLoop(msg.message); +
13319 bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); +
13320 break; +
13321 +
13322 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.LOOP_END: +
13323 loopData = bounds.endLoop(); +
13324 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawLoop(diagram, loopData, 'loop', conf); +
13325 bounds.bumpVerticalPos(conf.boxMargin); +
13326 break; +
13327 +
13328 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.OPT_START: +
13329 bounds.bumpVerticalPos(conf.boxMargin); +
13330 bounds.newLoop(msg.message); +
13331 bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); +
13332 break; +
13333 +
13334 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.OPT_END: +
13335 loopData = bounds.endLoop(); +
13336 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawLoop(diagram, loopData, 'opt', conf); +
13337 bounds.bumpVerticalPos(conf.boxMargin); +
13338 break; +
13339 +
13340 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ALT_START: +
13341 bounds.bumpVerticalPos(conf.boxMargin); +
13342 bounds.newLoop(msg.message); +
13343 bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); +
13344 break; +
13345 +
13346 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ALT_ELSE: +
13347 bounds.bumpVerticalPos(conf.boxMargin); +
13348 loopData = bounds.addSectionToLoop(msg.message); +
13349 bounds.bumpVerticalPos(conf.boxMargin); +
13350 break; +
13351 +
13352 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ALT_END: +
13353 loopData = bounds.endLoop(); +
13354 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawLoop(diagram, loopData, 'alt', conf); +
13355 bounds.bumpVerticalPos(conf.boxMargin); +
13356 break; +
13357 +
13358 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.PAR_START: +
13359 bounds.bumpVerticalPos(conf.boxMargin); +
13360 bounds.newLoop(msg.message); +
13361 bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); +
13362 break; +
13363 +
13364 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.PAR_AND: +
13365 bounds.bumpVerticalPos(conf.boxMargin); +
13366 loopData = bounds.addSectionToLoop(msg.message); +
13367 bounds.bumpVerticalPos(conf.boxMargin); +
13368 break; +
13369 +
13370 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.PAR_END: +
13371 loopData = bounds.endLoop(); +
13372 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawLoop(diagram, loopData, 'par', conf); +
13373 bounds.bumpVerticalPos(conf.boxMargin); +
13374 break; +
13375 +
13376 default: +
13377 try { +
13378 // lastMsg = msg +
13379 bounds.bumpVerticalPos(conf.messageMargin); +
13380 const fromBounds = actorFlowVerticaBounds(msg.from); +
13381 const toBounds = actorFlowVerticaBounds(msg.to); +
13382 const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0; +
13383 const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1; +
13384 startx = fromBounds[fromIdx]; +
13385 stopx = toBounds[toIdx]; +
13386 const verticalPos = bounds.getVerticalPos(); +
13387 drawMessage(diagram, startx, stopx, verticalPos, msg); +
13388 const allBounds = fromBounds.concat(toBounds); +
13389 bounds.insert(Math.min.apply(null, allBounds), verticalPos, Math.max.apply(null, allBounds), verticalPos); +
13390 } catch (e) { +
13391 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].error('error while drawing message', e); +
13392 } +
13393 +
13394 } +
13395 }); +
13396 +
13397 if (conf.mirrorActors) { +
13398 // Draw actors below diagram +
13399 bounds.bumpVerticalPos(conf.boxMargin * 2); +
13400 drawActors(diagram, actors, actorKeys, bounds.getVerticalPos()); +
13401 } +
13402 +
13403 const box = bounds.getBounds(); // Adjust line height of actor lines now that the height of the diagram is known +
13404 +
13405 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('For line height fix Querying: #' + id + ' .actor-line'); +
13406 const actorLines = d3__WEBPACK_IMPORTED_MODULE_0__["selectAll"]('#' + id + ' .actor-line'); +
13407 actorLines.attr('y2', box.stopy); +
13408 let height = box.stopy - box.starty + 2 * conf.diagramMarginY; +
13409 +
13410 if (conf.mirrorActors) { +
13411 height = height - conf.boxMargin + conf.bottomMarginAdj; +
13412 } +
13413 +
13414 const width = box.stopx - box.startx + 2 * conf.diagramMarginX; +
13415 +
13416 if (title) { +
13417 diagram.append('text').text(title).attr('x', (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX).attr('y', -25); +
13418 } +
13419 +
13420 if (conf.useMaxWidth) { +
13421 diagram.attr('height', '100%'); +
13422 diagram.attr('width', '100%'); +
13423 diagram.attr('style', 'max-width:' + width + 'px;'); +
13424 } else { +
13425 diagram.attr('height', height); +
13426 diagram.attr('width', width); +
13427 } +
13428 +
13429 const extraVertForTitle = title ? 40 : 0; +
13430 diagram.attr('viewBox', box.startx - conf.diagramMarginX + ' -' + (conf.diagramMarginY + extraVertForTitle) + ' ' + width + ' ' + (height + extraVertForTitle)); +
13431}; +
13432/* harmony default export */ __webpack_exports__["default"] = ({ +
13433 bounds, +
13434 drawActors, +
13435 setConf, +
13436 draw +
13437}); +
13438 +
13439/***/ }), +
13440 +
13441/***/ "./src/diagrams/sequence/svgDraw.js": +
13442/*!******************************************!*\ +
13443 !*** ./src/diagrams/sequence/svgDraw.js ***! +
13444 \******************************************/ +
13445/*! exports provided: drawRect, drawText, drawLabel, drawActor, anchorElement, drawActivation, drawLoop, insertArrowHead, insertArrowCrossHead, getTextObj, getNoteRect, default */ +
13446/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13447 +
13448"use strict"; +
13449__webpack_require__.r(__webpack_exports__); +
13450/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawRect", function() { return drawRect; }); +
13451/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawText", function() { return drawText; }); +
13452/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawLabel", function() { return drawLabel; }); +
13453/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawActor", function() { return drawActor; }); +
13454/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "anchorElement", function() { return anchorElement; }); +
13455/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawActivation", function() { return drawActivation; }); +
13456/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawLoop", function() { return drawLoop; }); +
13457/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "insertArrowHead", function() { return insertArrowHead; }); +
13458/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "insertArrowCrossHead", function() { return insertArrowCrossHead; }); +
13459/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTextObj", function() { return getTextObj; }); +
13460/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNoteRect", function() { return getNoteRect; }); +
13461const drawRect = function (elem, rectData) { +
13462 const rectElem = elem.append('rect'); +
13463 rectElem.attr('x', rectData.x); +
13464 rectElem.attr('y', rectData.y); +
13465 rectElem.attr('fill', rectData.fill); +
13466 rectElem.attr('stroke', rectData.stroke); +
13467 rectElem.attr('width', rectData.width); +
13468 rectElem.attr('height', rectData.height); +
13469 rectElem.attr('rx', rectData.rx); +
13470 rectElem.attr('ry', rectData.ry); +
13471 +
13472 if (typeof rectData.class !== 'undefined') { +
13473 rectElem.attr('class', rectData.class); +
13474 } +
13475 +
13476 return rectElem; +
13477}; +
13478const drawText = function (elem, textData, width) { +
13479 // Remove and ignore br:s +
13480 const nText = textData.text.replace(/<br\/?>/ig, ' '); +
13481 const textElem = elem.append('text'); +
13482 textElem.attr('x', textData.x); +
13483 textElem.attr('y', textData.y); +
13484 textElem.style('text-anchor', textData.anchor); +
13485 textElem.attr('fill', textData.fill); +
13486 +
13487 if (typeof textData.class !== 'undefined') { +
13488 textElem.attr('class', textData.class); +
13489 } +
13490 +
13491 const span = textElem.append('tspan'); +
13492 span.attr('x', textData.x + textData.textMargin * 2); +
13493 span.attr('fill', textData.fill); +
13494 span.text(nText); +
13495 return textElem; +
13496}; +
13497const drawLabel = function (elem, txtObject) { +
13498 function genPoints(x, y, width, height, cut) { +
13499 return x + ',' + y + ' ' + (x + width) + ',' + y + ' ' + (x + width) + ',' + (y + height - cut) + ' ' + (x + width - cut * 1.2) + ',' + (y + height) + ' ' + x + ',' + (y + height); +
13500 } +
13501 +
13502 const polygon = elem.append('polygon'); +
13503 polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7)); +
13504 polygon.attr('class', 'labelBox'); +
13505 txtObject.y = txtObject.y + txtObject.labelMargin; +
13506 txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; +
13507 drawText(elem, txtObject); +
13508}; +
13509let actorCnt = -1; +
13510/** +
13511 * Draws an actor in the diagram with the attaced line +
13512 * @param center - The center of the the actor +
13513 * @param pos The position if the actor in the liost of actors +
13514 * @param description The text in the box +
13515 */ +
13516 +
13517const drawActor = function (elem, left, verticalPos, description, conf) { +
13518 const center = left + conf.width / 2; +
13519 const g = elem.append('g'); +
13520 +
13521 if (verticalPos === 0) { +
13522 actorCnt++; +
13523 g.append('line').attr('id', 'actor' + actorCnt).attr('x1', center).attr('y1', 5).attr('x2', center).attr('y2', 2000).attr('class', 'actor-line').attr('stroke-width', '0.5px').attr('stroke', '#999'); +
13524 } +
13525 +
13526 const rect = getNoteRect(); +
13527 rect.x = left; +
13528 rect.y = verticalPos; +
13529 rect.fill = '#eaeaea'; +
13530 rect.width = conf.width; +
13531 rect.height = conf.height; +
13532 rect.class = 'actor'; +
13533 rect.rx = 3; +
13534 rect.ry = 3; +
13535 drawRect(g, rect); +
13536 +
13537 _drawTextCandidateFunc(conf)(description, g, rect.x, rect.y, rect.width, rect.height, { +
13538 'class': 'actor' +
13539 }, conf); +
13540}; +
13541const anchorElement = function (elem) { +
13542 return elem.append('g'); +
13543}; +
13544/** +
13545 * Draws an actor in the diagram with the attaced line +
13546 * @param elem - element to append activation rect +
13547 * @param bounds - activation box bounds +
13548 * @param verticalPos - precise y cooridnate of bottom activation box edge +
13549 */ +
13550 +
13551const drawActivation = function (elem, bounds, verticalPos, conf, actorActivations) { +
13552 const rect = getNoteRect(); +
13553 const g = bounds.anchored; +
13554 rect.x = bounds.startx; +
13555 rect.y = bounds.starty; +
13556 rect.class = 'activation' + actorActivations % 3; // Will evaluate to 0, 1 or 2 +
13557 +
13558 rect.width = bounds.stopx - bounds.startx; +
13559 rect.height = verticalPos - bounds.starty; +
13560 drawRect(g, rect); +
13561}; +
13562/** +
13563 * Draws an actor in the diagram with the attaced line +
13564 * @param center - The center of the the actor +
13565 * @param pos The position if the actor in the list of actors +
13566 * @param description The text in the box +
13567 */ +
13568 +
13569const drawLoop = function (elem, bounds, labelText, conf) { +
13570 const g = elem.append('g'); +
13571 +
13572 const drawLoopLine = function (startx, starty, stopx, stopy) { +
13573 return g.append('line').attr('x1', startx).attr('y1', starty).attr('x2', stopx).attr('y2', stopy).attr('class', 'loopLine'); +
13574 }; +
13575 +
13576 drawLoopLine(bounds.startx, bounds.starty, bounds.stopx, bounds.starty); +
13577 drawLoopLine(bounds.stopx, bounds.starty, bounds.stopx, bounds.stopy); +
13578 drawLoopLine(bounds.startx, bounds.stopy, bounds.stopx, bounds.stopy); +
13579 drawLoopLine(bounds.startx, bounds.starty, bounds.startx, bounds.stopy); +
13580 +
13581 if (typeof bounds.sections !== 'undefined') { +
13582 bounds.sections.forEach(function (item) { +
13583 drawLoopLine(bounds.startx, item, bounds.stopx, item).style('stroke-dasharray', '3, 3'); +
13584 }); +
13585 } +
13586 +
13587 let txt = getTextObj(); +
13588 txt.text = labelText; +
13589 txt.x = bounds.startx; +
13590 txt.y = bounds.starty; +
13591 txt.labelMargin = 1.5 * 10; // This is the small box that says "loop" +
13592 +
13593 txt.class = 'labelText'; // Its size & position are fixed. +
13594 +
13595 drawLabel(g, txt); +
13596 txt = getTextObj(); +
13597 txt.text = '[ ' + bounds.title + ' ]'; +
13598 txt.x = bounds.startx + (bounds.stopx - bounds.startx) / 2; +
13599 txt.y = bounds.starty + 1.5 * conf.boxMargin; +
13600 txt.anchor = 'middle'; +
13601 txt.class = 'loopText'; +
13602 drawText(g, txt); +
13603 +
13604 if (typeof bounds.sectionTitles !== 'undefined') { +
13605 bounds.sectionTitles.forEach(function (item, idx) { +
13606 if (item !== '') { +
13607 txt.text = '[ ' + item + ' ]'; +
13608 txt.y = bounds.sections[idx] + 1.5 * conf.boxMargin; +
13609 drawText(g, txt); +
13610 } +
13611 }); +
13612 } +
13613}; +
13614/** +
13615 * Setup arrow head and define the marker. The result is appended to the svg. +
13616 */ +
13617 +
13618const insertArrowHead = function (elem) { +
13619 elem.append('defs').append('marker').attr('id', 'arrowhead').attr('refX', 5).attr('refY', 2).attr('markerWidth', 6).attr('markerHeight', 4).attr('orient', 'auto').append('path').attr('d', 'M 0,0 V 4 L6,2 Z'); // this is actual shape for arrowhead +
13620}; +
13621/** +
13622 * Setup arrow head and define the marker. The result is appended to the svg. +
13623 */ +
13624 +
13625const insertArrowCrossHead = function (elem) { +
13626 const defs = elem.append('defs'); +
13627 const marker = defs.append('marker').attr('id', 'crosshead').attr('markerWidth', 15).attr('markerHeight', 8).attr('orient', 'auto').attr('refX', 16).attr('refY', 4); // The arrow +
13628 +
13629 marker.append('path').attr('fill', 'black').attr('stroke', '#000000').style('stroke-dasharray', '0, 0').attr('stroke-width', '1px').attr('d', 'M 9,2 V 6 L16,4 Z'); // The cross +
13630 +
13631 marker.append('path').attr('fill', 'none').attr('stroke', '#000000').style('stroke-dasharray', '0, 0').attr('stroke-width', '1px').attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7'); // this is actual shape for arrowhead +
13632}; +
13633const getTextObj = function () { +
13634 const txt = { +
13635 x: 0, +
13636 y: 0, +
13637 'fill': undefined, +
13638 'text-anchor': 'start', +
13639 style: '#666', +
13640 width: 100, +
13641 height: 100, +
13642 textMargin: 0, +
13643 rx: 0, +
13644 ry: 0 +
13645 }; +
13646 return txt; +
13647}; +
13648const getNoteRect = function () { +
13649 const rect = { +
13650 x: 0, +
13651 y: 0, +
13652 fill: '#EDF2AE', +
13653 stroke: '#666', +
13654 width: 100, +
13655 anchor: 'start', +
13656 height: 100, +
13657 rx: 0, +
13658 ry: 0 +
13659 }; +
13660 return rect; +
13661}; +
13662 +
13663const _drawTextCandidateFunc = function () { +
13664 function byText(content, g, x, y, width, height, textAttrs) { +
13665 const text = g.append('text').attr('x', x + width / 2).attr('y', y + height / 2 + 5).style('text-anchor', 'middle').text(content); +
13666 +
13667 _setTextAttrs(text, textAttrs); +
13668 } +
13669 +
13670 function byTspan(content, g, x, y, width, height, textAttrs, conf) { +
13671 const { +
13672 actorFontSize, +
13673 actorFontFamily +
13674 } = conf; +
13675 const lines = content.split(/<br\/?>/ig); +
13676 +
13677 for (let i = 0; i < lines.length; i++) { +
13678 const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2; +
13679 const text = g.append('text').attr('x', x + width / 2).attr('y', y).style('text-anchor', 'middle').style('font-size', actorFontSize).style('font-family', actorFontFamily); +
13680 text.append('tspan').attr('x', x + width / 2).attr('dy', dy).text(lines[i]); +
13681 text.attr('y', y + height / 2.0).attr('dominant-baseline', 'central').attr('alignment-baseline', 'central'); +
13682 +
13683 _setTextAttrs(text, textAttrs); +
13684 } +
13685 } +
13686 +
13687 function byFo(content, g, x, y, width, height, textAttrs, conf) { +
13688 const s = g.append('switch'); +
13689 const f = s.append('foreignObject').attr('x', x).attr('y', y).attr('width', width).attr('height', height); +
13690 const text = f.append('div').style('display', 'table').style('height', '100%').style('width', '100%'); +
13691 text.append('div').style('display', 'table-cell').style('text-align', 'center').style('vertical-align', 'middle').text(content); +
13692 byTspan(content, s, x, y, width, height, textAttrs, conf); +
13693 +
13694 _setTextAttrs(text, textAttrs); +
13695 } +
13696 +
13697 function _setTextAttrs(toText, fromTextAttrsDict) { +
13698 for (const key in fromTextAttrsDict) { +
13699 if (fromTextAttrsDict.hasOwnProperty(key)) { +
13700 toText.attr(key, fromTextAttrsDict[key]); +
13701 } +
13702 } +
13703 } +
13704 +
13705 return function (conf) { +
13706 return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan; +
13707 }; +
13708}(); +
13709 +
13710/* harmony default export */ __webpack_exports__["default"] = ({ +
13711 drawRect, +
13712 drawText, +
13713 drawLabel, +
13714 drawActor, +
13715 anchorElement, +
13716 drawActivation, +
13717 drawLoop, +
13718 insertArrowHead, +
13719 insertArrowCrossHead, +
13720 getTextObj, +
13721 getNoteRect +
13722}); +
13723 +
13724/***/ }), +
13725 +
13726/***/ "./src/logger.js": +
13727/*!***********************!*\ +
13728 !*** ./src/logger.js ***! +
13729 \***********************/ +
13730/*! exports provided: LEVELS, logger, setLogLevel */ +
13731/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13732 +
13733"use strict"; +
13734__webpack_require__.r(__webpack_exports__); +
13735/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LEVELS", function() { return LEVELS; }); +
13736/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "logger", function() { return logger; }); +
13737/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLogLevel", function() { return setLogLevel; }); +
13738/* harmony import */ var moment_mini__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment-mini */ "moment-mini"); +
13739/* harmony import */ var moment_mini__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment_mini__WEBPACK_IMPORTED_MODULE_0__); +
13740 +
13741const LEVELS = { +
13742 debug: 1, +
13743 info: 2, +
13744 warn: 3, +
13745 error: 4, +
13746 fatal: 5 +
13747}; +
13748const logger = { +
13749 debug: () => {}, +
13750 info: () => {}, +
13751 warn: () => {}, +
13752 error: () => {}, +
13753 fatal: () => {} +
13754}; +
13755const setLogLevel = function (level) { +
13756 logger.debug = () => {}; +
13757 +
13758 logger.info = () => {}; +
13759 +
13760 logger.warn = () => {}; +
13761 +
13762 logger.error = () => {}; +
13763 +
13764 logger.fatal = () => {}; +
13765 +
13766 if (level <= LEVELS.fatal) { +
13767 logger.fatal = console.log.bind(console, '\x1b[35m', format('FATAL')); +
13768 } +
13769 +
13770 if (level <= LEVELS.error) { +
13771 logger.error = console.log.bind(console, '\x1b[31m', format('ERROR')); +
13772 } +
13773 +
13774 if (level <= LEVELS.warn) { +
13775 logger.warn = console.log.bind(console, `\x1b[33m`, format('WARN')); +
13776 } +
13777 +
13778 if (level <= LEVELS.info) { +
13779 logger.info = console.log.bind(console, '\x1b[34m', format('INFO')); +
13780 } +
13781 +
13782 if (level <= LEVELS.debug) { +
13783 logger.debug = console.log.bind(console, '\x1b[32m', format('DEBUG')); +
13784 } +
13785}; +
13786 +
13787const format = level => { +
13788 const time = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()().format('HH:mm:ss.SSS'); +
13789 return `${time} : ${level} : `; +
13790}; +
13791 +
13792/***/ }), +
13793 +
13794/***/ "./src/mermaid.js": +
13795/*!************************!*\ +
13796 !*** ./src/mermaid.js ***! +
13797 \************************/ +
13798/*! exports provided: default */ +
13799/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13800 +
13801"use strict"; +
13802__webpack_require__.r(__webpack_exports__); +
13803/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! he */ "he"); +
13804/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_0__); +
13805/* harmony import */ var _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mermaidAPI */ "./src/mermaidAPI.js"); +
13806/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./logger */ "./src/logger.js"); +
13807/** +
13808 * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid functionality and to render +
13809 * the diagrams to svg code. +
13810 */ +
13811 +
13812 +
13813 +
13814/** +
13815 * ## init +
13816 * Function that goes through the document to find the chart definitions in there and render them. +
13817 * +
13818 * The function tags the processed attributes with the attribute data-processed and ignores found elements with the +
13819 * attribute already set. This way the init function can be triggered several times. +
13820 * +
13821 * Optionally, `init` can accept in the second argument one of the following: +
13822 * - a DOM Node +
13823 * - an array of DOM nodes (as would come from a jQuery selector) +
13824 * - a W3C selector, a la `.mermaid` +
13825 * +
13826 * ```mermaid +
13827 * graph LR; +
13828 * a(Find elements)-->b{Processed} +
13829 * b-->|Yes|c(Leave element) +
13830 * b-->|No |d(Transform) +
13831 * ``` +
13832 * Renders the mermaid diagrams +
13833 * @param nodes a css selector or an array of nodes +
13834 */ +
13835 +
13836const init = function () { +
13837 const conf = _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].getConfig(); +
13838 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Starting rendering diagrams'); +
13839 let nodes; +
13840 +
13841 if (arguments.length >= 2) { +
13842 /*! sequence config was passed as #1 */ +
13843 if (typeof arguments[0] !== 'undefined') { +
13844 mermaid.sequenceConfig = arguments[0]; +
13845 } +
13846 +
13847 nodes = arguments[1]; +
13848 } else { +
13849 nodes = arguments[0]; +
13850 } // if last argument is a function this is the callback function +
13851 +
13852 +
13853 let callback; +
13854 +
13855 if (typeof arguments[arguments.length - 1] === 'function') { +
13856 callback = arguments[arguments.length - 1]; +
13857 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Callback function found'); +
13858 } else { +
13859 if (typeof conf.mermaid !== 'undefined') { +
13860 if (typeof conf.mermaid.callback === 'function') { +
13861 callback = conf.mermaid.callback; +
13862 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Callback function found'); +
13863 } else { +
13864 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('No Callback function found'); +
13865 } +
13866 } +
13867 } +
13868 +
13869 nodes = nodes === undefined ? document.querySelectorAll('.mermaid') : typeof nodes === 'string' ? document.querySelectorAll(nodes) : nodes instanceof window.Node ? [nodes] : nodes; // Last case - sequence config was passed pick next +
13870 +
13871 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Start On Load before: ' + mermaid.startOnLoad); +
13872 +
13873 if (typeof mermaid.startOnLoad !== 'undefined') { +
13874 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Start On Load inner: ' + mermaid.startOnLoad); +
13875 _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].initialize({ +
13876 startOnLoad: mermaid.startOnLoad +
13877 }); +
13878 } +
13879 +
13880 if (typeof mermaid.ganttConfig !== 'undefined') { +
13881 _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].initialize({ +
13882 gantt: mermaid.ganttConfig +
13883 }); +
13884 } +
13885 +
13886 let txt; +
13887 +
13888 for (let i = 0; i < nodes.length; i++) { +
13889 const element = nodes[i]; +
13890 /*! Check if previously processed */ +
13891 +
13892 if (!element.getAttribute('data-processed')) { +
13893 element.setAttribute('data-processed', true); +
13894 } else { +
13895 continue; +
13896 } +
13897 +
13898 const id = `mermaid-${Date.now()}`; // Fetch the graph definition including tags +
13899 +
13900 txt = element.innerHTML; // transforms the html to pure text +
13901 +
13902 txt = he__WEBPACK_IMPORTED_MODULE_0___default.a.decode(txt).trim().replace(/<br>/ig, '<br/>'); +
13903 _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].render(id, txt, (svgCode, bindFunctions) => { +
13904 element.innerHTML = svgCode; +
13905 +
13906 if (typeof callback !== 'undefined') { +
13907 callback(id); +
13908 } +
13909 +
13910 bindFunctions(element); +
13911 }, element); +
13912 } +
13913}; +
13914 +
13915const initialize = function (config) { +
13916 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Initializing mermaid '); +
13917 +
13918 if (typeof config.mermaid !== 'undefined') { +
13919 if (typeof config.mermaid.startOnLoad !== 'undefined') { +
13920 mermaid.startOnLoad = config.mermaid.startOnLoad; +
13921 } +
13922 +
13923 if (typeof config.mermaid.htmlLabels !== 'undefined') { +
13924 mermaid.htmlLabels = config.mermaid.htmlLabels; +
13925 } +
13926 } +
13927 +
13928 _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].initialize(config); +
13929}; +
13930/** +
13931 * ##contentLoaded +
13932 * Callback function that is called when page is loaded. This functions fetches configuration for mermaid rendering and +
13933 * calls init for rendering the mermaid diagrams on the page. +
13934 */ +
13935 +
13936 +
13937const contentLoaded = function () { +
13938 let config; +
13939 +
13940 if (mermaid.startOnLoad) { +
13941 // No config found, do check API config +
13942 config = _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].getConfig(); +
13943 +
13944 if (config.startOnLoad) { +
13945 mermaid.init(); +
13946 } +
13947 } else { +
13948 if (typeof mermaid.startOnLoad === 'undefined') { +
13949 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('In start, no config'); +
13950 config = _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].getConfig(); +
13951 +
13952 if (config.startOnLoad) { +
13953 mermaid.init(); +
13954 } +
13955 } +
13956 } +
13957}; +
13958 +
13959if (typeof document !== 'undefined') { +
13960 /*! +
13961 * Wait for document loaded before starting the execution +
13962 */ +
13963 window.addEventListener('load', function () { +
13964 contentLoaded(); +
13965 }, false); +
13966} +
13967 +
13968const mermaid = { +
13969 startOnLoad: true, +
13970 htmlLabels: true, +
13971 mermaidAPI: _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"], +
13972 parse: _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].parse, +
13973 render: _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].render, +
13974 init, +
13975 initialize, +
13976 contentLoaded +
13977}; +
13978/* harmony default export */ __webpack_exports__["default"] = (mermaid); +
13979 +
13980/***/ }), +
13981 +
13982/***/ "./src/mermaidAPI.js": +
13983/*!***************************!*\ +
13984 !*** ./src/mermaidAPI.js ***! +
13985 \***************************/ +
13986/*! exports provided: encodeEntities, decodeEntities, default */ +
13987/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13988 +
13989"use strict"; +
13990__webpack_require__.r(__webpack_exports__); +
13991/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "encodeEntities", function() { return encodeEntities; }); +
13992/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decodeEntities", function() { return decodeEntities; }); +
13993/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "d3"); +
13994/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__); +
13995/* harmony import */ var scope_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scope-css */ "scope-css"); +
13996/* harmony import */ var scope_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scope_css__WEBPACK_IMPORTED_MODULE_1__); +
13997/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../package.json */ "./package.json"); +
13998var _package_json__WEBPACK_IMPORTED_MODULE_2___namespace = /*#__PURE__*/__webpack_require__.t(/*! ../package.json */ "./package.json", 1); +
13999/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./logger */ "./src/logger.js"); +
14000/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ "./src/utils.js"); +
14001/* harmony import */ var _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./diagrams/flowchart/flowRenderer */ "./src/diagrams/flowchart/flowRenderer.js"); +
14002/* harmony import */ var _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./diagrams/flowchart/parser/flow */ "./src/diagrams/flowchart/parser/flow.js"); +
14003/* harmony import */ var _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_6__); +
14004/* harmony import */ var _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./diagrams/flowchart/flowDb */ "./src/diagrams/flowchart/flowDb.js"); +
14005/* harmony import */ var _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./diagrams/sequence/sequenceRenderer */ "./src/diagrams/sequence/sequenceRenderer.js"); +
14006/* harmony import */ var _diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./diagrams/sequence/parser/sequenceDiagram */ "./src/diagrams/sequence/parser/sequenceDiagram.js"); +
14007/* harmony import */ var _diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_9__); +
14008/* harmony import */ var _diagrams_sequence_sequenceDb__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./diagrams/sequence/sequenceDb */ "./src/diagrams/sequence/sequenceDb.js"); +
14009/* harmony import */ var _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./diagrams/gantt/ganttRenderer */ "./src/diagrams/gantt/ganttRenderer.js"); +
14010/* harmony import */ var _diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./diagrams/gantt/parser/gantt */ "./src/diagrams/gantt/parser/gantt.js"); +
14011/* harmony import */ var _diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_12__); +
14012/* harmony import */ var _diagrams_gantt_ganttDb__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./diagrams/gantt/ganttDb */ "./src/diagrams/gantt/ganttDb.js"); +
14013/* harmony import */ var _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./diagrams/class/classRenderer */ "./src/diagrams/class/classRenderer.js"); +
14014/* harmony import */ var _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./diagrams/class/parser/classDiagram */ "./src/diagrams/class/parser/classDiagram.js"); +
14015/* harmony import */ var _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_15__); +
14016/* harmony import */ var _diagrams_class_classDb__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./diagrams/class/classDb */ "./src/diagrams/class/classDb.js"); +
14017/* harmony import */ var _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./diagrams/git/gitGraphRenderer */ "./src/diagrams/git/gitGraphRenderer.js"); +
14018/* harmony import */ var _diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./diagrams/git/parser/gitGraph */ "./src/diagrams/git/parser/gitGraph.js"); +
14019/* harmony import */ var _diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_18__); +
14020/* harmony import */ var _diagrams_git_gitGraphAst__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./diagrams/git/gitGraphAst */ "./src/diagrams/git/gitGraphAst.js"); +
14021/* harmony import */ var _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./diagrams/info/infoRenderer */ "./src/diagrams/info/infoRenderer.js"); +
14022/* harmony import */ var _diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./diagrams/info/parser/info */ "./src/diagrams/info/parser/info.js"); +
14023/* harmony import */ var _diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_21__); +
14024/* harmony import */ var _diagrams_info_infoDb__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./diagrams/info/infoDb */ "./src/diagrams/info/infoDb.js"); +
14025/** +
14026 * --- +
14027 * title: mermaidAPI +
14028 * order: 5 +
14029 * --- +
14030 * # mermaidAPI +
14031 * This is the api to be used when handling the integration with the web page instead of using the default integration +
14032 * (mermaid.js). +
14033 * +
14034 * The core of this api is the **render** function that given a graph definitionas text renders the graph/diagram and +
14035 * returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it +
14036 * somewhere in the page or something completely different. +
14037*/ +
14038 +
14039 +
14040 +
14041 +
14042 +
14043 +
14044 +
14045 +
14046 +
14047 +
14048 +
14049 +
14050 +
14051 +
14052 +
14053 +
14054 +
14055 +
14056 +
14057 +
14058 +
14059 +
14060 +
14061const themes = {}; +
14062 +
14063for (const themeName of ['default', 'forest', 'dark', 'neutral']) { +
14064 themes[themeName] = __webpack_require__("./src/themes sync recursive ^\\.\\/.*\\/index\\.scss$")(`./${themeName}/index.scss`); +
14065} +
14066/** +
14067 * ## Configuration +
14068 * These are the default options which can be overridden with the initialization call as in the example below: +
14069 * ``` +
14070 * mermaid.initialize({ +
14071 * flowchart:{ +
14072 * htmlLabels: false +
14073 * } +
14074 * }); +
14075 * ``` +
14076 */ +
14077 +
14078 +
14079const config = { +
14080 /** theme , the CSS style sheet +
14081 * +
14082 * **theme** - Choose one of the built-in themes: default, forest, dark or neutral. To disable any pre-defined mermaid theme, use "null". +
14083 * **themeCSS** - Use your own CSS. This overrides **theme**. +
14084 *``` +
14085 * "theme": "forest", +
14086 * "themeCSS": ".node rect { fill: red; }" +
14087 *``` +
14088 */ +
14089 theme: 'default', +
14090 themeCSS: undefined, +
14091 +
14092 /** +
14093 * logLevel , decides the amount of logging to be used. +
14094 * * debug: 1 +
14095 * * info: 2 +
14096 * * warn: 3 +
14097 * * error: 4 +
14098 * * fatal: 5 +
14099 */ +
14100 logLevel: 5, +
14101 +
14102 /** +
14103 * **startOnLoad** - This options controls whether or mermaid starts when the page loads +
14104 */ +
14105 startOnLoad: true, +
14106 +
14107 /** +
14108 * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or +
14109 * an anchor, #. This matters if you are using base tag settings. +
14110 */ +
14111 arrowMarkerAbsolute: false, +
14112 +
14113 /** +
14114 * ### flowchart +
14115 * *The object containing configurations specific for flowcharts* +
14116 */ +
14117 flowchart: { +
14118 /** +
14119 * **htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels +
14120 * on the edges +
14121 */ +
14122 htmlLabels: true, +
14123 curve: 'linear' +
14124 }, +
14125 +
14126 /** +
14127 * ### sequenceDiagram +
14128 * The object containing configurations specific for sequence diagrams +
14129 */ +
14130 sequence: { +
14131 /** +
14132 * **diagramMarginX** - margin to the right and left of the sequence diagram +
14133 */ +
14134 diagramMarginX: 50, +
14135 +
14136 /** +
14137 * **diagramMarginY** - margin to the over and under the sequence diagram +
14138 */ +
14139 diagramMarginY: 10, +
14140 +
14141 /** +
14142 * **actorMargin** - Margin between actors +
14143 */ +
14144 actorMargin: 50, +
14145 +
14146 /** +
14147 * **width** - Width of actor boxes +
14148 */ +
14149 width: 150, +
14150 +
14151 /** +
14152 * **height** - Height of actor boxes +
14153 */ +
14154 height: 65, +
14155 +
14156 /** +
14157 * **boxMargin** - Margin around loop boxes +
14158 */ +
14159 boxMargin: 10, +
14160 +
14161 /** +
14162 * **boxTextMargin** - margin around the text in loop/alt/opt boxes +
14163 */ +
14164 boxTextMargin: 5, +
14165 +
14166 /** +
14167 * **noteMargin** - margin around notes +
14168 */ +
14169 noteMargin: 10, +
14170 +
14171 /** +
14172 * **messageMargin** - Space between messages +
14173 */ +
14174 messageMargin: 35, +
14175 +
14176 /** +
14177 * **mirrorActors** - mirror actors under diagram +
14178 */ +
14179 mirrorActors: true, +
14180 +
14181 /** +
14182 * **bottomMarginAdj** - Depending on css styling this might need adjustment. +
14183 * Prolongs the edge of the diagram downwards +
14184 */ +
14185 bottomMarginAdj: 1, +
14186 +
14187 /** +
14188 * **useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the +
14189 * available space if not the absolute space required is used +
14190 */ +
14191 useMaxWidth: true, +
14192 +
14193 /** +
14194 * **rightAngles** - this will display arrows that start and begin at the same node as right angles, rather than a curve +
14195 */ +
14196 rightAngles: false +
14197 }, +
14198 +
14199 /** ### gantt +
14200 * The object containing configurations specific for gantt diagrams* +
14201 */ +
14202 gantt: { +
14203 /** +
14204 * **titleTopMargin** - margin top for the text over the gantt diagram +
14205 */ +
14206 titleTopMargin: 25, +
14207 +
14208 /** +
14209 * **barHeight** - the height of the bars in the graph +
14210 */ +
14211 barHeight: 20, +
14212 +
14213 /** +
14214 * **barGap** - the margin between the different activities in the gantt diagram +
14215 */ +
14216 barGap: 4, +
14217 +
14218 /** +
14219 * **topPadding** - margin between title and gantt diagram and between axis and gantt diagram. +
14220 */ +
14221 topPadding: 50, +
14222 +
14223 /** +
14224 * **leftPadding** - the space allocated for the section name to the left of the activities. +
14225 */ +
14226 leftPadding: 75, +
14227 +
14228 /** +
14229 * **gridLineStartPadding** - Vertical starting position of the grid lines +
14230 */ +
14231 gridLineStartPadding: 35, +
14232 +
14233 /** +
14234 * **fontSize** - font size ... +
14235 */ +
14236 fontSize: 11, +
14237 +
14238 /** +
14239 * **fontFamily** - font family ... +
14240 */ +
14241 fontFamily: '"Open-Sans", "sans-serif"', +
14242 +
14243 /** +
14244 * **numberSectionStyles** - the number of alternating section styles +
14245 */ +
14246 numberSectionStyles: 4, +
14247 +
14248 /** +
14249 * **axisFormat** - datetime format of the axis, this might need adjustment to match your locale and preferences +
14250 */ +
14251 axisFormat: '%Y-%m-%d' +
14252 }, +
14253 class: {}, +
14254 git: {} +
14255}; +
14256Object(_logger__WEBPACK_IMPORTED_MODULE_3__["setLogLevel"])(config.logLevel); +
14257 +
14258function parse(text) { +
14259 const graphType = _utils__WEBPACK_IMPORTED_MODULE_4__["default"].detectType(text); +
14260 let parser; +
14261 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Type ' + graphType); +
14262 +
14263 switch (graphType) { +
14264 case 'git': +
14265 parser = _diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_18___default.a; +
14266 parser.parser.yy = _diagrams_git_gitGraphAst__WEBPACK_IMPORTED_MODULE_19__["default"]; +
14267 break; +
14268 +
14269 case 'flowchart': +
14270 parser = _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_6___default.a; +
14271 parser.parser.yy = _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_7__["default"]; +
14272 break; +
14273 +
14274 case 'sequence': +
14275 parser = _diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_9___default.a; +
14276 parser.parser.yy = _diagrams_sequence_sequenceDb__WEBPACK_IMPORTED_MODULE_10__["default"]; +
14277 break; +
14278 +
14279 case 'gantt': +
14280 parser = _diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_12___default.a; +
14281 parser.parser.yy = _diagrams_gantt_ganttDb__WEBPACK_IMPORTED_MODULE_13__["default"]; +
14282 break; +
14283 +
14284 case 'class': +
14285 parser = _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_15___default.a; +
14286 parser.parser.yy = _diagrams_class_classDb__WEBPACK_IMPORTED_MODULE_16__["default"]; +
14287 break; +
14288 +
14289 case 'info': +
14290 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('info info info'); +
14291 parser = _diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_21___default.a; +
14292 parser.parser.yy = _diagrams_info_infoDb__WEBPACK_IMPORTED_MODULE_22__["default"]; +
14293 break; +
14294 } +
14295 +
14296 parser.parser.yy.parseError = (str, hash) => { +
14297 const error = { +
14298 str, +
14299 hash +
14300 }; +
14301 throw error; +
14302 }; +
14303 +
14304 parser.parse(text); +
14305} +
14306 +
14307const encodeEntities = function (text) { +
14308 let txt = text; +
14309 txt = txt.replace(/style.*:\S*#.*;/g, function (s) { +
14310 const innerTxt = s.substring(0, s.length - 1); +
14311 return innerTxt; +
14312 }); +
14313 txt = txt.replace(/classDef.*:\S*#.*;/g, function (s) { +
14314 const innerTxt = s.substring(0, s.length - 1); +
14315 return innerTxt; +
14316 }); +
14317 txt = txt.replace(/#\w+;/g, function (s) { +
14318 const innerTxt = s.substring(1, s.length - 1); +
14319 const isInt = /^\+?\d+$/.test(innerTxt); +
14320 +
14321 if (isInt) { +
14322 return 'fl°°' + innerTxt + '¶ß'; +
14323 } else { +
14324 return 'fl°' + innerTxt + '¶ß'; +
14325 } +
14326 }); +
14327 return txt; +
14328}; +
14329const decodeEntities = function (text) { +
14330 let txt = text; +
14331 txt = txt.replace(/fl°°/g, function () { +
14332 return '&#'; +
14333 }); +
14334 txt = txt.replace(/fl°/g, function () { +
14335 return '&'; +
14336 }); +
14337 txt = txt.replace(/¶ß/g, function () { +
14338 return ';'; +
14339 }); +
14340 return txt; +
14341}; +
14342/** +
14343 * ##render +
14344 * Function that renders an svg with a graph from a chart definition. Usage example below. +
14345 * +
14346 * ``` +
14347 * mermaidAPI.initialize({ +
14348 * startOnLoad:true +
14349 * }); +
14350 * $(function(){ +
14351 * const graphDefinition = 'graph TB\na-->b'; +
14352 * const cb = function(svgGraph){ +
14353 * console.log(svgGraph); +
14354 * }; +
14355 * mermaidAPI.render('id1',graphDefinition,cb); +
14356 * }); +
14357 *``` +
14358 * @param id the id of the element to be rendered +
14359 * @param txt the graph definition +
14360 * @param cb callback which is called after rendering is finished with the svg code as inparam. +
14361 * @param container selector to element in which a div with the graph temporarily will be inserted. In one is +
14362 * provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is +
14363 * completed. +
14364 */ +
14365 +
14366const render = function (id, txt, cb, container) { +
14367 if (typeof container !== 'undefined') { +
14368 container.innerHTML = ''; +
14369 d3__WEBPACK_IMPORTED_MODULE_0__["select"](container).append('div').attr('id', 'd' + id).append('svg').attr('id', id).attr('width', '100%').attr('xmlns', 'http://www.w3.org/2000/svg').append('g'); +
14370 } else { +
14371 const element = document.querySelector('#' + 'd' + id); +
14372 +
14373 if (element) { +
14374 element.innerHTML = ''; +
14375 } +
14376 +
14377 d3__WEBPACK_IMPORTED_MODULE_0__["select"]('body').append('div').attr('id', 'd' + id).append('svg').attr('id', id).attr('width', '100%').attr('xmlns', 'http://www.w3.org/2000/svg').append('g'); +
14378 } +
14379 +
14380 window.txt = txt; +
14381 txt = encodeEntities(txt); +
14382 const element = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#d' + id).node(); +
14383 const graphType = _utils__WEBPACK_IMPORTED_MODULE_4__["default"].detectType(txt); // insert inline style into svg +
14384 +
14385 const svg = element.firstChild; +
14386 const firstChild = svg.firstChild; // pre-defined theme +
14387 +
14388 let style = themes[config.theme]; +
14389 +
14390 if (style === undefined) { +
14391 style = ''; +
14392 } // user provided theme CSS +
14393 +
14394 +
14395 if (config.themeCSS !== undefined) { +
14396 style += `\n${config.themeCSS}`; +
14397 } // classDef +
14398 +
14399 +
14400 if (graphType === 'flowchart') { +
14401 const classes = _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__["default"].getClasses(txt); +
14402 +
14403 for (const className in classes) { +
14404 style += `\n.${className} > * { ${classes[className].styles.join(' !important; ')} !important; }`; +
14405 } +
14406 } +
14407 +
14408 const style1 = document.createElement('style'); +
14409 style1.innerHTML = scope_css__WEBPACK_IMPORTED_MODULE_1___default()(style, `#${id}`); +
14410 svg.insertBefore(style1, firstChild); +
14411 const style2 = document.createElement('style'); +
14412 const cs = window.getComputedStyle(svg); +
14413 style2.innerHTML = `#${id} { +
14414 color: ${cs.color}; +
14415 font: ${cs.font}; +
14416 }`; +
14417 svg.insertBefore(style2, firstChild); +
14418 +
14419 switch (graphType) { +
14420 case 'git': +
14421 config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
14422 _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_17__["default"].setConf(config.git); +
14423 _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_17__["default"].draw(txt, id, false); +
14424 break; +
14425 +
14426 case 'flowchart': +
14427 config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
14428 _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__["default"].setConf(config.flowchart); +
14429 _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__["default"].draw(txt, id, false); +
14430 break; +
14431 +
14432 case 'sequence': +
14433 config.sequence.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
14434 +
14435 if (config.sequenceDiagram) { +
14436 // backwards compatibility +
14437 _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_8__["default"].setConf(Object.assign(config.sequence, config.sequenceDiagram)); +
14438 console.error('`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.'); +
14439 } else { +
14440 _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_8__["default"].setConf(config.sequence); +
14441 } +
14442 +
14443 _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_8__["default"].draw(txt, id); +
14444 break; +
14445 +
14446 case 'gantt': +
14447 config.gantt.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
14448 _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_11__["default"].setConf(config.gantt); +
14449 _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_11__["default"].draw(txt, id); +
14450 break; +
14451 +
14452 case 'class': +
14453 config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
14454 _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_14__["default"].setConf(config.class); +
14455 _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_14__["default"].draw(txt, id); +
14456 break; +
14457 +
14458 case 'info': +
14459 config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
14460 _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_20__["default"].setConf(config.class); +
14461 _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_20__["default"].draw(txt, id, _package_json__WEBPACK_IMPORTED_MODULE_2__.version); +
14462 break; +
14463 } +
14464 +
14465 d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id="${id}"]`).selectAll('foreignobject > *').attr('xmlns', 'http://www.w3.org/1999/xhtml'); +
14466 let url = ''; +
14467 +
14468 if (config.arrowMarkerAbsolute) { +
14469 url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; +
14470 url = url.replace(/\(/g, '\\('); +
14471 url = url.replace(/\)/g, '\\)'); +
14472 } // Fix for when the base tag is used +
14473 +
14474 +
14475 let svgCode = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#d' + id).node().innerHTML.replace(/url\(#arrowhead/g, 'url(' + url + '#arrowhead', 'g'); +
14476 svgCode = decodeEntities(svgCode); +
14477 +
14478 if (typeof cb !== 'undefined') { +
14479 cb(svgCode, _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_7__["default"].bindFunctions); +
14480 cb(svgCode, _diagrams_gantt_ganttDb__WEBPACK_IMPORTED_MODULE_13__["default"].bindFunctions); +
14481 } else { +
14482 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].warn('CB = undefined!'); +
14483 } +
14484 +
14485 const node = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#d' + id).node(); +
14486 +
14487 if (node !== null && typeof node.remove === 'function') { +
14488 d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#d' + id).node().remove(); +
14489 } +
14490 +
14491 return svgCode; +
14492}; +
14493 +
14494const setConf = function (cnf) { +
14495 // Top level initially mermaid, gflow, sequenceDiagram and gantt +
14496 const lvl1Keys = Object.keys(cnf); +
14497 +
14498 for (let i = 0; i < lvl1Keys.length; i++) { +
14499 if (typeof cnf[lvl1Keys[i]] === 'object' && cnf[lvl1Keys[i]] != null) { +
14500 const lvl2Keys = Object.keys(cnf[lvl1Keys[i]]); +
14501 +
14502 for (let j = 0; j < lvl2Keys.length; j++) { +
14503 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Setting conf ', lvl1Keys[i], '-', lvl2Keys[j]); +
14504 +
14505 if (typeof config[lvl1Keys[i]] === 'undefined') { +
14506 config[lvl1Keys[i]] = {}; +
14507 } +
14508 +
14509 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Setting config: ' + lvl1Keys[i] + ' ' + lvl2Keys[j] + ' to ' + cnf[lvl1Keys[i]][lvl2Keys[j]]); +
14510 config[lvl1Keys[i]][lvl2Keys[j]] = cnf[lvl1Keys[i]][lvl2Keys[j]]; +
14511 } +
14512 } else { +
14513 config[lvl1Keys[i]] = cnf[lvl1Keys[i]]; +
14514 } +
14515 } +
14516}; +
14517 +
14518function initialize(options) { +
14519 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Initializing mermaidAPI ', _package_json__WEBPACK_IMPORTED_MODULE_2__.version); // Update default config with options supplied at initialization +
14520 +
14521 if (typeof options === 'object') { +
14522 setConf(options); +
14523 } +
14524 +
14525 Object(_logger__WEBPACK_IMPORTED_MODULE_3__["setLogLevel"])(config.logLevel); +
14526} +
14527 +
14528function getConfig() { +
14529 return config; +
14530} +
14531 +
14532const mermaidAPI = { +
14533 render, +
14534 parse, +
14535 initialize, +
14536 getConfig +
14537}; +
14538/* harmony default export */ __webpack_exports__["default"] = (mermaidAPI); +
14539 +
14540/***/ }), +
14541 +
14542/***/ "./src/themes sync recursive ^\\.\\/.*\\/index\\.scss$": +
14543/*!***********************************************!*\ +
14544 !*** ./src/themes sync ^\.\/.*\/index\.scss$ ***! +
14545 \***********************************************/ +
14546/*! no static exports found */ +
14547/***/ (function(module, exports, __webpack_require__) { +
14548 +
14549var map = { +
14550 "./dark/index.scss": "./src/themes/dark/index.scss", +
14551 "./default/index.scss": "./src/themes/default/index.scss", +
14552 "./forest/index.scss": "./src/themes/forest/index.scss", +
14553 "./neutral/index.scss": "./src/themes/neutral/index.scss" +
14554}; +
14555 +
14556 +
14557function webpackContext(req) { +
14558 var id = webpackContextResolve(req); +
14559 return __webpack_require__(id); +
14560} +
14561function webpackContextResolve(req) { +
14562 var id = map[req]; +
14563 if(!(id + 1)) { // check for number or string +
14564 var e = new Error("Cannot find module '" + req + "'"); +
14565 e.code = 'MODULE_NOT_FOUND'; +
14566 throw e; +
14567 } +
14568 return id; +
14569} +
14570webpackContext.keys = function webpackContextKeys() { +
14571 return Object.keys(map); +
14572}; +
14573webpackContext.resolve = webpackContextResolve; +
14574module.exports = webpackContext; +
14575webpackContext.id = "./src/themes sync recursive ^\\.\\/.*\\/index\\.scss$"; +
14576 +
14577/***/ }), +
14578 +
14579/***/ "./src/themes/dark/index.scss": +
14580/*!************************************!*\ +
14581 !*** ./src/themes/dark/index.scss ***! +
14582 \************************************/ +
14583/*! no static exports found */ +
14584/***/ (function(module, exports, __webpack_require__) { +
14585 +
14586// css-to-string-loader: transforms styles from css-loader to a string output +
14587 +
14588// Get the styles +
14589var styles = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/dark/index.scss"); +
14590 +
14591if (typeof styles === 'string') { +
14592 // Return an existing string +
14593 module.exports = styles; +
14594} else { +
14595 // Call the custom toString method from css-loader module +
14596 module.exports = styles.toString(); +
14597} +
14598 +
14599/***/ }), +
14600 +
14601/***/ "./src/themes/default/index.scss": +
14602/*!***************************************!*\ +
14603 !*** ./src/themes/default/index.scss ***! +
14604 \***************************************/ +
14605/*! no static exports found */ +
14606/***/ (function(module, exports, __webpack_require__) { +
14607 +
14608// css-to-string-loader: transforms styles from css-loader to a string output +
14609 +
14610// Get the styles +
14611var styles = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/default/index.scss"); +
14612 +
14613if (typeof styles === 'string') { +
14614 // Return an existing string +
14615 module.exports = styles; +
14616} else { +
14617 // Call the custom toString method from css-loader module +
14618 module.exports = styles.toString(); +
14619} +
14620 +
14621/***/ }), +
14622 +
14623/***/ "./src/themes/forest/index.scss": +
14624/*!**************************************!*\ +
14625 !*** ./src/themes/forest/index.scss ***! +
14626 \**************************************/ +
14627/*! no static exports found */ +
14628/***/ (function(module, exports, __webpack_require__) { +
14629 +
14630// css-to-string-loader: transforms styles from css-loader to a string output +
14631 +
14632// Get the styles +
14633var styles = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/forest/index.scss"); +
14634 +
14635if (typeof styles === 'string') { +
14636 // Return an existing string +
14637 module.exports = styles; +
14638} else { +
14639 // Call the custom toString method from css-loader module +
14640 module.exports = styles.toString(); +
14641} +
14642 +
14643/***/ }), +
14644 +
14645/***/ "./src/themes/neutral/index.scss": +
14646/*!***************************************!*\ +
14647 !*** ./src/themes/neutral/index.scss ***! +
14648 \***************************************/ +
14649/*! no static exports found */ +
14650/***/ (function(module, exports, __webpack_require__) { +
14651 +
14652// css-to-string-loader: transforms styles from css-loader to a string output +
14653 +
14654// Get the styles +
14655var styles = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/neutral/index.scss"); +
14656 +
14657if (typeof styles === 'string') { +
14658 // Return an existing string +
14659 module.exports = styles; +
14660} else { +
14661 // Call the custom toString method from css-loader module +
14662 module.exports = styles.toString(); +
14663} +
14664 +
14665/***/ }), +
14666 +
14667/***/ "./src/utils.js": +
14668/*!**********************!*\ +
14669 !*** ./src/utils.js ***! +
14670 \**********************/ +
14671/*! exports provided: detectType, isSubstringInArray, interpolateToCurve, default */ +
14672/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14673 +
14674"use strict"; +
14675__webpack_require__.r(__webpack_exports__); +
14676/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "detectType", function() { return detectType; }); +
14677/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSubstringInArray", function() { return isSubstringInArray; }); +
14678/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interpolateToCurve", function() { return interpolateToCurve; }); +
14679/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "d3"); +
14680/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(d3__WEBPACK_IMPORTED_MODULE_0__); +
14681/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ "./src/logger.js"); +
14682 +
14683 +
14684/** +
14685 * @function detectType +
14686 * Detects the type of the graph text. +
14687 * ```mermaid +
14688 * graph LR +
14689 * a-->b +
14690 * b-->c +
14691 * c-->d +
14692 * d-->e +
14693 * e-->f +
14694 * f-->g +
14695 * g-->h +
14696 * ``` +
14697 * +
14698 * @param {string} text The text defining the graph +
14699 * @returns {string} A graph definition key +
14700 */ +
14701 +
14702const detectType = function (text) { +
14703 text = text.replace(/^\s*%%.*\n/g, '\n'); +
14704 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('Detecting diagram type based on the text ' + text); +
14705 +
14706 if (text.match(/^\s*sequenceDiagram/)) { +
14707 return 'sequence'; +
14708 } +
14709 +
14710 if (text.match(/^\s*gantt/)) { +
14711 return 'gantt'; +
14712 } +
14713 +
14714 if (text.match(/^\s*classDiagram/)) { +
14715 return 'class'; +
14716 } +
14717 +
14718 if (text.match(/^\s*gitGraph/)) { +
14719 return 'git'; +
14720 } +
14721 +
14722 if (text.match(/^\s*info/)) { +
14723 return 'info'; +
14724 } +
14725 +
14726 return 'flowchart'; +
14727}; +
14728/** +
14729 * @function isSubstringInArray +
14730 * Detects whether a substring in present in a given array +
14731 * @param {string} str The substring to detect +
14732 * @param {array} arr The array to search +
14733 * @returns {number} the array index containing the substring or -1 if not present +
14734 **/ +
14735 +
14736const isSubstringInArray = function (str, arr) { +
14737 for (let i = 0; i < arr.length; i++) { +
14738 if (arr[i].match(str)) return i; +
14739 } +
14740 +
14741 return -1; +
14742}; +
14743const interpolateToCurve = (interpolate, defaultCurve) => { +
14744 if (!interpolate) { +
14745 return defaultCurve; +
14746 } +
14747 +
14748 const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`; +
14749 return d3__WEBPACK_IMPORTED_MODULE_0__[curveName] || defaultCurve; +
14750}; +
14751/* harmony default export */ __webpack_exports__["default"] = ({ +
14752 detectType, +
14753 isSubstringInArray, +
14754 interpolateToCurve +
14755}); +
14756 +
14757/***/ }), +
14758 +
14759/***/ "d3": +
14760/*!*********************!*\ +
14761 !*** external "d3" ***! +
14762 \*********************/ +
14763/*! no static exports found */ +
14764/***/ (function(module, exports) { +
14765 +
14766module.exports = require("d3"); +
14767 +
14768/***/ }), +
14769 +
14770/***/ "dagre-d3-renderer": +
14771/*!************************************!*\ +
14772 !*** external "dagre-d3-renderer" ***! +
14773 \************************************/ +
14774/*! no static exports found */ +
14775/***/ (function(module, exports) { +
14776 +
14777module.exports = require("dagre-d3-renderer"); +
14778 +
14779/***/ }), +
14780 +
14781/***/ "dagre-d3-renderer/lib/label/add-html-label.js": +
14782/*!****************************************************************!*\ +
14783 !*** external "dagre-d3-renderer/lib/label/add-html-label.js" ***! +
14784 \****************************************************************/ +
14785/*! no static exports found */ +
14786/***/ (function(module, exports) { +
14787 +
14788module.exports = require("dagre-d3-renderer/lib/label/add-html-label.js"); +
14789 +
14790/***/ }), +
14791 +
14792/***/ "dagre-layout": +
14793/*!*******************************!*\ +
14794 !*** external "dagre-layout" ***! +
14795 \*******************************/ +
14796/*! no static exports found */ +
14797/***/ (function(module, exports) { +
14798 +
14799module.exports = require("dagre-layout"); +
14800 +
14801/***/ }), +
14802 +
14803/***/ "graphlibrary": +
14804/*!*******************************!*\ +
14805 !*** external "graphlibrary" ***! +
14806 \*******************************/ +
14807/*! no static exports found */ +
14808/***/ (function(module, exports) { +
14809 +
14810module.exports = require("graphlibrary"); +
14811 +
14812/***/ }), +
14813 +
14814/***/ "he": +
14815/*!*********************!*\ +
14816 !*** external "he" ***! +
14817 \*********************/ +
14818/*! no static exports found */ +
14819/***/ (function(module, exports) { +
14820 +
14821module.exports = require("he"); +
14822 +
14823/***/ }), +
14824 +
14825/***/ "lodash": +
14826/*!*************************!*\ +
14827 !*** external "lodash" ***! +
14828 \*************************/ +
14829/*! no static exports found */ +
14830/***/ (function(module, exports) { +
14831 +
14832module.exports = require("lodash"); +
14833 +
14834/***/ }), +
14835 +
14836/***/ "moment-mini": +
14837/*!******************************!*\ +
14838 !*** external "moment-mini" ***! +
14839 \******************************/ +
14840/*! no static exports found */ +
14841/***/ (function(module, exports) { +
14842 +
14843module.exports = require("moment-mini"); +
14844 +
14845/***/ }), +
14846 +
14847/***/ "scope-css": +
14848/*!****************************!*\ +
14849 !*** external "scope-css" ***! +
14850 \****************************/ +
14851/*! no static exports found */ +
14852/***/ (function(module, exports) { +
14853 +
14854module.exports = require("scope-css"); +
14855 +
14856/***/ }) +
14857 +
14858/******/ })["default"]; +
14859}); +
14860//# sourceMappingURL=mermaid.core.js.map
\No newline at end of file

Build: a7ebffa

© 2023 UNPKG

\ No newline at end of file diff --git a/static/mermaid.core.js.map b/static/mermaid.core.js.map new file mode 100644 index 0000000..092ded7 --- /dev/null +++ b/static/mermaid.core.js.map @@ -0,0 +1,65 @@ +UNPKG - mermaid

UNPKG

781 kBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack://mermaid/webpack/universalModuleDefinition","webpack://mermaid/webpack/bootstrap","webpack://mermaid/./src/themes/dark/index.scss","webpack://mermaid/./src/themes/default/index.scss","webpack://mermaid/./src/themes/forest/index.scss","webpack://mermaid/./src/themes/neutral/index.scss","webpack://mermaid/./node_modules/css-loader/dist/runtime/api.js","webpack://mermaid/./node_modules/path-browserify/index.js","webpack://mermaid/./node_modules/process/browser.js","webpack://mermaid/(webpack)/buildin/module.js","webpack://mermaid/./src/diagrams/class/classDb.js","webpack://mermaid/./src/diagrams/class/classRenderer.js","webpack://mermaid/./src/diagrams/class/parser/classDiagram.js","webpack://mermaid/./src/diagrams/flowchart/flowDb.js","webpack://mermaid/./src/diagrams/flowchart/flowRenderer.js","webpack://mermaid/./src/diagrams/flowchart/parser/flow.js","webpack://mermaid/./src/diagrams/gantt/ganttDb.js","webpack://mermaid/./src/diagrams/gantt/ganttRenderer.js","webpack://mermaid/./src/diagrams/gantt/parser/gantt.js","webpack://mermaid/./src/diagrams/git/gitGraphAst.js","webpack://mermaid/./src/diagrams/git/gitGraphRenderer.js","webpack://mermaid/./src/diagrams/git/parser/gitGraph.js","webpack://mermaid/./src/diagrams/info/infoDb.js","webpack://mermaid/./src/diagrams/info/infoRenderer.js","webpack://mermaid/./src/diagrams/info/parser/info.js","webpack://mermaid/./src/diagrams/sequence/parser/sequenceDiagram.js","webpack://mermaid/./src/diagrams/sequence/sequenceDb.js","webpack://mermaid/./src/diagrams/sequence/sequenceRenderer.js","webpack://mermaid/./src/diagrams/sequence/svgDraw.js","webpack://mermaid/./src/logger.js","webpack://mermaid/./src/mermaid.js","webpack://mermaid/./src/mermaidAPI.js","webpack://mermaid/./src/themes sync ^\\.\\/.*\\/index\\.scss$","webpack://mermaid/./src/themes/dark/index.scss?3bd3","webpack://mermaid/./src/themes/default/index.scss?54ca","webpack://mermaid/./src/themes/forest/index.scss?3c73","webpack://mermaid/./src/themes/neutral/index.scss?dee9","webpack://mermaid/./src/utils.js","webpack://mermaid/external \"d3\"","webpack://mermaid/external \"dagre-d3-renderer\"","webpack://mermaid/external \"dagre-d3-renderer/lib/label/add-html-label.js\"","webpack://mermaid/external \"dagre-layout\"","webpack://mermaid/external \"graphlibrary\"","webpack://mermaid/external \"he\"","webpack://mermaid/external \"lodash\"","webpack://mermaid/external \"moment-mini\"","webpack://mermaid/external \"scope-css\""],"names":["relations","classes","addClass","id","methods","members","clear","getClass","getClasses","getRelations","addRelation","relation","logger","debug","JSON","stringify","id1","id2","push","addMember","className","member","theClass","substr","addMembers","MembersArr","Array","isArray","forEach","cleanupLabel","label","substring","trim","lineType","LINE","DOTTED_LINE","relationType","AGGREGATION","EXTENSION","COMPOSITION","DEPENDENCY","parser","yy","classDb","idCache","classCnt","conf","dividerMargin","padding","textHeight","getGraphId","keys","Object","i","length","undefined","insertMarkers","elem","append","attr","edgeCount","total","drawEdge","path","getRelationType","type","points","filter","p","Number","isNaN","y","lineData","lineFunction","d3","x","d","curve","svgPath","url","arrowMarkerAbsolute","window","location","protocol","host","pathname","search","replace","type1","type2","l","p1","Math","floor","p2","ceil","title","g","text","bounds","node","getBBox","insert","width","height","drawClass","classDef","info","addTspan","textEl","txt","isFirst","tSpan","classInfo","titleHeight","membersLine","membersBox","methodsLine","method","classBox","setConf","cnf","key","draw","parse","diagram","graphlib","Graph","multigraph","setGraph","isMultiGraph","setDefaultEdgeLabel","setNode","setEdge","dagre","layout","nodes","v","edges","e","edge","w","graph","o","k","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","trace","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","console","warn","relationTitle1","relationTitle2","table","defaultActions","parseError","str","hash","recoverable","error","Error","input","self","stack","tstack","vstack","lstack","recovering","TERROR","EOF","args","slice","call","arguments","lexer","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","ranges","options","getPrototypeOf","popStack","n","lex","token","pop","symbol","preErrorSymbol","state","action","a","r","yyval","len","newState","expected","errStr","showPosition","join","match","line","loc","first_line","last_line","first_column","last_column","range","apply","concat","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","lines","unput","split","oldLines","more","reject","backtrack_lexer","less","pastInput","past","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","YYSTATE","Parser","exports","main","commonjsMain","log","process","exit","source","require","readFileSync","normalize","module","argv","vertices","subGraphs","subGraphLookup","tooltips","subCount","direction","funs","addVertex","style","styles","s","addLink","start","end","linktext","stroke","updateLinkInterpolate","positions","interp","pos","defaultInterpolate","interpolate","updateLink","defaultStyle","utils","isSubstringInArray","setDirection","dir","setClass","ids","setTooltip","tooltip","setClickFun","functionName","element","select","on","setLink","linkStr","link","getTooltip","setClickEvent","bindFunctions","fun","getDirection","getVertices","getEdges","setupToolTips","tooltipElem","_groups","svg","selectAll","el","rect","getBoundingClientRect","transition","duration","html","left","right","top","document","body","scrollTop","classed","addSubGraph","list","uniq","prims","objs","item","indexOf","nodeList","subGraph","getPosForId","secCount","posCrossRef","indexNodes2","result","count","posCount","childPos","res","getDepthFirstPos","indexNodes","getSubGraphs","addVertices","vert","svgId","styleFromStyleArr","styleStr","arr","vertex","classStr","vertexText","vertexNode","htmlLabels","addHtmlLabel","parentNode","removeChild","svgLabel","createElementNS","rows","j","tspan","setAttributeNS","setAttribute","textContent","appendChild","radious","_shape","labelType","shape","rx","ry","addEdges","cnt","toString","edgeData","arrowhead","interpolateToCurve","arrowheadStyle","labelpos","flowDb","flow","err","compound","rankdir","marginx","marginy","subG","setParent","Render","dagreD3","render","shapes","question","parent","bbox","h","shapeSvg","map","intersect","point","polygon","rect_left_inv_arrow","rect_right_inv_arrow","arrows","none","normal","marker","util","applyStyle","maxX","minX","maxY","minY","clusterRects","querySelectorAll","clusterEl","xPos","baseVal","value","yPos","cluster","te","labels","dim","insertBefore","firstChild","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","$V71","$V81","$V91","$Va1","$Vb1","$Vc1","$Vd1","$Ve1","dateFormat","axisFormat","excludes","sections","tasks","currentSection","tags","taskCnt","lastTask","lastTaskID","rawTasks","setAxisFormat","getAxisFormat","setDateFormat","setExcludes","toLowerCase","setTitle","getTitle","addSection","getTasks","allItemsPricessed","compileTasks","maxDepth","iterationCount","isInvalidDate","date","isoWeekday","format","checkTaskDates","task","manualEndTime","startTime","moment","add","endTime","renderEndTime","fixTaskDates","toDate","invalid","getStartDate","prevTime","re","afterStatement","exec","findTaskById","dt","Date","setHours","mDate","isValid","getEndDate","durationStatement","parseId","idStr","compileData","prevTask","dataStr","ds","data","getTaskTags","endTimeData","parseData","prevTaskId","startData","taskDb","addTask","descr","rawTask","section","processed","raw","taskInfo","active","crit","milestone","addTaskOrg","newTask","description","compileTask","allProcessed","pushFun","open","functionArgs","argList","charAt","callbackFunction","matchFound","t","pattern","regex","RegExp","shift","ganttDb","titleTopMargin","barHeight","barGap","topPadding","rightPadding","leftPadding","gridLineStartPadding","fontSize","fontFamily","getElementById","parentElement","offsetWidth","useWidth","taskArray","timeScale","domain","rangeRound","categories","catsUnfiltered","checkUnique","makeGant","pageWidth","pageHeight","gap","colorScale","makeGrid","drawRects","vertLabels","drawToday","theArray","theGap","theTopPad","theSidePad","theBarHeight","theColorScale","enter","numberSectionStyles","rectangles","secNum","taskClass","startX","endX","textWidth","taskType","xAxis","tickSize","tickFormat","numOccurances","prevGap","getCount","todayG","today","getCounts","obj","word","commits","head","branches","curBranch","seq","getRandomInt","min","max","random","getId","pool","isfastforwardable","currentCommit","otherCommit","isReachableFrom","currentSeq","otherSeq","setOptions","rawOptString","message","getOptions","commit","msg","branch","name","merge","otherBranch","checkout","reset","commitRef","ref","parentCount","parseInt","upsert","newval","splice","prettyPrintCommitHistory","commitArr","_","maxBy","newCommit","nextCommit","uniqBy","prettyPrint","getCommitsArray","getBranchesAsObjArray","branchArr","getBranches","getCommits","orderBy","getCurrentBranch","getHead","allCommitsDict","branchNum","config","nodeSpacing","nodeFillColor","nodeStrokeWidth","nodeStrokeColor","lineStrokeWidth","branchOffset","lineColor","leftMargin","branchColors","nodeRadius","nodeLabel","apiConfig","svgCreateDefs","svgDrawLine","colorIdx","color","lineGen","round","getElementCoords","coords","ctm","getCTM","xn","yn","f","svgDrawLineForCommits","fromId","toId","fromBbox","toBbox","lineStart","lineEnd","cloneNode","selector","renderCommitHistory","commitid","numCommits","size","branchName","renderLines","branchColor","lineDrawn","ver","gitGraphParser","db","assign","setMessage","getMessage","setInfo","inf","getInfo","infoParser","signalType","LINETYPE","ACTIVE_START","actor","ACTIVE_END","unshift","loopText","LOOP_START","LOOP_END","optText","OPT_START","OPT_END","altText","ALT_START","ALT_END","parText","PAR_START","PAR_END","PAR_AND","ALT_ELSE","placement","PLACEMENT","OVER","LEFTOF","RIGHTOF","from","to","SOLID_OPEN","DOTTED_OPEN","SOLID","DOTTED","SOLID_CROSS","DOTTED_CROSS","actors","messages","notes","addActor","old","addMessage","idFrom","idTo","answer","addSignal","messageType","getMessages","getActors","getActor","getActorKeys","NOTE","ARROWTYPE","FILLED","OPEN","addNote","note","titleText","param","sequenceDb","diagramMarginX","diagramMarginY","actorMargin","actorFontSize","actorFontFamily","boxMargin","boxTextMargin","noteMargin","messageMargin","mirrorActors","bottomMarginAdj","activationWidth","textPlacement","startx","stopx","starty","stopy","verticalPos","sequenceItems","activations","init","updateVal","val","updateBounds","_self","updateFn","updateItemBounds","_startx","_stopx","_starty","_stopy","newActivation","actorRect","stackedSize","actorActivations","anchored","svgDraw","anchorElement","endActivation","lastActorActivationIdx","activation","lastIndexOf","newLoop","endLoop","loop","addSectionToLoop","sectionTitles","getVerticalPos","bumpVerticalPos","bump","getBounds","_drawLongText","textObj","getTextObj","textMargin","dy","class","textElem","drawText","drawNote","forceWidth","getNoteRect","rectElem","drawRect","drawMessage","txtCenter","rightAngles","dx","drawActors","actorKeys","drawActor","actorFlowVerticaBounds","reduce","acc","insertArrowHead","insertArrowCrossHead","activeEnd","activationData","drawActivation","loopData","drawLoop","fromBounds","toBounds","fromIdx","toIdx","allBounds","box","actorLines","useMaxWidth","extraVertForTitle","rectData","fill","textData","nText","anchor","span","drawLabel","txtObject","genPoints","cut","labelMargin","actorCnt","center","_drawTextCandidateFunc","labelText","drawLoopLine","idx","defs","byText","content","textAttrs","_setTextAttrs","byTspan","byFo","toText","fromTextAttrsDict","LEVELS","fatal","setLogLevel","level","bind","time","mermaidAPI","getConfig","mermaid","sequenceConfig","callback","Node","startOnLoad","initialize","ganttConfig","gantt","getAttribute","now","innerHTML","he","decode","svgCode","contentLoaded","addEventListener","themes","themeName","theme","themeCSS","logLevel","flowchart","sequence","git","graphType","detectType","gitGraphAst","flowParser","sequenceParser","ganttParser","classParser","infoDb","encodeEntities","innerTxt","isInt","test","decodeEntities","cb","container","querySelector","flowRenderer","style1","createElement","scope","style2","cs","getComputedStyle","font","gitGraphRenderer","sequenceDiagram","sequenceRenderer","ganttRenderer","classRenderer","infoRenderer","pkg","version","remove","lvl1Keys","lvl2Keys","defaultCurve","curveName","toUpperCase"],"mappings":"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AACA;AACA,qDAAqD,cAAc;AACnE;AACA,C;;;;;;;;;;;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,MAAM;AAChB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,8BAA8B;AAClE;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,oBAAoB;AAC9B;AACA;;AAEA;AACA,UAAU,UAAU;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC/NA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;ACvLtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACpBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAIA,SAAS,GAAG,EAAhB;AACA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,EAAL;AAAQ,mBAAO,CAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO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","file":"mermaid.core.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"mermaid\"] = factory();\n\telse\n\t\troot[\"mermaid\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/mermaid.js\");\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #BDD5EA;\\n stroke: purple;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: lightgrey; }\\n\\n.edgePath .path {\\n stroke: lightgrey;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: #e8e8e8; }\\n\\n.cluster rect {\\n fill: #6D6D65;\\n stroke: rgba(255, 255, 255, 0.25);\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #F9FFFE; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #6D6D65;\\n border: 1px solid rgba(255, 255, 255, 0.25);\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #81B1DB;\\n fill: #BDD5EA; }\\n\\ntext.actor {\\n fill: black;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: lightgrey; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: lightgrey; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: lightgrey; }\\n\\n#arrowhead {\\n fill: lightgrey; }\\n\\n#crosshead path {\\n fill: lightgrey !important;\\n stroke: lightgrey !important; }\\n\\n.messageText {\\n fill: lightgrey;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #81B1DB;\\n fill: #BDD5EA; }\\n\\n.labelText {\\n fill: #323D47;\\n stroke: none; }\\n\\n.loopText {\\n fill: lightgrey;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #81B1DB; }\\n\\n.note {\\n stroke: rgba(255, 255, 255, 0.25);\\n fill: #fff5ad; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: rgba(255, 255, 255, 0.3); }\\n\\n.section2 {\\n fill: #EAE8B9; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle1 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle2 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle3 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: lightgrey;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: #DB5757;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: #323D47;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: #323D47;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: #323D47; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #BDD5EA;\\n stroke: rgba(255, 255, 255, 0.5); }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: lightgrey; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: lightgrey; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #81B1DB;\\n stroke: rgba(255, 255, 255, 0.5); }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: #323D47 !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: grey;\\n fill: lightgrey;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: #323D47 !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #E83737;\\n fill: #E83737;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #E83737;\\n fill: #81B1DB;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #E83737;\\n fill: lightgrey;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: #323D47 !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: #323D47 !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: #323D47; }\\n\\ng.classGroup text {\\n fill: purple;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #BDD5EA;\\n stroke: purple; }\\n\\ng.classGroup line {\\n stroke: purple;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #BDD5EA;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: purple;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: purple;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #BDD5EA;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #BDD5EA;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #ECECFF;\\n stroke: #9370DB;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: #333333; }\\n\\n.edgePath .path {\\n stroke: #333333;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: #e8e8e8; }\\n\\n.cluster rect {\\n fill: #ffffde;\\n stroke: #aaaa33;\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #333; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #ffffde;\\n border: 1px solid #aaaa33;\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #CCCCFF;\\n fill: #ECECFF; }\\n\\ntext.actor {\\n fill: black;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: grey; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n#arrowhead {\\n fill: #333; }\\n\\n#crosshead path {\\n fill: #333 !important;\\n stroke: #333 !important; }\\n\\n.messageText {\\n fill: #333;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #CCCCFF;\\n fill: #ECECFF; }\\n\\n.labelText {\\n fill: black;\\n stroke: none; }\\n\\n.loopText {\\n fill: black;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #CCCCFF; }\\n\\n.note {\\n stroke: #aaaa33;\\n fill: #fff5ad; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: rgba(102, 102, 255, 0.49); }\\n\\n.section2 {\\n fill: #fff400; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #333; }\\n\\n.sectionTitle1 {\\n fill: #333; }\\n\\n.sectionTitle2 {\\n fill: #333; }\\n\\n.sectionTitle3 {\\n fill: #333; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: lightgrey;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: red;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: black;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: black;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: white; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #8a90dd;\\n stroke: #534fbc; }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: black; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: black; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #bfc7ff;\\n stroke: #534fbc; }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: black !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: grey;\\n fill: lightgrey;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: black !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #ff8888;\\n fill: red;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #ff8888;\\n fill: #bfc7ff;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #ff8888;\\n fill: lightgrey;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: black !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: black !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: black; }\\n\\ng.classGroup text {\\n fill: #9370DB;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #ECECFF;\\n stroke: #9370DB; }\\n\\ng.classGroup line {\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #ECECFF;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: #9370DB;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: #9370DB;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #ECECFF;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #ECECFF;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #cde498;\\n stroke: #13540c;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: green; }\\n\\n.edgePath .path {\\n stroke: green;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: #e8e8e8; }\\n\\n.cluster rect {\\n fill: #cdffb2;\\n stroke: #6eaa49;\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #333; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #cdffb2;\\n border: 1px solid #6eaa49;\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #13540c;\\n fill: #cde498; }\\n\\ntext.actor {\\n fill: black;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: grey; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n#arrowhead {\\n fill: #333; }\\n\\n#crosshead path {\\n fill: #333 !important;\\n stroke: #333 !important; }\\n\\n.messageText {\\n fill: #333;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #326932;\\n fill: #cde498; }\\n\\n.labelText {\\n fill: black;\\n stroke: none; }\\n\\n.loopText {\\n fill: black;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #326932; }\\n\\n.note {\\n stroke: #6eaa49;\\n fill: #fff5ad; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: #6eaa49; }\\n\\n.section2 {\\n fill: #6eaa49; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #333; }\\n\\n.sectionTitle1 {\\n fill: #333; }\\n\\n.sectionTitle2 {\\n fill: #333; }\\n\\n.sectionTitle3 {\\n fill: #333; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: lightgrey;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: red;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: black;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: black;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: white; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #487e3a;\\n stroke: #13540c; }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: black; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: black; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #cde498;\\n stroke: #13540c; }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: black !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: grey;\\n fill: lightgrey;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: black !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #ff8888;\\n fill: red;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #ff8888;\\n fill: #cde498;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #ff8888;\\n fill: lightgrey;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: black !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: black !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: black; }\\n\\ng.classGroup text {\\n fill: #13540c;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #cde498;\\n stroke: #13540c; }\\n\\ng.classGroup line {\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #cde498;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: #13540c;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: #13540c;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #cde498;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #cde498;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #eee;\\n stroke: #999;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: #333333; }\\n\\n.edgePath .path {\\n stroke: #666;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: white; }\\n\\n.cluster rect {\\n fill: #eaf2fb;\\n stroke: #26a;\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #333; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #eaf2fb;\\n border: 1px solid #26a;\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #999;\\n fill: #eee; }\\n\\ntext.actor {\\n fill: #333;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: #666; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n#arrowhead {\\n fill: #333; }\\n\\n#crosshead path {\\n fill: #333 !important;\\n stroke: #333 !important; }\\n\\n.messageText {\\n fill: #333;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #999;\\n fill: #eee; }\\n\\n.labelText {\\n fill: #333;\\n stroke: none; }\\n\\n.loopText {\\n fill: #333;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #999; }\\n\\n.note {\\n stroke: #777700;\\n fill: #ffa; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: #80b3e6; }\\n\\n.section2 {\\n fill: #80b3e6; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #333; }\\n\\n.sectionTitle1 {\\n fill: #333; }\\n\\n.sectionTitle2 {\\n fill: #333; }\\n\\n.sectionTitle3 {\\n fill: #333; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: #e6e6e6;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: #d42;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: #333;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: #333;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: white; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #26a;\\n stroke: #1a4d80; }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: #333; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: #333; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #eee;\\n stroke: #1a4d80; }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: #333 !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: #666;\\n fill: #bbb;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: #333 !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #b1361b;\\n fill: #d42;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #b1361b;\\n fill: #eee;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #b1361b;\\n fill: #bbb;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: #333 !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: #333 !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: #333; }\\n\\ng.classGroup text {\\n fill: #999;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #eee;\\n stroke: #999; }\\n\\ng.classGroup line {\\n stroke: #999;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #eee;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: #999;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: #999;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #eee;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #eee;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // 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\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // 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.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","\nimport { logger } from '../../logger'\n\nlet relations = []\nlet classes = {}\n\n/**\n * Function called by parser when a node definition has been found.\n * @param id\n * @param text\n * @param type\n * @param style\n */\nexport const addClass = function (id) {\n if (typeof classes[id] === 'undefined') {\n classes[id] = {\n id: id,\n methods: [],\n members: []\n }\n }\n}\n\nexport const clear = function () {\n relations = []\n classes = {}\n}\n\nexport const getClass = function (id) {\n return classes[id]\n}\nexport const getClasses = function () {\n return classes\n}\n\nexport const getRelations = function () {\n return relations\n}\n\nexport const addRelation = function (relation) {\n logger.debug('Adding relation: ' + JSON.stringify(relation))\n addClass(relation.id1)\n addClass(relation.id2)\n relations.push(relation)\n}\n\nexport const addMember = function (className, member) {\n const theClass = classes[className]\n if (typeof member === 'string') {\n if (member.substr(-1) === ')') {\n theClass.methods.push(member)\n } else {\n theClass.members.push(member)\n }\n }\n}\n\nexport const addMembers = function (className, MembersArr) {\n if (Array.isArray(MembersArr)) {\n MembersArr.forEach(member => addMember(className, member))\n }\n}\n\nexport const cleanupLabel = function (label) {\n if (label.substring(0, 1) === ':') {\n return label.substr(2).trim()\n } else {\n return label.trim()\n }\n}\n\nexport const lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n}\n\nexport const relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3\n}\n\nexport default {\n addClass,\n clear,\n getClass,\n getClasses,\n getRelations,\n addRelation,\n addMember,\n addMembers,\n cleanupLabel,\n lineType,\n relationType\n}\n","import * as d3 from 'd3'\nimport dagre from 'dagre-layout'\nimport graphlib from 'graphlibrary'\nimport { logger } from '../../logger'\nimport classDb from './classDb'\nimport { parser } from './parser/classDiagram'\n\nparser.yy = classDb\n\nconst idCache = {}\n\nlet classCnt = 0\nconst conf = {\n dividerMargin: 10,\n padding: 5,\n textHeight: 10\n}\n\n// Todo optimize\nconst getGraphId = function (label) {\n const keys = Object.keys(idCache)\n\n for (let i = 0; i < keys.length; i++) {\n if (idCache[keys[i]].label === label) {\n return keys[i]\n }\n }\n\n return undefined\n}\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\nconst insertMarkers = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'extensionStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,7 L18,13 V 1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'extensionEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,1 V 13 L18,7 Z') // this is actual shape for arrowhead\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'compositionStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'compositionEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'aggregationStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'aggregationEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'dependencyStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'dependencyEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z')\n}\n\nlet edgeCount = 0\nlet total = 0\nconst drawEdge = function (elem, path, relation) {\n const getRelationType = function (type) {\n switch (type) {\n case classDb.relationType.AGGREGATION:\n return 'aggregation'\n case classDb.relationType.EXTENSION:\n return 'extension'\n case classDb.relationType.COMPOSITION:\n return 'composition'\n case classDb.relationType.DEPENDENCY:\n return 'dependency'\n }\n }\n\n path.points = path.points.filter(p => !Number.isNaN(p.y))\n\n // The data for our line\n const lineData = path.points\n\n // This is the accessor function we talked about above\n const lineFunction = d3\n .line()\n .x(function (d) {\n return d.x\n })\n .y(function (d) {\n return d.y\n })\n .curve(d3.curveBasis)\n\n const svgPath = elem\n .append('path')\n .attr('d', lineFunction(lineData))\n .attr('id', 'edge' + edgeCount)\n .attr('class', 'relation')\n let url = ''\n if (conf.arrowMarkerAbsolute) {\n url =\n window.location.protocol +\n '//' +\n window.location.host +\n window.location.pathname +\n window.location.search\n url = url.replace(/\\(/g, '\\\\(')\n url = url.replace(/\\)/g, '\\\\)')\n }\n\n if (relation.relation.type1 !== 'none') {\n svgPath.attr(\n 'marker-start',\n 'url(' +\n url +\n '#' +\n getRelationType(relation.relation.type1) +\n 'Start' +\n ')'\n )\n }\n if (relation.relation.type2 !== 'none') {\n svgPath.attr(\n 'marker-end',\n 'url(' +\n url +\n '#' +\n getRelationType(relation.relation.type2) +\n 'End' +\n ')'\n )\n }\n\n let x, y\n const l = path.points.length\n if (l % 2 !== 0 && l > 1) {\n const p1 = path.points[Math.floor(l / 2)]\n const p2 = path.points[Math.ceil(l / 2)]\n x = (p1.x + p2.x) / 2\n y = (p1.y + p2.y) / 2\n } else {\n const p = path.points[Math.floor(l / 2)]\n x = p.x\n y = p.y\n }\n\n if (typeof relation.title !== 'undefined') {\n const g = elem.append('g').attr('class', 'classLabel')\n const label = g\n .append('text')\n .attr('class', 'label')\n .attr('x', x)\n .attr('y', y)\n .attr('fill', 'red')\n .attr('text-anchor', 'middle')\n .text(relation.title)\n\n window.label = label\n const bounds = label.node().getBBox()\n\n g.insert('rect', ':first-child')\n .attr('class', 'box')\n .attr('x', bounds.x - conf.padding / 2)\n .attr('y', bounds.y - conf.padding / 2)\n .attr('width', bounds.width + conf.padding)\n .attr('height', bounds.height + conf.padding)\n }\n\n edgeCount++\n}\n\nconst drawClass = function (elem, classDef) {\n logger.info('Rendering class ' + classDef)\n\n const addTspan = function (textEl, txt, isFirst) {\n const tSpan = textEl\n .append('tspan')\n .attr('x', conf.padding)\n .text(txt)\n if (!isFirst) {\n tSpan.attr('dy', conf.textHeight)\n }\n }\n\n const id = 'classId' + (classCnt % total)\n const classInfo = {\n id: id,\n label: classDef.id,\n width: 0,\n height: 0\n }\n\n const g = elem\n .append('g')\n .attr('id', id)\n .attr('class', 'classGroup')\n const title = g\n .append('text')\n .attr('x', conf.padding)\n .attr('y', conf.textHeight + conf.padding)\n .text(classDef.id)\n\n const titleHeight = title.node().getBBox().height\n\n const membersLine = g\n .append('line') // text label for the x axis\n .attr('x1', 0)\n .attr('y1', conf.padding + titleHeight + conf.dividerMargin / 2)\n .attr('y2', conf.padding + titleHeight + conf.dividerMargin / 2)\n\n const members = g\n .append('text') // text label for the x axis\n .attr('x', conf.padding)\n .attr('y', titleHeight + conf.dividerMargin + conf.textHeight)\n .attr('fill', 'white')\n .attr('class', 'classText')\n\n let isFirst = true\n classDef.members.forEach(function (member) {\n addTspan(members, member, isFirst)\n isFirst = false\n })\n\n const membersBox = members.node().getBBox()\n\n const methodsLine = g\n .append('line') // text label for the x axis\n .attr('x1', 0)\n .attr(\n 'y1',\n conf.padding + titleHeight + conf.dividerMargin + membersBox.height\n )\n .attr(\n 'y2',\n conf.padding + titleHeight + conf.dividerMargin + membersBox.height\n )\n\n const methods = g\n .append('text') // text label for the x axis\n .attr('x', conf.padding)\n .attr(\n 'y',\n titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight\n )\n .attr('fill', 'white')\n .attr('class', 'classText')\n\n isFirst = true\n\n classDef.methods.forEach(function (method) {\n addTspan(methods, method, isFirst)\n isFirst = false\n })\n\n const classBox = g.node().getBBox()\n g.insert('rect', ':first-child')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', classBox.width + 2 * conf.padding)\n .attr('height', classBox.height + conf.padding + 0.5 * conf.dividerMargin)\n\n membersLine.attr('x2', classBox.width + 2 * conf.padding)\n methodsLine.attr('x2', classBox.width + 2 * conf.padding)\n\n classInfo.width = classBox.width + 2 * conf.padding\n classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin\n\n idCache[id] = classInfo\n classCnt++\n return classInfo\n}\n\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n parser.yy.clear()\n parser.parse(text)\n\n logger.info('Rendering diagram ' + text)\n\n /// / Fetch the default direction, use TD if none was found\n const diagram = d3.select(`[id='${id}']`)\n insertMarkers(diagram)\n\n // Layout graph, Create a new directed graph\n const g = new graphlib.Graph({\n multigraph: true\n })\n\n // Set an object for the graph label\n g.setGraph({\n isMultiGraph: true\n })\n\n // Default to assigning a new object as a label for each new edge.\n g.setDefaultEdgeLabel(function () {\n return {}\n })\n\n const classes = classDb.getClasses()\n const keys = Object.keys(classes)\n total = keys.length\n for (let i = 0; i < keys.length; i++) {\n const classDef = classes[keys[i]]\n const node = drawClass(diagram, classDef)\n // Add nodes to the graph. The first argument is the node id. The second is\n // metadata about the node. In this case we're going to add labels to each of\n // our nodes.\n g.setNode(node.id, node)\n logger.info('Org height: ' + node.height)\n }\n\n const relations = classDb.getRelations()\n relations.forEach(function (relation) {\n logger.info(\n 'tjoho' +\n getGraphId(relation.id1) +\n getGraphId(relation.id2) +\n JSON.stringify(relation)\n )\n g.setEdge(getGraphId(relation.id1), getGraphId(relation.id2), {\n relation: relation\n })\n })\n dagre.layout(g)\n g.nodes().forEach(function (v) {\n if (typeof v !== 'undefined' && typeof g.node(v) !== 'undefined') {\n logger.debug('Node ' + v + ': ' + JSON.stringify(g.node(v)))\n d3.select('#' + v).attr(\n 'transform',\n 'translate(' +\n (g.node(v).x - g.node(v).width / 2) +\n ',' +\n (g.node(v).y - g.node(v).height / 2) +\n ' )'\n )\n }\n })\n g.edges().forEach(function (e) {\n if (typeof e !== 'undefined' && typeof g.edge(e) !== 'undefined') {\n logger.debug(\n 'Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(g.edge(e))\n )\n drawEdge(diagram, g.edge(e), g.edge(e).relation)\n }\n })\n\n diagram.attr('height', '100%')\n diagram.attr('width', '100%')\n diagram.attr(\n 'viewBox',\n '0 0 ' + (g.graph().width + 20) + ' ' + (g.graph().height + 20)\n )\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,11],$V1=[1,12],$V2=[1,13],$V3=[1,15],$V4=[1,16],$V5=[1,17],$V6=[6,8],$V7=[1,26],$V8=[1,27],$V9=[1,28],$Va=[1,29],$Vb=[1,30],$Vc=[1,31],$Vd=[6,8,13,17,23,26,27,28,29,30,31],$Ve=[6,8,13,17,23,26,27,28,29,30,31,45,46,47],$Vf=[23,45,46,47],$Vg=[23,30,31,45,46,47],$Vh=[23,26,27,28,29,45,46,47],$Vi=[6,8,13],$Vj=[1,46];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"mermaidDoc\":3,\"graphConfig\":4,\"CLASS_DIAGRAM\":5,\"NEWLINE\":6,\"statements\":7,\"EOF\":8,\"statement\":9,\"className\":10,\"alphaNumToken\":11,\"relationStatement\":12,\"LABEL\":13,\"classStatement\":14,\"methodStatement\":15,\"CLASS\":16,\"STRUCT_START\":17,\"members\":18,\"STRUCT_STOP\":19,\"MEMBER\":20,\"SEPARATOR\":21,\"relation\":22,\"STR\":23,\"relationType\":24,\"lineType\":25,\"AGGREGATION\":26,\"EXTENSION\":27,\"COMPOSITION\":28,\"DEPENDENCY\":29,\"LINE\":30,\"DOTTED_LINE\":31,\"commentToken\":32,\"textToken\":33,\"graphCodeTokens\":34,\"textNoTagsToken\":35,\"TAGSTART\":36,\"TAGEND\":37,\"==\":38,\"--\":39,\"PCT\":40,\"DEFAULT\":41,\"SPACE\":42,\"MINUS\":43,\"keywords\":44,\"UNICODE_TEXT\":45,\"NUM\":46,\"ALPHA\":47,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"CLASS_DIAGRAM\",6:\"NEWLINE\",8:\"EOF\",13:\"LABEL\",16:\"CLASS\",17:\"STRUCT_START\",19:\"STRUCT_STOP\",20:\"MEMBER\",21:\"SEPARATOR\",23:\"STR\",26:\"AGGREGATION\",27:\"EXTENSION\",28:\"COMPOSITION\",29:\"DEPENDENCY\",30:\"LINE\",31:\"DOTTED_LINE\",34:\"graphCodeTokens\",36:\"TAGSTART\",37:\"TAGEND\",38:\"==\",39:\"--\",40:\"PCT\",41:\"DEFAULT\",42:\"SPACE\",43:\"MINUS\",44:\"keywords\",45:\"UNICODE_TEXT\",46:\"NUM\",47:\"ALPHA\"},\nproductions_: [0,[3,1],[4,4],[7,1],[7,2],[7,3],[10,2],[10,1],[9,1],[9,2],[9,1],[9,1],[14,2],[14,5],[18,1],[18,2],[15,1],[15,2],[15,1],[15,1],[12,3],[12,4],[12,4],[12,5],[22,3],[22,2],[22,2],[22,1],[24,1],[24,1],[24,1],[24,1],[25,1],[25,1],[32,1],[32,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[35,1],[35,1],[35,1],[35,1],[11,1],[11,1],[11,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 6:\n this.$=$$[$0-1]+$$[$0]; \nbreak;\ncase 7:\n this.$=$$[$0]; \nbreak;\ncase 8:\n yy.addRelation($$[$0]); \nbreak;\ncase 9:\n $$[$0-1].title = yy.cleanupLabel($$[$0]); yy.addRelation($$[$0-1]); \nbreak;\ncase 12:\nyy.addClass($$[$0]);\nbreak;\ncase 13:\n/*console.log($$[$0-3],JSON.stringify($$[$0-1]));*/yy.addClass($$[$0-3]);yy.addMembers($$[$0-3],$$[$0-1]);\nbreak;\ncase 14:\n this.$ = [$$[$0]]; \nbreak;\ncase 15:\n $$[$0].push($$[$0-1]);this.$=$$[$0];\nbreak;\ncase 16:\n/*console.log('Rel found',$$[$0]);*/\nbreak;\ncase 17:\nyy.addMember($$[$0-1],yy.cleanupLabel($$[$0]));\nbreak;\ncase 18:\nconsole.warn('Member',$$[$0]);\nbreak;\ncase 19:\n/*console.log('sep found',$$[$0]);*/\nbreak;\ncase 20:\n this.$ = {'id1':$$[$0-2],'id2':$$[$0], relation:$$[$0-1], relationTitle1:'none', relationTitle2:'none'}; \nbreak;\ncase 21:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-1], relationTitle1:$$[$0-2], relationTitle2:'none'}\nbreak;\ncase 22:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-2], relationTitle1:'none', relationTitle2:$$[$0-1]}; \nbreak;\ncase 23:\n this.$ = {id1:$$[$0-4], id2:$$[$0], relation:$$[$0-2], relationTitle1:$$[$0-3], relationTitle2:$$[$0-1]} \nbreak;\ncase 24:\n this.$={type1:$$[$0-2],type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 25:\n this.$={type1:'none',type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 26:\n this.$={type1:$$[$0-1],type2:'none',lineType:$$[$0]}; \nbreak;\ncase 27:\n this.$={type1:'none',type2:'none',lineType:$$[$0]}; \nbreak;\ncase 28:\n this.$=yy.relationType.AGGREGATION;\nbreak;\ncase 29:\n this.$=yy.relationType.EXTENSION;\nbreak;\ncase 30:\n this.$=yy.relationType.COMPOSITION;\nbreak;\ncase 31:\n this.$=yy.relationType.DEPENDENCY;\nbreak;\ncase 32:\nthis.$=yy.lineType.LINE;\nbreak;\ncase 33:\nthis.$=yy.lineType.DOTTED_LINE;\nbreak;\n}\n},\ntable: [{3:1,4:2,5:[1,3]},{1:[3]},{1:[2,1]},{6:[1,4]},{7:5,9:6,10:10,11:14,12:7,14:8,15:9,16:$V0,20:$V1,21:$V2,45:$V3,46:$V4,47:$V5},{8:[1,18]},{6:[1,19],8:[2,3]},o($V6,[2,8],{13:[1,20]}),o($V6,[2,10]),o($V6,[2,11]),o($V6,[2,16],{22:21,24:24,25:25,13:[1,23],23:[1,22],26:$V7,27:$V8,28:$V9,29:$Va,30:$Vb,31:$Vc}),{10:32,11:14,45:$V3,46:$V4,47:$V5},o($V6,[2,18]),o($V6,[2,19]),o($Vd,[2,7],{11:14,10:33,45:$V3,46:$V4,47:$V5}),o($Ve,[2,47]),o($Ve,[2,48]),o($Ve,[2,49]),{1:[2,2]},{7:34,8:[2,4],9:6,10:10,11:14,12:7,14:8,15:9,16:$V0,20:$V1,21:$V2,45:$V3,46:$V4,47:$V5},o($V6,[2,9]),{10:35,11:14,23:[1,36],45:$V3,46:$V4,47:$V5},{22:37,24:24,25:25,26:$V7,27:$V8,28:$V9,29:$Va,30:$Vb,31:$Vc},o($V6,[2,17]),{25:38,30:$Vb,31:$Vc},o($Vf,[2,27],{24:39,26:$V7,27:$V8,28:$V9,29:$Va}),o($Vg,[2,28]),o($Vg,[2,29]),o($Vg,[2,30]),o($Vg,[2,31]),o($Vh,[2,32]),o($Vh,[2,33]),o($V6,[2,12],{17:[1,40]}),o($Vd,[2,6]),{8:[2,5]},o($Vi,[2,20]),{10:41,11:14,45:$V3,46:$V4,47:$V5},{10:42,11:14,23:[1,43],45:$V3,46:$V4,47:$V5},o($Vf,[2,26],{24:44,26:$V7,27:$V8,28:$V9,29:$Va}),o($Vf,[2,25]),{18:45,20:$Vj},o($Vi,[2,22]),o($Vi,[2,21]),{10:47,11:14,45:$V3,46:$V4,47:$V5},o($Vf,[2,24]),{19:[1,48]},{18:49,19:[2,14],20:$Vj},o($Vi,[2,23]),o($V6,[2,13]),{19:[2,15]}],\ndefaultActions: {2:[2,1],18:[2,2],34:[2,5],49:[2,15]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* do nothing */\nbreak;\ncase 1:return 6;\nbreak;\ncase 2:/* skip whitespace */\nbreak;\ncase 3:return 5;\nbreak;\ncase 4: this.begin(\"struct\"); /*console.log('Starting struct');*/return 17;\nbreak;\ncase 5: /*console.log('Ending struct');*/this.popState(); return 19;\nbreak;\ncase 6:/* nothing */\nbreak;\ncase 7: /*console.log('lex-member: ' + yy_.yytext);*/ return \"MEMBER\";\nbreak;\ncase 8:return 16;\nbreak;\ncase 9:this.begin(\"string\");\nbreak;\ncase 10:this.popState();\nbreak;\ncase 11:return \"STR\";\nbreak;\ncase 12:return 27;\nbreak;\ncase 13:return 27;\nbreak;\ncase 14:return 29;\nbreak;\ncase 15:return 29;\nbreak;\ncase 16:return 28;\nbreak;\ncase 17:return 26;\nbreak;\ncase 18:return 30;\nbreak;\ncase 19:return 31;\nbreak;\ncase 20:return 13;\nbreak;\ncase 21:return 43;\nbreak;\ncase 22:return 'DOT';\nbreak;\ncase 23:return 'PLUS';\nbreak;\ncase 24:return 40;\nbreak;\ncase 25:return 'EQUALS';\nbreak;\ncase 26:return 'EQUALS';\nbreak;\ncase 27:return 47;\nbreak;\ncase 28:return 'PUNCTUATION';\nbreak;\ncase 29:return 46;\nbreak;\ncase 30:return 45;\nbreak;\ncase 31:return 42;\nbreak;\ncase 32:return 8;\nbreak;\n}\n},\nrules: [/^(?:%%[^\\n]*)/,/^(?:\\n+)/,/^(?:\\s+)/,/^(?:classDiagram\\b)/,/^(?:[\\{])/,/^(?:\\})/,/^(?:[\\n])/,/^(?:[^\\{\\}\\n]*)/,/^(?:class\\b)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:\\s*<\\|)/,/^(?:\\s*\\|>)/,/^(?:\\s*>)/,/^(?:\\s*<)/,/^(?:\\s*\\*)/,/^(?:\\s*o\\b)/,/^(?:--)/,/^(?:\\.\\.)/,/^(?::[^#\\n;]+)/,/^(?:-)/,/^(?:\\.)/,/^(?:\\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!\"#$%&'*+,-.`?\\\\_\\/])/,/^(?:[0-9]+)/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"string\":{\"rules\":[10,11],\"inclusive\":false},\"struct\":{\"rules\":[5,6,7],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import * as d3 from 'd3'\n\nimport { logger } from '../../logger'\nimport utils from '../../utils'\n\nlet vertices = {}\nlet edges = []\nlet classes = []\nlet subGraphs = []\nlet subGraphLookup = {}\nlet tooltips = {}\nlet subCount = 0\nlet direction\n// Functions to be run after graph rendering\nlet funs = []\n/**\n * Function called by parser when a node definition has been found\n * @param id\n * @param text\n * @param type\n * @param style\n * @param classes\n */\nexport const addVertex = function (id, text, type, style, classes) {\n let txt\n\n if (typeof id === 'undefined') {\n return\n }\n if (id.trim().length === 0) {\n return\n }\n\n if (typeof vertices[id] === 'undefined') {\n vertices[id] = { id: id, styles: [], classes: [] }\n }\n if (typeof text !== 'undefined') {\n txt = text.trim()\n\n // strip quotes if string starts and exnds with a quote\n if (txt[0] === '\"' && txt[txt.length - 1] === '\"') {\n txt = txt.substring(1, txt.length - 1)\n }\n\n vertices[id].text = txt\n }\n if (typeof type !== 'undefined') {\n vertices[id].type = type\n }\n if (typeof style !== 'undefined') {\n if (style !== null) {\n style.forEach(function (s) {\n vertices[id].styles.push(s)\n })\n }\n }\n if (typeof classes !== 'undefined') {\n if (classes !== null) {\n classes.forEach(function (s) {\n vertices[id].classes.push(s)\n })\n }\n }\n}\n\n/**\n * Function called by parser when a link/edge definition has been found\n * @param start\n * @param end\n * @param type\n * @param linktext\n */\nexport const addLink = function (start, end, type, linktext) {\n logger.info('Got edge...', start, end)\n const edge = { start: start, end: end, type: undefined, text: '' }\n linktext = type.text\n\n if (typeof linktext !== 'undefined') {\n edge.text = linktext.trim()\n\n // strip quotes if string starts and exnds with a quote\n if (edge.text[0] === '\"' && edge.text[edge.text.length - 1] === '\"') {\n edge.text = edge.text.substring(1, edge.text.length - 1)\n }\n }\n\n if (typeof type !== 'undefined') {\n edge.type = type.type\n edge.stroke = type.stroke\n }\n edges.push(edge)\n}\n\n/**\n * Updates a link's line interpolation algorithm\n * @param pos\n * @param interpolate\n */\nexport const updateLinkInterpolate = function (positions, interp) {\n positions.forEach(function (pos) {\n if (pos === 'default') {\n edges.defaultInterpolate = interp\n } else {\n edges[pos].interpolate = interp\n }\n })\n}\n\n/**\n * Updates a link with a style\n * @param pos\n * @param style\n */\nexport const updateLink = function (positions, style) {\n positions.forEach(function (pos) {\n if (pos === 'default') {\n edges.defaultStyle = style\n } else {\n if (utils.isSubstringInArray('fill', style) === -1) {\n style.push('fill:none')\n }\n edges[pos].style = style\n }\n })\n}\n\nexport const addClass = function (id, style) {\n if (typeof classes[id] === 'undefined') {\n classes[id] = { id: id, styles: [] }\n }\n\n if (typeof style !== 'undefined') {\n if (style !== null) {\n style.forEach(function (s) {\n classes[id].styles.push(s)\n })\n }\n }\n}\n\n/**\n * Called by parser when a graph definition is found, stores the direction of the chart.\n * @param dir\n */\nexport const setDirection = function (dir) {\n direction = dir\n}\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n ids.split(',').forEach(function (id) {\n if (typeof vertices[id] !== 'undefined') {\n vertices[id].classes.push(className)\n }\n\n if (typeof subGraphLookup[id] !== 'undefined') {\n subGraphLookup[id].classes.push(className)\n }\n })\n}\n\nconst setTooltip = function (ids, tooltip) {\n ids.split(',').forEach(function (id) {\n if (typeof tooltip !== 'undefined') {\n tooltips[id] = tooltip\n }\n })\n}\n\nconst setClickFun = function (id, functionName) {\n if (typeof functionName === 'undefined') {\n return\n }\n if (typeof vertices[id] !== 'undefined') {\n funs.push(function (element) {\n const elem = d3.select(element).select(`[id=\"${id}\"]`)\n if (elem !== null) {\n elem.on('click', function () {\n window[functionName](id)\n })\n }\n })\n }\n}\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n * @param ids Comma separated list of ids\n * @param linkStr URL to create a link for\n * @param tooltip Tooltip for the clickable element\n */\nexport const setLink = function (ids, linkStr, tooltip) {\n ids.split(',').forEach(function (id) {\n if (typeof vertices[id] !== 'undefined') {\n vertices[id].link = linkStr\n }\n })\n setTooltip(ids, tooltip)\n setClass(ids, 'clickable')\n}\nexport const getTooltip = function (id) {\n return tooltips[id]\n}\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param tooltip Tooltip for the clickable element\n */\nexport const setClickEvent = function (ids, functionName, tooltip) {\n ids.split(',').forEach(function (id) { setClickFun(id, functionName) })\n setTooltip(ids, tooltip)\n setClass(ids, 'clickable')\n}\n\nexport const bindFunctions = function (element) {\n funs.forEach(function (fun) {\n fun(element)\n })\n}\nexport const getDirection = function () {\n return direction\n}\n/**\n * Retrieval function for fetching the found nodes after parsing has completed.\n * @returns {{}|*|vertices}\n */\nexport const getVertices = function () {\n return vertices\n}\n\n/**\n * Retrieval function for fetching the found links after parsing has completed.\n * @returns {{}|*|edges}\n */\nexport const getEdges = function () {\n return edges\n}\n\n/**\n * Retrieval function for fetching the found class definitions after parsing has completed.\n * @returns {{}|*|classes}\n */\nexport const getClasses = function () {\n return classes\n}\n\nconst setupToolTips = function (element) {\n let tooltipElem = d3.select('.mermaidTooltip')\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = d3.select('body')\n .append('div')\n .attr('class', 'mermaidTooltip')\n .style('opacity', 0)\n }\n\n const svg = d3.select(element).select('svg')\n\n const nodes = svg.selectAll('g.node')\n nodes\n .on('mouseover', function () {\n const el = d3.select(this)\n const title = el.attr('title')\n // Dont try to draw a tooltip if no data is provided\n if (title === null) {\n return\n }\n const rect = this.getBoundingClientRect()\n\n tooltipElem.transition()\n .duration(200)\n .style('opacity', '.9')\n tooltipElem.html(el.attr('title'))\n .style('left', (rect.left + (rect.right - rect.left) / 2) + 'px')\n .style('top', (rect.top - 14 + document.body.scrollTop) + 'px')\n el.classed('hover', true)\n })\n .on('mouseout', function () {\n tooltipElem.transition()\n .duration(500)\n .style('opacity', 0)\n const el = d3.select(this)\n el.classed('hover', false)\n })\n}\nfuns.push(setupToolTips)\n\n/**\n * Clears the internal graph db so that a new graph can be parsed.\n */\nexport const clear = function () {\n vertices = {}\n classes = {}\n edges = []\n funs = []\n funs.push(setupToolTips)\n subGraphs = []\n subGraphLookup = {}\n subCount = 0\n tooltips = []\n}\n/**\n *\n * @returns {string}\n */\nexport const defaultStyle = function () {\n return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'\n}\n\n/**\n * Clears the internal graph db so that a new graph can be parsed.\n */\nexport const addSubGraph = function (id, list, title) {\n function uniq (a) {\n const prims = { 'boolean': {}, 'number': {}, 'string': {} }\n const objs = []\n\n return a.filter(function (item) {\n const type = typeof item\n if (item.trim() === '') {\n return false\n }\n if (type in prims) { return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true) } else { return objs.indexOf(item) >= 0 ? false : objs.push(item) }\n })\n }\n\n let nodeList = []\n\n nodeList = uniq(nodeList.concat.apply(nodeList, list))\n\n id = id || ('subGraph' + subCount)\n title = title || ''\n subCount = subCount + 1\n const subGraph = { id: id, nodes: nodeList, title: title.trim(), classes: [] }\n subGraphs.push(subGraph)\n subGraphLookup[id] = subGraph\n return id\n}\n\nconst getPosForId = function (id) {\n for (let i = 0; i < subGraphs.length; i++) {\n if (subGraphs[i].id === id) {\n return i\n }\n }\n return -1\n}\nlet secCount = -1\nconst posCrossRef = []\nconst indexNodes2 = function (id, pos) {\n const nodes = subGraphs[pos].nodes\n secCount = secCount + 1\n if (secCount > 2000) {\n return\n }\n posCrossRef[secCount] = pos\n // Check if match\n if (subGraphs[pos].id === id) {\n return {\n result: true,\n count: 0\n }\n }\n\n let count = 0\n let posCount = 1\n while (count < nodes.length) {\n const childPos = getPosForId(nodes[count])\n // Ignore regular nodes (pos will be -1)\n if (childPos >= 0) {\n const res = indexNodes2(id, childPos)\n if (res.result) {\n return {\n result: true,\n count: posCount + res.count\n }\n } else {\n posCount = posCount + res.count\n }\n }\n count = count + 1\n }\n\n return {\n result: false,\n count: posCount\n }\n}\n\nexport const getDepthFirstPos = function (pos) {\n return posCrossRef[pos]\n}\nexport const indexNodes = function () {\n secCount = -1\n if (subGraphs.length > 0) {\n indexNodes2('none', subGraphs.length - 1, 0)\n }\n}\n\nexport const getSubGraphs = function () {\n return subGraphs\n}\n\nexport default {\n addVertex,\n addLink,\n updateLinkInterpolate,\n updateLink,\n addClass,\n setDirection,\n setClass,\n getTooltip,\n setClickEvent,\n setLink,\n bindFunctions,\n getDirection,\n getVertices,\n getEdges,\n getClasses,\n clear,\n defaultStyle,\n addSubGraph,\n getDepthFirstPos,\n indexNodes,\n getSubGraphs\n}\n","import graphlib from 'graphlibrary'\nimport * as d3 from 'd3'\n\nimport flowDb from './flowDb'\nimport flow from './parser/flow'\nimport dagreD3 from 'dagre-d3-renderer'\nimport addHtmlLabel from 'dagre-d3-renderer/lib/label/add-html-label.js'\nimport { logger } from '../../logger'\nimport { interpolateToCurve } from '../../utils'\n\nconst conf = {\n}\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n for (let i = 0; i < keys.length; i++) {\n conf[keys[i]] = cnf[keys[i]]\n }\n}\n\n/**\n * Function that adds the vertices found in the graph definition to the graph to be rendered.\n * @param vert Object containing the vertices.\n * @param g The graph that is to be drawn.\n */\nexport const addVertices = function (vert, g, svgId) {\n const svg = d3.select(`[id=\"${svgId}\"]`)\n const keys = Object.keys(vert)\n\n const styleFromStyleArr = function (styleStr, arr) {\n // Create a compound style definition from the style definitions found for the node in the graph definition\n for (let i = 0; i < arr.length; i++) {\n if (typeof arr[i] !== 'undefined') {\n styleStr = styleStr + arr[i] + ';'\n }\n }\n\n return styleStr\n }\n\n // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition\n keys.forEach(function (id) {\n const vertex = vert[id]\n\n /**\n * Variable for storing the classes for the vertex\n * @type {string}\n */\n let classStr = ''\n if (vertex.classes.length > 0) {\n classStr = vertex.classes.join(' ')\n }\n\n /**\n * Variable for storing the extracted style for the vertex\n * @type {string}\n */\n let style = ''\n // Create a compound style definition from the style definitions found for the node in the graph definition\n style = styleFromStyleArr(style, vertex.styles)\n\n // Use vertex id as text in the box if no text is provided by the graph definition\n let vertexText = vertex.text !== undefined ? vertex.text : vertex.id\n\n // We create a SVG label, either by delegating to addHtmlLabel or manually\n let vertexNode\n if (conf.htmlLabels) {\n // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n const node = { label: vertexText.replace(/fa[lrsb]?:fa-[\\w-]+/g, s => `<i class='${s.replace(':', ' ')}'></i>`) }\n vertexNode = addHtmlLabel(svg, node).node()\n vertexNode.parentNode.removeChild(vertexNode)\n } else {\n const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text')\n\n const rows = vertexText.split(/<br[/]{0,1}>/)\n\n for (let j = 0; j < rows.length; j++) {\n const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan')\n tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve')\n tspan.setAttribute('dy', '1em')\n tspan.setAttribute('x', '1')\n tspan.textContent = rows[j]\n svgLabel.appendChild(tspan)\n }\n vertexNode = svgLabel\n }\n\n // If the node has a link, we wrap it in a SVG link\n if (vertex.link) {\n const link = document.createElementNS('http://www.w3.org/2000/svg', 'a')\n link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link)\n link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener')\n link.appendChild(vertexNode)\n vertexNode = link\n }\n\n let radious = 0\n let _shape = ''\n // Set the shape based parameters\n switch (vertex.type) {\n case 'round':\n radious = 5\n _shape = 'rect'\n break\n case 'square':\n _shape = 'rect'\n break\n case 'diamond':\n _shape = 'question'\n break\n case 'odd':\n _shape = 'rect_left_inv_arrow'\n break\n case 'odd_right':\n _shape = 'rect_left_inv_arrow'\n break\n case 'circle':\n _shape = 'circle'\n break\n case 'ellipse':\n _shape = 'ellipse'\n break\n case 'group':\n _shape = 'rect'\n break\n default:\n _shape = 'rect'\n }\n // Add the node\n g.setNode(vertex.id, { labelType: 'svg', shape: _shape, label: vertexNode, rx: radious, ry: radious, 'class': classStr, style: style, id: vertex.id })\n })\n}\n\n/**\n * Add edges to graph based on parsed graph defninition\n * @param {Object} edges The edges to add to the graph\n * @param {Object} g The graph object\n */\nexport const addEdges = function (edges, g) {\n let cnt = 0\n\n let defaultStyle\n if (typeof edges.defaultStyle !== 'undefined') {\n defaultStyle = edges.defaultStyle.toString().replace(/,/g, ';')\n }\n\n edges.forEach(function (edge) {\n cnt++\n const edgeData = {}\n\n // Set link type for rendering\n if (edge.type === 'arrow_open') {\n edgeData.arrowhead = 'none'\n } else {\n edgeData.arrowhead = 'normal'\n }\n\n let style = ''\n if (typeof edge.style !== 'undefined') {\n edge.style.forEach(function (s) {\n style = style + s + ';'\n })\n } else {\n switch (edge.stroke) {\n case 'normal':\n style = 'fill:none'\n if (typeof defaultStyle !== 'undefined') {\n style = defaultStyle\n }\n break\n case 'dotted':\n style = 'stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;'\n break\n case 'thick':\n style = 'stroke: #333; stroke-width: 3.5px;fill:none'\n break\n }\n }\n edgeData.style = style\n\n if (typeof edge.interpolate !== 'undefined') {\n edgeData.curve = interpolateToCurve(edge.interpolate, d3.curveLinear)\n } else if (typeof edges.defaultInterpolate !== 'undefined') {\n edgeData.curve = interpolateToCurve(edges.defaultInterpolate, d3.curveLinear)\n } else {\n edgeData.curve = interpolateToCurve(conf.curve, d3.curveLinear)\n }\n\n if (typeof edge.text === 'undefined') {\n if (typeof edge.style !== 'undefined') {\n edgeData.arrowheadStyle = 'fill: #333'\n }\n } else {\n edgeData.arrowheadStyle = 'fill: #333'\n if (typeof edge.style === 'undefined') {\n edgeData.labelpos = 'c'\n if (conf.htmlLabels) {\n edgeData.labelType = 'html'\n edgeData.label = '<span class=\"edgeLabel\">' + edge.text + '</span>'\n } else {\n edgeData.labelType = 'text'\n edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none'\n edgeData.label = edge.text.replace(/<br>/g, '\\n')\n }\n } else {\n edgeData.label = edge.text.replace(/<br>/g, '\\n')\n }\n }\n // Add the edge to the graph\n g.setEdge(edge.start, edge.end, edgeData, cnt)\n })\n}\n\n/**\n * Returns the all the styles from classDef statements in the graph definition.\n * @returns {object} classDef styles\n */\nexport const getClasses = function (text) {\n flowDb.clear()\n const parser = flow.parser\n parser.yy = flowDb\n\n // Parse the graph definition\n parser.parse(text)\n return flowDb.getClasses()\n}\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n logger.debug('Drawing flowchart')\n flowDb.clear()\n const parser = flow.parser\n parser.yy = flowDb\n\n // Parse the graph definition\n try {\n parser.parse(text)\n } catch (err) {\n logger.debug('Parsing failed')\n }\n\n // Fetch the default direction, use TD if none was found\n let dir = flowDb.getDirection()\n if (typeof dir === 'undefined') {\n dir = 'TD'\n }\n\n // Create the input mermaid.graph\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true\n })\n .setGraph({\n rankdir: dir,\n marginx: 20,\n marginy: 20\n\n })\n .setDefaultEdgeLabel(function () {\n return {}\n })\n\n let subG\n const subGraphs = flowDb.getSubGraphs()\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i]\n flowDb.addVertex(subG.id, subG.title, 'group', undefined, subG.classes)\n }\n\n // Fetch the verices/nodes and edges/links from the parsed graph definition\n const vert = flowDb.getVertices()\n\n const edges = flowDb.getEdges()\n\n let i = 0\n for (i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i]\n\n d3.selectAll('cluster').append('text')\n\n for (let j = 0; j < subG.nodes.length; j++) {\n g.setParent(subG.nodes[j], subG.id)\n }\n }\n addVertices(vert, g, id)\n addEdges(edges, g)\n\n // Create the renderer\n const Render = dagreD3.render\n const render = new Render()\n\n // Add custom shape for rhombus type of boc (decision)\n render.shapes().question = function (parent, bbox, node) {\n const w = bbox.width\n const h = bbox.height\n const s = (w + h) * 0.9\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ]\n const shapeSvg = parent.insert('polygon', ':first-child')\n .attr('points', points.map(function (d) {\n return d.x + ',' + d.y\n }).join(' '))\n .attr('rx', 5)\n .attr('ry', 5)\n .attr('transform', 'translate(' + (-s / 2) + ',' + (s * 2 / 4) + ')')\n node.intersect = function (point) {\n return dagreD3.intersect.polygon(node, points, point)\n }\n return shapeSvg\n }\n\n // Add custom shape for box with inverted arrow on left side\n render.shapes().rect_left_inv_arrow = function (parent, bbox, node) {\n const w = bbox.width\n const h = bbox.height\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ]\n const shapeSvg = parent.insert('polygon', ':first-child')\n .attr('points', points.map(function (d) {\n return d.x + ',' + d.y\n }).join(' '))\n .attr('transform', 'translate(' + (-w / 2) + ',' + (h * 2 / 4) + ')')\n node.intersect = function (point) {\n return dagreD3.intersect.polygon(node, points, point)\n }\n return shapeSvg\n }\n\n // Add custom shape for box with inverted arrow on right side\n render.shapes().rect_right_inv_arrow = function (parent, bbox, node) {\n const w = bbox.width\n const h = bbox.height\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ]\n const shapeSvg = parent.insert('polygon', ':first-child')\n .attr('points', points.map(function (d) {\n return d.x + ',' + d.y\n }).join(' '))\n .attr('transform', 'translate(' + (-w / 2) + ',' + (h * 2 / 4) + ')')\n node.intersect = function (point) {\n return dagreD3.intersect.polygon(node, points, point)\n }\n return shapeSvg\n }\n\n // Add our custom arrow - an empty arrowhead\n render.arrows().none = function normal (parent, id, edge, type) {\n const marker = parent.append('marker')\n .attr('id', id)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'strokeWidth')\n .attr('markerWidth', 8)\n .attr('markerHeight', 6)\n .attr('orient', 'auto')\n\n const path = marker.append('path')\n .attr('d', 'M 0 0 L 0 0 L 0 0 z')\n dagreD3.util.applyStyle(path, edge[type + 'Style'])\n }\n\n // Override normal arrowhead defined in d3. Remove style & add class to allow css styling.\n render.arrows().normal = function normal (parent, id, edge, type) {\n const marker = parent.append('marker')\n .attr('id', id)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'strokeWidth')\n .attr('markerWidth', 8)\n .attr('markerHeight', 6)\n .attr('orient', 'auto')\n\n marker.append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n .attr('class', 'arrowheadPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0')\n }\n\n // Set up an SVG group so that we can translate the final graph.\n const svg = d3.select(`[id=\"${id}\"]`)\n\n // Run the renderer. This is what draws the final graph.\n const element = d3.select('#' + id + ' g')\n render(element, g)\n\n element.selectAll('g.node')\n .attr('title', function () {\n return flowDb.getTooltip(this.id)\n })\n\n const padding = 8\n const width = g.maxX - g.minX + padding * 2\n const height = g.maxY - g.minY + padding * 2\n svg.attr('width', '100%')\n svg.attr('style', `max-width: ${width}px;`)\n svg.attr('viewBox', `0 0 ${width} ${height}`)\n svg.select('g').attr('transform', `translate(${padding - g.minX}, ${padding - g.minY})`)\n\n // Index nodes\n flowDb.indexNodes('subGraph' + i)\n\n // reposition labels\n for (i = 0; i < subGraphs.length; i++) {\n subG = subGraphs[i]\n\n if (subG.title !== 'undefined') {\n const clusterRects = document.querySelectorAll('#' + id + ' #' + subG.id + ' rect')\n const clusterEl = document.querySelectorAll('#' + id + ' #' + subG.id)\n\n const xPos = clusterRects[0].x.baseVal.value\n const yPos = clusterRects[0].y.baseVal.value\n const width = clusterRects[0].width.baseVal.value\n const cluster = d3.select(clusterEl[0])\n const te = cluster.select('.label')\n te.attr('transform', `translate(${xPos + width / 2}, ${yPos + 14})`)\n te.attr('id', id + 'Text')\n }\n }\n\n // Add label rects for non html labels\n if (!conf.htmlLabels) {\n const labels = document.querySelectorAll('#' + id + ' .edgeLabel .label')\n for (let k = 0; k < labels.length; k++) {\n const label = labels[k]\n\n // Get dimensions of label\n const dim = label.getBBox()\n\n const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\n rect.setAttribute('rx', 0)\n rect.setAttribute('ry', 0)\n rect.setAttribute('width', dim.width)\n rect.setAttribute('height', dim.height)\n rect.setAttribute('style', 'fill:#e8e8e8;')\n\n label.insertBefore(rect, label.firstChild)\n }\n }\n}\n\nexport default {\n setConf,\n addVertices,\n addEdges,\n getClasses,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,3],$V2=[1,5],$V3=[1,8,9,10,11,13,18,30,47,71,72,73,74,75,85,86,89,90,92,93,95,96,97,98,99],$V4=[2,2],$V5=[1,12],$V6=[1,13],$V7=[1,14],$V8=[1,15],$V9=[1,31],$Va=[1,33],$Vb=[1,22],$Vc=[1,34],$Vd=[1,24],$Ve=[1,25],$Vf=[1,26],$Vg=[1,27],$Vh=[1,28],$Vi=[1,38],$Vj=[1,40],$Vk=[1,35],$Vl=[1,39],$Vm=[1,45],$Vn=[1,44],$Vo=[1,36],$Vp=[1,37],$Vq=[1,41],$Vr=[1,42],$Vs=[1,43],$Vt=[1,8,9,10,11,13,18,30,35,47,71,72,73,74,75,85,86,89,90,92,93,95,96,97,98,99],$Vu=[1,53],$Vv=[1,52],$Vw=[1,54],$Vx=[8,9,11],$Vy=[8,9,11,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],$Vz=[1,91],$VA=[8,9,10,11,13,15,18,32,39,41,43,47,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,85,86,89,90,92,93,95,96,97,98,99],$VB=[8,9,10,11,12,13,15,16,17,18,30,32,34,35,39,40,41,42,43,44,47,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,71,72,73,74,75,78,84,85,86,89,90,92,93,95,96,97,98,99],$VC=[1,93],$VD=[1,94],$VE=[8,9,10,11,13,18,30,35,47,71,72,73,74,75,85,86,89,90,92,93,95,96,97,98,99],$VF=[13,18,47,85,86,89,90,92,93,95,96,97,98,99],$VG=[1,118],$VH=[1,126],$VI=[1,127],$VJ=[1,112],$VK=[1,111],$VL=[1,131],$VM=[1,130],$VN=[1,128],$VO=[1,129],$VP=[1,109],$VQ=[1,119],$VR=[1,114],$VS=[1,113],$VT=[1,121],$VU=[1,122],$VV=[1,123],$VW=[1,124],$VX=[1,125],$VY=[1,116],$VZ=[1,115],$V_=[13,18,47,50,66,85,86,89,90,92,93,95,96,97,98,99],$V$=[10,12,13,15,16,17,18,30,34,35,40,42,44,47,51,52,53,54,55,57,58,59,60,61,62,63,64,65,66,71,72,73,74,75,78,84,85,86,89,90,92,93,95,96,97,98,99],$V01=[10,86],$V11=[1,198],$V21=[1,195],$V31=[1,202],$V41=[1,199],$V51=[1,203],$V61=[1,196],$V71=[1,193],$V81=[1,194],$V91=[1,197],$Va1=[1,200],$Vb1=[1,201],$Vc1=[1,224],$Vd1=[8,9,11,86],$Ve1=[8,9,10,11,47,71,80,84,85,86,89,90,91,92,93];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"mermaidDoc\":3,\"graphConfig\":4,\"document\":5,\"line\":6,\"statement\":7,\"SEMI\":8,\"NEWLINE\":9,\"SPACE\":10,\"EOF\":11,\"GRAPH\":12,\"DIR\":13,\"FirstStmtSeperator\":14,\"TAGEND\":15,\"TAGSTART\":16,\"UP\":17,\"DOWN\":18,\"ending\":19,\"endToken\":20,\"spaceList\":21,\"spaceListNewline\":22,\"verticeStatement\":23,\"separator\":24,\"styleStatement\":25,\"linkStyleStatement\":26,\"classDefStatement\":27,\"classStatement\":28,\"clickStatement\":29,\"subgraph\":30,\"alphaNum\":31,\"SQS\":32,\"text\":33,\"SQE\":34,\"end\":35,\"STR\":36,\"vertex\":37,\"link\":38,\"PS\":39,\"PE\":40,\"(-\":41,\"-)\":42,\"DIAMOND_START\":43,\"DIAMOND_STOP\":44,\"alphaNumStatement\":45,\"alphaNumToken\":46,\"MINUS\":47,\"linkStatement\":48,\"arrowText\":49,\"TESTSTR\":50,\"--\":51,\"ARROW_POINT\":52,\"ARROW_CIRCLE\":53,\"ARROW_CROSS\":54,\"ARROW_OPEN\":55,\"-.\":56,\"DOTTED_ARROW_POINT\":57,\"DOTTED_ARROW_CIRCLE\":58,\"DOTTED_ARROW_CROSS\":59,\"DOTTED_ARROW_OPEN\":60,\"==\":61,\"THICK_ARROW_POINT\":62,\"THICK_ARROW_CIRCLE\":63,\"THICK_ARROW_CROSS\":64,\"THICK_ARROW_OPEN\":65,\"PIPE\":66,\"textToken\":67,\"commentText\":68,\"commentToken\":69,\"keywords\":70,\"STYLE\":71,\"LINKSTYLE\":72,\"CLASSDEF\":73,\"CLASS\":74,\"CLICK\":75,\"textNoTags\":76,\"textNoTagsToken\":77,\"DEFAULT\":78,\"stylesOpt\":79,\"HEX\":80,\"numList\":81,\"INTERPOLATE\":82,\"commentStatement\":83,\"PCT\":84,\"NUM\":85,\"COMMA\":86,\"style\":87,\"styleComponent\":88,\"ALPHA\":89,\"COLON\":90,\"UNIT\":91,\"BRKT\":92,\"DOT\":93,\"graphCodeTokens\":94,\"PUNCTUATION\":95,\"UNICODE_TEXT\":96,\"PLUS\":97,\"EQUALS\":98,\"MULT\":99,\"TAG_START\":100,\"TAG_END\":101,\"QUOTE\":102,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",8:\"SEMI\",9:\"NEWLINE\",10:\"SPACE\",11:\"EOF\",12:\"GRAPH\",13:\"DIR\",15:\"TAGEND\",16:\"TAGSTART\",17:\"UP\",18:\"DOWN\",30:\"subgraph\",32:\"SQS\",34:\"SQE\",35:\"end\",36:\"STR\",39:\"PS\",40:\"PE\",41:\"(-\",42:\"-)\",43:\"DIAMOND_START\",44:\"DIAMOND_STOP\",47:\"MINUS\",50:\"TESTSTR\",51:\"--\",52:\"ARROW_POINT\",53:\"ARROW_CIRCLE\",54:\"ARROW_CROSS\",55:\"ARROW_OPEN\",56:\"-.\",57:\"DOTTED_ARROW_POINT\",58:\"DOTTED_ARROW_CIRCLE\",59:\"DOTTED_ARROW_CROSS\",60:\"DOTTED_ARROW_OPEN\",61:\"==\",62:\"THICK_ARROW_POINT\",63:\"THICK_ARROW_CIRCLE\",64:\"THICK_ARROW_CROSS\",65:\"THICK_ARROW_OPEN\",66:\"PIPE\",71:\"STYLE\",72:\"LINKSTYLE\",73:\"CLASSDEF\",74:\"CLASS\",75:\"CLICK\",78:\"DEFAULT\",80:\"HEX\",82:\"INTERPOLATE\",84:\"PCT\",85:\"NUM\",86:\"COMMA\",89:\"ALPHA\",90:\"COLON\",91:\"UNIT\",92:\"BRKT\",93:\"DOT\",95:\"PUNCTUATION\",96:\"UNICODE_TEXT\",97:\"PLUS\",98:\"EQUALS\",99:\"MULT\",100:\"TAG_START\",101:\"TAG_END\",102:\"QUOTE\"},\nproductions_: [0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,4],[4,4],[4,4],[4,4],[4,4],[19,2],[19,1],[20,1],[20,1],[20,1],[14,1],[14,1],[14,2],[22,2],[22,2],[22,1],[22,1],[21,2],[21,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,6],[7,4],[24,1],[24,1],[24,1],[23,3],[23,1],[37,4],[37,5],[37,6],[37,7],[37,4],[37,5],[37,4],[37,5],[37,4],[37,5],[37,4],[37,5],[37,1],[37,2],[31,1],[31,2],[45,1],[45,1],[45,1],[45,1],[38,2],[38,3],[38,3],[38,1],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[49,3],[33,1],[33,2],[33,1],[68,1],[68,2],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[76,1],[76,2],[27,5],[27,5],[28,5],[29,5],[29,7],[29,5],[29,7],[25,5],[25,5],[26,5],[26,5],[26,9],[26,9],[26,7],[26,7],[83,3],[81,1],[81,3],[79,1],[79,3],[87,1],[87,2],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[69,1],[69,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[77,1],[77,1],[77,1],[77,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 2:\n this.$ = [];\nbreak;\ncase 3:\n\n\t if($$[$0] !== []){\n\t $$[$0-1].push($$[$0]);\n\t }\n\t this.$=$$[$0-1];\nbreak;\ncase 4: case 59: case 61: case 62: case 94: case 96: case 97: case 110:\nthis.$=$$[$0];\nbreak;\ncase 11:\n yy.setDirection($$[$0-1]);this.$ = $$[$0-1];\nbreak;\ncase 12:\n yy.setDirection(\"LR\");this.$ = $$[$0-1];\nbreak;\ncase 13:\n yy.setDirection(\"RL\");this.$ = $$[$0-1];\nbreak;\ncase 14:\n yy.setDirection(\"BT\");this.$ = $$[$0-1];\nbreak;\ncase 15:\n yy.setDirection(\"TB\");this.$ = $$[$0-1];\nbreak;\ncase 30:\nthis.$=$$[$0-1]\nbreak;\ncase 31: case 32: case 33: case 34: case 35:\nthis.$=[];\nbreak;\ncase 36:\nthis.$=yy.addSubGraph($$[$0-6],$$[$0-1],$$[$0-4]);\nbreak;\ncase 37:\nthis.$=yy.addSubGraph(undefined,$$[$0-1],$$[$0-3]);\nbreak;\ncase 38:\nthis.$=yy.addSubGraph($$[$0-3],$$[$0-1],$$[$0-3]);\nbreak;\ncase 39:\nthis.$=yy.addSubGraph(undefined,$$[$0-1],undefined);\nbreak;\ncase 43:\n yy.addLink($$[$0-2],$$[$0],$$[$0-1]);this.$ = [$$[$0-2],$$[$0]];\nbreak;\ncase 44:\nthis.$ = [$$[$0]];\nbreak;\ncase 45:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square');\nbreak;\ncase 46:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'square');\nbreak;\ncase 47:\nthis.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'circle');\nbreak;\ncase 48:\nthis.$ = $$[$0-6];yy.addVertex($$[$0-6],$$[$0-3],'circle');\nbreak;\ncase 49:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'ellipse');\nbreak;\ncase 50:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'ellipse');\nbreak;\ncase 51:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round');\nbreak;\ncase 52:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'round');\nbreak;\ncase 53:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond');\nbreak;\ncase 54:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'diamond');\nbreak;\ncase 55:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'odd');\nbreak;\ncase 56:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'odd');\nbreak;\ncase 57:\nthis.$ = $$[$0];yy.addVertex($$[$0]);\nbreak;\ncase 58:\nthis.$ = $$[$0-1];yy.addVertex($$[$0-1]);\nbreak;\ncase 60: case 95: case 98: case 111:\nthis.$=$$[$0-1]+''+$$[$0];\nbreak;\ncase 63:\nthis.$='v';\nbreak;\ncase 64:\nthis.$='-';\nbreak;\ncase 65:\n$$[$0-1].text = $$[$0];this.$ = $$[$0-1];\nbreak;\ncase 66: case 67:\n$$[$0-2].text = $$[$0-1];this.$ = $$[$0-2];\nbreak;\ncase 68:\nthis.$ = $$[$0];\nbreak;\ncase 69:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 70:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 71:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 72:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 73:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 74:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 75:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 76:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 77:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 78:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 79:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 80:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 81:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"normal\"};\nbreak;\ncase 82:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"normal\"};\nbreak;\ncase 83:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"normal\"};\nbreak;\ncase 84:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"normal\"};\nbreak;\ncase 85:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"dotted\"};\nbreak;\ncase 86:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"dotted\"};\nbreak;\ncase 87:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"dotted\"};\nbreak;\ncase 88:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"dotted\"};\nbreak;\ncase 89:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"thick\"};\nbreak;\ncase 90:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"thick\"};\nbreak;\ncase 91:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"thick\"};\nbreak;\ncase 92:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"thick\"};\nbreak;\ncase 93:\nthis.$ = $$[$0-1];\nbreak;\ncase 112: case 113:\nthis.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);\nbreak;\ncase 114:\nthis.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]);\nbreak;\ncase 115:\nthis.$ = $$[$0-4];yy.setClickEvent($$[$0-2], $$[$0], undefined);\nbreak;\ncase 116:\nthis.$ = $$[$0-6];yy.setClickEvent($$[$0-4], $$[$0-2], $$[$0]) ;\nbreak;\ncase 117:\nthis.$ = $$[$0-4];yy.setLink($$[$0-2], $$[$0], undefined);\nbreak;\ncase 118:\nthis.$ = $$[$0-6];yy.setLink($$[$0-4], $$[$0-2], $$[$0] );\nbreak;\ncase 119:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]);\nbreak;\ncase 120: case 122:\nthis.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]);\nbreak;\ncase 121:\nthis.$ = $$[$0-4];yy.updateLink([$$[$0-2]],$$[$0]);\nbreak;\ncase 123:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate([$$[$0-6]],$$[$0-2]);yy.updateLink([$$[$0-6]],$$[$0]);\nbreak;\ncase 124:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate($$[$0-6],$$[$0-2]);yy.updateLink($$[$0-6],$$[$0]);\nbreak;\ncase 125:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate([$$[$0-4]],$$[$0]);\nbreak;\ncase 126:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate($$[$0-4],$$[$0]);\nbreak;\ncase 128: case 130:\nthis.$ = [$$[$0]]\nbreak;\ncase 129: case 131:\n$$[$0-2].push($$[$0]);this.$ = $$[$0-2];\nbreak;\ncase 133:\nthis.$ = $$[$0-1] + $$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:2,9:$V0,10:$V1,12:$V2},{1:[3]},o($V3,$V4,{5:6}),{4:7,9:$V0,10:$V1,12:$V2},{4:8,9:$V0,10:$V1,12:$V2},{10:[1,9]},{1:[2,1],6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($V3,[2,9]),o($V3,[2,10]),{13:[1,46],15:[1,47],16:[1,48],17:[1,49],18:[1,50]},o($Vt,[2,3]),o($Vt,[2,4]),o($Vt,[2,5]),o($Vt,[2,6]),o($Vt,[2,7]),o($Vt,[2,8]),{8:$Vu,9:$Vv,11:$Vw,24:51},{8:$Vu,9:$Vv,11:$Vw,24:55},{8:$Vu,9:$Vv,11:$Vw,24:56},{8:$Vu,9:$Vv,11:$Vw,24:57},{8:$Vu,9:$Vv,11:$Vw,24:58},{8:$Vu,9:$Vv,11:$Vw,24:59},{8:$Vu,9:$Vv,10:[1,60],11:$Vw,24:61},o($Vx,[2,44],{38:62,48:63,51:[1,64],52:[1,67],53:[1,68],54:[1,69],55:[1,70],56:[1,65],57:[1,71],58:[1,72],59:[1,73],60:[1,74],61:[1,66],62:[1,75],63:[1,76],64:[1,77],65:[1,78]}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{10:[1,83]},o($Vy,[2,57],{46:32,21:89,45:90,10:$Vz,13:$V9,15:[1,88],18:$Va,32:[1,84],39:[1,85],41:[1,86],43:[1,87],47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($VA,[2,59]),o($VA,[2,61]),o($VA,[2,62]),o($VA,[2,63]),o($VA,[2,64]),o($VB,[2,158]),o($VB,[2,159]),o($VB,[2,160]),o($VB,[2,161]),o($VB,[2,162]),o($VB,[2,163]),o($VB,[2,164]),o($VB,[2,165]),o($VB,[2,166]),o($VB,[2,167]),o($VB,[2,168]),{8:$VC,9:$VD,10:$Vz,14:92,21:95},{8:$VC,9:$VD,10:$Vz,14:96,21:95},{8:$VC,9:$VD,10:$Vz,14:97,21:95},{8:$VC,9:$VD,10:$Vz,14:98,21:95},{8:$VC,9:$VD,10:$Vz,14:99,21:95},o($Vt,[2,30]),o($Vt,[2,40]),o($Vt,[2,41]),o($Vt,[2,42]),o($Vt,[2,31]),o($Vt,[2,32]),o($Vt,[2,33]),o($Vt,[2,34]),o($Vt,[2,35]),{13:$V9,18:$Va,31:100,36:[1,101],45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VE,$V4,{5:102}),{13:$V9,18:$Va,31:29,37:103,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VF,[2,68],{49:104,50:[1,105],66:[1,106]}),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:107,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:132,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:133,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($V_,[2,81]),o($V_,[2,82]),o($V_,[2,83]),o($V_,[2,84]),o($V_,[2,85]),o($V_,[2,86]),o($V_,[2,87]),o($V_,[2,88]),o($V_,[2,89]),o($V_,[2,90]),o($V_,[2,91]),o($V_,[2,92]),{13:$V9,18:$Va,31:134,45:30,46:32,47:$Vc,80:[1,135],85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{78:[1,136],81:137,85:[1,138]},{13:$V9,18:$Va,31:140,45:30,46:32,47:$Vc,78:[1,139],85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:141,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:142,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:143,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:145,35:$VO,36:$VP,39:[1,144],46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:146,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:147,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:148,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,58]),o($VA,[2,60]),o($Vy,[2,29],{21:149,10:$Vz}),o($V3,[2,11]),o($V3,[2,21]),o($V3,[2,22]),{9:[1,150]},o($V3,[2,12]),o($V3,[2,13]),o($V3,[2,14]),o($V3,[2,15]),{8:$Vu,9:$Vv,11:$Vw,13:$V9,18:$Va,24:152,32:[1,151],45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{8:$Vu,9:$Vv,11:$Vw,24:153},{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,154],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vx,[2,43]),o($VF,[2,65],{10:[1,155]}),{10:[1,156]},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:157,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,52:[1,158],53:[1,159],54:[1,160],55:[1,161],61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($V$,[2,94]),o($V$,[2,96]),o($V$,[2,147]),o($V$,[2,148]),o($V$,[2,149]),o($V$,[2,150]),o($V$,[2,151]),o($V$,[2,152]),o($V$,[2,153]),o($V$,[2,154]),o($V$,[2,155]),o($V$,[2,156]),o($V$,[2,157]),o($V$,[2,99]),o($V$,[2,100]),o($V$,[2,101]),o($V$,[2,102]),o($V$,[2,103]),o($V$,[2,104]),o($V$,[2,105]),o($V$,[2,106]),o($V$,[2,107]),o($V$,[2,108]),o($V$,[2,109]),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,57:[1,163],58:[1,164],59:[1,165],60:[1,166],61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,61:$VS,62:[1,167],63:[1,168],64:[1,169],65:[1,170],67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,171],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,172]},{10:[1,173]},{10:[1,174],86:[1,175]},o($V01,[2,128]),{10:[1,176]},{10:[1,177],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,178],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,179],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,34:[1,180],35:$VO,46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:181,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,40:[1,182],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,42:[1,183],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,44:[1,184],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,34:[1,185],35:$VO,46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,28]),o($V3,[2,23]),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:186,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VE,$V4,{5:187}),o($VE,$V4,{5:188}),o($Vt,[2,39]),o($VF,[2,67]),o($VF,[2,66]),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,61:$VS,66:[1,189],67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VF,[2,69]),o($VF,[2,70]),o($VF,[2,71]),o($VF,[2,72]),o($V$,[2,95]),o($VF,[2,73]),o($VF,[2,74]),o($VF,[2,75]),o($VF,[2,76]),o($VF,[2,77]),o($VF,[2,78]),o($VF,[2,79]),o($VF,[2,80]),{10:$V11,47:$V21,71:$V31,79:190,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:204,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:205,80:$V41,82:[1,206],84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:207,80:$V41,82:[1,208],84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{85:[1,209]},{10:$V11,47:$V21,71:$V31,79:210,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:211,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{13:$V9,18:$Va,31:212,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:213,36:[1,214],45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,45],{21:215,10:$Vz}),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,40:[1,216],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,51],{21:217,10:$Vz}),o($Vy,[2,49],{21:218,10:$Vz}),o($Vy,[2,53],{21:219,10:$Vz}),o($Vy,[2,55],{21:220,10:$Vz}),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,34:[1,221],35:$VO,46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,222],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,223],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o([10,13,18,47,85,86,89,90,92,93,95,96,97,98,99],[2,93]),o($Vx,[2,119],{86:$Vc1}),o($Vd1,[2,130],{88:225,10:$V11,47:$V21,71:$V31,80:$V41,84:$V51,85:$V61,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1}),o($Ve1,[2,132]),o($Ve1,[2,134]),o($Ve1,[2,135]),o($Ve1,[2,136]),o($Ve1,[2,137]),o($Ve1,[2,138]),o($Ve1,[2,139]),o($Ve1,[2,140]),o($Ve1,[2,141]),o($Ve1,[2,142]),o($Ve1,[2,143]),o($Ve1,[2,144]),o($Vx,[2,120],{86:$Vc1}),o($Vx,[2,121],{86:$Vc1}),{10:[1,226]},o($Vx,[2,122],{86:$Vc1}),{10:[1,227]},o($V01,[2,129]),o($Vx,[2,112],{86:$Vc1}),o($Vx,[2,113],{86:$Vc1}),o($Vx,[2,114],{46:32,45:90,13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,115],{46:32,45:90,10:[1,228],13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,117],{10:[1,229]}),o($Vy,[2,46]),{40:[1,230]},o($Vy,[2,52]),o($Vy,[2,50]),o($Vy,[2,54]),o($Vy,[2,56]),{8:$Vu,9:$Vv,11:$Vw,24:231},o($Vt,[2,38]),o($Vt,[2,37]),{10:$V11,47:$V21,71:$V31,80:$V41,84:$V51,85:$V61,87:232,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},o($Ve1,[2,133]),{13:$V9,18:$Va,31:233,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:234,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{36:[1,235]},{36:[1,236]},o($Vy,[2,47],{21:237,10:$Vz}),o($VE,$V4,{5:238}),o($Vd1,[2,131],{88:225,10:$V11,47:$V21,71:$V31,80:$V41,84:$V51,85:$V61,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1}),o($Vx,[2,125],{46:32,45:90,10:[1,239],13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,126],{46:32,45:90,10:[1,240],13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,116]),o($Vx,[2,118]),o($Vy,[2,48]),{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,241],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$V11,47:$V21,71:$V31,79:242,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:243,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},o($Vt,[2,36]),o($Vx,[2,123],{86:$Vc1}),o($Vx,[2,124],{86:$Vc1})],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* do nothing */\nbreak;\ncase 1:this.begin(\"string\");\nbreak;\ncase 2:this.popState();\nbreak;\ncase 3:return \"STR\";\nbreak;\ncase 4:return 71;\nbreak;\ncase 5:return 78;\nbreak;\ncase 6:return 72;\nbreak;\ncase 7:return 82;\nbreak;\ncase 8:return 73;\nbreak;\ncase 9:return 74;\nbreak;\ncase 10:return 75;\nbreak;\ncase 11:return 12;\nbreak;\ncase 12:return 30;\nbreak;\ncase 13:return 35;\nbreak;\ncase 14:return 13;\nbreak;\ncase 15:return 13;\nbreak;\ncase 16:return 13;\nbreak;\ncase 17:return 13;\nbreak;\ncase 18:return 13;\nbreak;\ncase 19:return 13;\nbreak;\ncase 20:return 85;\nbreak;\ncase 21:return 92;\nbreak;\ncase 22:return 90;\nbreak;\ncase 23:return 8;\nbreak;\ncase 24:return 86;\nbreak;\ncase 25:return 99;\nbreak;\ncase 26:return 16;\nbreak;\ncase 27:return 15;\nbreak;\ncase 28:return 17;\nbreak;\ncase 29:return 18;\nbreak;\ncase 30:return 54;\nbreak;\ncase 31:return 52;\nbreak;\ncase 32:return 53;\nbreak;\ncase 33:return 55;\nbreak;\ncase 34:return 59;\nbreak;\ncase 35:return 57;\nbreak;\ncase 36:return 58;\nbreak;\ncase 37:return 60;\nbreak;\ncase 38:return 59;\nbreak;\ncase 39:return 57;\nbreak;\ncase 40:return 58;\nbreak;\ncase 41:return 60;\nbreak;\ncase 42:return 64;\nbreak;\ncase 43:return 62;\nbreak;\ncase 44:return 63;\nbreak;\ncase 45:return 65;\nbreak;\ncase 46:return 51;\nbreak;\ncase 47:return 56;\nbreak;\ncase 48:return 61;\nbreak;\ncase 49:return 41;\nbreak;\ncase 50:return 42;\nbreak;\ncase 51:return 47;\nbreak;\ncase 52:return 93;\nbreak;\ncase 53:return 97;\nbreak;\ncase 54:return 84;\nbreak;\ncase 55:return 98;\nbreak;\ncase 56:return 98;\nbreak;\ncase 57:return 89;\nbreak;\ncase 58:return 95;\nbreak;\ncase 59:return 96;\nbreak;\ncase 60:return 66;\nbreak;\ncase 61:return 39;\nbreak;\ncase 62:return 40;\nbreak;\ncase 63:return 32;\nbreak;\ncase 64:return 34;\nbreak;\ncase 65:return 43\nbreak;\ncase 66:return 44\nbreak;\ncase 67:return 102;\nbreak;\ncase 68:return 9;\nbreak;\ncase 69:return 10;\nbreak;\ncase 70:return 11;\nbreak;\n}\n},\nrules: [/^(?:%%[^\\n]*)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:style\\b)/,/^(?:default\\b)/,/^(?:linkStyle\\b)/,/^(?:interpolate\\b)/,/^(?:classDef\\b)/,/^(?:class\\b)/,/^(?:click\\b)/,/^(?:graph\\b)/,/^(?:subgraph\\b)/,/^(?:end\\b\\s*)/,/^(?:LR\\b)/,/^(?:RL\\b)/,/^(?:TB\\b)/,/^(?:BT\\b)/,/^(?:TD\\b)/,/^(?:BR\\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\\*)/,/^(?:<)/,/^(?:>)/,/^(?:\\^)/,/^(?:v\\b)/,/^(?:\\s*--[x]\\s*)/,/^(?:\\s*-->\\s*)/,/^(?:\\s*--[o]\\s*)/,/^(?:\\s*---\\s*)/,/^(?:\\s*-\\.-[x]\\s*)/,/^(?:\\s*-\\.->\\s*)/,/^(?:\\s*-\\.-[o]\\s*)/,/^(?:\\s*-\\.-\\s*)/,/^(?:\\s*.-[x]\\s*)/,/^(?:\\s*\\.->\\s*)/,/^(?:\\s*\\.-[o]\\s*)/,/^(?:\\s*\\.-\\s*)/,/^(?:\\s*==[x]\\s*)/,/^(?:\\s*==>\\s*)/,/^(?:\\s*==[o]\\s*)/,/^(?:\\s*==[\\=]\\s*)/,/^(?:\\s*--\\s*)/,/^(?:\\s*-\\.\\s*)/,/^(?:\\s*==\\s*)/,/^(?:\\(-)/,/^(?:-\\))/,/^(?:-)/,/^(?:\\.)/,/^(?:\\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!\"#$%&'*+,-.`?\\\\_\\/])/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\|)/,/^(?:\\()/,/^(?:\\))/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\{)/,/^(?:\\})/,/^(?:\")/,/^(?:\\n+)/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"string\":{\"rules\":[2,3],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import moment from 'moment-mini'\nimport { logger } from '../../logger'\nimport * as d3 from 'd3'\n\nlet dateFormat = ''\nlet axisFormat = ''\nlet excludes = []\nlet title = ''\nlet sections = []\nlet tasks = []\nlet currentSection = ''\nconst tags = ['active', 'done', 'crit', 'milestone']\nlet funs = []\n\nexport const clear = function () {\n sections = []\n tasks = []\n currentSection = ''\n funs = []\n title = ''\n taskCnt = 0\n lastTask = undefined\n lastTaskID = undefined\n rawTasks = []\n}\n\nexport const setAxisFormat = function (txt) {\n axisFormat = txt\n}\n\nexport const getAxisFormat = function () {\n return axisFormat\n}\n\nexport const setDateFormat = function (txt) {\n dateFormat = txt\n}\n\nexport const setExcludes = function (txt) {\n excludes = txt.toLowerCase().split(/[\\s,]+/)\n}\n\nexport const setTitle = function (txt) {\n title = txt\n}\n\nexport const getTitle = function () {\n return title\n}\n\nexport const addSection = function (txt) {\n currentSection = txt\n sections.push(txt)\n}\n\nexport const getTasks = function () {\n let allItemsPricessed = compileTasks()\n const maxDepth = 10\n let iterationCount = 0\n while (!allItemsPricessed && (iterationCount < maxDepth)) {\n allItemsPricessed = compileTasks()\n iterationCount++\n }\n\n tasks = rawTasks\n\n return tasks\n}\n\nconst isInvalidDate = function (date, dateFormat, excludes) {\n if (date.isoWeekday() >= 6 && excludes.indexOf('weekends') >= 0) {\n return true\n }\n if (excludes.indexOf(date.format('dddd').toLowerCase()) >= 0) {\n return true\n }\n return excludes.indexOf(date.format(dateFormat.trim())) >= 0\n}\n\nconst checkTaskDates = function (task, dateFormat, excludes) {\n if (!excludes.length || task.manualEndTime) return\n let startTime = moment(task.startTime, dateFormat, true)\n startTime.add(1, 'd')\n let endTime = moment(task.endTime, dateFormat, true)\n let renderEndTime = fixTaskDates(startTime, endTime, dateFormat, excludes)\n task.endTime = endTime.toDate()\n task.renderEndTime = renderEndTime\n}\n\nconst fixTaskDates = function (startTime, endTime, dateFormat, excludes) {\n let invalid = false\n let renderEndTime = null\n while (startTime.date() <= endTime.date()) {\n if (!invalid) {\n renderEndTime = endTime.toDate()\n }\n invalid = isInvalidDate(startTime, dateFormat, excludes)\n if (invalid) {\n endTime.add(1, 'd')\n }\n startTime.add(1, 'd')\n }\n return renderEndTime\n}\n\nconst getStartDate = function (prevTime, dateFormat, str) {\n str = str.trim()\n\n // Test for after\n const re = /^after\\s+([\\d\\w-]+)/\n const afterStatement = re.exec(str.trim())\n\n if (afterStatement !== null) {\n const task = findTaskById(afterStatement[1])\n\n if (typeof task === 'undefined') {\n const dt = new Date()\n dt.setHours(0, 0, 0, 0)\n return dt\n }\n return task.endTime\n }\n\n // Check for actual date set\n let mDate = moment(str, dateFormat.trim(), true)\n if (mDate.isValid()) {\n return mDate.toDate()\n } else {\n logger.debug('Invalid date:' + str)\n logger.debug('With date format:' + dateFormat.trim())\n }\n\n // Default date - now\n return new Date()\n}\n\nconst getEndDate = function (prevTime, dateFormat, str) {\n str = str.trim()\n\n // Check for actual date\n let mDate = moment(str, dateFormat.trim(), true)\n if (mDate.isValid()) {\n return mDate.toDate()\n }\n\n const d = moment(prevTime)\n // Check for length\n const re = /^([\\d]+)([wdhms])/\n const durationStatement = re.exec(str.trim())\n\n if (durationStatement !== null) {\n switch (durationStatement[2]) {\n case 's':\n d.add(durationStatement[1], 'seconds')\n break\n case 'm':\n d.add(durationStatement[1], 'minutes')\n break\n case 'h':\n d.add(durationStatement[1], 'hours')\n break\n case 'd':\n d.add(durationStatement[1], 'days')\n break\n case 'w':\n d.add(durationStatement[1], 'weeks')\n break\n }\n }\n // Default date - now\n return d.toDate()\n}\n\nlet taskCnt = 0\nconst parseId = function (idStr) {\n if (typeof idStr === 'undefined') {\n taskCnt = taskCnt + 1\n return 'task' + taskCnt\n }\n return idStr\n}\n// id, startDate, endDate\n// id, startDate, length\n// id, after x, endDate\n// id, after x, length\n// startDate, endDate\n// startDate, length\n// after x, endDate\n// after x, length\n// endDate\n// length\n\nconst compileData = function (prevTask, dataStr) {\n let ds\n\n if (dataStr.substr(0, 1) === ':') {\n ds = dataStr.substr(1, dataStr.length)\n } else {\n ds = dataStr\n }\n\n const data = ds.split(',')\n\n const task = {}\n\n // Get tags like active, done, crit and milestone\n getTaskTags(data, task, tags)\n\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim()\n }\n\n let endTimeData = ''\n switch (data.length) {\n case 1:\n task.id = parseId()\n task.startTime = prevTask.endTime\n endTimeData = data[0]\n break\n case 2:\n task.id = parseId()\n task.startTime = getStartDate(undefined, dateFormat, data[0])\n endTimeData = data[1]\n break\n case 3:\n task.id = parseId(data[0])\n task.startTime = getStartDate(undefined, dateFormat, data[1])\n endTimeData = data[2]\n break\n default:\n }\n\n if (endTimeData) {\n task.endTime = getEndDate(task.startTime, dateFormat, endTimeData)\n task.manualEndTime = endTimeData === moment(task.endTime).format(dateFormat.trim())\n checkTaskDates(task, dateFormat, excludes)\n }\n\n return task\n}\n\nconst parseData = function (prevTaskId, dataStr) {\n let ds\n if (dataStr.substr(0, 1) === ':') {\n ds = dataStr.substr(1, dataStr.length)\n } else {\n ds = dataStr\n }\n\n const data = ds.split(',')\n\n const task = {}\n\n // Get tags like active, done, crit and milestone\n getTaskTags(data, task, tags)\n\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim()\n }\n\n switch (data.length) {\n case 1:\n task.id = parseId()\n task.startTime = {\n type: 'prevTaskEnd',\n id: prevTaskId\n }\n task.endTime = {\n data: data[0]\n }\n break\n case 2:\n task.id = parseId()\n task.startTime = {\n type: 'getStartDate',\n startData: data[0]\n }\n task.endTime = {\n data: data[1]\n }\n break\n case 3:\n task.id = parseId(data[0])\n task.startTime = {\n type: 'getStartDate',\n startData: data[1]\n }\n task.endTime = {\n data: data[2]\n }\n break\n default:\n }\n\n return task\n}\n\nlet lastTask\nlet lastTaskID\nlet rawTasks = []\nconst taskDb = {}\nexport const addTask = function (descr, data) {\n const rawTask = {\n section: currentSection,\n type: currentSection,\n processed: false,\n manualEndTime: false,\n renderEndTime: null,\n raw: { data: data },\n task: descr,\n classes: []\n }\n const taskInfo = parseData(lastTaskID, data)\n rawTask.raw.startTime = taskInfo.startTime\n rawTask.raw.endTime = taskInfo.endTime\n rawTask.id = taskInfo.id\n rawTask.prevTaskId = lastTaskID\n rawTask.active = taskInfo.active\n rawTask.done = taskInfo.done\n rawTask.crit = taskInfo.crit\n rawTask.milestone = taskInfo.milestone\n\n const pos = rawTasks.push(rawTask)\n\n lastTaskID = rawTask.id\n // Store cross ref\n taskDb[rawTask.id] = pos - 1\n}\n\nexport const findTaskById = function (id) {\n const pos = taskDb[id]\n return rawTasks[pos]\n}\n\nexport const addTaskOrg = function (descr, data) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: []\n }\n const taskInfo = compileData(lastTask, data)\n newTask.startTime = taskInfo.startTime\n newTask.endTime = taskInfo.endTime\n newTask.id = taskInfo.id\n newTask.active = taskInfo.active\n newTask.done = taskInfo.done\n newTask.crit = taskInfo.crit\n newTask.milestone = taskInfo.milestone\n lastTask = newTask\n tasks.push(newTask)\n}\n\nconst compileTasks = function () {\n const compileTask = function (pos) {\n const task = rawTasks[pos]\n let startTime = ''\n switch (rawTasks[pos].raw.startTime.type) {\n case 'prevTaskEnd':\n const prevTask = findTaskById(task.prevTaskId)\n task.startTime = prevTask.endTime\n break\n case 'getStartDate':\n startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData)\n if (startTime) {\n rawTasks[pos].startTime = startTime\n }\n break\n }\n\n if (rawTasks[pos].startTime) {\n rawTasks[pos].endTime = getEndDate(rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data)\n if (rawTasks[pos].endTime) {\n rawTasks[pos].processed = true\n rawTasks[pos].manualEndTime = rawTasks[pos].raw.endTime.data === moment(rawTasks[pos].endTime).format(dateFormat.trim())\n checkTaskDates(rawTasks[pos], dateFormat, excludes)\n }\n }\n\n return rawTasks[pos].processed\n }\n\n let allProcessed = true\n for (let i = 0; i < rawTasks.length; i++) {\n compileTask(i)\n\n allProcessed = allProcessed && rawTasks[i].processed\n }\n return allProcessed\n}\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n * @param ids Comma separated list of ids\n * @param linkStr URL to create a link for\n */\nexport const setLink = function (ids, linkStr) {\n ids.split(',').forEach(function (id) {\n let rawTask = findTaskById(id)\n if (typeof rawTask !== 'undefined') {\n pushFun(id, () => { window.open(linkStr, '_self') })\n }\n })\n setClass(ids, 'clickable')\n}\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n ids.split(',').forEach(function (id) {\n let rawTask = findTaskById(id)\n if (typeof rawTask !== 'undefined') {\n rawTask.classes.push(className)\n }\n })\n}\n\nconst setClickFun = function (id, functionName, functionArgs) {\n if (typeof functionName === 'undefined') {\n return\n }\n\n let argList = []\n if (typeof functionArgs === 'string') {\n /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/)\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim()\n /* Removes all double quotes at the start and end of an argument */\n /* This preserves all starting and ending whitespace inside */\n if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n item = item.substr(1, item.length - 2)\n }\n argList[i] = item\n }\n }\n\n let rawTask = findTaskById(id)\n if (typeof rawTask !== 'undefined') {\n pushFun(id, () => { window[functionName](...argList) })\n }\n}\n\n/**\n * The callbackFunction is executed in a click event bound to the task with the specified id or the task's assigned text\n * @param id The task's id\n * @param callbackFunction A function to be executed when clicked on the task or the task's text\n */\nconst pushFun = function (id, callbackFunction) {\n funs.push(function (element) {\n const elem = d3.select(element).select(`[id=\"${id}\"]`)\n if (elem !== null) {\n elem.on('click', function () {\n callbackFunction()\n })\n }\n })\n funs.push(function (element) {\n const elem = d3.select(element).select(`[id=\"${id}-text\"]`)\n if (elem !== null) {\n elem.on('click', function () {\n callbackFunction()\n })\n }\n })\n}\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param functionArgs Function args the function should be called with\n */\nexport const setClickEvent = function (ids, functionName, functionArgs) {\n ids.split(',').forEach(function (id) {\n setClickFun(id, functionName, functionArgs)\n })\n setClass(ids, 'clickable')\n}\n\n/**\n * Binds all functions previously added to fun (specified through click) to the element\n * @param element\n */\nexport const bindFunctions = function (element) {\n funs.forEach(function (fun) {\n fun(element)\n })\n}\n\nexport default {\n clear,\n setDateFormat,\n setAxisFormat,\n getAxisFormat,\n setTitle,\n getTitle,\n addSection,\n getTasks,\n addTask,\n findTaskById,\n addTaskOrg,\n setExcludes,\n setClickEvent,\n setLink,\n bindFunctions\n}\n\nfunction getTaskTags (data, task, tags) {\n let matchFound = true\n while (matchFound) {\n matchFound = false\n tags.forEach(function (t) {\n const pattern = '^\\\\s*' + t + '\\\\s*$'\n const regex = new RegExp(pattern)\n if (data[0].match(regex)) {\n task[t] = true\n data.shift(1)\n matchFound = true\n }\n })\n }\n}\n","import * as d3 from 'd3'\n\nimport { parser } from './parser/gantt'\nimport ganttDb from './ganttDb'\n\nparser.yy = ganttDb\n\nconst conf = {\n titleTopMargin: 25,\n barHeight: 20,\n barGap: 4,\n topPadding: 50,\n rightPadding: 75,\n leftPadding: 75,\n gridLineStartPadding: 35,\n fontSize: 11,\n fontFamily: '\"Open-Sans\", \"sans-serif\"'\n}\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\nlet w\nexport const draw = function (text, id) {\n parser.yy.clear()\n parser.parse(text)\n\n const elem = document.getElementById(id)\n w = elem.parentElement.offsetWidth\n\n if (typeof w === 'undefined') {\n w = 1200\n }\n\n if (typeof conf.useWidth !== 'undefined') {\n w = conf.useWidth\n }\n\n const taskArray = parser.yy.getTasks()\n\n // Set height based on number of tasks\n const h = taskArray.length * (conf.barHeight + conf.barGap) + 2 * conf.topPadding\n\n elem.setAttribute('height', '100%')\n // Set viewBox\n elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h)\n const svg = d3.select(`[id=\"${id}\"]`)\n\n // Set timescale\n const timeScale = d3.scaleTime()\n .domain([d3.min(taskArray, function (d) {\n return d.startTime\n }),\n d3.max(taskArray, function (d) {\n return d.endTime\n })])\n .rangeRound([0, w - conf.leftPadding - conf.rightPadding])\n\n let categories = []\n\n for (let i = 0; i < taskArray.length; i++) {\n categories.push(taskArray[i].type)\n }\n\n const catsUnfiltered = categories // for vert labels\n\n categories = checkUnique(categories)\n\n makeGant(taskArray, w, h)\n if (typeof conf.useWidth !== 'undefined') {\n elem.setAttribute('width', w)\n }\n\n svg.append('text')\n .text(parser.yy.getTitle())\n .attr('x', w / 2)\n .attr('y', conf.titleTopMargin)\n .attr('class', 'titleText')\n\n function makeGant (tasks, pageWidth, pageHeight) {\n const barHeight = conf.barHeight\n const gap = barHeight + conf.barGap\n const topPadding = conf.topPadding\n const leftPadding = conf.leftPadding\n\n const colorScale = d3.scaleLinear()\n .domain([0, categories.length])\n .range(['#00B9FA', '#F95002'])\n .interpolate(d3.interpolateHcl)\n\n makeGrid(leftPadding, topPadding, pageWidth, pageHeight)\n drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight)\n vertLabels(gap, topPadding, leftPadding, barHeight, colorScale)\n drawToday(leftPadding, topPadding, pageWidth, pageHeight)\n }\n\n function drawRects (theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w, h) {\n // Draw background rects covering the entire width of the graph, these form the section rows.\n svg.append('g')\n .selectAll('rect')\n .data(theArray)\n .enter()\n .append('rect')\n .attr('x', 0)\n .attr('y', function (d, i) {\n return i * theGap + theTopPad - 2\n })\n .attr('width', function () {\n return w - conf.rightPadding / 2\n })\n .attr('height', theGap)\n .attr('class', function (d) {\n for (let i = 0; i < categories.length; i++) {\n if (d.type === categories[i]) {\n return 'section section' + (i % conf.numberSectionStyles)\n }\n }\n return 'section section0'\n })\n\n // Draw the rects representing the tasks\n const rectangles = svg.append('g')\n .selectAll('rect')\n .data(theArray)\n .enter()\n\n rectangles.append('rect')\n .attr('id', function (d) { return d.id })\n .attr('rx', 3)\n .attr('ry', 3)\n .attr('x', function (d) {\n if (d.milestone) {\n return timeScale(d.startTime) + theSidePad + (0.5 * (timeScale(d.endTime) - timeScale(d.startTime))) - (0.5 * theBarHeight)\n }\n return timeScale(d.startTime) + theSidePad\n })\n .attr('y', function (d, i) {\n return i * theGap + theTopPad\n })\n .attr('width', function (d) {\n if (d.milestone) {\n return theBarHeight\n }\n return (timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime))\n })\n .attr('height', theBarHeight)\n .attr('transform-origin', function (d, i) {\n return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + 'px ' + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + 'px'\n })\n .attr('class', function (d) {\n const res = 'task'\n\n let classStr = ''\n if (d.classes.length > 0) {\n classStr = d.classes.join(' ')\n }\n\n let secNum = 0\n for (let i = 0; i < categories.length; i++) {\n if (d.type === categories[i]) {\n secNum = (i % conf.numberSectionStyles)\n }\n }\n\n let taskClass = ''\n if (d.active) {\n if (d.crit) {\n taskClass += ' activeCrit'\n } else {\n taskClass = ' active'\n }\n } else if (d.done) {\n if (d.crit) {\n taskClass = ' doneCrit'\n } else {\n taskClass = ' done'\n }\n } else {\n if (d.crit) {\n taskClass += ' crit'\n }\n }\n\n if (taskClass.length === 0) {\n taskClass = ' task'\n }\n\n if (d.milestone) {\n taskClass = ' milestone ' + taskClass\n }\n\n taskClass += secNum\n\n taskClass += ' ' + classStr\n\n return res + taskClass\n })\n\n // Append task labels\n rectangles.append('text')\n .text(function (d) {\n return d.task\n })\n .attr('font-size', conf.fontSize)\n .attr('x', function (d) {\n let startX = timeScale(d.startTime)\n let endX = timeScale(d.renderEndTime || d.endTime)\n if (d.milestone) {\n startX += (0.5 * (timeScale(d.endTime) - timeScale(d.startTime))) - (0.5 * theBarHeight)\n }\n if (d.milestone) {\n endX = startX + theBarHeight\n }\n const textWidth = this.getBBox().width\n\n // Check id text width > width of rectangle\n if (textWidth > (endX - startX)) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n return startX + theSidePad - 5\n } else {\n return endX + theSidePad + 5\n }\n } else {\n return (endX - startX) / 2 + startX + theSidePad\n }\n })\n .attr('y', function (d, i) {\n return i * theGap + (conf.barHeight / 2) + (conf.fontSize / 2 - 2) + theTopPad\n })\n .attr('text-height', theBarHeight)\n .attr('class', function (d) {\n const startX = timeScale(d.startTime)\n let endX = timeScale(d.endTime)\n if (d.milestone) {\n endX = startX + theBarHeight\n }\n const textWidth = this.getBBox().width\n\n let classStr = ''\n if (d.classes.length > 0) {\n classStr = d.classes.join(' ')\n }\n\n let secNum = 0\n for (let i = 0; i < categories.length; i++) {\n if (d.type === categories[i]) {\n secNum = (i % conf.numberSectionStyles)\n }\n }\n\n let taskType = ''\n if (d.active) {\n if (d.crit) {\n taskType = 'activeCritText' + secNum\n } else {\n taskType = 'activeText' + secNum\n }\n }\n\n if (d.done) {\n if (d.crit) {\n taskType = taskType + ' doneCritText' + secNum\n } else {\n taskType = taskType + ' doneText' + secNum\n }\n } else {\n if (d.crit) {\n taskType = taskType + ' critText' + secNum\n }\n }\n\n if (d.milestone) {\n taskType += ' milestoneText'\n }\n\n // Check id text width > width of rectangle\n if (textWidth > (endX - startX)) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n return classStr + ' taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType\n } else {\n return classStr + ' taskTextOutsideRight taskTextOutside' + secNum + ' ' + taskType\n }\n } else {\n return classStr + ' taskText taskText' + secNum + ' ' + taskType\n }\n })\n }\n\n function makeGrid (theSidePad, theTopPad, w, h) {\n let xAxis = d3.axisBottom(timeScale)\n .tickSize(-h + theTopPad + conf.gridLineStartPadding)\n .tickFormat(d3.timeFormat(parser.yy.getAxisFormat() || conf.axisFormat || '%Y-%m-%d'))\n\n svg.append('g')\n .attr('class', 'grid')\n .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')')\n .call(xAxis)\n .selectAll('text')\n .style('text-anchor', 'middle')\n .attr('fill', '#000')\n .attr('stroke', 'none')\n .attr('font-size', 10)\n .attr('dy', '1em')\n }\n\n function vertLabels (theGap, theTopPad) {\n const numOccurances = []\n let prevGap = 0\n\n for (let i = 0; i < categories.length; i++) {\n numOccurances[i] = [categories[i], getCount(categories[i], catsUnfiltered)]\n }\n\n svg.append('g') // without doing this, impossible to put grid lines behind text\n .selectAll('text')\n .data(numOccurances)\n .enter()\n .append('text')\n .text(function (d) {\n return d[0]\n })\n .attr('x', 10)\n .attr('y', function (d, i) {\n if (i > 0) {\n for (let j = 0; j < i; j++) {\n prevGap += numOccurances[i - 1][1]\n return d[1] * theGap / 2 + prevGap * theGap + theTopPad\n }\n } else {\n return d[1] * theGap / 2 + theTopPad\n }\n })\n .attr('class', function (d) {\n for (let i = 0; i < categories.length; i++) {\n if (d[0] === categories[i]) {\n return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles)\n }\n }\n return 'sectionTitle'\n })\n }\n\n function drawToday (theSidePad, theTopPad, w, h) {\n const todayG = svg.append('g')\n .attr('class', 'today')\n\n const today = new Date()\n\n todayG.append('line')\n .attr('x1', timeScale(today) + theSidePad)\n .attr('x2', timeScale(today) + theSidePad)\n .attr('y1', conf.titleTopMargin)\n .attr('y2', h - conf.titleTopMargin)\n .attr('class', 'today')\n }\n\n // from this stackexchange question: http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript\n function checkUnique (arr) {\n const hash = {}\n const result = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (!hash.hasOwnProperty(arr[i])) { // it works with objects! in FF, at least\n hash[arr[i]] = true\n result.push(arr[i])\n }\n }\n return result\n }\n\n // from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array\n function getCounts (arr) {\n let i = arr.length // const to loop over\n const obj = {} // obj to store results\n while (i) {\n obj[arr[--i]] = (obj[arr[i]] || 0) + 1 // count occurrences\n }\n return obj\n }\n\n // get specific from everything\n function getCount (word, arr) {\n return getCounts(arr)[word] || 0\n }\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,12,13,14,15,17,19],$V1=[1,9],$V2=[1,10],$V3=[1,11],$V4=[1,12],$V5=[1,13],$V6=[1,15],$V7=[1,16];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"gantt\":4,\"document\":5,\"EOF\":6,\"line\":7,\"SPACE\":8,\"statement\":9,\"NL\":10,\"dateFormat\":11,\"axisFormat\":12,\"excludes\":13,\"title\":14,\"section\":15,\"clickStatement\":16,\"taskTxt\":17,\"taskData\":18,\"click\":19,\"callbackname\":20,\"callbackargs\":21,\"href\":22,\"clickStatementDebug\":23,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"gantt\",6:\"EOF\",8:\"SPACE\",10:\"NL\",11:\"dateFormat\",12:\"axisFormat\",13:\"excludes\",14:\"title\",15:\"section\",17:\"taskTxt\",18:\"taskData\",19:\"click\",20:\"callbackname\",21:\"callbackargs\",22:\"href\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[16,2],[16,3],[16,3],[16,4],[16,3],[16,4],[16,2],[23,2],[23,3],[23,3],[23,4],[23,3],[23,4],[23,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 2:\n this.$ = [] \nbreak;\ncase 3:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 4: case 5:\n this.$ = $$[$0] \nbreak;\ncase 6: case 7:\n this.$=[];\nbreak;\ncase 8:\nyy.setDateFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 9:\nyy.setAxisFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 10:\nyy.setExcludes($$[$0].substr(9));this.$=$$[$0].substr(9);\nbreak;\ncase 11:\nyy.setTitle($$[$0].substr(6));this.$=$$[$0].substr(6);\nbreak;\ncase 12:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 14:\nyy.addTask($$[$0-1],$$[$0]);this.$='task';\nbreak;\ncase 15:\nthis.$ = $$[$0-1];yy.setClickEvent($$[$0-1], $$[$0], null);\nbreak;\ncase 16:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 17:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], null);yy.setLink($$[$0-2],$$[$0]);\nbreak;\ncase 18:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-2], $$[$0-1]);yy.setLink($$[$0-3],$$[$0]);\nbreak;\ncase 19:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0], null);yy.setLink($$[$0-2],$$[$0-1]);\nbreak;\ncase 20:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-1], $$[$0]);yy.setLink($$[$0-3],$$[$0-2]);\nbreak;\ncase 21:\nthis.$ = $$[$0-1];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 22: case 28:\nthis.$=$$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 23: case 24: case 26:\nthis.$=$$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 25: case 27:\nthis.$=$$[$0-3] + ' ' + $$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:14,17:$V6,19:$V7},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:17,11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:14,17:$V6,19:$V7},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,8]),o($V0,[2,9]),o($V0,[2,10]),o($V0,[2,11]),o($V0,[2,12]),o($V0,[2,13]),{18:[1,18]},{20:[1,19],22:[1,20]},o($V0,[2,4]),o($V0,[2,14]),o($V0,[2,15],{21:[1,21],22:[1,22]}),o($V0,[2,21],{20:[1,23]}),o($V0,[2,16],{22:[1,24]}),o($V0,[2,17]),o($V0,[2,19],{21:[1,25]}),o($V0,[2,18]),o($V0,[2,20])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 10;\nbreak;\ncase 1:/* skip whitespace */\nbreak;\ncase 2:/* skip comments */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:this.begin(\"href\");\nbreak;\ncase 5:this.popState();\nbreak;\ncase 6:return 22;\nbreak;\ncase 7:this.begin(\"callbackname\");\nbreak;\ncase 8:this.popState();\nbreak;\ncase 9:this.popState(); this.begin(\"callbackargs\");\nbreak;\ncase 10:return 20;\nbreak;\ncase 11:this.popState();\nbreak;\ncase 12:return 21;\nbreak;\ncase 13:this.begin(\"click\");\nbreak;\ncase 14:this.popState();\nbreak;\ncase 15:return 19;\nbreak;\ncase 16:return 4;\nbreak;\ncase 17:return 11;\nbreak;\ncase 18:return 12;\nbreak;\ncase 19:return 13;\nbreak;\ncase 20:return 'date';\nbreak;\ncase 21:return 14;\nbreak;\ncase 22:return 15;\nbreak;\ncase 23:return 17;\nbreak;\ncase 24:return 18;\nbreak;\ncase 25:return ':';\nbreak;\ncase 26:return 6;\nbreak;\ncase 27:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:href[\\s]+[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:call[\\s]+)/i,/^(?:\\([\\s]*\\))/i,/^(?:\\()/i,/^(?:[^(]*)/i,/^(?:\\))/i,/^(?:[^)]*)/i,/^(?:click[\\s]+)/i,/^(?:[\\s\\n])/i,/^(?:[^\\s\\n]*)/i,/^(?:gantt\\b)/i,/^(?:dateFormat\\s[^#\\n;]+)/i,/^(?:axisFormat\\s[^#\\n;]+)/i,/^(?:excludes\\s[^#\\n;]+)/i,/^(?:\\d\\d\\d\\d-\\d\\d-\\d\\d\\b)/i,/^(?:title\\s[^#\\n;]+)/i,/^(?:section\\s[^#:\\n;]+)/i,/^(?:[^#:\\n;]+)/i,/^(?::[^#\\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"callbackargs\":{\"rules\":[11,12],\"inclusive\":false},\"callbackname\":{\"rules\":[8,9,10],\"inclusive\":false},\"href\":{\"rules\":[5,6],\"inclusive\":false},\"click\":{\"rules\":[14,15],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,7,13,16,17,18,19,20,21,22,23,24,25,26,27],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import _ from 'lodash'\n\nimport { logger } from '../../logger'\n\nlet commits = {}\nlet head = null\nlet branches = { 'master': head }\nlet curBranch = 'master'\nlet direction = 'LR'\nlet seq = 0\n\nfunction getRandomInt (min, max) {\n return Math.floor(Math.random() * (max - min)) + min\n}\n\nfunction getId () {\n const pool = '0123456789abcdef'\n let id = ''\n for (let i = 0; i < 7; i++) {\n id += pool[getRandomInt(0, 16)]\n }\n return id\n}\n\nfunction isfastforwardable (currentCommit, otherCommit) {\n logger.debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id)\n while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit) {\n // only if other branch has more commits\n if (otherCommit.parent == null) break\n if (Array.isArray(otherCommit.parent)) {\n logger.debug('In merge commit:', otherCommit.parent)\n return isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) ||\n isfastforwardable(currentCommit, commits[otherCommit.parent[1]])\n } else {\n otherCommit = commits[otherCommit.parent]\n }\n }\n logger.debug(currentCommit.id, otherCommit.id)\n return currentCommit.id === otherCommit.id\n}\n\nfunction isReachableFrom (currentCommit, otherCommit) {\n const currentSeq = currentCommit.seq\n const otherSeq = otherCommit.seq\n if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit)\n return false\n}\n\nexport const setDirection = function (dir) {\n direction = dir\n}\nlet options = {}\nexport const setOptions = function (rawOptString) {\n logger.debug('options str', rawOptString)\n rawOptString = rawOptString && rawOptString.trim()\n rawOptString = rawOptString || '{}'\n try {\n options = JSON.parse(rawOptString)\n } catch (e) {\n logger.error('error while parsing gitGraph options', e.message)\n }\n}\n\nexport const getOptions = function () {\n return options\n}\n\nexport const commit = function (msg) {\n const commit = {\n id: getId(),\n message: msg,\n seq: seq++,\n parent: head == null ? null : head.id\n }\n head = commit\n commits[commit.id] = commit\n branches[curBranch] = commit.id\n logger.debug('in pushCommit ' + commit.id)\n}\n\nexport const branch = function (name) {\n branches[name] = head != null ? head.id : null\n logger.debug('in createBranch')\n}\n\nexport const merge = function (otherBranch) {\n const currentCommit = commits[branches[curBranch]]\n const otherCommit = commits[branches[otherBranch]]\n if (isReachableFrom(currentCommit, otherCommit)) {\n logger.debug('Already merged')\n return\n }\n if (isfastforwardable(currentCommit, otherCommit)) {\n branches[curBranch] = branches[otherBranch]\n head = commits[branches[curBranch]]\n } else {\n // create merge commit\n const commit = {\n id: getId(),\n message: 'merged branch ' + otherBranch + ' into ' + curBranch,\n seq: seq++,\n parent: [head == null ? null : head.id, branches[otherBranch]]\n }\n head = commit\n commits[commit.id] = commit\n branches[curBranch] = commit.id\n }\n logger.debug(branches)\n logger.debug('in mergeBranch')\n}\n\nexport const checkout = function (branch) {\n logger.debug('in checkout')\n curBranch = branch\n const id = branches[curBranch]\n head = commits[id]\n}\n\nexport const reset = function (commitRef) {\n logger.debug('in reset', commitRef)\n const ref = commitRef.split(':')[0]\n let parentCount = parseInt(commitRef.split(':')[1])\n let commit = ref === 'HEAD' ? head : commits[branches[ref]]\n logger.debug(commit, parentCount)\n while (parentCount > 0) {\n commit = commits[commit.parent]\n parentCount--\n if (!commit) {\n const err = 'Critical error - unique parent commit not found during reset'\n logger.error(err)\n throw err\n }\n }\n head = commit\n branches[curBranch] = commit.id\n}\n\nfunction upsert (arr, key, newval) {\n const index = arr.indexOf(key)\n if (index === -1) {\n arr.push(newval)\n } else {\n arr.splice(index, 1, newval)\n }\n}\n\nfunction prettyPrintCommitHistory (commitArr) {\n const commit = _.maxBy(commitArr, 'seq')\n let line = ''\n commitArr.forEach(function (c) {\n if (c === commit) {\n line += '\\t*'\n } else {\n line += '\\t|'\n }\n })\n const label = [line, commit.id, commit.seq]\n for (let branch in branches) {\n if (branches[branch] === commit.id) label.push(branch)\n }\n logger.debug(label.join(' '))\n if (Array.isArray(commit.parent)) {\n const newCommit = commits[commit.parent[0]]\n upsert(commitArr, commit, newCommit)\n commitArr.push(commits[commit.parent[1]])\n } else if (commit.parent == null) {\n return\n } else {\n const nextCommit = commits[commit.parent]\n upsert(commitArr, commit, nextCommit)\n }\n commitArr = _.uniqBy(commitArr, 'id')\n prettyPrintCommitHistory(commitArr)\n}\n\nexport const prettyPrint = function () {\n logger.debug(commits)\n const node = getCommitsArray()[0]\n prettyPrintCommitHistory([node])\n}\n\nexport const clear = function () {\n commits = {}\n head = null\n branches = { 'master': head }\n curBranch = 'master'\n seq = 0\n}\n\nexport const getBranchesAsObjArray = function () {\n const branchArr = []\n for (let branch in branches) {\n branchArr.push({ name: branch, commit: commits[branches[branch]] })\n }\n return branchArr\n}\n\nexport const getBranches = function () { return branches }\nexport const getCommits = function () { return commits }\nexport const getCommitsArray = function () {\n const commitArr = Object.keys(commits).map(function (key) {\n return commits[key]\n })\n commitArr.forEach(function (o) { logger.debug(o.id) })\n return _.orderBy(commitArr, ['seq'], ['desc'])\n}\nexport const getCurrentBranch = function () { return curBranch }\nexport const getDirection = function () { return direction }\nexport const getHead = function () { return head }\n\nexport default {\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n checkout,\n reset,\n prettyPrint,\n clear,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead\n}\n","import * as d3 from 'd3'\nimport _ from 'lodash'\n\nimport db from './gitGraphAst'\nimport gitGraphParser from './parser/gitGraph'\nimport { logger } from '../../logger'\nimport { interpolateToCurve } from '../../utils'\n\nlet allCommitsDict = {}\nlet branchNum\nlet config = {\n nodeSpacing: 150,\n nodeFillColor: 'yellow',\n nodeStrokeWidth: 2,\n nodeStrokeColor: 'grey',\n lineStrokeWidth: 4,\n branchOffset: 50,\n lineColor: 'grey',\n leftMargin: 50,\n branchColors: ['#442f74', '#983351', '#609732', '#AA9A39'],\n nodeRadius: 10,\n nodeLabel: {\n width: 75,\n height: 100,\n x: -25,\n y: 0\n }\n}\nlet apiConfig = {}\nexport const setConf = function (c) {\n apiConfig = c\n}\n\nfunction svgCreateDefs (svg) {\n svg\n .append('defs')\n .append('g')\n .attr('id', 'def-commit')\n .append('circle')\n .attr('r', config.nodeRadius)\n .attr('cx', 0)\n .attr('cy', 0)\n svg.select('#def-commit')\n .append('foreignObject')\n .attr('width', config.nodeLabel.width)\n .attr('height', config.nodeLabel.height)\n .attr('x', config.nodeLabel.x)\n .attr('y', config.nodeLabel.y)\n .attr('class', 'node-label')\n .attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility')\n .append('p')\n .html('')\n}\n\nfunction svgDrawLine (svg, points, colorIdx, interpolate) {\n const curve = interpolateToCurve(interpolate, d3.curveBasis)\n const color = config.branchColors[colorIdx % config.branchColors.length]\n const lineGen = d3.line()\n .x(function (d) {\n return Math.round(d.x)\n })\n .y(function (d) {\n return Math.round(d.y)\n })\n .curve(curve)\n\n svg\n .append('svg:path')\n .attr('d', lineGen(points))\n .style('stroke', color)\n .style('stroke-width', config.lineStrokeWidth)\n .style('fill', 'none')\n}\n\n// Pass in the element and its pre-transform coords\nfunction getElementCoords (element, coords) {\n coords = coords || element.node().getBBox()\n const ctm = element.node().getCTM()\n const xn = ctm.e + coords.x * ctm.a\n const yn = ctm.f + coords.y * ctm.d\n return {\n left: xn,\n top: yn,\n width: coords.width,\n height: coords.height\n }\n}\n\nfunction svgDrawLineForCommits (svg, fromId, toId, direction, color) {\n logger.debug('svgDrawLineForCommits: ', fromId, toId)\n const fromBbox = getElementCoords(svg.select('#node-' + fromId + ' circle'))\n const toBbox = getElementCoords(svg.select('#node-' + toId + ' circle'))\n switch (direction) {\n case 'LR':\n // (toBbox)\n // +--------\n // + (fromBbox)\n if (fromBbox.left - toBbox.left > config.nodeSpacing) {\n const lineStart = { x: fromBbox.left - config.nodeSpacing, y: toBbox.top + toBbox.height / 2 }\n const lineEnd = { x: toBbox.left + toBbox.width, y: toBbox.top + toBbox.height / 2 }\n svgDrawLine(svg, [lineStart, lineEnd], color, 'linear')\n svgDrawLine(svg, [\n { x: fromBbox.left, y: fromBbox.top + fromBbox.height / 2 },\n { x: fromBbox.left - config.nodeSpacing / 2, y: fromBbox.top + fromBbox.height / 2 },\n { x: fromBbox.left - config.nodeSpacing / 2, y: lineStart.y },\n lineStart], color)\n } else {\n svgDrawLine(svg, [{\n 'x': fromBbox.left,\n 'y': fromBbox.top + fromBbox.height / 2\n }, {\n 'x': fromBbox.left - config.nodeSpacing / 2,\n 'y': fromBbox.top + fromBbox.height / 2\n }, {\n 'x': fromBbox.left - config.nodeSpacing / 2,\n 'y': toBbox.top + toBbox.height / 2\n }, {\n 'x': toBbox.left + toBbox.width,\n 'y': toBbox.top + toBbox.height / 2\n }], color)\n }\n break\n case 'BT':\n // + (fromBbox)\n // |\n // |\n // + (toBbox)\n if (toBbox.top - fromBbox.top > config.nodeSpacing) {\n const lineStart = { x: toBbox.left + toBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing }\n const lineEnd = { x: toBbox.left + toBbox.width / 2, y: toBbox.top }\n svgDrawLine(svg, [lineStart, lineEnd], color, 'linear')\n svgDrawLine(svg, [\n { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height },\n { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing / 2 },\n { x: toBbox.left + toBbox.width / 2, y: lineStart.y - config.nodeSpacing / 2 },\n lineStart], color)\n } else {\n svgDrawLine(svg, [{\n 'x': fromBbox.left + fromBbox.width / 2,\n 'y': fromBbox.top + fromBbox.height\n }, {\n 'x': fromBbox.left + fromBbox.width / 2,\n 'y': fromBbox.top + config.nodeSpacing / 2\n }, {\n 'x': toBbox.left + toBbox.width / 2,\n 'y': toBbox.top - config.nodeSpacing / 2\n }, {\n 'x': toBbox.left + toBbox.width / 2,\n 'y': toBbox.top\n }], color)\n }\n break\n }\n}\n\nfunction cloneNode (svg, selector) {\n return svg.select(selector).node().cloneNode(true)\n}\n\nfunction renderCommitHistory (svg, commitid, branches, direction) {\n let commit\n const numCommits = Object.keys(allCommitsDict).length\n if (typeof commitid === 'string') {\n do {\n commit = allCommitsDict[commitid]\n logger.debug('in renderCommitHistory', commit.id, commit.seq)\n if (svg.select('#node-' + commitid).size() > 0) {\n return\n }\n svg\n .append(function () {\n return cloneNode(svg, '#def-commit')\n })\n .attr('class', 'commit')\n .attr('id', function () {\n return 'node-' + commit.id\n })\n .attr('transform', function () {\n switch (direction) {\n case 'LR':\n return 'translate(' + (commit.seq * config.nodeSpacing + config.leftMargin) + ', ' +\n (branchNum * config.branchOffset) + ')'\n case 'BT':\n return 'translate(' + (branchNum * config.branchOffset + config.leftMargin) + ', ' +\n ((numCommits - commit.seq) * config.nodeSpacing) + ')'\n }\n })\n .attr('fill', config.nodeFillColor)\n .attr('stroke', config.nodeStrokeColor)\n .attr('stroke-width', config.nodeStrokeWidth)\n\n let branch\n for (let branchName in branches) {\n if (branches[branchName].commit === commit) {\n branch = branches[branchName]\n break\n }\n }\n if (branch) {\n logger.debug('found branch ', branch.name)\n svg.select('#node-' + commit.id + ' p')\n .append('xhtml:span')\n .attr('class', 'branch-label')\n .text(branch.name + ', ')\n }\n svg.select('#node-' + commit.id + ' p')\n .append('xhtml:span')\n .attr('class', 'commit-id')\n .text(commit.id)\n if (commit.message !== '' && direction === 'BT') {\n svg.select('#node-' + commit.id + ' p')\n .append('xhtml:span')\n .attr('class', 'commit-msg')\n .text(', ' + commit.message)\n }\n commitid = commit.parent\n } while (commitid && allCommitsDict[commitid])\n }\n\n if (Array.isArray(commitid)) {\n logger.debug('found merge commmit', commitid)\n renderCommitHistory(svg, commitid[0], branches, direction)\n branchNum++\n renderCommitHistory(svg, commitid[1], branches, direction)\n branchNum--\n }\n}\n\nfunction renderLines (svg, commit, direction, branchColor) {\n branchColor = branchColor || 0\n while (commit.seq > 0 && !commit.lineDrawn) {\n if (typeof commit.parent === 'string') {\n svgDrawLineForCommits(svg, commit.id, commit.parent, direction, branchColor)\n commit.lineDrawn = true\n commit = allCommitsDict[commit.parent]\n } else if (Array.isArray(commit.parent)) {\n svgDrawLineForCommits(svg, commit.id, commit.parent[0], direction, branchColor)\n svgDrawLineForCommits(svg, commit.id, commit.parent[1], direction, branchColor + 1)\n renderLines(svg, allCommitsDict[commit.parent[1]], direction, branchColor + 1)\n commit.lineDrawn = true\n commit = allCommitsDict[commit.parent[0]]\n }\n }\n}\n\nexport const draw = function (txt, id, ver) {\n try {\n const parser = gitGraphParser.parser\n parser.yy = db\n\n logger.debug('in gitgraph renderer', txt, id, ver)\n // Parse the graph definition\n parser.parse(txt + '\\n')\n\n config = _.assign(config, apiConfig, db.getOptions())\n logger.debug('effective options', config)\n const direction = db.getDirection()\n allCommitsDict = db.getCommits()\n const branches = db.getBranchesAsObjArray()\n if (direction === 'BT') {\n config.nodeLabel.x = branches.length * config.branchOffset\n config.nodeLabel.width = '100%'\n config.nodeLabel.y = -1 * 2 * config.nodeRadius\n }\n const svg = d3.select(`[id=\"${id}\"]`)\n svgCreateDefs(svg)\n branchNum = 1\n for (let branch in branches) {\n const v = branches[branch]\n renderCommitHistory(svg, v.commit.id, branches, direction)\n renderLines(svg, v.commit, direction)\n branchNum++\n }\n svg.attr('height', function () {\n if (direction === 'BT') return Object.keys(allCommitsDict).length * config.nodeSpacing\n return (branches.length + 1) * config.branchOffset\n })\n } catch (e) {\n logger.error('Error while rendering gitgraph')\n logger.error(e.message)\n }\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[2,3],$V1=[1,7],$V2=[7,12,15,17,19,20,21],$V3=[7,11,12,15,17,19,20,21],$V4=[2,20],$V5=[1,32];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"GG\":4,\":\":5,\"document\":6,\"EOF\":7,\"DIR\":8,\"options\":9,\"body\":10,\"OPT\":11,\"NL\":12,\"line\":13,\"statement\":14,\"COMMIT\":15,\"commit_arg\":16,\"BRANCH\":17,\"ID\":18,\"CHECKOUT\":19,\"MERGE\":20,\"RESET\":21,\"reset_arg\":22,\"STR\":23,\"HEAD\":24,\"reset_parents\":25,\"CARET\":26,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"GG\",5:\":\",7:\"EOF\",8:\"DIR\",11:\"OPT\",12:\"NL\",15:\"COMMIT\",17:\"BRANCH\",18:\"ID\",19:\"CHECKOUT\",20:\"MERGE\",21:\"RESET\",23:\"STR\",24:\"HEAD\",26:\"CARET\"},\nproductions_: [0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 2:\nyy.setDirection($$[$0-3]); return $$[$0-1];\nbreak;\ncase 4:\n yy.setOptions($$[$0-1]); this.$ = $$[$0]\nbreak;\ncase 5:\n$$[$0-1] +=$$[$0]; this.$=$$[$0-1]\nbreak;\ncase 7:\nthis.$ = []\nbreak;\ncase 8:\n$$[$0-1].push($$[$0]); this.$=$$[$0-1];\nbreak;\ncase 9:\nthis.$ =$$[$0-1]\nbreak;\ncase 11:\nyy.commit($$[$0])\nbreak;\ncase 12:\nyy.branch($$[$0])\nbreak;\ncase 13:\nyy.checkout($$[$0])\nbreak;\ncase 14:\nyy.merge($$[$0])\nbreak;\ncase 15:\nyy.reset($$[$0])\nbreak;\ncase 16:\nthis.$ = \"\"\nbreak;\ncase 17:\nthis.$=$$[$0]\nbreak;\ncase 18:\nthis.$ = $$[$0-1]+ \":\" + $$[$0] \nbreak;\ncase 19:\nthis.$ = $$[$0-1]+ \":\" + yy.count; yy.count = 0\nbreak;\ncase 20:\nyy.count = 0\nbreak;\ncase 21:\n yy.count += 1 \nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:$V0,9:6,12:$V1},{5:[1,8]},{7:[1,9]},o($V2,[2,7],{10:10,11:[1,11]}),o($V3,[2,6]),{6:12,7:$V0,9:6,12:$V1},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},o($V3,[2,5]),{7:[1,21]},o($V2,[2,8]),{12:[1,22]},o($V2,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},o($V2,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:$V4,25:31,26:$V5},{12:$V4,25:33,26:$V5},{12:[2,18]},{12:$V4,25:34,26:$V5},{12:[2,19]},{12:[2,21]}],\ndefaultActions: {9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 12;\nbreak;\ncase 1:/* skip all whitespace */\nbreak;\ncase 2:/* skip comments */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:return 4;\nbreak;\ncase 5:return 15;\nbreak;\ncase 6:return 17;\nbreak;\ncase 7:return 20;\nbreak;\ncase 8:return 21;\nbreak;\ncase 9:return 19;\nbreak;\ncase 10:return 8;\nbreak;\ncase 11:return 8;\nbreak;\ncase 12:return 5;\nbreak;\ncase 13:return 26\nbreak;\ncase 14:this.begin(\"options\");\nbreak;\ncase 15:this.popState();\nbreak;\ncase 16:return 11;\nbreak;\ncase 17:this.begin(\"string\");\nbreak;\ncase 18:this.popState();\nbreak;\ncase 19:return 23;\nbreak;\ncase 20:return 18;\nbreak;\ncase 21:return 7;\nbreak;\n}\n},\nrules: [/^(?:(\\r?\\n)+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:gitGraph\\b)/i,/^(?:commit\\b)/i,/^(?:branch\\b)/i,/^(?:merge\\b)/i,/^(?:reset\\b)/i,/^(?:checkout\\b)/i,/^(?:LR\\b)/i,/^(?:BT\\b)/i,/^(?::)/i,/^(?:\\^)/i,/^(?:options\\r?\\n)/i,/^(?:end\\r?\\n)/i,/^(?:[^\\n]+\\r?\\n)/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[a-zA-Z][a-zA-Z0-9_]+)/i,/^(?:$)/i],\nconditions: {\"options\":{\"rules\":[15,16],\"inclusive\":false},\"string\":{\"rules\":[18,19],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","/**\n * Created by knut on 15-01-14.\n */\nimport { logger } from '../../logger'\n\nvar message = ''\nvar info = false\n\nexport const setMessage = txt => {\n logger.debug('Setting message to: ' + txt)\n message = txt\n}\n\nexport const getMessage = () => {\n return message\n}\n\nexport const setInfo = inf => {\n info = inf\n}\n\nexport const getInfo = () => {\n return info\n}\n\n// export const parseError = (err, hash) => {\n// global.mermaidAPI.parseError(err, hash)\n// }\n\nexport default {\n setMessage,\n getMessage,\n setInfo,\n getInfo\n // parseError\n}\n","/**\n * Created by knut on 14-12-11.\n */\nimport * as d3 from 'd3'\nimport db from './infoDb'\nimport infoParser from './parser/info.js'\nimport { logger } from '../../logger'\n\nconst conf = {\n}\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\n\n/**\n * Draws a an info picture in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = (txt, id, ver) => {\n try {\n const parser = infoParser.parser\n parser.yy = db\n logger.debug('Renering info diagram\\n' + txt)\n // Parse the graph definition\n parser.parse(txt)\n logger.debug('Parsed info diagram')\n // Fetch the default direction, use TD if none was found\n const svg = d3.select('#' + id)\n\n const g = svg.append('g')\n\n g.append('text') // text label for the x axis\n .attr('x', 100)\n .attr('y', 40)\n .attr('class', 'version')\n .attr('font-size', '32px')\n .style('text-anchor', 'middle')\n .text('v ' + ver)\n\n svg.attr('height', 100)\n svg.attr('width', 400)\n // svg.attr('viewBox', '0 0 300 150');\n } catch (e) {\n logger.error('Error while rendering info diagram')\n logger.error(e.message)\n }\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,9,10,12];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"info\":4,\"document\":5,\"EOF\":6,\"line\":7,\"statement\":8,\"NL\":9,\"showInfo\":10,\"message\":11,\"say\":12,\"TXT\":13,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"info\",6:\"EOF\",9:\"NL\",10:\"showInfo\",12:\"say\",13:\"TXT\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1],[8,1],[11,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return yy; \nbreak;\ncase 4:\n \nbreak;\ncase 6:\n yy.setInfo(true); \nbreak;\ncase 7:\n yy.setMessage($$[$0]); \nbreak;\ncase 8:\n this.$ = $$[$0-1].substring(1).trim().replace(/\\\\n/gm, \"\\n\"); \nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8],11:9,12:[1,10]},{1:[2,1]},o($V0,[2,3]),o($V0,[2,4]),o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,7]),{13:[1,11]},o($V0,[2,8])],\ndefaultActions: {4:[2,1]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\t// Pre-lexer code can go here\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 4 ;\nbreak;\ncase 1:return 9 ;\nbreak;\ncase 2:return 'space'\nbreak;\ncase 3:return 10;\nbreak;\ncase 4:return 12 ;\nbreak;\ncase 5:return 6 ;\nbreak;\ncase 6:return 13 ;\nbreak;\n}\n},\nrules: [/^(?:info\\b)/i,/^(?:[\\s\\n\\r]+)/i,/^(?:[\\s]+)/i,/^(?:showInfo\\b)/i,/^(?:say\\b)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,4],$V3=[2,4],$V4=[1,9],$V5=[1,11],$V6=[1,12],$V7=[1,14],$V8=[1,15],$V9=[1,17],$Va=[1,18],$Vb=[1,19],$Vc=[1,20],$Vd=[1,21],$Ve=[1,23],$Vf=[1,24],$Vg=[1,4,5,10,15,16,18,20,21,22,23,25,27,28,29,40],$Vh=[1,32],$Vi=[4,5,10,15,16,18,20,21,22,23,25,29,40],$Vj=[4,5,10,15,16,18,20,21,22,23,25,28,29,40],$Vk=[4,5,10,15,16,18,20,21,22,23,25,27,29,40],$Vl=[38,39,40];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"SPACE\":4,\"NL\":5,\"SD\":6,\"document\":7,\"line\":8,\"statement\":9,\"participant\":10,\"actor\":11,\"AS\":12,\"restOfLine\":13,\"signal\":14,\"activate\":15,\"deactivate\":16,\"note_statement\":17,\"title\":18,\"text2\":19,\"loop\":20,\"end\":21,\"opt\":22,\"alt\":23,\"else_sections\":24,\"par\":25,\"par_sections\":26,\"and\":27,\"else\":28,\"note\":29,\"placement\":30,\"over\":31,\"actor_pair\":32,\"spaceList\":33,\",\":34,\"left_of\":35,\"right_of\":36,\"signaltype\":37,\"+\":38,\"-\":39,\"ACTOR\":40,\"SOLID_OPEN_ARROW\":41,\"DOTTED_OPEN_ARROW\":42,\"SOLID_ARROW\":43,\"DOTTED_ARROW\":44,\"SOLID_CROSS\":45,\"DOTTED_CROSS\":46,\"TXT\":47,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACE\",5:\"NL\",6:\"SD\",10:\"participant\",12:\"AS\",13:\"restOfLine\",15:\"activate\",16:\"deactivate\",18:\"title\",20:\"loop\",21:\"end\",22:\"opt\",23:\"alt\",25:\"par\",27:\"and\",28:\"else\",29:\"note\",31:\"over\",34:\",\",35:\"left_of\",36:\"right_of\",38:\"+\",39:\"-\",40:\"ACTOR\",41:\"SOLID_OPEN_ARROW\",42:\"DOTTED_OPEN_ARROW\",43:\"SOLID_ARROW\",44:\"DOTTED_ARROW\",45:\"SOLID_CROSS\",46:\"DOTTED_CROSS\",47:\"TXT\"},\nproductions_: [0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,5],[9,3],[9,2],[9,3],[9,3],[9,2],[9,3],[9,4],[9,4],[9,4],[9,4],[26,1],[26,4],[24,1],[24,4],[17,4],[17,4],[33,2],[33,1],[32,3],[32,1],[30,1],[30,1],[14,5],[14,5],[14,4],[11,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[19,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 3:\n yy.apply($$[$0]);return $$[$0]; \nbreak;\ncase 4:\n this.$ = [] \nbreak;\ncase 5:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 6: case 7:\n this.$ = $$[$0] \nbreak;\ncase 8:\n this.$=[];\nbreak;\ncase 9:\n$$[$0-3].description=$$[$0-1]; this.$=$$[$0-3];\nbreak;\ncase 10:\nthis.$=$$[$0-1];\nbreak;\ncase 12:\nthis.$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]};\nbreak;\ncase 13:\nthis.$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-1]};\nbreak;\ncase 15:\nthis.$=[{type:'setTitle', text:$$[$0-1]}]\nbreak;\ncase 16:\n\n\t\t$$[$0-1].unshift({type: 'loopStart', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_START});\n\t\t$$[$0-1].push({type: 'loopEnd', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 17:\n\n\t\t$$[$0-1].unshift({type: 'optStart', optText:$$[$0-2], signalType: yy.LINETYPE.OPT_START});\n\t\t$$[$0-1].push({type: 'optEnd', optText:$$[$0-2], signalType: yy.LINETYPE.OPT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 18:\n\n\t\t// Alt start\n\t\t$$[$0-1].unshift({type: 'altStart', altText:$$[$0-2], signalType: yy.LINETYPE.ALT_START});\n\t\t// Content in alt is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 19:\n\n\t\t// Parallel start\n\t\t$$[$0-1].unshift({type: 'parStart', parText:$$[$0-2], signalType: yy.LINETYPE.PAR_START});\n\t\t// Content in par is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 21:\n this.$ = $$[$0-3].concat([{type: 'and', parText:$$[$0-1], signalType: yy.LINETYPE.PAR_AND}, $$[$0]]); \nbreak;\ncase 23:\n this.$ = $$[$0-3].concat([{type: 'else', altText:$$[$0-1], signalType: yy.LINETYPE.ALT_ELSE}, $$[$0]]); \nbreak;\ncase 24:\n\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:$$[$0-2], actor:$$[$0-1].actor, text:$$[$0]}];\nbreak;\ncase 25:\n\n\t\t// Coerce actor_pair into a [to, from, ...] array\n\t\t$$[$0-2] = [].concat($$[$0-1], $$[$0-1]).slice(0, 2);\n\t\t$$[$0-2][0] = $$[$0-2][0].actor;\n\t\t$$[$0-2][1] = $$[$0-2][1].actor;\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$$[$0-2].slice(0, 2), text:$$[$0]}];\nbreak;\ncase 28:\n this.$ = [$$[$0-2], $$[$0]]; \nbreak;\ncase 29:\n this.$ = $$[$0]; \nbreak;\ncase 30:\n this.$ = yy.PLACEMENT.LEFTOF; \nbreak;\ncase 31:\n this.$ = yy.PLACEMENT.RIGHTOF; \nbreak;\ncase 32:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]}\n\t ]\nbreak;\ncase 33:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-4]}\n\t ]\nbreak;\ncase 34:\n this.$ = [$$[$0-3],$$[$0-1],{type: 'addMessage', from:$$[$0-3].actor, to:$$[$0-1].actor, signalType:$$[$0-2], msg:$$[$0]}]\nbreak;\ncase 35:\nthis.$={type: 'addActor', actor:$$[$0]}\nbreak;\ncase 36:\n this.$ = yy.LINETYPE.SOLID_OPEN; \nbreak;\ncase 37:\n this.$ = yy.LINETYPE.DOTTED_OPEN; \nbreak;\ncase 38:\n this.$ = yy.LINETYPE.SOLID; \nbreak;\ncase 39:\n this.$ = yy.LINETYPE.DOTTED; \nbreak;\ncase 40:\n this.$ = yy.LINETYPE.SOLID_CROSS; \nbreak;\ncase 41:\n this.$ = yy.LINETYPE.DOTTED_CROSS; \nbreak;\ncase 42:\nthis.$ = $$[$0].substring(1).trim().replace(/\\\\n/gm, \"\\n\");\nbreak;\n}\n},\ntable: [{3:1,4:$V0,5:$V1,6:$V2},{1:[3]},{3:5,4:$V0,5:$V1,6:$V2},{3:6,4:$V0,5:$V1,6:$V2},o([1,4,5,10,15,16,18,20,22,23,25,29,40],$V3,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},o($Vg,[2,5]),{9:25,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},o($Vg,[2,7]),o($Vg,[2,8]),{11:26,40:$Vf},{5:[1,27]},{11:28,40:$Vf},{11:29,40:$Vf},{5:[1,30]},{19:31,47:$Vh},{13:[1,33]},{13:[1,34]},{13:[1,35]},{13:[1,36]},{37:37,41:[1,38],42:[1,39],43:[1,40],44:[1,41],45:[1,42],46:[1,43]},{30:44,31:[1,45],35:[1,46],36:[1,47]},o([5,12,34,41,42,43,44,45,46,47],[2,35]),o($Vg,[2,6]),{5:[1,49],12:[1,48]},o($Vg,[2,11]),{5:[1,50]},{5:[1,51]},o($Vg,[2,14]),{5:[1,52]},{5:[2,42]},o($Vi,$V3,{7:53}),o($Vi,$V3,{7:54}),o($Vj,$V3,{24:55,7:56}),o($Vk,$V3,{26:57,7:58}),{11:61,38:[1,59],39:[1,60],40:$Vf},o($Vl,[2,36]),o($Vl,[2,37]),o($Vl,[2,38]),o($Vl,[2,39]),o($Vl,[2,40]),o($Vl,[2,41]),{11:62,40:$Vf},{11:64,32:63,40:$Vf},{40:[2,30]},{40:[2,31]},{13:[1,65]},o($Vg,[2,10]),o($Vg,[2,12]),o($Vg,[2,13]),o($Vg,[2,15]),{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[1,66],22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[1,67],22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},{21:[1,68]},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[2,22],22:$Vb,23:$Vc,25:$Vd,28:[1,69],29:$Ve,40:$Vf},{21:[1,70]},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[2,20],22:$Vb,23:$Vc,25:$Vd,27:[1,71],29:$Ve,40:$Vf},{11:72,40:$Vf},{11:73,40:$Vf},{19:74,47:$Vh},{19:75,47:$Vh},{19:76,47:$Vh},{34:[1,77],47:[2,29]},{5:[1,78]},o($Vg,[2,16]),o($Vg,[2,17]),o($Vg,[2,18]),{13:[1,79]},o($Vg,[2,19]),{13:[1,80]},{19:81,47:$Vh},{19:82,47:$Vh},{5:[2,34]},{5:[2,24]},{5:[2,25]},{11:83,40:$Vf},o($Vg,[2,9]),o($Vj,$V3,{7:56,24:84}),o($Vk,$V3,{7:58,26:85}),{5:[2,32]},{5:[2,33]},{47:[2,28]},{21:[2,23]},{21:[2,21]}],\ndefaultActions: {5:[2,1],6:[2,2],32:[2,42],46:[2,30],47:[2,31],74:[2,34],75:[2,24],76:[2,25],81:[2,32],82:[2,33],83:[2,28],84:[2,23],85:[2,21]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 5;\nbreak;\ncase 1:/* skip all whitespace */\nbreak;\ncase 2:/* skip same-line whitespace */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:/* skip comments */\nbreak;\ncase 5: this.begin('ID'); return 10; \nbreak;\ncase 6: this.begin('ALIAS'); return 40; \nbreak;\ncase 7: this.popState(); this.popState(); this.begin('LINE'); return 12; \nbreak;\ncase 8: this.popState(); this.popState(); return 5; \nbreak;\ncase 9: this.begin('LINE'); return 20; \nbreak;\ncase 10: this.begin('LINE'); return 22; \nbreak;\ncase 11: this.begin('LINE'); return 23; \nbreak;\ncase 12: this.begin('LINE'); return 28; \nbreak;\ncase 13: this.begin('LINE'); return 25; \nbreak;\ncase 14: this.begin('LINE'); return 27; \nbreak;\ncase 15: this.popState(); return 13; \nbreak;\ncase 16:return 21;\nbreak;\ncase 17:return 35;\nbreak;\ncase 18:return 36;\nbreak;\ncase 19:return 31;\nbreak;\ncase 20:return 29;\nbreak;\ncase 21: this.begin('ID'); return 15; \nbreak;\ncase 22: this.begin('ID'); return 16; \nbreak;\ncase 23:return 18;\nbreak;\ncase 24:return 6;\nbreak;\ncase 25:return 34;\nbreak;\ncase 26:return 5;\nbreak;\ncase 27: yy_.yytext = yy_.yytext.trim(); return 40; \nbreak;\ncase 28:return 43;\nbreak;\ncase 29:return 44;\nbreak;\ncase 30:return 41;\nbreak;\ncase 31:return 42;\nbreak;\ncase 32:return 45;\nbreak;\ncase 33:return 46;\nbreak;\ncase 34:return 47;\nbreak;\ncase 35:return 38;\nbreak;\ncase 36:return 39;\nbreak;\ncase 37:return 5;\nbreak;\ncase 38:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:((?!\\n)\\s)+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:participant\\b)/i,/^(?:[^\\->:\\n,;]+?(?=((?!\\n)\\s)+as(?!\\n)\\s|[#\\n;]|$))/i,/^(?:as\\b)/i,/^(?:(?:))/i,/^(?:loop\\b)/i,/^(?:opt\\b)/i,/^(?:alt\\b)/i,/^(?:else\\b)/i,/^(?:par\\b)/i,/^(?:and\\b)/i,/^(?:[^#\\n;]*)/i,/^(?:end\\b)/i,/^(?:left of\\b)/i,/^(?:right of\\b)/i,/^(?:over\\b)/i,/^(?:note\\b)/i,/^(?:activate\\b)/i,/^(?:deactivate\\b)/i,/^(?:title\\b)/i,/^(?:sequenceDiagram\\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\\+\\->:\\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\\n;]+)/i,/^(?:\\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"LINE\":{\"rules\":[2,3,15],\"inclusive\":false},\"ALIAS\":{\"rules\":[2,3,7,8],\"inclusive\":false},\"ID\":{\"rules\":[2,3,6],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,3,4,5,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import { logger } from '../../logger'\n\nlet actors = {}\nlet messages = []\nconst notes = []\nlet title = ''\n\nexport const addActor = function (id, name, description) {\n // Don't allow description nulling\n const old = actors[id]\n if (old && name === old.name && description == null) return\n\n // Don't allow null descriptions, either\n if (description == null) description = name\n\n actors[id] = { name: name, description: description }\n}\n\nexport const addMessage = function (idFrom, idTo, message, answer) {\n messages.push({ from: idFrom, to: idTo, message: message, answer: answer })\n}\n\nexport const addSignal = function (idFrom, idTo, message, messageType) {\n logger.debug('Adding message from=' + idFrom + ' to=' + idTo + ' message=' + message + ' type=' + messageType)\n messages.push({ from: idFrom, to: idTo, message: message, type: messageType })\n}\n\nexport const getMessages = function () {\n return messages\n}\n\nexport const getActors = function () {\n return actors\n}\nexport const getActor = function (id) {\n return actors[id]\n}\nexport const getActorKeys = function () {\n return Object.keys(actors)\n}\nexport const getTitle = function () {\n return title\n}\n\nexport const clear = function () {\n actors = {}\n messages = []\n}\n\nexport const LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21\n}\n\nexport const ARROWTYPE = {\n FILLED: 0,\n OPEN: 1\n}\n\nexport const PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2\n}\n\nexport const addNote = function (actor, placement, message) {\n const note = { actor: actor, placement: placement, message: message }\n\n // Coerce actor into a [to, from, ...] array\n const actors = [].concat(actor, actor)\n\n notes.push(note)\n messages.push({ from: actors[0], to: actors[1], message: message, type: LINETYPE.NOTE, placement: placement })\n}\n\nexport const setTitle = function (titleText) {\n title = titleText\n}\n\nexport const apply = function (param) {\n if (param instanceof Array) {\n param.forEach(function (item) {\n apply(item)\n })\n } else {\n switch (param.type) {\n case 'addActor':\n addActor(param.actor, param.actor, param.description)\n break\n case 'activeStart':\n addSignal(param.actor, undefined, undefined, param.signalType)\n break\n case 'activeEnd':\n addSignal(param.actor, undefined, undefined, param.signalType)\n break\n case 'addNote':\n addNote(param.actor, param.placement, param.text)\n break\n case 'addMessage':\n addSignal(param.from, param.to, param.msg, param.signalType)\n break\n case 'loopStart':\n addSignal(undefined, undefined, param.loopText, param.signalType)\n break\n case 'loopEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n case 'optStart':\n addSignal(undefined, undefined, param.optText, param.signalType)\n break\n case 'optEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n case 'altStart':\n addSignal(undefined, undefined, param.altText, param.signalType)\n break\n case 'else':\n addSignal(undefined, undefined, param.altText, param.signalType)\n break\n case 'altEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n case 'setTitle':\n setTitle(param.text)\n break\n case 'parStart':\n addSignal(undefined, undefined, param.parText, param.signalType)\n break\n case 'and':\n addSignal(undefined, undefined, param.parText, param.signalType)\n break\n case 'parEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n }\n }\n}\n\nexport default {\n addActor,\n addMessage,\n addSignal,\n getMessages,\n getActors,\n getActor,\n getActorKeys,\n getTitle,\n clear,\n LINETYPE,\n ARROWTYPE,\n PLACEMENT,\n addNote,\n setTitle,\n apply\n}\n","import * as d3 from 'd3'\n\nimport svgDraw from './svgDraw'\nimport { logger } from '../../logger'\nimport { parser } from './parser/sequenceDiagram'\nimport sequenceDb from './sequenceDb'\n\nparser.yy = sequenceDb\n\nconst conf = {\n\n diagramMarginX: 50,\n diagramMarginY: 30,\n // Margin between actors\n actorMargin: 50,\n // Width of actor boxes\n width: 150,\n // Height of actor boxes\n height: 65,\n actorFontSize: 14,\n actorFontFamily: '\"Open-Sans\", \"sans-serif\"',\n // Margin around loop boxes\n boxMargin: 10,\n boxTextMargin: 5,\n noteMargin: 10,\n // Space between messages\n messageMargin: 35,\n // mirror actors under diagram\n mirrorActors: false,\n // Depending on css styling this might need adjustment\n // Prolongs the edge of the diagram downwards\n bottomMarginAdj: 1,\n\n // width of activation box\n activationWidth: 10,\n\n // text placement as: tspan | fo | old only text as before\n textPlacement: 'tspan'\n}\n\nexport const bounds = {\n data: {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined\n },\n verticalPos: 0,\n\n sequenceItems: [],\n activations: [],\n init: function () {\n this.sequenceItems = []\n this.activations = []\n this.data = {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined\n }\n this.verticalPos = 0\n },\n updateVal: function (obj, key, val, fun) {\n if (typeof obj[key] === 'undefined') {\n obj[key] = val\n } else {\n obj[key] = fun(val, obj[key])\n }\n },\n updateBounds: function (startx, starty, stopx, stopy) {\n const _self = this\n let cnt = 0\n function updateFn (type) {\n return function updateItemBounds (item) {\n cnt++\n // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems\n const n = _self.sequenceItems.length - cnt + 1\n\n _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min)\n _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max)\n\n _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min)\n _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max)\n\n if (!(type === 'activation')) {\n _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min)\n _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max)\n\n _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min)\n _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max)\n }\n }\n }\n\n this.sequenceItems.forEach(updateFn())\n this.activations.forEach(updateFn('activation'))\n },\n insert: function (startx, starty, stopx, stopy) {\n const _startx = Math.min(startx, stopx)\n const _stopx = Math.max(startx, stopx)\n const _starty = Math.min(starty, stopy)\n const _stopy = Math.max(starty, stopy)\n\n this.updateVal(bounds.data, 'startx', _startx, Math.min)\n this.updateVal(bounds.data, 'starty', _starty, Math.min)\n this.updateVal(bounds.data, 'stopx', _stopx, Math.max)\n this.updateVal(bounds.data, 'stopy', _stopy, Math.max)\n\n this.updateBounds(_startx, _starty, _stopx, _stopy)\n },\n newActivation: function (message, diagram) {\n const actorRect = parser.yy.getActors()[message.from.actor]\n const stackedSize = actorActivations(message.from.actor).length\n const x = actorRect.x + conf.width / 2 + (stackedSize - 1) * conf.activationWidth / 2\n this.activations.push({\n startx: x,\n starty: this.verticalPos + 2,\n stopx: x + conf.activationWidth,\n stopy: undefined,\n actor: message.from.actor,\n anchored: svgDraw.anchorElement(diagram)\n })\n },\n endActivation: function (message) {\n // find most recent activation for given actor\n const lastActorActivationIdx = this.activations\n .map(function (activation) { return activation.actor })\n .lastIndexOf(message.from.actor)\n const activation = this.activations.splice(lastActorActivationIdx, 1)[0]\n return activation\n },\n newLoop: function (title) {\n this.sequenceItems.push({ startx: undefined, starty: this.verticalPos, stopx: undefined, stopy: undefined, title: title })\n },\n endLoop: function () {\n const loop = this.sequenceItems.pop()\n return loop\n },\n addSectionToLoop: function (message) {\n const loop = this.sequenceItems.pop()\n loop.sections = loop.sections || []\n loop.sectionTitles = loop.sectionTitles || []\n loop.sections.push(bounds.getVerticalPos())\n loop.sectionTitles.push(message)\n this.sequenceItems.push(loop)\n },\n bumpVerticalPos: function (bump) {\n this.verticalPos = this.verticalPos + bump\n this.data.stopy = this.verticalPos\n },\n getVerticalPos: function () {\n return this.verticalPos\n },\n getBounds: function () {\n return this.data\n }\n}\n\nconst _drawLongText = (text, x, y, g, width) => {\n let textHeight = 0\n const lines = text.split(/<br\\/?>/ig)\n for (const line of lines) {\n const textObj = svgDraw.getTextObj()\n textObj.x = x\n textObj.y = y + textHeight\n textObj.textMargin = conf.noteMargin\n textObj.dy = '1em'\n textObj.text = line\n textObj.class = 'noteText'\n const textElem = svgDraw.drawText(g, textObj, width)\n textHeight += (textElem._groups || textElem)[0][0].getBBox().height\n }\n return textHeight\n}\n\n/**\n * Draws an actor in the diagram with the attaced line\n * @param center - The center of the the actor\n * @param pos The position if the actor in the liost of actors\n * @param description The text in the box\n */\nconst drawNote = function (elem, startx, verticalPos, msg, forceWidth) {\n const rect = svgDraw.getNoteRect()\n rect.x = startx\n rect.y = verticalPos\n rect.width = forceWidth || conf.width\n rect.class = 'note'\n\n let g = elem.append('g')\n const rectElem = svgDraw.drawRect(g, rect)\n\n const textHeight = _drawLongText(msg.message, startx - 4, verticalPos + 24, g, rect.width - conf.noteMargin)\n\n bounds.insert(startx, verticalPos, startx + rect.width, verticalPos + 2 * conf.noteMargin + textHeight)\n rectElem.attr('height', textHeight + 2 * conf.noteMargin)\n bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin)\n}\n\n/**\n * Draws a message\n * @param elem\n * @param startx\n * @param stopx\n * @param verticalPos\n * @param txtCenter\n * @param msg\n */\nconst drawMessage = function (elem, startx, stopx, verticalPos, msg) {\n const g = elem.append('g')\n const txtCenter = startx + (stopx - startx) / 2\n\n const textElem = g.append('text') // text label for the x axis\n .attr('x', txtCenter)\n .attr('y', verticalPos - 7)\n .style('text-anchor', 'middle')\n .attr('class', 'messageText')\n .text(msg.message)\n\n let textWidth = (textElem._groups || textElem)[0][0].getBBox().width\n\n let line\n if (startx === stopx) {\n if (conf.rightAngles) {\n line = g.append('path').attr('d', `M ${startx},${verticalPos} H ${startx + (conf.width / 2)} V ${verticalPos + 25} H ${startx}`)\n } else {\n line = g.append('path')\n .attr('d', 'M ' + startx + ',' + verticalPos + ' C ' + (startx + 60) + ',' + (verticalPos - 10) + ' ' + (startx + 60) + ',' +\n (verticalPos + 30) + ' ' + startx + ',' + (verticalPos + 20))\n }\n\n bounds.bumpVerticalPos(30)\n const dx = Math.max(textWidth / 2, 100)\n bounds.insert(startx - dx, bounds.getVerticalPos() - 10, stopx + dx, bounds.getVerticalPos())\n } else {\n line = g.append('line')\n line.attr('x1', startx)\n line.attr('y1', verticalPos)\n line.attr('x2', stopx)\n line.attr('y2', verticalPos)\n bounds.insert(startx, bounds.getVerticalPos() - 10, stopx, bounds.getVerticalPos())\n }\n // Make an SVG Container\n // Draw the line\n if (msg.type === parser.yy.LINETYPE.DOTTED || msg.type === parser.yy.LINETYPE.DOTTED_CROSS || msg.type === parser.yy.LINETYPE.DOTTED_OPEN) {\n line.style('stroke-dasharray', ('3, 3'))\n line.attr('class', 'messageLine1')\n } else {\n line.attr('class', 'messageLine0')\n }\n\n let url = ''\n if (conf.arrowMarkerAbsolute) {\n url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search\n url = url.replace(/\\(/g, '\\\\(')\n url = url.replace(/\\)/g, '\\\\)')\n }\n\n line.attr('stroke-width', 2)\n line.attr('stroke', 'black')\n line.style('fill', 'none') // remove any fill colour\n if (msg.type === parser.yy.LINETYPE.SOLID || msg.type === parser.yy.LINETYPE.DOTTED) {\n line.attr('marker-end', 'url(' + url + '#arrowhead)')\n }\n\n if (msg.type === parser.yy.LINETYPE.SOLID_CROSS || msg.type === parser.yy.LINETYPE.DOTTED_CROSS) {\n line.attr('marker-end', 'url(' + url + '#crosshead)')\n }\n}\n\nexport const drawActors = function (diagram, actors, actorKeys, verticalPos) {\n // Draw the actors\n for (let i = 0; i < actorKeys.length; i++) {\n const key = actorKeys[i]\n\n // Add some rendering data to the object\n actors[key].x = i * conf.actorMargin + i * conf.width\n actors[key].y = verticalPos\n actors[key].width = conf.diagramMarginX\n actors[key].height = conf.diagramMarginY\n\n // Draw the box with the attached line\n svgDraw.drawActor(diagram, actors[key].x, verticalPos, actors[key].description, conf)\n bounds.insert(actors[key].x, verticalPos, actors[key].x + conf.width, conf.height)\n }\n\n // Add a margin between the actor boxes and the first arrow\n bounds.bumpVerticalPos(conf.height)\n}\n\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\n\nconst actorActivations = function (actor) {\n return bounds.activations.filter(function (activation) {\n return activation.actor === actor\n })\n}\n\nconst actorFlowVerticaBounds = function (actor) {\n // handle multiple stacked activations for same actor\n const actors = parser.yy.getActors()\n const activations = actorActivations(actor)\n\n const left = activations.reduce(function (acc, activation) { return Math.min(acc, activation.startx) }, actors[actor].x + conf.width / 2)\n const right = activations.reduce(function (acc, activation) { return Math.max(acc, activation.stopx) }, actors[actor].x + conf.width / 2)\n return [left, right]\n}\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n parser.yy.clear()\n parser.parse(text + '\\n')\n\n bounds.init()\n const diagram = d3.select(`[id=\"${id}\"]`)\n\n let startx\n let stopx\n let forceWidth\n\n // Fetch data from the parsing\n const actors = parser.yy.getActors()\n const actorKeys = parser.yy.getActorKeys()\n const messages = parser.yy.getMessages()\n const title = parser.yy.getTitle()\n drawActors(diagram, actors, actorKeys, 0)\n\n // The arrow head definition is attached to the svg once\n svgDraw.insertArrowHead(diagram)\n svgDraw.insertArrowCrossHead(diagram)\n\n function activeEnd (msg, verticalPos) {\n const activationData = bounds.endActivation(msg)\n if (activationData.starty + 18 > verticalPos) {\n activationData.starty = verticalPos - 6\n verticalPos += 12\n }\n svgDraw.drawActivation(diagram, activationData, verticalPos, conf, actorActivations(msg.from.actor).length)\n\n bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos)\n }\n\n // const lastMsg\n\n // Draw the messages/signals\n messages.forEach(function (msg) {\n let loopData\n switch (msg.type) {\n case parser.yy.LINETYPE.NOTE:\n bounds.bumpVerticalPos(conf.boxMargin)\n\n startx = actors[msg.from].x\n stopx = actors[msg.to].x\n\n if (msg.placement === parser.yy.PLACEMENT.RIGHTOF) {\n drawNote(diagram, startx + (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg)\n } else if (msg.placement === parser.yy.PLACEMENT.LEFTOF) {\n drawNote(diagram, startx - (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg)\n } else if (msg.to === msg.from) {\n // Single-actor over\n drawNote(diagram, startx, bounds.getVerticalPos(), msg)\n } else {\n // Multi-actor over\n forceWidth = Math.abs(startx - stopx) + conf.actorMargin\n drawNote(diagram, (startx + stopx + conf.width - forceWidth) / 2, bounds.getVerticalPos(), msg,\n forceWidth)\n }\n break\n case parser.yy.LINETYPE.ACTIVE_START:\n bounds.newActivation(msg, diagram)\n break\n case parser.yy.LINETYPE.ACTIVE_END:\n activeEnd(msg, bounds.getVerticalPos())\n break\n case parser.yy.LINETYPE.LOOP_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.LOOP_END:\n loopData = bounds.endLoop()\n\n svgDraw.drawLoop(diagram, loopData, 'loop', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.OPT_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.OPT_END:\n loopData = bounds.endLoop()\n\n svgDraw.drawLoop(diagram, loopData, 'opt', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.ALT_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.ALT_ELSE:\n bounds.bumpVerticalPos(conf.boxMargin)\n loopData = bounds.addSectionToLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.ALT_END:\n loopData = bounds.endLoop()\n\n svgDraw.drawLoop(diagram, loopData, 'alt', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.PAR_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.PAR_AND:\n bounds.bumpVerticalPos(conf.boxMargin)\n loopData = bounds.addSectionToLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.PAR_END:\n loopData = bounds.endLoop()\n svgDraw.drawLoop(diagram, loopData, 'par', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n default:\n try {\n // lastMsg = msg\n bounds.bumpVerticalPos(conf.messageMargin)\n const fromBounds = actorFlowVerticaBounds(msg.from)\n const toBounds = actorFlowVerticaBounds(msg.to)\n const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0\n const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1\n startx = fromBounds[fromIdx]\n stopx = toBounds[toIdx]\n\n const verticalPos = bounds.getVerticalPos()\n drawMessage(diagram, startx, stopx, verticalPos, msg)\n const allBounds = fromBounds.concat(toBounds)\n bounds.insert(Math.min.apply(null, allBounds), verticalPos, Math.max.apply(null, allBounds), verticalPos)\n } catch (e) {\n logger.error('error while drawing message', e)\n }\n }\n })\n\n if (conf.mirrorActors) {\n // Draw actors below diagram\n bounds.bumpVerticalPos(conf.boxMargin * 2)\n drawActors(diagram, actors, actorKeys, bounds.getVerticalPos())\n }\n\n const box = bounds.getBounds()\n\n // Adjust line height of actor lines now that the height of the diagram is known\n logger.debug('For line height fix Querying: #' + id + ' .actor-line')\n const actorLines = d3.selectAll('#' + id + ' .actor-line')\n actorLines.attr('y2', box.stopy)\n\n let height = box.stopy - box.starty + 2 * conf.diagramMarginY\n if (conf.mirrorActors) {\n height = height - conf.boxMargin + conf.bottomMarginAdj\n }\n\n const width = (box.stopx - box.startx) + (2 * conf.diagramMarginX)\n\n if (title) {\n diagram.append('text')\n .text(title)\n .attr('x', ((box.stopx - box.startx) / 2) - (2 * conf.diagramMarginX))\n .attr('y', -25)\n }\n\n if (conf.useMaxWidth) {\n diagram.attr('height', '100%')\n diagram.attr('width', '100%')\n diagram.attr('style', 'max-width:' + (width) + 'px;')\n } else {\n diagram.attr('height', height)\n diagram.attr('width', width)\n }\n const extraVertForTitle = title ? 40 : 0\n diagram.attr('viewBox', (box.startx - conf.diagramMarginX) + ' -' + (conf.diagramMarginY + extraVertForTitle) + ' ' + width + ' ' + (height + extraVertForTitle))\n}\n\nexport default {\n bounds,\n drawActors,\n setConf,\n draw\n}\n","export const drawRect = function (elem, rectData) {\n const rectElem = elem.append('rect')\n rectElem.attr('x', rectData.x)\n rectElem.attr('y', rectData.y)\n rectElem.attr('fill', rectData.fill)\n rectElem.attr('stroke', rectData.stroke)\n rectElem.attr('width', rectData.width)\n rectElem.attr('height', rectData.height)\n rectElem.attr('rx', rectData.rx)\n rectElem.attr('ry', rectData.ry)\n\n if (typeof rectData.class !== 'undefined') {\n rectElem.attr('class', rectData.class)\n }\n\n return rectElem\n}\n\nexport const drawText = function (elem, textData, width) {\n // Remove and ignore br:s\n const nText = textData.text.replace(/<br\\/?>/ig, ' ')\n\n const textElem = elem.append('text')\n textElem.attr('x', textData.x)\n textElem.attr('y', textData.y)\n textElem.style('text-anchor', textData.anchor)\n textElem.attr('fill', textData.fill)\n if (typeof textData.class !== 'undefined') {\n textElem.attr('class', textData.class)\n }\n\n const span = textElem.append('tspan')\n span.attr('x', textData.x + textData.textMargin * 2)\n span.attr('fill', textData.fill)\n span.text(nText)\n\n return textElem\n}\n\nexport const drawLabel = function (elem, txtObject) {\n function genPoints (x, y, width, height, cut) {\n return x + ',' + y + ' ' +\n (x + width) + ',' + y + ' ' +\n (x + width) + ',' + (y + height - cut) + ' ' +\n (x + width - cut * 1.2) + ',' + (y + height) + ' ' +\n (x) + ',' + (y + height)\n }\n const polygon = elem.append('polygon')\n polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7))\n polygon.attr('class', 'labelBox')\n\n txtObject.y = txtObject.y + txtObject.labelMargin\n txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin\n drawText(elem, txtObject)\n}\n\nlet actorCnt = -1\n/**\n * Draws an actor in the diagram with the attaced line\n * @param center - The center of the the actor\n * @param pos The position if the actor in the liost of actors\n * @param description The text in the box\n */\nexport const drawActor = function (elem, left, verticalPos, description, conf) {\n const center = left + (conf.width / 2)\n const g = elem.append('g')\n if (verticalPos === 0) {\n actorCnt++\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', 5)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n }\n\n const rect = getNoteRect()\n rect.x = left\n rect.y = verticalPos\n rect.fill = '#eaeaea'\n rect.width = conf.width\n rect.height = conf.height\n rect.class = 'actor'\n rect.rx = 3\n rect.ry = 3\n drawRect(g, rect)\n\n _drawTextCandidateFunc(conf)(description, g,\n rect.x, rect.y, rect.width, rect.height, { 'class': 'actor' }, conf)\n}\n\nexport const anchorElement = function (elem) {\n return elem.append('g')\n}\n/**\n * Draws an actor in the diagram with the attaced line\n * @param elem - element to append activation rect\n * @param bounds - activation box bounds\n * @param verticalPos - precise y cooridnate of bottom activation box edge\n */\nexport const drawActivation = function (elem, bounds, verticalPos, conf, actorActivations) {\n const rect = getNoteRect()\n const g = bounds.anchored\n rect.x = bounds.startx\n rect.y = bounds.starty\n rect.class = 'activation' + (actorActivations % 3) // Will evaluate to 0, 1 or 2\n rect.width = bounds.stopx - bounds.startx\n rect.height = verticalPos - bounds.starty\n drawRect(g, rect)\n}\n\n/**\n * Draws an actor in the diagram with the attaced line\n * @param center - The center of the the actor\n * @param pos The position if the actor in the list of actors\n * @param description The text in the box\n */\nexport const drawLoop = function (elem, bounds, labelText, conf) {\n const g = elem.append('g')\n const drawLoopLine = function (startx, starty, stopx, stopy) {\n return g.append('line')\n .attr('x1', startx)\n .attr('y1', starty)\n .attr('x2', stopx)\n .attr('y2', stopy)\n .attr('class', 'loopLine')\n }\n drawLoopLine(bounds.startx, bounds.starty, bounds.stopx, bounds.starty)\n drawLoopLine(bounds.stopx, bounds.starty, bounds.stopx, bounds.stopy)\n drawLoopLine(bounds.startx, bounds.stopy, bounds.stopx, bounds.stopy)\n drawLoopLine(bounds.startx, bounds.starty, bounds.startx, bounds.stopy)\n if (typeof bounds.sections !== 'undefined') {\n bounds.sections.forEach(function (item) {\n drawLoopLine(bounds.startx, item, bounds.stopx, item).style('stroke-dasharray', '3, 3')\n })\n }\n\n let txt = getTextObj()\n txt.text = labelText\n txt.x = bounds.startx\n txt.y = bounds.starty\n txt.labelMargin = 1.5 * 10 // This is the small box that says \"loop\"\n txt.class = 'labelText' // Its size & position are fixed.\n\n drawLabel(g, txt)\n\n txt = getTextObj()\n txt.text = '[ ' + bounds.title + ' ]'\n txt.x = bounds.startx + (bounds.stopx - bounds.startx) / 2\n txt.y = bounds.starty + 1.5 * conf.boxMargin\n txt.anchor = 'middle'\n txt.class = 'loopText'\n\n drawText(g, txt)\n\n if (typeof bounds.sectionTitles !== 'undefined') {\n bounds.sectionTitles.forEach(function (item, idx) {\n if (item !== '') {\n txt.text = '[ ' + item + ' ]'\n txt.y = bounds.sections[idx] + 1.5 * conf.boxMargin\n drawText(g, txt)\n }\n })\n }\n}\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\nexport const insertArrowHead = function (elem) {\n elem.append('defs').append('marker')\n .attr('id', 'arrowhead')\n .attr('refX', 5)\n .attr('refY', 2)\n .attr('markerWidth', 6)\n .attr('markerHeight', 4)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0,0 V 4 L6,2 Z') // this is actual shape for arrowhead\n}\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\nexport const insertArrowCrossHead = function (elem) {\n const defs = elem.append('defs')\n const marker = defs.append('marker')\n .attr('id', 'crosshead')\n .attr('markerWidth', 15)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .attr('refX', 16)\n .attr('refY', 4)\n\n // The arrow\n marker.append('path')\n .attr('fill', 'black')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', ('0, 0'))\n .attr('stroke-width', '1px')\n .attr('d', 'M 9,2 V 6 L16,4 Z')\n\n // The cross\n marker.append('path')\n .attr('fill', 'none')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', ('0, 0'))\n .attr('stroke-width', '1px')\n .attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7')\n // this is actual shape for arrowhead\n}\n\nexport const getTextObj = function () {\n const txt = {\n x: 0,\n y: 0,\n 'fill': undefined,\n 'text-anchor': 'start',\n style: '#666',\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0\n }\n return txt\n}\n\nexport const getNoteRect = function () {\n const rect = {\n x: 0,\n y: 0,\n fill: '#EDF2AE',\n stroke: '#666',\n width: 100,\n anchor: 'start',\n height: 100,\n rx: 0,\n ry: 0\n }\n return rect\n}\n\nconst _drawTextCandidateFunc = (function () {\n function byText (content, g, x, y, width, height, textAttrs) {\n const text = g.append('text')\n .attr('x', x + width / 2).attr('y', y + height / 2 + 5)\n .style('text-anchor', 'middle')\n .text(content)\n _setTextAttrs(text, textAttrs)\n }\n\n function byTspan (content, g, x, y, width, height, textAttrs, conf) {\n const { actorFontSize, actorFontFamily } = conf\n\n const lines = content.split(/<br\\/?>/ig)\n for (let i = 0; i < lines.length; i++) {\n const dy = (i * actorFontSize) - (actorFontSize * (lines.length - 1) / 2)\n const text = g.append('text')\n .attr('x', x + width / 2).attr('y', y)\n .style('text-anchor', 'middle')\n .style('font-size', actorFontSize)\n .style('font-family', actorFontFamily)\n text.append('tspan')\n .attr('x', x + width / 2).attr('dy', dy)\n .text(lines[i])\n\n text.attr('y', y + height / 2.0)\n .attr('dominant-baseline', 'central')\n .attr('alignment-baseline', 'central')\n\n _setTextAttrs(text, textAttrs)\n }\n }\n\n function byFo (content, g, x, y, width, height, textAttrs, conf) {\n const s = g.append('switch')\n const f = s.append('foreignObject')\n .attr('x', x).attr('y', y)\n .attr('width', width).attr('height', height)\n\n const text = f.append('div').style('display', 'table')\n .style('height', '100%').style('width', '100%')\n\n text.append('div').style('display', 'table-cell')\n .style('text-align', 'center').style('vertical-align', 'middle')\n .text(content)\n\n byTspan(content, s, x, y, width, height, textAttrs, conf)\n _setTextAttrs(text, textAttrs)\n }\n\n function _setTextAttrs (toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key])\n }\n }\n }\n\n return function (conf) {\n return conf.textPlacement === 'fo' ? byFo : (\n conf.textPlacement === 'old' ? byText : byTspan)\n }\n})()\n\nexport default {\n drawRect,\n drawText,\n drawLabel,\n drawActor,\n anchorElement,\n drawActivation,\n drawLoop,\n insertArrowHead,\n insertArrowCrossHead,\n getTextObj,\n getNoteRect\n}\n","import moment from 'moment-mini'\n\nexport const LEVELS = {\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5\n}\n\nexport const logger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n fatal: () => {}\n}\n\nexport const setLogLevel = function (level) {\n logger.debug = () => {}\n logger.info = () => {}\n logger.warn = () => {}\n logger.error = () => {}\n logger.fatal = () => {}\n if (level <= LEVELS.fatal) {\n logger.fatal = console.log.bind(console, '\\x1b[35m', format('FATAL'))\n }\n if (level <= LEVELS.error) {\n logger.error = console.log.bind(console, '\\x1b[31m', format('ERROR'))\n }\n if (level <= LEVELS.warn) {\n logger.warn = console.log.bind(console, `\\x1b[33m`, format('WARN'))\n }\n if (level <= LEVELS.info) {\n logger.info = console.log.bind(console, '\\x1b[34m', format('INFO'))\n }\n if (level <= LEVELS.debug) {\n logger.debug = console.log.bind(console, '\\x1b[32m', format('DEBUG'))\n }\n}\n\nconst format = (level) => {\n const time = moment().format('HH:mm:ss.SSS')\n return `${time} : ${level} : `\n}\n","/**\n * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid functionality and to render\n * the diagrams to svg code.\n */\nimport he from 'he'\n\nimport mermaidAPI from './mermaidAPI'\nimport { logger } from './logger'\n\n/**\n * ## init\n * Function that goes through the document to find the chart definitions in there and render them.\n *\n * The function tags the processed attributes with the attribute data-processed and ignores found elements with the\n * attribute already set. This way the init function can be triggered several times.\n *\n * Optionally, `init` can accept in the second argument one of the following:\n * - a DOM Node\n * - an array of DOM nodes (as would come from a jQuery selector)\n * - a W3C selector, a la `.mermaid`\n *\n * ```mermaid\n * graph LR;\n * a(Find elements)-->b{Processed}\n * b-->|Yes|c(Leave element)\n * b-->|No |d(Transform)\n * ```\n * Renders the mermaid diagrams\n * @param nodes a css selector or an array of nodes\n */\nconst init = function () {\n const conf = mermaidAPI.getConfig()\n logger.debug('Starting rendering diagrams')\n let nodes\n if (arguments.length >= 2) {\n /*! sequence config was passed as #1 */\n if (typeof arguments[0] !== 'undefined') {\n mermaid.sequenceConfig = arguments[0]\n }\n\n nodes = arguments[1]\n } else {\n nodes = arguments[0]\n }\n\n // if last argument is a function this is the callback function\n let callback\n if (typeof arguments[arguments.length - 1] === 'function') {\n callback = arguments[arguments.length - 1]\n logger.debug('Callback function found')\n } else {\n if (typeof conf.mermaid !== 'undefined') {\n if (typeof conf.mermaid.callback === 'function') {\n callback = conf.mermaid.callback\n logger.debug('Callback function found')\n } else {\n logger.debug('No Callback function found')\n }\n }\n }\n nodes = nodes === undefined ? document.querySelectorAll('.mermaid')\n : typeof nodes === 'string' ? document.querySelectorAll(nodes)\n : nodes instanceof window.Node ? [nodes]\n : nodes // Last case - sequence config was passed pick next\n\n logger.debug('Start On Load before: ' + mermaid.startOnLoad)\n if (typeof mermaid.startOnLoad !== 'undefined') {\n logger.debug('Start On Load inner: ' + mermaid.startOnLoad)\n mermaidAPI.initialize({ startOnLoad: mermaid.startOnLoad })\n }\n\n if (typeof mermaid.ganttConfig !== 'undefined') {\n mermaidAPI.initialize({ gantt: mermaid.ganttConfig })\n }\n\n let txt\n\n for (let i = 0; i < nodes.length; i++) {\n const element = nodes[i]\n\n /*! Check if previously processed */\n if (!element.getAttribute('data-processed')) {\n element.setAttribute('data-processed', true)\n } else {\n continue\n }\n\n const id = `mermaid-${Date.now()}`\n\n // Fetch the graph definition including tags\n txt = element.innerHTML\n\n // transforms the html to pure text\n txt = he.decode(txt).trim().replace(/<br>/ig, '<br/>')\n\n mermaidAPI.render(id, txt, (svgCode, bindFunctions) => {\n element.innerHTML = svgCode\n if (typeof callback !== 'undefined') {\n callback(id)\n }\n bindFunctions(element)\n }, element)\n }\n}\n\nconst initialize = function (config) {\n logger.debug('Initializing mermaid ')\n if (typeof config.mermaid !== 'undefined') {\n if (typeof config.mermaid.startOnLoad !== 'undefined') {\n mermaid.startOnLoad = config.mermaid.startOnLoad\n }\n if (typeof config.mermaid.htmlLabels !== 'undefined') {\n mermaid.htmlLabels = config.mermaid.htmlLabels\n }\n }\n mermaidAPI.initialize(config)\n}\n\n/**\n * ##contentLoaded\n * Callback function that is called when page is loaded. This functions fetches configuration for mermaid rendering and\n * calls init for rendering the mermaid diagrams on the page.\n */\nconst contentLoaded = function () {\n let config\n\n if (mermaid.startOnLoad) {\n // No config found, do check API config\n config = mermaidAPI.getConfig()\n if (config.startOnLoad) {\n mermaid.init()\n }\n } else {\n if (typeof mermaid.startOnLoad === 'undefined') {\n logger.debug('In start, no config')\n config = mermaidAPI.getConfig()\n if (config.startOnLoad) {\n mermaid.init()\n }\n }\n }\n}\n\nif (typeof document !== 'undefined') {\n /*!\n * Wait for document loaded before starting the execution\n */\n window.addEventListener('load', function () {\n contentLoaded()\n }, false)\n}\n\nconst mermaid = {\n startOnLoad: true,\n htmlLabels: true,\n\n mermaidAPI,\n parse: mermaidAPI.parse,\n render: mermaidAPI.render,\n\n init,\n initialize,\n\n contentLoaded\n}\n\nexport default mermaid\n","/**\n * ---\n * title: mermaidAPI\n * order: 5\n * ---\n * # mermaidAPI\n * This is the api to be used when handling the integration with the web page instead of using the default integration\n * (mermaid.js).\n *\n * The core of this api is the **render** function that given a graph definitionas text renders the graph/diagram and\n * returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it\n * somewhere in the page or something completely different.\n*/\nimport * as d3 from 'd3'\nimport scope from 'scope-css'\nimport pkg from '../package.json'\n\nimport { logger, setLogLevel } from './logger'\nimport utils from './utils'\nimport flowRenderer from './diagrams/flowchart/flowRenderer'\nimport flowParser from './diagrams/flowchart/parser/flow'\nimport flowDb from './diagrams/flowchart/flowDb'\nimport sequenceRenderer from './diagrams/sequence/sequenceRenderer'\nimport sequenceParser from './diagrams/sequence/parser/sequenceDiagram'\nimport sequenceDb from './diagrams/sequence/sequenceDb'\nimport ganttRenderer from './diagrams/gantt/ganttRenderer'\nimport ganttParser from './diagrams/gantt/parser/gantt'\nimport ganttDb from './diagrams/gantt/ganttDb'\nimport classRenderer from './diagrams/class/classRenderer'\nimport classParser from './diagrams/class/parser/classDiagram'\nimport classDb from './diagrams/class/classDb'\nimport gitGraphRenderer from './diagrams/git/gitGraphRenderer'\nimport gitGraphParser from './diagrams/git/parser/gitGraph'\nimport gitGraphAst from './diagrams/git/gitGraphAst'\nimport infoRenderer from './diagrams/info/infoRenderer'\nimport infoParser from './diagrams/info/parser/info'\nimport infoDb from './diagrams/info/infoDb'\n\nconst themes = {}\nfor (const themeName of ['default', 'forest', 'dark', 'neutral']) {\n themes[themeName] = require(`./themes/${themeName}/index.scss`)\n}\n\n/**\n * ## Configuration\n * These are the default options which can be overridden with the initialization call as in the example below:\n * ```\n * mermaid.initialize({\n * flowchart:{\n * htmlLabels: false\n * }\n * });\n * ```\n */\nconst config = {\n\n /** theme , the CSS style sheet\n *\n * **theme** - Choose one of the built-in themes: default, forest, dark or neutral. To disable any pre-defined mermaid theme, use \"null\".\n * **themeCSS** - Use your own CSS. This overrides **theme**.\n *```\n * \"theme\": \"forest\",\n * \"themeCSS\": \".node rect { fill: red; }\"\n *```\n */\n\n theme: 'default',\n themeCSS: undefined,\n\n /**\n * logLevel , decides the amount of logging to be used.\n * * debug: 1\n * * info: 2\n * * warn: 3\n * * error: 4\n * * fatal: 5\n */\n logLevel: 5,\n\n /**\n * **startOnLoad** - This options controls whether or mermaid starts when the page loads\n */\n startOnLoad: true,\n\n /**\n * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or\n * an anchor, #. This matters if you are using base tag settings.\n */\n arrowMarkerAbsolute: false,\n\n /**\n * ### flowchart\n * *The object containing configurations specific for flowcharts*\n */\n flowchart: {\n /**\n * **htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels\n * on the edges\n */\n htmlLabels: true,\n\n curve: 'linear'\n },\n\n /**\n * ### sequenceDiagram\n * The object containing configurations specific for sequence diagrams\n */\n sequence: {\n\n /**\n * **diagramMarginX** - margin to the right and left of the sequence diagram\n */\n diagramMarginX: 50,\n\n /**\n * **diagramMarginY** - margin to the over and under the sequence diagram\n */\n diagramMarginY: 10,\n\n /**\n * **actorMargin** - Margin between actors\n */\n actorMargin: 50,\n\n /**\n * **width** - Width of actor boxes\n */\n width: 150,\n\n /**\n * **height** - Height of actor boxes\n */\n height: 65,\n\n /**\n * **boxMargin** - Margin around loop boxes\n */\n boxMargin: 10,\n\n /**\n * **boxTextMargin** - margin around the text in loop/alt/opt boxes\n */\n boxTextMargin: 5,\n\n /**\n * **noteMargin** - margin around notes\n */\n noteMargin: 10,\n\n /**\n * **messageMargin** - Space between messages\n */\n messageMargin: 35,\n\n /**\n * **mirrorActors** - mirror actors under diagram\n */\n mirrorActors: true,\n\n /**\n * **bottomMarginAdj** - Depending on css styling this might need adjustment.\n * Prolongs the edge of the diagram downwards\n */\n bottomMarginAdj: 1,\n\n /**\n * **useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the\n * available space if not the absolute space required is used\n */\n useMaxWidth: true,\n\n /**\n * **rightAngles** - this will display arrows that start and begin at the same node as right angles, rather than a curve\n */\n rightAngles: false\n },\n\n /** ### gantt\n * The object containing configurations specific for gantt diagrams*\n */\n gantt: {\n /**\n * **titleTopMargin** - margin top for the text over the gantt diagram\n */\n titleTopMargin: 25,\n\n /**\n * **barHeight** - the height of the bars in the graph\n */\n barHeight: 20,\n\n /**\n * **barGap** - the margin between the different activities in the gantt diagram\n */\n barGap: 4,\n\n /**\n * **topPadding** - margin between title and gantt diagram and between axis and gantt diagram.\n */\n topPadding: 50,\n\n /**\n * **leftPadding** - the space allocated for the section name to the left of the activities.\n */\n leftPadding: 75,\n\n /**\n * **gridLineStartPadding** - Vertical starting position of the grid lines\n */\n gridLineStartPadding: 35,\n\n /**\n * **fontSize** - font size ...\n */\n fontSize: 11,\n\n /**\n * **fontFamily** - font family ...\n */\n fontFamily: '\"Open-Sans\", \"sans-serif\"',\n\n /**\n * **numberSectionStyles** - the number of alternating section styles\n */\n numberSectionStyles: 4,\n\n /**\n * **axisFormat** - datetime format of the axis, this might need adjustment to match your locale and preferences\n */\n axisFormat: '%Y-%m-%d'\n },\n class: {},\n git: {}\n}\n\nsetLogLevel(config.logLevel)\n\nfunction parse (text) {\n const graphType = utils.detectType(text)\n let parser\n\n logger.debug('Type ' + graphType)\n switch (graphType) {\n case 'git':\n parser = gitGraphParser\n parser.parser.yy = gitGraphAst\n break\n case 'flowchart':\n parser = flowParser\n parser.parser.yy = flowDb\n break\n case 'sequence':\n parser = sequenceParser\n parser.parser.yy = sequenceDb\n break\n case 'gantt':\n parser = ganttParser\n parser.parser.yy = ganttDb\n break\n case 'class':\n parser = classParser\n parser.parser.yy = classDb\n break\n case 'info':\n logger.debug('info info info')\n parser = infoParser\n parser.parser.yy = infoDb\n break\n }\n\n parser.parser.yy.parseError = (str, hash) => {\n const error = { str, hash }\n throw error\n }\n\n parser.parse(text)\n}\n\nexport const encodeEntities = function (text) {\n let txt = text\n\n txt = txt.replace(/style.*:\\S*#.*;/g, function (s) {\n const innerTxt = s.substring(0, s.length - 1)\n return innerTxt\n })\n txt = txt.replace(/classDef.*:\\S*#.*;/g, function (s) {\n const innerTxt = s.substring(0, s.length - 1)\n return innerTxt\n })\n\n txt = txt.replace(/#\\w+;/g, function (s) {\n const innerTxt = s.substring(1, s.length - 1)\n\n const isInt = /^\\+?\\d+$/.test(innerTxt)\n if (isInt) {\n return 'fl°°' + innerTxt + '¶ß'\n } else {\n return 'fl°' + innerTxt + '¶ß'\n }\n })\n\n return txt\n}\n\nexport const decodeEntities = function (text) {\n let txt = text\n\n txt = txt.replace(/fl°°/g, function () {\n return '&#'\n })\n txt = txt.replace(/fl°/g, function () {\n return '&'\n })\n txt = txt.replace(/¶ß/g, function () {\n return ';'\n })\n\n return txt\n}\n/**\n * ##render\n * Function that renders an svg with a graph from a chart definition. Usage example below.\n *\n * ```\n * mermaidAPI.initialize({\n * startOnLoad:true\n * });\n * $(function(){\n * const graphDefinition = 'graph TB\\na-->b';\n * const cb = function(svgGraph){\n * console.log(svgGraph);\n * };\n * mermaidAPI.render('id1',graphDefinition,cb);\n * });\n *```\n * @param id the id of the element to be rendered\n * @param txt the graph definition\n * @param cb callback which is called after rendering is finished with the svg code as inparam.\n * @param container selector to element in which a div with the graph temporarily will be inserted. In one is\n * provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is\n * completed.\n */\nconst render = function (id, txt, cb, container) {\n if (typeof container !== 'undefined') {\n container.innerHTML = ''\n\n d3.select(container).append('div')\n .attr('id', 'd' + id)\n .append('svg')\n .attr('id', id)\n .attr('width', '100%')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .append('g')\n } else {\n const element = document.querySelector('#' + 'd' + id)\n if (element) {\n element.innerHTML = ''\n }\n\n d3.select('body').append('div')\n .attr('id', 'd' + id)\n .append('svg')\n .attr('id', id)\n .attr('width', '100%')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .append('g')\n }\n\n window.txt = txt\n txt = encodeEntities(txt)\n\n const element = d3.select('#d' + id).node()\n const graphType = utils.detectType(txt)\n\n // insert inline style into svg\n const svg = element.firstChild\n const firstChild = svg.firstChild\n\n // pre-defined theme\n let style = themes[config.theme]\n if (style === undefined) {\n style = ''\n }\n\n // user provided theme CSS\n if (config.themeCSS !== undefined) {\n style += `\\n${config.themeCSS}`\n }\n\n // classDef\n if (graphType === 'flowchart') {\n const classes = flowRenderer.getClasses(txt)\n for (const className in classes) {\n style += `\\n.${className} > * { ${classes[className].styles.join(' !important; ')} !important; }`\n }\n }\n\n const style1 = document.createElement('style')\n style1.innerHTML = scope(style, `#${id}`)\n svg.insertBefore(style1, firstChild)\n\n const style2 = document.createElement('style')\n const cs = window.getComputedStyle(svg)\n style2.innerHTML = `#${id} {\n color: ${cs.color};\n font: ${cs.font};\n }`\n svg.insertBefore(style2, firstChild)\n\n switch (graphType) {\n case 'git':\n config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n gitGraphRenderer.setConf(config.git)\n gitGraphRenderer.draw(txt, id, false)\n break\n case 'flowchart':\n config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n flowRenderer.setConf(config.flowchart)\n flowRenderer.draw(txt, id, false)\n break\n case 'sequence':\n config.sequence.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n if (config.sequenceDiagram) { // backwards compatibility\n sequenceRenderer.setConf(Object.assign(config.sequence, config.sequenceDiagram))\n console.error('`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.')\n } else {\n sequenceRenderer.setConf(config.sequence)\n }\n sequenceRenderer.draw(txt, id)\n break\n case 'gantt':\n config.gantt.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n ganttRenderer.setConf(config.gantt)\n ganttRenderer.draw(txt, id)\n break\n case 'class':\n config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n classRenderer.setConf(config.class)\n classRenderer.draw(txt, id)\n break\n case 'info':\n config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n infoRenderer.setConf(config.class)\n infoRenderer.draw(txt, id, pkg.version)\n break\n }\n\n d3.select(`[id=\"${id}\"]`).selectAll('foreignobject > *').attr('xmlns', 'http://www.w3.org/1999/xhtml')\n\n let url = ''\n if (config.arrowMarkerAbsolute) {\n url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search\n url = url.replace(/\\(/g, '\\\\(')\n url = url.replace(/\\)/g, '\\\\)')\n }\n\n // Fix for when the base tag is used\n let svgCode = d3.select('#d' + id).node().innerHTML.replace(/url\\(#arrowhead/g, 'url(' + url + '#arrowhead', 'g')\n\n svgCode = decodeEntities(svgCode)\n\n if (typeof cb !== 'undefined') {\n cb(svgCode, flowDb.bindFunctions)\n cb(svgCode, ganttDb.bindFunctions)\n } else {\n logger.warn('CB = undefined!')\n }\n\n const node = d3.select('#d' + id).node()\n if (node !== null && typeof node.remove === 'function') {\n d3.select('#d' + id).node().remove()\n }\n\n return svgCode\n}\n\nconst setConf = function (cnf) {\n // Top level initially mermaid, gflow, sequenceDiagram and gantt\n const lvl1Keys = Object.keys(cnf)\n for (let i = 0; i < lvl1Keys.length; i++) {\n if (typeof cnf[lvl1Keys[i]] === 'object' && cnf[lvl1Keys[i]] != null) {\n const lvl2Keys = Object.keys(cnf[lvl1Keys[i]])\n\n for (let j = 0; j < lvl2Keys.length; j++) {\n logger.debug('Setting conf ', lvl1Keys[i], '-', lvl2Keys[j])\n if (typeof config[lvl1Keys[i]] === 'undefined') {\n config[lvl1Keys[i]] = {}\n }\n logger.debug('Setting config: ' + lvl1Keys[i] + ' ' + lvl2Keys[j] + ' to ' + cnf[lvl1Keys[i]][lvl2Keys[j]])\n config[lvl1Keys[i]][lvl2Keys[j]] = cnf[lvl1Keys[i]][lvl2Keys[j]]\n }\n } else {\n config[lvl1Keys[i]] = cnf[lvl1Keys[i]]\n }\n }\n}\n\nfunction initialize (options) {\n logger.debug('Initializing mermaidAPI ', pkg.version)\n // Update default config with options supplied at initialization\n if (typeof options === 'object') {\n setConf(options)\n }\n setLogLevel(config.logLevel)\n}\n\nfunction getConfig () {\n return config\n}\n\nconst mermaidAPI = {\n render,\n parse,\n initialize,\n getConfig\n}\n\nexport default mermaidAPI\n","var map = {\n\t\"./dark/index.scss\": \"./src/themes/dark/index.scss\",\n\t\"./default/index.scss\": \"./src/themes/default/index.scss\",\n\t\"./forest/index.scss\": \"./src/themes/forest/index.scss\",\n\t\"./neutral/index.scss\": \"./src/themes/neutral/index.scss\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/themes sync recursive ^\\\\.\\\\/.*\\\\/index\\\\.scss$\";","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","import * as d3 from 'd3'\nimport { logger } from './logger'\n\n/**\n * @function detectType\n * Detects the type of the graph text.\n * ```mermaid\n * graph LR\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * @param {string} text The text defining the graph\n * @returns {string} A graph definition key\n */\nexport const detectType = function (text) {\n text = text.replace(/^\\s*%%.*\\n/g, '\\n')\n logger.debug('Detecting diagram type based on the text ' + text)\n if (text.match(/^\\s*sequenceDiagram/)) {\n return 'sequence'\n }\n\n if (text.match(/^\\s*gantt/)) {\n return 'gantt'\n }\n\n if (text.match(/^\\s*classDiagram/)) {\n return 'class'\n }\n\n if (text.match(/^\\s*gitGraph/)) {\n return 'git'\n }\n\n if (text.match(/^\\s*info/)) {\n return 'info'\n }\n\n return 'flowchart'\n}\n\n/**\n * @function isSubstringInArray\n * Detects whether a substring in present in a given array\n * @param {string} str The substring to detect\n * @param {array} arr The array to search\n * @returns {number} the array index containing the substring or -1 if not present\n **/\nexport const isSubstringInArray = function (str, arr) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i].match(str)) return i\n }\n return -1\n}\n\nexport const interpolateToCurve = (interpolate, defaultCurve) => {\n if (!interpolate) {\n return defaultCurve\n }\n const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`\n return d3[curveName] || defaultCurve\n}\n\nexport default {\n detectType,\n isSubstringInArray,\n interpolateToCurve\n}\n","module.exports = require(\"d3\");","module.exports = require(\"dagre-d3-renderer\");","module.exports = require(\"dagre-d3-renderer/lib/label/add-html-label.js\");","module.exports = require(\"dagre-layout\");","module.exports = require(\"graphlibrary\");","module.exports = require(\"he\");","module.exports = require(\"lodash\");","module.exports = require(\"moment-mini\");","module.exports = require(\"scope-css\");"],"sourceRoot":""}
\No newline at end of file

Build: a7ebffa

© 2023 UNPKG

\ No newline at end of file diff --git a/static/mermaid.js b/static/mermaid.js new file mode 100644 index 0000000..410e347 --- /dev/null +++ b/static/mermaid.js @@ -0,0 +1,114244 @@ +UNPKG - mermaid

UNPKG

4.05 MBJavaScriptView Raw
1(function webpackUniversalModuleDefinition(root, factory) { +
2 if(typeof exports === 'object' && typeof module === 'object') +
3 module.exports = factory(); +
4 else if(typeof define === 'function' && define.amd) +
5 define([], factory); +
6 else if(typeof exports === 'object') +
7 exports["mermaid"] = factory(); +
8 else +
9 root["mermaid"] = factory(); +
10})(window, function() { +
11return /******/ (function(modules) { // webpackBootstrap +
12/******/ // The module cache +
13/******/ var installedModules = {}; +
14/******/ +
15/******/ // The require function +
16/******/ function __webpack_require__(moduleId) { +
17/******/ +
18/******/ // Check if module is in cache +
19/******/ if(installedModules[moduleId]) { +
20/******/ return installedModules[moduleId].exports; +
21/******/ } +
22/******/ // Create a new module (and put it into the cache) +
23/******/ var module = installedModules[moduleId] = { +
24/******/ i: moduleId, +
25/******/ l: false, +
26/******/ exports: {} +
27/******/ }; +
28/******/ +
29/******/ // Execute the module function +
30/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +
31/******/ +
32/******/ // Flag the module as loaded +
33/******/ module.l = true; +
34/******/ +
35/******/ // Return the exports of the module +
36/******/ return module.exports; +
37/******/ } +
38/******/ +
39/******/ +
40/******/ // expose the modules object (__webpack_modules__) +
41/******/ __webpack_require__.m = modules; +
42/******/ +
43/******/ // expose the module cache +
44/******/ __webpack_require__.c = installedModules; +
45/******/ +
46/******/ // define getter function for harmony exports +
47/******/ __webpack_require__.d = function(exports, name, getter) { +
48/******/ if(!__webpack_require__.o(exports, name)) { +
49/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +
50/******/ } +
51/******/ }; +
52/******/ +
53/******/ // define __esModule on exports +
54/******/ __webpack_require__.r = function(exports) { +
55/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +
56/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +
57/******/ } +
58/******/ Object.defineProperty(exports, '__esModule', { value: true }); +
59/******/ }; +
60/******/ +
61/******/ // create a fake namespace object +
62/******/ // mode & 1: value is a module id, require it +
63/******/ // mode & 2: merge all properties of value into the ns +
64/******/ // mode & 4: return value when already ns object +
65/******/ // mode & 8|1: behave like require +
66/******/ __webpack_require__.t = function(value, mode) { +
67/******/ if(mode & 1) value = __webpack_require__(value); +
68/******/ if(mode & 8) return value; +
69/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +
70/******/ var ns = Object.create(null); +
71/******/ __webpack_require__.r(ns); +
72/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +
73/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +
74/******/ return ns; +
75/******/ }; +
76/******/ +
77/******/ // getDefaultExport function for compatibility with non-harmony modules +
78/******/ __webpack_require__.n = function(module) { +
79/******/ var getter = module && module.__esModule ? +
80/******/ function getDefault() { return module['default']; } : +
81/******/ function getModuleExports() { return module; }; +
82/******/ __webpack_require__.d(getter, 'a', getter); +
83/******/ return getter; +
84/******/ }; +
85/******/ +
86/******/ // Object.prototype.hasOwnProperty.call +
87/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +
88/******/ +
89/******/ // __webpack_public_path__ +
90/******/ __webpack_require__.p = ""; +
91/******/ +
92/******/ +
93/******/ // Load entry module and return exports +
94/******/ return __webpack_require__(__webpack_require__.s = "./src/mermaid.js"); +
95/******/ }) +
96/************************************************************************/ +
97/******/ ({ +
98 +
99/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/dark/index.scss": +
100/*!*******************************************************************************************************************!*\ +
101 !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/dark/index.scss ***! +
102 \*******************************************************************************************************************/ +
103/*! no static exports found */ +
104/***/ (function(module, exports, __webpack_require__) { +
105 +
106exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false); +
107// Module +
108exports.push([module.i, "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.label {\n font-family: 'trebuchet ms', verdana, arial;\n color: #333; }\n\n.node rect,\n.node circle,\n.node ellipse,\n.node polygon {\n fill: #BDD5EA;\n stroke: purple;\n stroke-width: 1px; }\n\n.node.clickable {\n cursor: pointer; }\n\n.arrowheadPath {\n fill: lightgrey; }\n\n.edgePath .path {\n stroke: lightgrey;\n stroke-width: 1.5px; }\n\n.edgeLabel {\n background-color: #e8e8e8; }\n\n.cluster rect {\n fill: #6D6D65;\n stroke: rgba(255, 255, 255, 0.25);\n stroke-width: 1px; }\n\n.cluster text {\n fill: #F9FFFE; }\n\ndiv.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 12px;\n background: #6D6D65;\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 2px;\n pointer-events: none;\n z-index: 100; }\n\n.actor {\n stroke: #81B1DB;\n fill: #BDD5EA; }\n\ntext.actor {\n fill: black;\n stroke: none; }\n\n.actor-line {\n stroke: lightgrey; }\n\n.messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: lightgrey; }\n\n.messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: lightgrey; }\n\n#arrowhead {\n fill: lightgrey; }\n\n#crosshead path {\n fill: lightgrey !important;\n stroke: lightgrey !important; }\n\n.messageText {\n fill: lightgrey;\n stroke: none; }\n\n.labelBox {\n stroke: #81B1DB;\n fill: #BDD5EA; }\n\n.labelText {\n fill: #323D47;\n stroke: none; }\n\n.loopText {\n fill: lightgrey;\n stroke: none; }\n\n.loopLine {\n stroke-width: 2;\n stroke-dasharray: '2 2';\n stroke: #81B1DB; }\n\n.note {\n stroke: rgba(255, 255, 255, 0.25);\n fill: #fff5ad; }\n\n.noteText {\n fill: black;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 14px; }\n\n.activation0 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation1 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation2 {\n fill: #f4f4f4;\n stroke: #666; }\n\n/** Section styling */\n.section {\n stroke: none;\n opacity: 0.2; }\n\n.section0 {\n fill: rgba(255, 255, 255, 0.3); }\n\n.section2 {\n fill: #EAE8B9; }\n\n.section1,\n.section3 {\n fill: white;\n opacity: 0.2; }\n\n.sectionTitle0 {\n fill: #F9FFFE; }\n\n.sectionTitle1 {\n fill: #F9FFFE; }\n\n.sectionTitle2 {\n fill: #F9FFFE; }\n\n.sectionTitle3 {\n fill: #F9FFFE; }\n\n.sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px; }\n\n/* Grid and axis */\n.grid .tick {\n stroke: lightgrey;\n opacity: 0.3;\n shape-rendering: crispEdges; }\n\n.grid path {\n stroke-width: 0; }\n\n/* Today line */\n.today {\n fill: none;\n stroke: #DB5757;\n stroke-width: 2px; }\n\n/* Task styling */\n/* Default task */\n.task {\n stroke-width: 2; }\n\n.taskText {\n text-anchor: middle;\n font-size: 11px; }\n\n.taskTextOutsideRight {\n fill: #323D47;\n text-anchor: start;\n font-size: 11px; }\n\n.taskTextOutsideLeft {\n fill: #323D47;\n text-anchor: end;\n font-size: 11px; }\n\n/* Special case clickable */\n.task.clickable {\n cursor: pointer; }\n\n.taskText.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n/* Specific task settings for the sections*/\n.taskText0,\n.taskText1,\n.taskText2,\n.taskText3 {\n fill: #323D47; }\n\n.task0,\n.task1,\n.task2,\n.task3 {\n fill: #BDD5EA;\n stroke: rgba(255, 255, 255, 0.5); }\n\n.taskTextOutside0,\n.taskTextOutside2 {\n fill: lightgrey; }\n\n.taskTextOutside1,\n.taskTextOutside3 {\n fill: lightgrey; }\n\n/* Active task */\n.active0,\n.active1,\n.active2,\n.active3 {\n fill: #81B1DB;\n stroke: rgba(255, 255, 255, 0.5); }\n\n.activeText0,\n.activeText1,\n.activeText2,\n.activeText3 {\n fill: #323D47 !important; }\n\n/* Completed task */\n.done0,\n.done1,\n.done2,\n.done3 {\n stroke: grey;\n fill: lightgrey;\n stroke-width: 2; }\n\n.doneText0,\n.doneText1,\n.doneText2,\n.doneText3 {\n fill: #323D47 !important; }\n\n/* Tasks on the critical line */\n.crit0,\n.crit1,\n.crit2,\n.crit3 {\n stroke: #E83737;\n fill: #E83737;\n stroke-width: 2; }\n\n.activeCrit0,\n.activeCrit1,\n.activeCrit2,\n.activeCrit3 {\n stroke: #E83737;\n fill: #81B1DB;\n stroke-width: 2; }\n\n.doneCrit0,\n.doneCrit1,\n.doneCrit2,\n.doneCrit3 {\n stroke: #E83737;\n fill: lightgrey;\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges; }\n\n.milestone {\n transform: rotate(45deg) scale(0.8, 0.8); }\n\n.milestoneText {\n font-style: italic; }\n\n.doneCritText0,\n.doneCritText1,\n.doneCritText2,\n.doneCritText3 {\n fill: #323D47 !important; }\n\n.activeCritText0,\n.activeCritText1,\n.activeCritText2,\n.activeCritText3 {\n fill: #323D47 !important; }\n\n.titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: #323D47; }\n\ng.classGroup text {\n fill: purple;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 10px; }\n\ng.classGroup rect {\n fill: #BDD5EA;\n stroke: purple; }\n\ng.classGroup line {\n stroke: purple;\n stroke-width: 1; }\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: #BDD5EA;\n opacity: 0.5; }\n\n.classLabel .label {\n fill: purple;\n font-size: 10px; }\n\n.relation {\n stroke: purple;\n stroke-width: 1;\n fill: none; }\n\n#compositionStart {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#compositionEnd {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#aggregationStart {\n fill: #BDD5EA;\n stroke: purple;\n stroke-width: 1; }\n\n#aggregationEnd {\n fill: #BDD5EA;\n stroke: purple;\n stroke-width: 1; }\n\n#dependencyStart {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#dependencyEnd {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#extensionStart {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n#extensionEnd {\n fill: purple;\n stroke: purple;\n stroke-width: 1; }\n\n.commit-id,\n.commit-msg,\n.branch-label {\n fill: lightgrey;\n color: lightgrey; }\n", ""]); +
109 +
110 +
111 +
112/***/ }), +
113 +
114/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/default/index.scss": +
115/*!**********************************************************************************************************************!*\ +
116 !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/default/index.scss ***! +
117 \**********************************************************************************************************************/ +
118/*! no static exports found */ +
119/***/ (function(module, exports, __webpack_require__) { +
120 +
121exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false); +
122// Module +
123exports.push([module.i, "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.label {\n font-family: 'trebuchet ms', verdana, arial;\n color: #333; }\n\n.node rect,\n.node circle,\n.node ellipse,\n.node polygon {\n fill: #ECECFF;\n stroke: #9370DB;\n stroke-width: 1px; }\n\n.node.clickable {\n cursor: pointer; }\n\n.arrowheadPath {\n fill: #333333; }\n\n.edgePath .path {\n stroke: #333333;\n stroke-width: 1.5px; }\n\n.edgeLabel {\n background-color: #e8e8e8; }\n\n.cluster rect {\n fill: #ffffde;\n stroke: #aaaa33;\n stroke-width: 1px; }\n\n.cluster text {\n fill: #333; }\n\ndiv.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 12px;\n background: #ffffde;\n border: 1px solid #aaaa33;\n border-radius: 2px;\n pointer-events: none;\n z-index: 100; }\n\n.actor {\n stroke: #CCCCFF;\n fill: #ECECFF; }\n\ntext.actor {\n fill: black;\n stroke: none; }\n\n.actor-line {\n stroke: grey; }\n\n.messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n.messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n#arrowhead {\n fill: #333; }\n\n#crosshead path {\n fill: #333 !important;\n stroke: #333 !important; }\n\n.messageText {\n fill: #333;\n stroke: none; }\n\n.labelBox {\n stroke: #CCCCFF;\n fill: #ECECFF; }\n\n.labelText {\n fill: black;\n stroke: none; }\n\n.loopText {\n fill: black;\n stroke: none; }\n\n.loopLine {\n stroke-width: 2;\n stroke-dasharray: '2 2';\n stroke: #CCCCFF; }\n\n.note {\n stroke: #aaaa33;\n fill: #fff5ad; }\n\n.noteText {\n fill: black;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 14px; }\n\n.activation0 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation1 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation2 {\n fill: #f4f4f4;\n stroke: #666; }\n\n/** Section styling */\n.section {\n stroke: none;\n opacity: 0.2; }\n\n.section0 {\n fill: rgba(102, 102, 255, 0.49); }\n\n.section2 {\n fill: #fff400; }\n\n.section1,\n.section3 {\n fill: white;\n opacity: 0.2; }\n\n.sectionTitle0 {\n fill: #333; }\n\n.sectionTitle1 {\n fill: #333; }\n\n.sectionTitle2 {\n fill: #333; }\n\n.sectionTitle3 {\n fill: #333; }\n\n.sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px; }\n\n/* Grid and axis */\n.grid .tick {\n stroke: lightgrey;\n opacity: 0.3;\n shape-rendering: crispEdges; }\n\n.grid path {\n stroke-width: 0; }\n\n/* Today line */\n.today {\n fill: none;\n stroke: red;\n stroke-width: 2px; }\n\n/* Task styling */\n/* Default task */\n.task {\n stroke-width: 2; }\n\n.taskText {\n text-anchor: middle;\n font-size: 11px; }\n\n.taskTextOutsideRight {\n fill: black;\n text-anchor: start;\n font-size: 11px; }\n\n.taskTextOutsideLeft {\n fill: black;\n text-anchor: end;\n font-size: 11px; }\n\n/* Special case clickable */\n.task.clickable {\n cursor: pointer; }\n\n.taskText.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n/* Specific task settings for the sections*/\n.taskText0,\n.taskText1,\n.taskText2,\n.taskText3 {\n fill: white; }\n\n.task0,\n.task1,\n.task2,\n.task3 {\n fill: #8a90dd;\n stroke: #534fbc; }\n\n.taskTextOutside0,\n.taskTextOutside2 {\n fill: black; }\n\n.taskTextOutside1,\n.taskTextOutside3 {\n fill: black; }\n\n/* Active task */\n.active0,\n.active1,\n.active2,\n.active3 {\n fill: #bfc7ff;\n stroke: #534fbc; }\n\n.activeText0,\n.activeText1,\n.activeText2,\n.activeText3 {\n fill: black !important; }\n\n/* Completed task */\n.done0,\n.done1,\n.done2,\n.done3 {\n stroke: grey;\n fill: lightgrey;\n stroke-width: 2; }\n\n.doneText0,\n.doneText1,\n.doneText2,\n.doneText3 {\n fill: black !important; }\n\n/* Tasks on the critical line */\n.crit0,\n.crit1,\n.crit2,\n.crit3 {\n stroke: #ff8888;\n fill: red;\n stroke-width: 2; }\n\n.activeCrit0,\n.activeCrit1,\n.activeCrit2,\n.activeCrit3 {\n stroke: #ff8888;\n fill: #bfc7ff;\n stroke-width: 2; }\n\n.doneCrit0,\n.doneCrit1,\n.doneCrit2,\n.doneCrit3 {\n stroke: #ff8888;\n fill: lightgrey;\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges; }\n\n.milestone {\n transform: rotate(45deg) scale(0.8, 0.8); }\n\n.milestoneText {\n font-style: italic; }\n\n.doneCritText0,\n.doneCritText1,\n.doneCritText2,\n.doneCritText3 {\n fill: black !important; }\n\n.activeCritText0,\n.activeCritText1,\n.activeCritText2,\n.activeCritText3 {\n fill: black !important; }\n\n.titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: black; }\n\ng.classGroup text {\n fill: #9370DB;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 10px; }\n\ng.classGroup rect {\n fill: #ECECFF;\n stroke: #9370DB; }\n\ng.classGroup line {\n stroke: #9370DB;\n stroke-width: 1; }\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: #ECECFF;\n opacity: 0.5; }\n\n.classLabel .label {\n fill: #9370DB;\n font-size: 10px; }\n\n.relation {\n stroke: #9370DB;\n stroke-width: 1;\n fill: none; }\n\n#compositionStart {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#compositionEnd {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#aggregationStart {\n fill: #ECECFF;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#aggregationEnd {\n fill: #ECECFF;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#dependencyStart {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#dependencyEnd {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#extensionStart {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n#extensionEnd {\n fill: #9370DB;\n stroke: #9370DB;\n stroke-width: 1; }\n\n.commit-id,\n.commit-msg,\n.branch-label {\n fill: lightgrey;\n color: lightgrey; }\n", ""]); +
124 +
125 +
126 +
127/***/ }), +
128 +
129/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/forest/index.scss": +
130/*!*********************************************************************************************************************!*\ +
131 !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/forest/index.scss ***! +
132 \*********************************************************************************************************************/ +
133/*! no static exports found */ +
134/***/ (function(module, exports, __webpack_require__) { +
135 +
136exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false); +
137// Module +
138exports.push([module.i, "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.label {\n font-family: 'trebuchet ms', verdana, arial;\n color: #333; }\n\n.node rect,\n.node circle,\n.node ellipse,\n.node polygon {\n fill: #cde498;\n stroke: #13540c;\n stroke-width: 1px; }\n\n.node.clickable {\n cursor: pointer; }\n\n.arrowheadPath {\n fill: green; }\n\n.edgePath .path {\n stroke: green;\n stroke-width: 1.5px; }\n\n.edgeLabel {\n background-color: #e8e8e8; }\n\n.cluster rect {\n fill: #cdffb2;\n stroke: #6eaa49;\n stroke-width: 1px; }\n\n.cluster text {\n fill: #333; }\n\ndiv.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 12px;\n background: #cdffb2;\n border: 1px solid #6eaa49;\n border-radius: 2px;\n pointer-events: none;\n z-index: 100; }\n\n.actor {\n stroke: #13540c;\n fill: #cde498; }\n\ntext.actor {\n fill: black;\n stroke: none; }\n\n.actor-line {\n stroke: grey; }\n\n.messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n.messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n#arrowhead {\n fill: #333; }\n\n#crosshead path {\n fill: #333 !important;\n stroke: #333 !important; }\n\n.messageText {\n fill: #333;\n stroke: none; }\n\n.labelBox {\n stroke: #326932;\n fill: #cde498; }\n\n.labelText {\n fill: black;\n stroke: none; }\n\n.loopText {\n fill: black;\n stroke: none; }\n\n.loopLine {\n stroke-width: 2;\n stroke-dasharray: '2 2';\n stroke: #326932; }\n\n.note {\n stroke: #6eaa49;\n fill: #fff5ad; }\n\n.noteText {\n fill: black;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 14px; }\n\n.activation0 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation1 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation2 {\n fill: #f4f4f4;\n stroke: #666; }\n\n/** Section styling */\n.section {\n stroke: none;\n opacity: 0.2; }\n\n.section0 {\n fill: #6eaa49; }\n\n.section2 {\n fill: #6eaa49; }\n\n.section1,\n.section3 {\n fill: white;\n opacity: 0.2; }\n\n.sectionTitle0 {\n fill: #333; }\n\n.sectionTitle1 {\n fill: #333; }\n\n.sectionTitle2 {\n fill: #333; }\n\n.sectionTitle3 {\n fill: #333; }\n\n.sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px; }\n\n/* Grid and axis */\n.grid .tick {\n stroke: lightgrey;\n opacity: 0.3;\n shape-rendering: crispEdges; }\n\n.grid path {\n stroke-width: 0; }\n\n/* Today line */\n.today {\n fill: none;\n stroke: red;\n stroke-width: 2px; }\n\n/* Task styling */\n/* Default task */\n.task {\n stroke-width: 2; }\n\n.taskText {\n text-anchor: middle;\n font-size: 11px; }\n\n.taskTextOutsideRight {\n fill: black;\n text-anchor: start;\n font-size: 11px; }\n\n.taskTextOutsideLeft {\n fill: black;\n text-anchor: end;\n font-size: 11px; }\n\n/* Special case clickable */\n.task.clickable {\n cursor: pointer; }\n\n.taskText.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n/* Specific task settings for the sections*/\n.taskText0,\n.taskText1,\n.taskText2,\n.taskText3 {\n fill: white; }\n\n.task0,\n.task1,\n.task2,\n.task3 {\n fill: #487e3a;\n stroke: #13540c; }\n\n.taskTextOutside0,\n.taskTextOutside2 {\n fill: black; }\n\n.taskTextOutside1,\n.taskTextOutside3 {\n fill: black; }\n\n/* Active task */\n.active0,\n.active1,\n.active2,\n.active3 {\n fill: #cde498;\n stroke: #13540c; }\n\n.activeText0,\n.activeText1,\n.activeText2,\n.activeText3 {\n fill: black !important; }\n\n/* Completed task */\n.done0,\n.done1,\n.done2,\n.done3 {\n stroke: grey;\n fill: lightgrey;\n stroke-width: 2; }\n\n.doneText0,\n.doneText1,\n.doneText2,\n.doneText3 {\n fill: black !important; }\n\n/* Tasks on the critical line */\n.crit0,\n.crit1,\n.crit2,\n.crit3 {\n stroke: #ff8888;\n fill: red;\n stroke-width: 2; }\n\n.activeCrit0,\n.activeCrit1,\n.activeCrit2,\n.activeCrit3 {\n stroke: #ff8888;\n fill: #cde498;\n stroke-width: 2; }\n\n.doneCrit0,\n.doneCrit1,\n.doneCrit2,\n.doneCrit3 {\n stroke: #ff8888;\n fill: lightgrey;\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges; }\n\n.milestone {\n transform: rotate(45deg) scale(0.8, 0.8); }\n\n.milestoneText {\n font-style: italic; }\n\n.doneCritText0,\n.doneCritText1,\n.doneCritText2,\n.doneCritText3 {\n fill: black !important; }\n\n.activeCritText0,\n.activeCritText1,\n.activeCritText2,\n.activeCritText3 {\n fill: black !important; }\n\n.titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: black; }\n\ng.classGroup text {\n fill: #13540c;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 10px; }\n\ng.classGroup rect {\n fill: #cde498;\n stroke: #13540c; }\n\ng.classGroup line {\n stroke: #13540c;\n stroke-width: 1; }\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: #cde498;\n opacity: 0.5; }\n\n.classLabel .label {\n fill: #13540c;\n font-size: 10px; }\n\n.relation {\n stroke: #13540c;\n stroke-width: 1;\n fill: none; }\n\n#compositionStart {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#compositionEnd {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#aggregationStart {\n fill: #cde498;\n stroke: #13540c;\n stroke-width: 1; }\n\n#aggregationEnd {\n fill: #cde498;\n stroke: #13540c;\n stroke-width: 1; }\n\n#dependencyStart {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#dependencyEnd {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#extensionStart {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n#extensionEnd {\n fill: #13540c;\n stroke: #13540c;\n stroke-width: 1; }\n\n.commit-id,\n.commit-msg,\n.branch-label {\n fill: lightgrey;\n color: lightgrey; }\n", ""]); +
139 +
140 +
141 +
142/***/ }), +
143 +
144/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/neutral/index.scss": +
145/*!**********************************************************************************************************************!*\ +
146 !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/neutral/index.scss ***! +
147 \**********************************************************************************************************************/ +
148/*! no static exports found */ +
149/***/ (function(module, exports, __webpack_require__) { +
150 +
151exports = module.exports = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js")(false); +
152// Module +
153exports.push([module.i, "/* Flowchart variables */\n/* Sequence Diagram variables */\n/* Gantt chart variables */\n.label {\n font-family: 'trebuchet ms', verdana, arial;\n color: #333; }\n\n.node rect,\n.node circle,\n.node ellipse,\n.node polygon {\n fill: #eee;\n stroke: #999;\n stroke-width: 1px; }\n\n.node.clickable {\n cursor: pointer; }\n\n.arrowheadPath {\n fill: #333333; }\n\n.edgePath .path {\n stroke: #666;\n stroke-width: 1.5px; }\n\n.edgeLabel {\n background-color: white; }\n\n.cluster rect {\n fill: #eaf2fb;\n stroke: #26a;\n stroke-width: 1px; }\n\n.cluster text {\n fill: #333; }\n\ndiv.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 12px;\n background: #eaf2fb;\n border: 1px solid #26a;\n border-radius: 2px;\n pointer-events: none;\n z-index: 100; }\n\n.actor {\n stroke: #999;\n fill: #eee; }\n\ntext.actor {\n fill: #333;\n stroke: none; }\n\n.actor-line {\n stroke: #666; }\n\n.messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n.messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: '2 2';\n stroke: #333; }\n\n#arrowhead {\n fill: #333; }\n\n#crosshead path {\n fill: #333 !important;\n stroke: #333 !important; }\n\n.messageText {\n fill: #333;\n stroke: none; }\n\n.labelBox {\n stroke: #999;\n fill: #eee; }\n\n.labelText {\n fill: #333;\n stroke: none; }\n\n.loopText {\n fill: #333;\n stroke: none; }\n\n.loopLine {\n stroke-width: 2;\n stroke-dasharray: '2 2';\n stroke: #999; }\n\n.note {\n stroke: #777700;\n fill: #ffa; }\n\n.noteText {\n fill: black;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 14px; }\n\n.activation0 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation1 {\n fill: #f4f4f4;\n stroke: #666; }\n\n.activation2 {\n fill: #f4f4f4;\n stroke: #666; }\n\n/** Section styling */\n.section {\n stroke: none;\n opacity: 0.2; }\n\n.section0 {\n fill: #80b3e6; }\n\n.section2 {\n fill: #80b3e6; }\n\n.section1,\n.section3 {\n fill: white;\n opacity: 0.2; }\n\n.sectionTitle0 {\n fill: #333; }\n\n.sectionTitle1 {\n fill: #333; }\n\n.sectionTitle2 {\n fill: #333; }\n\n.sectionTitle3 {\n fill: #333; }\n\n.sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px; }\n\n/* Grid and axis */\n.grid .tick {\n stroke: #e6e6e6;\n opacity: 0.3;\n shape-rendering: crispEdges; }\n\n.grid path {\n stroke-width: 0; }\n\n/* Today line */\n.today {\n fill: none;\n stroke: #d42;\n stroke-width: 2px; }\n\n/* Task styling */\n/* Default task */\n.task {\n stroke-width: 2; }\n\n.taskText {\n text-anchor: middle;\n font-size: 11px; }\n\n.taskTextOutsideRight {\n fill: #333;\n text-anchor: start;\n font-size: 11px; }\n\n.taskTextOutsideLeft {\n fill: #333;\n text-anchor: end;\n font-size: 11px; }\n\n/* Special case clickable */\n.task.clickable {\n cursor: pointer; }\n\n.taskText.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n.taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: #003163 !important;\n font-weight: bold; }\n\n/* Specific task settings for the sections*/\n.taskText0,\n.taskText1,\n.taskText2,\n.taskText3 {\n fill: white; }\n\n.task0,\n.task1,\n.task2,\n.task3 {\n fill: #26a;\n stroke: #1a4d80; }\n\n.taskTextOutside0,\n.taskTextOutside2 {\n fill: #333; }\n\n.taskTextOutside1,\n.taskTextOutside3 {\n fill: #333; }\n\n/* Active task */\n.active0,\n.active1,\n.active2,\n.active3 {\n fill: #eee;\n stroke: #1a4d80; }\n\n.activeText0,\n.activeText1,\n.activeText2,\n.activeText3 {\n fill: #333 !important; }\n\n/* Completed task */\n.done0,\n.done1,\n.done2,\n.done3 {\n stroke: #666;\n fill: #bbb;\n stroke-width: 2; }\n\n.doneText0,\n.doneText1,\n.doneText2,\n.doneText3 {\n fill: #333 !important; }\n\n/* Tasks on the critical line */\n.crit0,\n.crit1,\n.crit2,\n.crit3 {\n stroke: #b1361b;\n fill: #d42;\n stroke-width: 2; }\n\n.activeCrit0,\n.activeCrit1,\n.activeCrit2,\n.activeCrit3 {\n stroke: #b1361b;\n fill: #eee;\n stroke-width: 2; }\n\n.doneCrit0,\n.doneCrit1,\n.doneCrit2,\n.doneCrit3 {\n stroke: #b1361b;\n fill: #bbb;\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges; }\n\n.milestone {\n transform: rotate(45deg) scale(0.8, 0.8); }\n\n.milestoneText {\n font-style: italic; }\n\n.doneCritText0,\n.doneCritText1,\n.doneCritText2,\n.doneCritText3 {\n fill: #333 !important; }\n\n.activeCritText0,\n.activeCritText1,\n.activeCritText2,\n.activeCritText3 {\n fill: #333 !important; }\n\n.titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: #333; }\n\ng.classGroup text {\n fill: #999;\n stroke: none;\n font-family: 'trebuchet ms', verdana, arial;\n font-size: 10px; }\n\ng.classGroup rect {\n fill: #eee;\n stroke: #999; }\n\ng.classGroup line {\n stroke: #999;\n stroke-width: 1; }\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: #eee;\n opacity: 0.5; }\n\n.classLabel .label {\n fill: #999;\n font-size: 10px; }\n\n.relation {\n stroke: #999;\n stroke-width: 1;\n fill: none; }\n\n#compositionStart {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#compositionEnd {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#aggregationStart {\n fill: #eee;\n stroke: #999;\n stroke-width: 1; }\n\n#aggregationEnd {\n fill: #eee;\n stroke: #999;\n stroke-width: 1; }\n\n#dependencyStart {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#dependencyEnd {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#extensionStart {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n#extensionEnd {\n fill: #999;\n stroke: #999;\n stroke-width: 1; }\n\n.commit-id,\n.commit-msg,\n.branch-label {\n fill: lightgrey;\n color: lightgrey; }\n", ""]); +
154 +
155 +
156 +
157/***/ }), +
158 +
159/***/ "./node_modules/css-loader/dist/runtime/api.js": +
160/*!*****************************************************!*\ +
161 !*** ./node_modules/css-loader/dist/runtime/api.js ***! +
162 \*****************************************************/ +
163/*! no static exports found */ +
164/***/ (function(module, exports, __webpack_require__) { +
165 +
166"use strict"; +
167 +
168 +
169/* +
170 MIT License http://www.opensource.org/licenses/mit-license.php +
171 Author Tobias Koppers @sokra +
172*/ +
173// css base code, injected by the css-loader +
174module.exports = function (useSourceMap) { +
175 var list = []; // return the list of modules as css string +
176 +
177 list.toString = function toString() { +
178 return this.map(function (item) { +
179 var content = cssWithMappingToString(item, useSourceMap); +
180 +
181 if (item[2]) { +
182 return '@media ' + item[2] + '{' + content + '}'; +
183 } else { +
184 return content; +
185 } +
186 }).join(''); +
187 }; // import a list of modules into the list +
188 +
189 +
190 list.i = function (modules, mediaQuery) { +
191 if (typeof modules === 'string') { +
192 modules = [[null, modules, '']]; +
193 } +
194 +
195 var alreadyImportedModules = {}; +
196 +
197 for (var i = 0; i < this.length; i++) { +
198 var id = this[i][0]; +
199 +
200 if (id != null) { +
201 alreadyImportedModules[id] = true; +
202 } +
203 } +
204 +
205 for (i = 0; i < modules.length; i++) { +
206 var item = modules[i]; // skip already imported module +
207 // this implementation is not 100% perfect for weird media query combinations +
208 // when a module is imported multiple times with different media queries. +
209 // I hope this will never occur (Hey this way we have smaller bundles) +
210 +
211 if (item[0] == null || !alreadyImportedModules[item[0]]) { +
212 if (mediaQuery && !item[2]) { +
213 item[2] = mediaQuery; +
214 } else if (mediaQuery) { +
215 item[2] = '(' + item[2] + ') and (' + mediaQuery + ')'; +
216 } +
217 +
218 list.push(item); +
219 } +
220 } +
221 }; +
222 +
223 return list; +
224}; +
225 +
226function cssWithMappingToString(item, useSourceMap) { +
227 var content = item[1] || ''; +
228 var cssMapping = item[3]; +
229 +
230 if (!cssMapping) { +
231 return content; +
232 } +
233 +
234 if (useSourceMap && typeof btoa === 'function') { +
235 var sourceMapping = toComment(cssMapping); +
236 var sourceURLs = cssMapping.sources.map(function (source) { +
237 return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'; +
238 }); +
239 return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); +
240 } +
241 +
242 return [content].join('\n'); +
243} // Adapted from convert-source-map (MIT) +
244 +
245 +
246function toComment(sourceMap) { +
247 // eslint-disable-next-line no-undef +
248 var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); +
249 var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64; +
250 return '/*# ' + data + ' */'; +
251} +
252 +
253/***/ }), +
254 +
255/***/ "./node_modules/d3-array/src/array.js": +
256/*!********************************************!*\ +
257 !*** ./node_modules/d3-array/src/array.js ***! +
258 \********************************************/ +
259/*! exports provided: slice, map */ +
260/***/ (function(module, __webpack_exports__, __webpack_require__) { +
261 +
262"use strict"; +
263__webpack_require__.r(__webpack_exports__); +
264/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +
265/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; }); +
266var array = Array.prototype; +
267 +
268var slice = array.slice; +
269var map = array.map; +
270 +
271 +
272/***/ }), +
273 +
274/***/ "./node_modules/d3-array/src/ascending.js": +
275/*!************************************************!*\ +
276 !*** ./node_modules/d3-array/src/ascending.js ***! +
277 \************************************************/ +
278/*! exports provided: default */ +
279/***/ (function(module, __webpack_exports__, __webpack_require__) { +
280 +
281"use strict"; +
282__webpack_require__.r(__webpack_exports__); +
283/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
284 return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +
285}); +
286 +
287 +
288/***/ }), +
289 +
290/***/ "./node_modules/d3-array/src/bisect.js": +
291/*!*********************************************!*\ +
292 !*** ./node_modules/d3-array/src/bisect.js ***! +
293 \*********************************************/ +
294/*! exports provided: bisectRight, bisectLeft, default */ +
295/***/ (function(module, __webpack_exports__, __webpack_require__) { +
296 +
297"use strict"; +
298__webpack_require__.r(__webpack_exports__); +
299/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bisectRight", function() { return bisectRight; }); +
300/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bisectLeft", function() { return bisectLeft; }); +
301/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); +
302/* harmony import */ var _bisector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bisector */ "./node_modules/d3-array/src/bisector.js"); +
303 +
304 +
305 +
306var ascendingBisect = Object(_bisector__WEBPACK_IMPORTED_MODULE_1__["default"])(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"]); +
307var bisectRight = ascendingBisect.right; +
308var bisectLeft = ascendingBisect.left; +
309/* harmony default export */ __webpack_exports__["default"] = (bisectRight); +
310 +
311 +
312/***/ }), +
313 +
314/***/ "./node_modules/d3-array/src/bisector.js": +
315/*!***********************************************!*\ +
316 !*** ./node_modules/d3-array/src/bisector.js ***! +
317 \***********************************************/ +
318/*! exports provided: default */ +
319/***/ (function(module, __webpack_exports__, __webpack_require__) { +
320 +
321"use strict"; +
322__webpack_require__.r(__webpack_exports__); +
323/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); +
324 +
325 +
326/* harmony default export */ __webpack_exports__["default"] = (function(compare) { +
327 if (compare.length === 1) compare = ascendingComparator(compare); +
328 return { +
329 left: function(a, x, lo, hi) { +
330 if (lo == null) lo = 0; +
331 if (hi == null) hi = a.length; +
332 while (lo < hi) { +
333 var mid = lo + hi >>> 1; +
334 if (compare(a[mid], x) < 0) lo = mid + 1; +
335 else hi = mid; +
336 } +
337 return lo; +
338 }, +
339 right: function(a, x, lo, hi) { +
340 if (lo == null) lo = 0; +
341 if (hi == null) hi = a.length; +
342 while (lo < hi) { +
343 var mid = lo + hi >>> 1; +
344 if (compare(a[mid], x) > 0) hi = mid; +
345 else lo = mid + 1; +
346 } +
347 return lo; +
348 } +
349 }; +
350}); +
351 +
352function ascendingComparator(f) { +
353 return function(d, x) { +
354 return Object(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"])(f(d), x); +
355 }; +
356} +
357 +
358 +
359/***/ }), +
360 +
361/***/ "./node_modules/d3-array/src/constant.js": +
362/*!***********************************************!*\ +
363 !*** ./node_modules/d3-array/src/constant.js ***! +
364 \***********************************************/ +
365/*! exports provided: default */ +
366/***/ (function(module, __webpack_exports__, __webpack_require__) { +
367 +
368"use strict"; +
369__webpack_require__.r(__webpack_exports__); +
370/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
371 return function() { +
372 return x; +
373 }; +
374}); +
375 +
376 +
377/***/ }), +
378 +
379/***/ "./node_modules/d3-array/src/cross.js": +
380/*!********************************************!*\ +
381 !*** ./node_modules/d3-array/src/cross.js ***! +
382 \********************************************/ +
383/*! exports provided: default */ +
384/***/ (function(module, __webpack_exports__, __webpack_require__) { +
385 +
386"use strict"; +
387__webpack_require__.r(__webpack_exports__); +
388/* harmony import */ var _pairs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pairs */ "./node_modules/d3-array/src/pairs.js"); +
389 +
390 +
391/* harmony default export */ __webpack_exports__["default"] = (function(values0, values1, reduce) { +
392 var n0 = values0.length, +
393 n1 = values1.length, +
394 values = new Array(n0 * n1), +
395 i0, +
396 i1, +
397 i, +
398 value0; +
399 +
400 if (reduce == null) reduce = _pairs__WEBPACK_IMPORTED_MODULE_0__["pair"]; +
401 +
402 for (i0 = i = 0; i0 < n0; ++i0) { +
403 for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) { +
404 values[i] = reduce(value0, values1[i1]); +
405 } +
406 } +
407 +
408 return values; +
409}); +
410 +
411 +
412/***/ }), +
413 +
414/***/ "./node_modules/d3-array/src/descending.js": +
415/*!*************************************************!*\ +
416 !*** ./node_modules/d3-array/src/descending.js ***! +
417 \*************************************************/ +
418/*! exports provided: default */ +
419/***/ (function(module, __webpack_exports__, __webpack_require__) { +
420 +
421"use strict"; +
422__webpack_require__.r(__webpack_exports__); +
423/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
424 return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; +
425}); +
426 +
427 +
428/***/ }), +
429 +
430/***/ "./node_modules/d3-array/src/deviation.js": +
431/*!************************************************!*\ +
432 !*** ./node_modules/d3-array/src/deviation.js ***! +
433 \************************************************/ +
434/*! exports provided: default */ +
435/***/ (function(module, __webpack_exports__, __webpack_require__) { +
436 +
437"use strict"; +
438__webpack_require__.r(__webpack_exports__); +
439/* harmony import */ var _variance__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./variance */ "./node_modules/d3-array/src/variance.js"); +
440 +
441 +
442/* harmony default export */ __webpack_exports__["default"] = (function(array, f) { +
443 var v = Object(_variance__WEBPACK_IMPORTED_MODULE_0__["default"])(array, f); +
444 return v ? Math.sqrt(v) : v; +
445}); +
446 +
447 +
448/***/ }), +
449 +
450/***/ "./node_modules/d3-array/src/extent.js": +
451/*!*********************************************!*\ +
452 !*** ./node_modules/d3-array/src/extent.js ***! +
453 \*********************************************/ +
454/*! exports provided: default */ +
455/***/ (function(module, __webpack_exports__, __webpack_require__) { +
456 +
457"use strict"; +
458__webpack_require__.r(__webpack_exports__); +
459/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { +
460 var n = values.length, +
461 i = -1, +
462 value, +
463 min, +
464 max; +
465 +
466 if (valueof == null) { +
467 while (++i < n) { // Find the first comparable value. +
468 if ((value = values[i]) != null && value >= value) { +
469 min = max = value; +
470 while (++i < n) { // Compare the remaining values. +
471 if ((value = values[i]) != null) { +
472 if (min > value) min = value; +
473 if (max < value) max = value; +
474 } +
475 } +
476 } +
477 } +
478 } +
479 +
480 else { +
481 while (++i < n) { // Find the first comparable value. +
482 if ((value = valueof(values[i], i, values)) != null && value >= value) { +
483 min = max = value; +
484 while (++i < n) { // Compare the remaining values. +
485 if ((value = valueof(values[i], i, values)) != null) { +
486 if (min > value) min = value; +
487 if (max < value) max = value; +
488 } +
489 } +
490 } +
491 } +
492 } +
493 +
494 return [min, max]; +
495}); +
496 +
497 +
498/***/ }), +
499 +
500/***/ "./node_modules/d3-array/src/histogram.js": +
501/*!************************************************!*\ +
502 !*** ./node_modules/d3-array/src/histogram.js ***! +
503 \************************************************/ +
504/*! exports provided: default */ +
505/***/ (function(module, __webpack_exports__, __webpack_require__) { +
506 +
507"use strict"; +
508__webpack_require__.r(__webpack_exports__); +
509/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./node_modules/d3-array/src/array.js"); +
510/* harmony import */ var _bisect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bisect */ "./node_modules/d3-array/src/bisect.js"); +
511/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-array/src/constant.js"); +
512/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./extent */ "./node_modules/d3-array/src/extent.js"); +
513/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./identity */ "./node_modules/d3-array/src/identity.js"); +
514/* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./range */ "./node_modules/d3-array/src/range.js"); +
515/* harmony import */ var _ticks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ticks */ "./node_modules/d3-array/src/ticks.js"); +
516/* harmony import */ var _threshold_sturges__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./threshold/sturges */ "./node_modules/d3-array/src/threshold/sturges.js"); +
517 +
518 +
519 +
520 +
521 +
522 +
523 +
524 +
525 +
526/* harmony default export */ __webpack_exports__["default"] = (function() { +
527 var value = _identity__WEBPACK_IMPORTED_MODULE_4__["default"], +
528 domain = _extent__WEBPACK_IMPORTED_MODULE_3__["default"], +
529 threshold = _threshold_sturges__WEBPACK_IMPORTED_MODULE_7__["default"]; +
530 +
531 function histogram(data) { +
532 var i, +
533 n = data.length, +
534 x, +
535 values = new Array(n); +
536 +
537 for (i = 0; i < n; ++i) { +
538 values[i] = value(data[i], i, data); +
539 } +
540 +
541 var xz = domain(values), +
542 x0 = xz[0], +
543 x1 = xz[1], +
544 tz = threshold(values, x0, x1); +
545 +
546 // Convert number of thresholds into uniform thresholds. +
547 if (!Array.isArray(tz)) { +
548 tz = Object(_ticks__WEBPACK_IMPORTED_MODULE_6__["tickStep"])(x0, x1, tz); +
549 tz = Object(_range__WEBPACK_IMPORTED_MODULE_5__["default"])(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive +
550 } +
551 +
552 // Remove any thresholds outside the domain. +
553 var m = tz.length; +
554 while (tz[0] <= x0) tz.shift(), --m; +
555 while (tz[m - 1] > x1) tz.pop(), --m; +
556 +
557 var bins = new Array(m + 1), +
558 bin; +
559 +
560 // Initialize bins. +
561 for (i = 0; i <= m; ++i) { +
562 bin = bins[i] = []; +
563 bin.x0 = i > 0 ? tz[i - 1] : x0; +
564 bin.x1 = i < m ? tz[i] : x1; +
565 } +
566 +
567 // Assign data to bins by value, ignoring any outside the domain. +
568 for (i = 0; i < n; ++i) { +
569 x = values[i]; +
570 if (x0 <= x && x <= x1) { +
571 bins[Object(_bisect__WEBPACK_IMPORTED_MODULE_1__["default"])(tz, x, 0, m)].push(data[i]); +
572 } +
573 } +
574 +
575 return bins; +
576 } +
577 +
578 histogram.value = function(_) { +
579 return arguments.length ? (value = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(_), histogram) : value; +
580 }; +
581 +
582 histogram.domain = function(_) { +
583 return arguments.length ? (domain = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])([_[0], _[1]]), histogram) : domain; +
584 }; +
585 +
586 histogram.thresholds = function(_) { +
587 return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(_array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_)) : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(_), histogram) : threshold; +
588 }; +
589 +
590 return histogram; +
591}); +
592 +
593 +
594/***/ }), +
595 +
596/***/ "./node_modules/d3-array/src/identity.js": +
597/*!***********************************************!*\ +
598 !*** ./node_modules/d3-array/src/identity.js ***! +
599 \***********************************************/ +
600/*! exports provided: default */ +
601/***/ (function(module, __webpack_exports__, __webpack_require__) { +
602 +
603"use strict"; +
604__webpack_require__.r(__webpack_exports__); +
605/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
606 return x; +
607}); +
608 +
609 +
610/***/ }), +
611 +
612/***/ "./node_modules/d3-array/src/index.js": +
613/*!********************************************!*\ +
614 !*** ./node_modules/d3-array/src/index.js ***! +
615 \********************************************/ +
616/*! exports provided: bisect, bisectRight, bisectLeft, ascending, bisector, cross, descending, deviation, extent, histogram, thresholdFreedmanDiaconis, thresholdScott, thresholdSturges, max, mean, median, merge, min, pairs, permute, quantile, range, scan, shuffle, sum, ticks, tickIncrement, tickStep, transpose, variance, zip */ +
617/***/ (function(module, __webpack_exports__, __webpack_require__) { +
618 +
619"use strict"; +
620__webpack_require__.r(__webpack_exports__); +
621/* harmony import */ var _bisect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bisect */ "./node_modules/d3-array/src/bisect.js"); +
622/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisect", function() { return _bisect__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
623 +
624/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisectRight", function() { return _bisect__WEBPACK_IMPORTED_MODULE_0__["bisectRight"]; }); +
625 +
626/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisectLeft", function() { return _bisect__WEBPACK_IMPORTED_MODULE_0__["bisectLeft"]; }); +
627 +
628/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); +
629/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ascending", function() { return _ascending__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
630 +
631/* harmony import */ var _bisector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bisector */ "./node_modules/d3-array/src/bisector.js"); +
632/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisector", function() { return _bisector__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
633 +
634/* harmony import */ var _cross__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cross */ "./node_modules/d3-array/src/cross.js"); +
635/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cross", function() { return _cross__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
636 +
637/* harmony import */ var _descending__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./descending */ "./node_modules/d3-array/src/descending.js"); +
638/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "descending", function() { return _descending__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
639 +
640/* harmony import */ var _deviation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./deviation */ "./node_modules/d3-array/src/deviation.js"); +
641/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "deviation", function() { return _deviation__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
642 +
643/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./extent */ "./node_modules/d3-array/src/extent.js"); +
644/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "extent", function() { return _extent__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
645 +
646/* harmony import */ var _histogram__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./histogram */ "./node_modules/d3-array/src/histogram.js"); +
647/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "histogram", function() { return _histogram__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +
648 +
649/* harmony import */ var _threshold_freedmanDiaconis__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./threshold/freedmanDiaconis */ "./node_modules/d3-array/src/threshold/freedmanDiaconis.js"); +
650/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdFreedmanDiaconis", function() { return _threshold_freedmanDiaconis__WEBPACK_IMPORTED_MODULE_8__["default"]; }); +
651 +
652/* harmony import */ var _threshold_scott__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./threshold/scott */ "./node_modules/d3-array/src/threshold/scott.js"); +
653/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdScott", function() { return _threshold_scott__WEBPACK_IMPORTED_MODULE_9__["default"]; }); +
654 +
655/* harmony import */ var _threshold_sturges__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./threshold/sturges */ "./node_modules/d3-array/src/threshold/sturges.js"); +
656/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdSturges", function() { return _threshold_sturges__WEBPACK_IMPORTED_MODULE_10__["default"]; }); +
657 +
658/* harmony import */ var _max__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./max */ "./node_modules/d3-array/src/max.js"); +
659/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return _max__WEBPACK_IMPORTED_MODULE_11__["default"]; }); +
660 +
661/* harmony import */ var _mean__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./mean */ "./node_modules/d3-array/src/mean.js"); +
662/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mean", function() { return _mean__WEBPACK_IMPORTED_MODULE_12__["default"]; }); +
663 +
664/* harmony import */ var _median__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./median */ "./node_modules/d3-array/src/median.js"); +
665/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "median", function() { return _median__WEBPACK_IMPORTED_MODULE_13__["default"]; }); +
666 +
667/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./merge */ "./node_modules/d3-array/src/merge.js"); +
668/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _merge__WEBPACK_IMPORTED_MODULE_14__["default"]; }); +
669 +
670/* harmony import */ var _min__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./min */ "./node_modules/d3-array/src/min.js"); +
671/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return _min__WEBPACK_IMPORTED_MODULE_15__["default"]; }); +
672 +
673/* harmony import */ var _pairs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./pairs */ "./node_modules/d3-array/src/pairs.js"); +
674/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return _pairs__WEBPACK_IMPORTED_MODULE_16__["default"]; }); +
675 +
676/* harmony import */ var _permute__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./permute */ "./node_modules/d3-array/src/permute.js"); +
677/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "permute", function() { return _permute__WEBPACK_IMPORTED_MODULE_17__["default"]; }); +
678 +
679/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./quantile */ "./node_modules/d3-array/src/quantile.js"); +
680/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quantile", function() { return _quantile__WEBPACK_IMPORTED_MODULE_18__["default"]; }); +
681 +
682/* harmony import */ var _range__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./range */ "./node_modules/d3-array/src/range.js"); +
683/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "range", function() { return _range__WEBPACK_IMPORTED_MODULE_19__["default"]; }); +
684 +
685/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./scan */ "./node_modules/d3-array/src/scan.js"); +
686/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return _scan__WEBPACK_IMPORTED_MODULE_20__["default"]; }); +
687 +
688/* harmony import */ var _shuffle__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./shuffle */ "./node_modules/d3-array/src/shuffle.js"); +
689/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shuffle", function() { return _shuffle__WEBPACK_IMPORTED_MODULE_21__["default"]; }); +
690 +
691/* harmony import */ var _sum__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sum */ "./node_modules/d3-array/src/sum.js"); +
692/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sum", function() { return _sum__WEBPACK_IMPORTED_MODULE_22__["default"]; }); +
693 +
694/* harmony import */ var _ticks__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ticks */ "./node_modules/d3-array/src/ticks.js"); +
695/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ticks", function() { return _ticks__WEBPACK_IMPORTED_MODULE_23__["default"]; }); +
696 +
697/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickIncrement", function() { return _ticks__WEBPACK_IMPORTED_MODULE_23__["tickIncrement"]; }); +
698 +
699/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickStep", function() { return _ticks__WEBPACK_IMPORTED_MODULE_23__["tickStep"]; }); +
700 +
701/* harmony import */ var _transpose__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./transpose */ "./node_modules/d3-array/src/transpose.js"); +
702/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transpose", function() { return _transpose__WEBPACK_IMPORTED_MODULE_24__["default"]; }); +
703 +
704/* harmony import */ var _variance__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./variance */ "./node_modules/d3-array/src/variance.js"); +
705/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "variance", function() { return _variance__WEBPACK_IMPORTED_MODULE_25__["default"]; }); +
706 +
707/* harmony import */ var _zip__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./zip */ "./node_modules/d3-array/src/zip.js"); +
708/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _zip__WEBPACK_IMPORTED_MODULE_26__["default"]; }); +
709 +
710 +
711 +
712 +
713 +
714 +
715 +
716 +
717 +
718 +
719 +
720 +
721 +
722 +
723 +
724 +
725 +
726 +
727 +
728 +
729 +
730 +
731 +
732 +
733 +
734 +
735 +
736 +
737 +
738 +
739/***/ }), +
740 +
741/***/ "./node_modules/d3-array/src/max.js": +
742/*!******************************************!*\ +
743 !*** ./node_modules/d3-array/src/max.js ***! +
744 \******************************************/ +
745/*! exports provided: default */ +
746/***/ (function(module, __webpack_exports__, __webpack_require__) { +
747 +
748"use strict"; +
749__webpack_require__.r(__webpack_exports__); +
750/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { +
751 var n = values.length, +
752 i = -1, +
753 value, +
754 max; +
755 +
756 if (valueof == null) { +
757 while (++i < n) { // Find the first comparable value. +
758 if ((value = values[i]) != null && value >= value) { +
759 max = value; +
760 while (++i < n) { // Compare the remaining values. +
761 if ((value = values[i]) != null && value > max) { +
762 max = value; +
763 } +
764 } +
765 } +
766 } +
767 } +
768 +
769 else { +
770 while (++i < n) { // Find the first comparable value. +
771 if ((value = valueof(values[i], i, values)) != null && value >= value) { +
772 max = value; +
773 while (++i < n) { // Compare the remaining values. +
774 if ((value = valueof(values[i], i, values)) != null && value > max) { +
775 max = value; +
776 } +
777 } +
778 } +
779 } +
780 } +
781 +
782 return max; +
783}); +
784 +
785 +
786/***/ }), +
787 +
788/***/ "./node_modules/d3-array/src/mean.js": +
789/*!*******************************************!*\ +
790 !*** ./node_modules/d3-array/src/mean.js ***! +
791 \*******************************************/ +
792/*! exports provided: default */ +
793/***/ (function(module, __webpack_exports__, __webpack_require__) { +
794 +
795"use strict"; +
796__webpack_require__.r(__webpack_exports__); +
797/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "./node_modules/d3-array/src/number.js"); +
798 +
799 +
800/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { +
801 var n = values.length, +
802 m = n, +
803 i = -1, +
804 value, +
805 sum = 0; +
806 +
807 if (valueof == null) { +
808 while (++i < n) { +
809 if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(values[i]))) sum += value; +
810 else --m; +
811 } +
812 } +
813 +
814 else { +
815 while (++i < n) { +
816 if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(valueof(values[i], i, values)))) sum += value; +
817 else --m; +
818 } +
819 } +
820 +
821 if (m) return sum / m; +
822}); +
823 +
824 +
825/***/ }), +
826 +
827/***/ "./node_modules/d3-array/src/median.js": +
828/*!*********************************************!*\ +
829 !*** ./node_modules/d3-array/src/median.js ***! +
830 \*********************************************/ +
831/*! exports provided: default */ +
832/***/ (function(module, __webpack_exports__, __webpack_require__) { +
833 +
834"use strict"; +
835__webpack_require__.r(__webpack_exports__); +
836/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); +
837/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./number */ "./node_modules/d3-array/src/number.js"); +
838/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./quantile */ "./node_modules/d3-array/src/quantile.js"); +
839 +
840 +
841 +
842 +
843/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { +
844 var n = values.length, +
845 i = -1, +
846 value, +
847 numbers = []; +
848 +
849 if (valueof == null) { +
850 while (++i < n) { +
851 if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_1__["default"])(values[i]))) { +
852 numbers.push(value); +
853 } +
854 } +
855 } +
856 +
857 else { +
858 while (++i < n) { +
859 if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_1__["default"])(valueof(values[i], i, values)))) { +
860 numbers.push(value); +
861 } +
862 } +
863 } +
864 +
865 return Object(_quantile__WEBPACK_IMPORTED_MODULE_2__["default"])(numbers.sort(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"]), 0.5); +
866}); +
867 +
868 +
869/***/ }), +
870 +
871/***/ "./node_modules/d3-array/src/merge.js": +
872/*!********************************************!*\ +
873 !*** ./node_modules/d3-array/src/merge.js ***! +
874 \********************************************/ +
875/*! exports provided: default */ +
876/***/ (function(module, __webpack_exports__, __webpack_require__) { +
877 +
878"use strict"; +
879__webpack_require__.r(__webpack_exports__); +
880/* harmony default export */ __webpack_exports__["default"] = (function(arrays) { +
881 var n = arrays.length, +
882 m, +
883 i = -1, +
884 j = 0, +
885 merged, +
886 array; +
887 +
888 while (++i < n) j += arrays[i].length; +
889 merged = new Array(j); +
890 +
891 while (--n >= 0) { +
892 array = arrays[n]; +
893 m = array.length; +
894 while (--m >= 0) { +
895 merged[--j] = array[m]; +
896 } +
897 } +
898 +
899 return merged; +
900}); +
901 +
902 +
903/***/ }), +
904 +
905/***/ "./node_modules/d3-array/src/min.js": +
906/*!******************************************!*\ +
907 !*** ./node_modules/d3-array/src/min.js ***! +
908 \******************************************/ +
909/*! exports provided: default */ +
910/***/ (function(module, __webpack_exports__, __webpack_require__) { +
911 +
912"use strict"; +
913__webpack_require__.r(__webpack_exports__); +
914/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { +
915 var n = values.length, +
916 i = -1, +
917 value, +
918 min; +
919 +
920 if (valueof == null) { +
921 while (++i < n) { // Find the first comparable value. +
922 if ((value = values[i]) != null && value >= value) { +
923 min = value; +
924 while (++i < n) { // Compare the remaining values. +
925 if ((value = values[i]) != null && min > value) { +
926 min = value; +
927 } +
928 } +
929 } +
930 } +
931 } +
932 +
933 else { +
934 while (++i < n) { // Find the first comparable value. +
935 if ((value = valueof(values[i], i, values)) != null && value >= value) { +
936 min = value; +
937 while (++i < n) { // Compare the remaining values. +
938 if ((value = valueof(values[i], i, values)) != null && min > value) { +
939 min = value; +
940 } +
941 } +
942 } +
943 } +
944 } +
945 +
946 return min; +
947}); +
948 +
949 +
950/***/ }), +
951 +
952/***/ "./node_modules/d3-array/src/number.js": +
953/*!*********************************************!*\ +
954 !*** ./node_modules/d3-array/src/number.js ***! +
955 \*********************************************/ +
956/*! exports provided: default */ +
957/***/ (function(module, __webpack_exports__, __webpack_require__) { +
958 +
959"use strict"; +
960__webpack_require__.r(__webpack_exports__); +
961/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
962 return x === null ? NaN : +x; +
963}); +
964 +
965 +
966/***/ }), +
967 +
968/***/ "./node_modules/d3-array/src/pairs.js": +
969/*!********************************************!*\ +
970 !*** ./node_modules/d3-array/src/pairs.js ***! +
971 \********************************************/ +
972/*! exports provided: default, pair */ +
973/***/ (function(module, __webpack_exports__, __webpack_require__) { +
974 +
975"use strict"; +
976__webpack_require__.r(__webpack_exports__); +
977/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pair", function() { return pair; }); +
978/* harmony default export */ __webpack_exports__["default"] = (function(array, f) { +
979 if (f == null) f = pair; +
980 var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); +
981 while (i < n) pairs[i] = f(p, p = array[++i]); +
982 return pairs; +
983}); +
984 +
985function pair(a, b) { +
986 return [a, b]; +
987} +
988 +
989 +
990/***/ }), +
991 +
992/***/ "./node_modules/d3-array/src/permute.js": +
993/*!**********************************************!*\ +
994 !*** ./node_modules/d3-array/src/permute.js ***! +
995 \**********************************************/ +
996/*! exports provided: default */ +
997/***/ (function(module, __webpack_exports__, __webpack_require__) { +
998 +
999"use strict"; +
1000__webpack_require__.r(__webpack_exports__); +
1001/* harmony default export */ __webpack_exports__["default"] = (function(array, indexes) { +
1002 var i = indexes.length, permutes = new Array(i); +
1003 while (i--) permutes[i] = array[indexes[i]]; +
1004 return permutes; +
1005}); +
1006 +
1007 +
1008/***/ }), +
1009 +
1010/***/ "./node_modules/d3-array/src/quantile.js": +
1011/*!***********************************************!*\ +
1012 !*** ./node_modules/d3-array/src/quantile.js ***! +
1013 \***********************************************/ +
1014/*! exports provided: default */ +
1015/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1016 +
1017"use strict"; +
1018__webpack_require__.r(__webpack_exports__); +
1019/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "./node_modules/d3-array/src/number.js"); +
1020 +
1021 +
1022/* harmony default export */ __webpack_exports__["default"] = (function(values, p, valueof) { +
1023 if (valueof == null) valueof = _number__WEBPACK_IMPORTED_MODULE_0__["default"]; +
1024 if (!(n = values.length)) return; +
1025 if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); +
1026 if (p >= 1) return +valueof(values[n - 1], n - 1, values); +
1027 var n, +
1028 i = (n - 1) * p, +
1029 i0 = Math.floor(i), +
1030 value0 = +valueof(values[i0], i0, values), +
1031 value1 = +valueof(values[i0 + 1], i0 + 1, values); +
1032 return value0 + (value1 - value0) * (i - i0); +
1033}); +
1034 +
1035 +
1036/***/ }), +
1037 +
1038/***/ "./node_modules/d3-array/src/range.js": +
1039/*!********************************************!*\ +
1040 !*** ./node_modules/d3-array/src/range.js ***! +
1041 \********************************************/ +
1042/*! exports provided: default */ +
1043/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1044 +
1045"use strict"; +
1046__webpack_require__.r(__webpack_exports__); +
1047/* harmony default export */ __webpack_exports__["default"] = (function(start, stop, step) { +
1048 start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; +
1049 +
1050 var i = -1, +
1051 n = Math.max(0, Math.ceil((stop - start) / step)) | 0, +
1052 range = new Array(n); +
1053 +
1054 while (++i < n) { +
1055 range[i] = start + i * step; +
1056 } +
1057 +
1058 return range; +
1059}); +
1060 +
1061 +
1062/***/ }), +
1063 +
1064/***/ "./node_modules/d3-array/src/scan.js": +
1065/*!*******************************************!*\ +
1066 !*** ./node_modules/d3-array/src/scan.js ***! +
1067 \*******************************************/ +
1068/*! exports provided: default */ +
1069/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1070 +
1071"use strict"; +
1072__webpack_require__.r(__webpack_exports__); +
1073/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-array/src/ascending.js"); +
1074 +
1075 +
1076/* harmony default export */ __webpack_exports__["default"] = (function(values, compare) { +
1077 if (!(n = values.length)) return; +
1078 var n, +
1079 i = 0, +
1080 j = 0, +
1081 xi, +
1082 xj = values[j]; +
1083 +
1084 if (compare == null) compare = _ascending__WEBPACK_IMPORTED_MODULE_0__["default"]; +
1085 +
1086 while (++i < n) { +
1087 if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) { +
1088 xj = xi, j = i; +
1089 } +
1090 } +
1091 +
1092 if (compare(xj, xj) === 0) return j; +
1093}); +
1094 +
1095 +
1096/***/ }), +
1097 +
1098/***/ "./node_modules/d3-array/src/shuffle.js": +
1099/*!**********************************************!*\ +
1100 !*** ./node_modules/d3-array/src/shuffle.js ***! +
1101 \**********************************************/ +
1102/*! exports provided: default */ +
1103/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1104 +
1105"use strict"; +
1106__webpack_require__.r(__webpack_exports__); +
1107/* harmony default export */ __webpack_exports__["default"] = (function(array, i0, i1) { +
1108 var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), +
1109 t, +
1110 i; +
1111 +
1112 while (m) { +
1113 i = Math.random() * m-- | 0; +
1114 t = array[m + i0]; +
1115 array[m + i0] = array[i + i0]; +
1116 array[i + i0] = t; +
1117 } +
1118 +
1119 return array; +
1120}); +
1121 +
1122 +
1123/***/ }), +
1124 +
1125/***/ "./node_modules/d3-array/src/sum.js": +
1126/*!******************************************!*\ +
1127 !*** ./node_modules/d3-array/src/sum.js ***! +
1128 \******************************************/ +
1129/*! exports provided: default */ +
1130/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1131 +
1132"use strict"; +
1133__webpack_require__.r(__webpack_exports__); +
1134/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { +
1135 var n = values.length, +
1136 i = -1, +
1137 value, +
1138 sum = 0; +
1139 +
1140 if (valueof == null) { +
1141 while (++i < n) { +
1142 if (value = +values[i]) sum += value; // Note: zero and null are equivalent. +
1143 } +
1144 } +
1145 +
1146 else { +
1147 while (++i < n) { +
1148 if (value = +valueof(values[i], i, values)) sum += value; +
1149 } +
1150 } +
1151 +
1152 return sum; +
1153}); +
1154 +
1155 +
1156/***/ }), +
1157 +
1158/***/ "./node_modules/d3-array/src/threshold/freedmanDiaconis.js": +
1159/*!*****************************************************************!*\ +
1160 !*** ./node_modules/d3-array/src/threshold/freedmanDiaconis.js ***! +
1161 \*****************************************************************/ +
1162/*! exports provided: default */ +
1163/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1164 +
1165"use strict"; +
1166__webpack_require__.r(__webpack_exports__); +
1167/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array */ "./node_modules/d3-array/src/array.js"); +
1168/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ascending */ "./node_modules/d3-array/src/ascending.js"); +
1169/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../number */ "./node_modules/d3-array/src/number.js"); +
1170/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../quantile */ "./node_modules/d3-array/src/quantile.js"); +
1171 +
1172 +
1173 +
1174 +
1175 +
1176/* harmony default export */ __webpack_exports__["default"] = (function(values, min, max) { +
1177 values = _array__WEBPACK_IMPORTED_MODULE_0__["map"].call(values, _number__WEBPACK_IMPORTED_MODULE_2__["default"]).sort(_ascending__WEBPACK_IMPORTED_MODULE_1__["default"]); +
1178 return Math.ceil((max - min) / (2 * (Object(_quantile__WEBPACK_IMPORTED_MODULE_3__["default"])(values, 0.75) - Object(_quantile__WEBPACK_IMPORTED_MODULE_3__["default"])(values, 0.25)) * Math.pow(values.length, -1 / 3))); +
1179}); +
1180 +
1181 +
1182/***/ }), +
1183 +
1184/***/ "./node_modules/d3-array/src/threshold/scott.js": +
1185/*!******************************************************!*\ +
1186 !*** ./node_modules/d3-array/src/threshold/scott.js ***! +
1187 \******************************************************/ +
1188/*! exports provided: default */ +
1189/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1190 +
1191"use strict"; +
1192__webpack_require__.r(__webpack_exports__); +
1193/* harmony import */ var _deviation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../deviation */ "./node_modules/d3-array/src/deviation.js"); +
1194 +
1195 +
1196/* harmony default export */ __webpack_exports__["default"] = (function(values, min, max) { +
1197 return Math.ceil((max - min) / (3.5 * Object(_deviation__WEBPACK_IMPORTED_MODULE_0__["default"])(values) * Math.pow(values.length, -1 / 3))); +
1198}); +
1199 +
1200 +
1201/***/ }), +
1202 +
1203/***/ "./node_modules/d3-array/src/threshold/sturges.js": +
1204/*!********************************************************!*\ +
1205 !*** ./node_modules/d3-array/src/threshold/sturges.js ***! +
1206 \********************************************************/ +
1207/*! exports provided: default */ +
1208/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1209 +
1210"use strict"; +
1211__webpack_require__.r(__webpack_exports__); +
1212/* harmony default export */ __webpack_exports__["default"] = (function(values) { +
1213 return Math.ceil(Math.log(values.length) / Math.LN2) + 1; +
1214}); +
1215 +
1216 +
1217/***/ }), +
1218 +
1219/***/ "./node_modules/d3-array/src/ticks.js": +
1220/*!********************************************!*\ +
1221 !*** ./node_modules/d3-array/src/ticks.js ***! +
1222 \********************************************/ +
1223/*! exports provided: default, tickIncrement, tickStep */ +
1224/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1225 +
1226"use strict"; +
1227__webpack_require__.r(__webpack_exports__); +
1228/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tickIncrement", function() { return tickIncrement; }); +
1229/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tickStep", function() { return tickStep; }); +
1230var e10 = Math.sqrt(50), +
1231 e5 = Math.sqrt(10), +
1232 e2 = Math.sqrt(2); +
1233 +
1234/* harmony default export */ __webpack_exports__["default"] = (function(start, stop, count) { +
1235 var reverse, +
1236 i = -1, +
1237 n, +
1238 ticks, +
1239 step; +
1240 +
1241 stop = +stop, start = +start, count = +count; +
1242 if (start === stop && count > 0) return [start]; +
1243 if (reverse = stop < start) n = start, start = stop, stop = n; +
1244 if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; +
1245 +
1246 if (step > 0) { +
1247 start = Math.ceil(start / step); +
1248 stop = Math.floor(stop / step); +
1249 ticks = new Array(n = Math.ceil(stop - start + 1)); +
1250 while (++i < n) ticks[i] = (start + i) * step; +
1251 } else { +
1252 start = Math.floor(start * step); +
1253 stop = Math.ceil(stop * step); +
1254 ticks = new Array(n = Math.ceil(start - stop + 1)); +
1255 while (++i < n) ticks[i] = (start - i) / step; +
1256 } +
1257 +
1258 if (reverse) ticks.reverse(); +
1259 +
1260 return ticks; +
1261}); +
1262 +
1263function tickIncrement(start, stop, count) { +
1264 var step = (stop - start) / Math.max(0, count), +
1265 power = Math.floor(Math.log(step) / Math.LN10), +
1266 error = step / Math.pow(10, power); +
1267 return power >= 0 +
1268 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) +
1269 : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); +
1270} +
1271 +
1272function tickStep(start, stop, count) { +
1273 var step0 = Math.abs(stop - start) / Math.max(0, count), +
1274 step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), +
1275 error = step0 / step1; +
1276 if (error >= e10) step1 *= 10; +
1277 else if (error >= e5) step1 *= 5; +
1278 else if (error >= e2) step1 *= 2; +
1279 return stop < start ? -step1 : step1; +
1280} +
1281 +
1282 +
1283/***/ }), +
1284 +
1285/***/ "./node_modules/d3-array/src/transpose.js": +
1286/*!************************************************!*\ +
1287 !*** ./node_modules/d3-array/src/transpose.js ***! +
1288 \************************************************/ +
1289/*! exports provided: default */ +
1290/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1291 +
1292"use strict"; +
1293__webpack_require__.r(__webpack_exports__); +
1294/* harmony import */ var _min__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./min */ "./node_modules/d3-array/src/min.js"); +
1295 +
1296 +
1297/* harmony default export */ __webpack_exports__["default"] = (function(matrix) { +
1298 if (!(n = matrix.length)) return []; +
1299 for (var i = -1, m = Object(_min__WEBPACK_IMPORTED_MODULE_0__["default"])(matrix, length), transpose = new Array(m); ++i < m;) { +
1300 for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { +
1301 row[j] = matrix[j][i]; +
1302 } +
1303 } +
1304 return transpose; +
1305}); +
1306 +
1307function length(d) { +
1308 return d.length; +
1309} +
1310 +
1311 +
1312/***/ }), +
1313 +
1314/***/ "./node_modules/d3-array/src/variance.js": +
1315/*!***********************************************!*\ +
1316 !*** ./node_modules/d3-array/src/variance.js ***! +
1317 \***********************************************/ +
1318/*! exports provided: default */ +
1319/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1320 +
1321"use strict"; +
1322__webpack_require__.r(__webpack_exports__); +
1323/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "./node_modules/d3-array/src/number.js"); +
1324 +
1325 +
1326/* harmony default export */ __webpack_exports__["default"] = (function(values, valueof) { +
1327 var n = values.length, +
1328 m = 0, +
1329 i = -1, +
1330 mean = 0, +
1331 value, +
1332 delta, +
1333 sum = 0; +
1334 +
1335 if (valueof == null) { +
1336 while (++i < n) { +
1337 if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(values[i]))) { +
1338 delta = value - mean; +
1339 mean += delta / ++m; +
1340 sum += delta * (value - mean); +
1341 } +
1342 } +
1343 } +
1344 +
1345 else { +
1346 while (++i < n) { +
1347 if (!isNaN(value = Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(valueof(values[i], i, values)))) { +
1348 delta = value - mean; +
1349 mean += delta / ++m; +
1350 sum += delta * (value - mean); +
1351 } +
1352 } +
1353 } +
1354 +
1355 if (m > 1) return sum / (m - 1); +
1356}); +
1357 +
1358 +
1359/***/ }), +
1360 +
1361/***/ "./node_modules/d3-array/src/zip.js": +
1362/*!******************************************!*\ +
1363 !*** ./node_modules/d3-array/src/zip.js ***! +
1364 \******************************************/ +
1365/*! exports provided: default */ +
1366/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1367 +
1368"use strict"; +
1369__webpack_require__.r(__webpack_exports__); +
1370/* harmony import */ var _transpose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transpose */ "./node_modules/d3-array/src/transpose.js"); +
1371 +
1372 +
1373/* harmony default export */ __webpack_exports__["default"] = (function() { +
1374 return Object(_transpose__WEBPACK_IMPORTED_MODULE_0__["default"])(arguments); +
1375}); +
1376 +
1377 +
1378/***/ }), +
1379 +
1380/***/ "./node_modules/d3-axis/src/array.js": +
1381/*!*******************************************!*\ +
1382 !*** ./node_modules/d3-axis/src/array.js ***! +
1383 \*******************************************/ +
1384/*! exports provided: slice */ +
1385/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1386 +
1387"use strict"; +
1388__webpack_require__.r(__webpack_exports__); +
1389/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +
1390var slice = Array.prototype.slice; +
1391 +
1392 +
1393/***/ }), +
1394 +
1395/***/ "./node_modules/d3-axis/src/axis.js": +
1396/*!******************************************!*\ +
1397 !*** ./node_modules/d3-axis/src/axis.js ***! +
1398 \******************************************/ +
1399/*! exports provided: axisTop, axisRight, axisBottom, axisLeft */ +
1400/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1401 +
1402"use strict"; +
1403__webpack_require__.r(__webpack_exports__); +
1404/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "axisTop", function() { return axisTop; }); +
1405/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "axisRight", function() { return axisRight; }); +
1406/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "axisBottom", function() { return axisBottom; }); +
1407/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "axisLeft", function() { return axisLeft; }); +
1408/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./node_modules/d3-axis/src/array.js"); +
1409/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity */ "./node_modules/d3-axis/src/identity.js"); +
1410 +
1411 +
1412 +
1413var top = 1, +
1414 right = 2, +
1415 bottom = 3, +
1416 left = 4, +
1417 epsilon = 1e-6; +
1418 +
1419function translateX(x) { +
1420 return "translate(" + (x + 0.5) + ",0)"; +
1421} +
1422 +
1423function translateY(y) { +
1424 return "translate(0," + (y + 0.5) + ")"; +
1425} +
1426 +
1427function number(scale) { +
1428 return function(d) { +
1429 return +scale(d); +
1430 }; +
1431} +
1432 +
1433function center(scale) { +
1434 var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset. +
1435 if (scale.round()) offset = Math.round(offset); +
1436 return function(d) { +
1437 return +scale(d) + offset; +
1438 }; +
1439} +
1440 +
1441function entering() { +
1442 return !this.__axis; +
1443} +
1444 +
1445function axis(orient, scale) { +
1446 var tickArguments = [], +
1447 tickValues = null, +
1448 tickFormat = null, +
1449 tickSizeInner = 6, +
1450 tickSizeOuter = 6, +
1451 tickPadding = 3, +
1452 k = orient === top || orient === left ? -1 : 1, +
1453 x = orient === left || orient === right ? "x" : "y", +
1454 transform = orient === top || orient === bottom ? translateX : translateY; +
1455 +
1456 function axis(context) { +
1457 var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues, +
1458 format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : _identity__WEBPACK_IMPORTED_MODULE_1__["default"]) : tickFormat, +
1459 spacing = Math.max(tickSizeInner, 0) + tickPadding, +
1460 range = scale.range(), +
1461 range0 = +range[0] + 0.5, +
1462 range1 = +range[range.length - 1] + 0.5, +
1463 position = (scale.bandwidth ? center : number)(scale.copy()), +
1464 selection = context.selection ? context.selection() : context, +
1465 path = selection.selectAll(".domain").data([null]), +
1466 tick = selection.selectAll(".tick").data(values, scale).order(), +
1467 tickExit = tick.exit(), +
1468 tickEnter = tick.enter().append("g").attr("class", "tick"), +
1469 line = tick.select("line"), +
1470 text = tick.select("text"); +
1471 +
1472 path = path.merge(path.enter().insert("path", ".tick") +
1473 .attr("class", "domain") +
1474 .attr("stroke", "currentColor")); +
1475 +
1476 tick = tick.merge(tickEnter); +
1477 +
1478 line = line.merge(tickEnter.append("line") +
1479 .attr("stroke", "currentColor") +
1480 .attr(x + "2", k * tickSizeInner)); +
1481 +
1482 text = text.merge(tickEnter.append("text") +
1483 .attr("fill", "currentColor") +
1484 .attr(x, k * spacing) +
1485 .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em")); +
1486 +
1487 if (context !== selection) { +
1488 path = path.transition(context); +
1489 tick = tick.transition(context); +
1490 line = line.transition(context); +
1491 text = text.transition(context); +
1492 +
1493 tickExit = tickExit.transition(context) +
1494 .attr("opacity", epsilon) +
1495 .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); }); +
1496 +
1497 tickEnter +
1498 .attr("opacity", epsilon) +
1499 .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); }); +
1500 } +
1501 +
1502 tickExit.remove(); +
1503 +
1504 path +
1505 .attr("d", orient === left || orient == right +
1506 ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1) +
1507 : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1)); +
1508 +
1509 tick +
1510 .attr("opacity", 1) +
1511 .attr("transform", function(d) { return transform(position(d)); }); +
1512 +
1513 line +
1514 .attr(x + "2", k * tickSizeInner); +
1515 +
1516 text +
1517 .attr(x, k * spacing) +
1518 .text(format); +
1519 +
1520 selection.filter(entering) +
1521 .attr("fill", "none") +
1522 .attr("font-size", 10) +
1523 .attr("font-family", "sans-serif") +
1524 .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle"); +
1525 +
1526 selection +
1527 .each(function() { this.__axis = position; }); +
1528 } +
1529 +
1530 axis.scale = function(_) { +
1531 return arguments.length ? (scale = _, axis) : scale; +
1532 }; +
1533 +
1534 axis.ticks = function() { +
1535 return tickArguments = _array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(arguments), axis; +
1536 }; +
1537 +
1538 axis.tickArguments = function(_) { +
1539 return arguments.length ? (tickArguments = _ == null ? [] : _array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_), axis) : tickArguments.slice(); +
1540 }; +
1541 +
1542 axis.tickValues = function(_) { +
1543 return arguments.length ? (tickValues = _ == null ? null : _array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_), axis) : tickValues && tickValues.slice(); +
1544 }; +
1545 +
1546 axis.tickFormat = function(_) { +
1547 return arguments.length ? (tickFormat = _, axis) : tickFormat; +
1548 }; +
1549 +
1550 axis.tickSize = function(_) { +
1551 return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; +
1552 }; +
1553 +
1554 axis.tickSizeInner = function(_) { +
1555 return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner; +
1556 }; +
1557 +
1558 axis.tickSizeOuter = function(_) { +
1559 return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter; +
1560 }; +
1561 +
1562 axis.tickPadding = function(_) { +
1563 return arguments.length ? (tickPadding = +_, axis) : tickPadding; +
1564 }; +
1565 +
1566 return axis; +
1567} +
1568 +
1569function axisTop(scale) { +
1570 return axis(top, scale); +
1571} +
1572 +
1573function axisRight(scale) { +
1574 return axis(right, scale); +
1575} +
1576 +
1577function axisBottom(scale) { +
1578 return axis(bottom, scale); +
1579} +
1580 +
1581function axisLeft(scale) { +
1582 return axis(left, scale); +
1583} +
1584 +
1585 +
1586/***/ }), +
1587 +
1588/***/ "./node_modules/d3-axis/src/identity.js": +
1589/*!**********************************************!*\ +
1590 !*** ./node_modules/d3-axis/src/identity.js ***! +
1591 \**********************************************/ +
1592/*! exports provided: default */ +
1593/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1594 +
1595"use strict"; +
1596__webpack_require__.r(__webpack_exports__); +
1597/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
1598 return x; +
1599}); +
1600 +
1601 +
1602/***/ }), +
1603 +
1604/***/ "./node_modules/d3-axis/src/index.js": +
1605/*!*******************************************!*\ +
1606 !*** ./node_modules/d3-axis/src/index.js ***! +
1607 \*******************************************/ +
1608/*! exports provided: axisTop, axisRight, axisBottom, axisLeft */ +
1609/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1610 +
1611"use strict"; +
1612__webpack_require__.r(__webpack_exports__); +
1613/* harmony import */ var _axis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./axis */ "./node_modules/d3-axis/src/axis.js"); +
1614/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisTop", function() { return _axis__WEBPACK_IMPORTED_MODULE_0__["axisTop"]; }); +
1615 +
1616/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisRight", function() { return _axis__WEBPACK_IMPORTED_MODULE_0__["axisRight"]; }); +
1617 +
1618/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisBottom", function() { return _axis__WEBPACK_IMPORTED_MODULE_0__["axisBottom"]; }); +
1619 +
1620/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisLeft", function() { return _axis__WEBPACK_IMPORTED_MODULE_0__["axisLeft"]; }); +
1621 +
1622 +
1623 +
1624 +
1625/***/ }), +
1626 +
1627/***/ "./node_modules/d3-brush/src/brush.js": +
1628/*!********************************************!*\ +
1629 !*** ./node_modules/d3-brush/src/brush.js ***! +
1630 \********************************************/ +
1631/*! exports provided: brushSelection, brushX, brushY, default */ +
1632/***/ (function(module, __webpack_exports__, __webpack_require__) { +
1633 +
1634"use strict"; +
1635__webpack_require__.r(__webpack_exports__); +
1636/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brushSelection", function() { return brushSelection; }); +
1637/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brushX", function() { return brushX; }); +
1638/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brushY", function() { return brushY; }); +
1639/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/index.js"); +
1640/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-drag */ "./node_modules/d3-drag/src/index.js"); +
1641/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
1642/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
1643/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-transition */ "./node_modules/d3-transition/src/index.js"); +
1644/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-brush/src/constant.js"); +
1645/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./event */ "./node_modules/d3-brush/src/event.js"); +
1646/* harmony import */ var _noevent__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./noevent */ "./node_modules/d3-brush/src/noevent.js"); +
1647 +
1648 +
1649 +
1650 +
1651 +
1652 +
1653 +
1654 +
1655 +
1656var MODE_DRAG = {name: "drag"}, +
1657 MODE_SPACE = {name: "space"}, +
1658 MODE_HANDLE = {name: "handle"}, +
1659 MODE_CENTER = {name: "center"}; +
1660 +
1661var X = { +
1662 name: "x", +
1663 handles: ["e", "w"].map(type), +
1664 input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; }, +
1665 output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } +
1666}; +
1667 +
1668var Y = { +
1669 name: "y", +
1670 handles: ["n", "s"].map(type), +
1671 input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; }, +
1672 output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } +
1673}; +
1674 +
1675var XY = { +
1676 name: "xy", +
1677 handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type), +
1678 input: function(xy) { return xy; }, +
1679 output: function(xy) { return xy; } +
1680}; +
1681 +
1682var cursors = { +
1683 overlay: "crosshair", +
1684 selection: "move", +
1685 n: "ns-resize", +
1686 e: "ew-resize", +
1687 s: "ns-resize", +
1688 w: "ew-resize", +
1689 nw: "nwse-resize", +
1690 ne: "nesw-resize", +
1691 se: "nwse-resize", +
1692 sw: "nesw-resize" +
1693}; +
1694 +
1695var flipX = { +
1696 e: "w", +
1697 w: "e", +
1698 nw: "ne", +
1699 ne: "nw", +
1700 se: "sw", +
1701 sw: "se" +
1702}; +
1703 +
1704var flipY = { +
1705 n: "s", +
1706 s: "n", +
1707 nw: "sw", +
1708 ne: "se", +
1709 se: "ne", +
1710 sw: "nw" +
1711}; +
1712 +
1713var signsX = { +
1714 overlay: +1, +
1715 selection: +1, +
1716 n: null, +
1717 e: +1, +
1718 s: null, +
1719 w: -1, +
1720 nw: -1, +
1721 ne: +1, +
1722 se: +1, +
1723 sw: -1 +
1724}; +
1725 +
1726var signsY = { +
1727 overlay: +1, +
1728 selection: +1, +
1729 n: -1, +
1730 e: null, +
1731 s: +1, +
1732 w: null, +
1733 nw: -1, +
1734 ne: -1, +
1735 se: +1, +
1736 sw: +1 +
1737}; +
1738 +
1739function type(t) { +
1740 return {type: t}; +
1741} +
1742 +
1743// Ignore right-click, since that should open the context menu. +
1744function defaultFilter() { +
1745 return !d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].button; +
1746} +
1747 +
1748function defaultExtent() { +
1749 var svg = this.ownerSVGElement || this; +
1750 return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; +
1751} +
1752 +
1753// Like d3.local, but with the name “__brush” rather than auto-generated. +
1754function local(node) { +
1755 while (!node.__brush) if (!(node = node.parentNode)) return; +
1756 return node.__brush; +
1757} +
1758 +
1759function empty(extent) { +
1760 return extent[0][0] === extent[1][0] +
1761 || extent[0][1] === extent[1][1]; +
1762} +
1763 +
1764function brushSelection(node) { +
1765 var state = node.__brush; +
1766 return state ? state.dim.output(state.selection) : null; +
1767} +
1768 +
1769function brushX() { +
1770 return brush(X); +
1771} +
1772 +
1773function brushY() { +
1774 return brush(Y); +
1775} +
1776 +
1777/* harmony default export */ __webpack_exports__["default"] = (function() { +
1778 return brush(XY); +
1779}); +
1780 +
1781function brush(dim) { +
1782 var extent = defaultExtent, +
1783 filter = defaultFilter, +
1784 listeners = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])(brush, "start", "brush", "end"), +
1785 handleSize = 6, +
1786 touchending; +
1787 +
1788 function brush(group) { +
1789 var overlay = group +
1790 .property("__brush", initialize) +
1791 .selectAll(".overlay") +
1792 .data([type("overlay")]); +
1793 +
1794 overlay.enter().append("rect") +
1795 .attr("class", "overlay") +
1796 .attr("pointer-events", "all") +
1797 .attr("cursor", cursors.overlay) +
1798 .merge(overlay) +
1799 .each(function() { +
1800 var extent = local(this).extent; +
1801 Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this) +
1802 .attr("x", extent[0][0]) +
1803 .attr("y", extent[0][1]) +
1804 .attr("width", extent[1][0] - extent[0][0]) +
1805 .attr("height", extent[1][1] - extent[0][1]); +
1806 }); +
1807 +
1808 group.selectAll(".selection") +
1809 .data([type("selection")]) +
1810 .enter().append("rect") +
1811 .attr("class", "selection") +
1812 .attr("cursor", cursors.selection) +
1813 .attr("fill", "#777") +
1814 .attr("fill-opacity", 0.3) +
1815 .attr("stroke", "#fff") +
1816 .attr("shape-rendering", "crispEdges"); +
1817 +
1818 var handle = group.selectAll(".handle") +
1819 .data(dim.handles, function(d) { return d.type; }); +
1820 +
1821 handle.exit().remove(); +
1822 +
1823 handle.enter().append("rect") +
1824 .attr("class", function(d) { return "handle handle--" + d.type; }) +
1825 .attr("cursor", function(d) { return cursors[d.type]; }); +
1826 +
1827 group +
1828 .each(redraw) +
1829 .attr("fill", "none") +
1830 .attr("pointer-events", "all") +
1831 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)") +
1832 .on("mousedown.brush touchstart.brush", started); +
1833 } +
1834 +
1835 brush.move = function(group, selection) { +
1836 if (group.selection) { +
1837 group +
1838 .on("start.brush", function() { emitter(this, arguments).beforestart().start(); }) +
1839 .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); }) +
1840 .tween("brush", function() { +
1841 var that = this, +
1842 state = that.__brush, +
1843 emit = emitter(that, arguments), +
1844 selection0 = state.selection, +
1845 selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent), +
1846 i = Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_2__["interpolate"])(selection0, selection1); +
1847 +
1848 function tween(t) { +
1849 state.selection = t === 1 && empty(selection1) ? null : i(t); +
1850 redraw.call(that); +
1851 emit.brush(); +
1852 } +
1853 +
1854 return selection0 && selection1 ? tween : tween(1); +
1855 }); +
1856 } else { +
1857 group +
1858 .each(function() { +
1859 var that = this, +
1860 args = arguments, +
1861 state = that.__brush, +
1862 selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent), +
1863 emit = emitter(that, args).beforestart(); +
1864 +
1865 Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(that); +
1866 state.selection = selection1 == null || empty(selection1) ? null : selection1; +
1867 redraw.call(that); +
1868 emit.start().brush().end(); +
1869 }); +
1870 } +
1871 }; +
1872 +
1873 function redraw() { +
1874 var group = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this), +
1875 selection = local(this).selection; +
1876 +
1877 if (selection) { +
1878 group.selectAll(".selection") +
1879 .style("display", null) +
1880 .attr("x", selection[0][0]) +
1881 .attr("y", selection[0][1]) +
1882 .attr("width", selection[1][0] - selection[0][0]) +
1883 .attr("height", selection[1][1] - selection[0][1]); +
1884 +
1885 group.selectAll(".handle") +
1886 .style("display", null) +
1887 .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; }) +
1888 .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; }) +
1889 .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; }) +
1890 .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; }); +
1891 } +
1892 +
1893 else { +
1894 group.selectAll(".selection,.handle") +
1895 .style("display", "none") +
1896 .attr("x", null) +
1897 .attr("y", null) +
1898 .attr("width", null) +
1899 .attr("height", null); +
1900 } +
1901 } +
1902 +
1903 function emitter(that, args) { +
1904 return that.__brush.emitter || new Emitter(that, args); +
1905 } +
1906 +
1907 function Emitter(that, args) { +
1908 this.that = that; +
1909 this.args = args; +
1910 this.state = that.__brush; +
1911 this.active = 0; +
1912 } +
1913 +
1914 Emitter.prototype = { +
1915 beforestart: function() { +
1916 if (++this.active === 1) this.state.emitter = this, this.starting = true; +
1917 return this; +
1918 }, +
1919 start: function() { +
1920 if (this.starting) this.starting = false, this.emit("start"); +
1921 return this; +
1922 }, +
1923 brush: function() { +
1924 this.emit("brush"); +
1925 return this; +
1926 }, +
1927 end: function() { +
1928 if (--this.active === 0) delete this.state.emitter, this.emit("end"); +
1929 return this; +
1930 }, +
1931 emit: function(type) { +
1932 Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["customEvent"])(new _event__WEBPACK_IMPORTED_MODULE_6__["default"](brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]); +
1933 } +
1934 }; +
1935 +
1936 function started() { +
1937 if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches) { if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].changedTouches.length < d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches.length) return Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["default"])(); } +
1938 else if (touchending) return; +
1939 if (!filter.apply(this, arguments)) return; +
1940 +
1941 var that = this, +
1942 type = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].target.__data__.type, +
1943 mode = (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].altKey ? MODE_CENTER : MODE_HANDLE), +
1944 signX = dim === Y ? null : signsX[type], +
1945 signY = dim === X ? null : signsY[type], +
1946 state = local(that), +
1947 extent = state.extent, +
1948 selection = state.selection, +
1949 W = extent[0][0], w0, w1, +
1950 N = extent[0][1], n0, n1, +
1951 E = extent[1][0], e0, e1, +
1952 S = extent[1][1], s0, s1, +
1953 dx, +
1954 dy, +
1955 moving, +
1956 shifting = signX && signY && d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].shiftKey, +
1957 lockX, +
1958 lockY, +
1959 point0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(that), +
1960 point = point0, +
1961 emit = emitter(that, arguments).beforestart(); +
1962 +
1963 if (type === "overlay") { +
1964 state.selection = selection = [ +
1965 [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]], +
1966 [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0] +
1967 ]; +
1968 } else { +
1969 w0 = selection[0][0]; +
1970 n0 = selection[0][1]; +
1971 e0 = selection[1][0]; +
1972 s0 = selection[1][1]; +
1973 } +
1974 +
1975 w1 = w0; +
1976 n1 = n0; +
1977 e1 = e0; +
1978 s1 = s0; +
1979 +
1980 var group = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(that) +
1981 .attr("pointer-events", "none"); +
1982 +
1983 var overlay = group.selectAll(".overlay") +
1984 .attr("cursor", cursors[type]); +
1985 +
1986 if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches) { +
1987 group +
1988 .on("touchmove.brush", moved, true) +
1989 .on("touchend.brush touchcancel.brush", ended, true); +
1990 } else { +
1991 var view = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view) +
1992 .on("keydown.brush", keydowned, true) +
1993 .on("keyup.brush", keyupped, true) +
1994 .on("mousemove.brush", moved, true) +
1995 .on("mouseup.brush", ended, true); +
1996 +
1997 Object(d3_drag__WEBPACK_IMPORTED_MODULE_1__["dragDisable"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view); +
1998 } +
1999 +
2000 Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["nopropagation"])(); +
2001 Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(that); +
2002 redraw.call(that); +
2003 emit.start(); +
2004 +
2005 function moved() { +
2006 var point1 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(that); +
2007 if (shifting && !lockX && !lockY) { +
2008 if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true; +
2009 else lockX = true; +
2010 } +
2011 point = point1; +
2012 moving = true; +
2013 Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["default"])(); +
2014 move(); +
2015 } +
2016 +
2017 function move() { +
2018 var t; +
2019 +
2020 dx = point[0] - point0[0]; +
2021 dy = point[1] - point0[1]; +
2022 +
2023 switch (mode) { +
2024 case MODE_SPACE: +
2025 case MODE_DRAG: { +
2026 if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; +
2027 if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; +
2028 break; +
2029 } +
2030 case MODE_HANDLE: { +
2031 if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; +
2032 else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; +
2033 if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; +
2034 else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; +
2035 break; +
2036 } +
2037 case MODE_CENTER: { +
2038 if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); +
2039 if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); +
2040 break; +
2041 } +
2042 } +
2043 +
2044 if (e1 < w1) { +
2045 signX *= -1; +
2046 t = w0, w0 = e0, e0 = t; +
2047 t = w1, w1 = e1, e1 = t; +
2048 if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); +
2049 } +
2050 +
2051 if (s1 < n1) { +
2052 signY *= -1; +
2053 t = n0, n0 = s0, s0 = t; +
2054 t = n1, n1 = s1, s1 = t; +
2055 if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); +
2056 } +
2057 +
2058 if (state.selection) selection = state.selection; // May be set by brush.move! +
2059 if (lockX) w1 = selection[0][0], e1 = selection[1][0]; +
2060 if (lockY) n1 = selection[0][1], s1 = selection[1][1]; +
2061 +
2062 if (selection[0][0] !== w1 +
2063 || selection[0][1] !== n1 +
2064 || selection[1][0] !== e1 +
2065 || selection[1][1] !== s1) { +
2066 state.selection = [[w1, n1], [e1, s1]]; +
2067 redraw.call(that); +
2068 emit.brush(); +
2069 } +
2070 } +
2071 +
2072 function ended() { +
2073 Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["nopropagation"])(); +
2074 if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches) { +
2075 if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].touches.length) return; +
2076 if (touchending) clearTimeout(touchending); +
2077 touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! +
2078 group.on("touchmove.brush touchend.brush touchcancel.brush", null); +
2079 } else { +
2080 Object(d3_drag__WEBPACK_IMPORTED_MODULE_1__["dragEnable"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view, moving); +
2081 view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); +
2082 } +
2083 group.attr("pointer-events", "all"); +
2084 overlay.attr("cursor", cursors.overlay); +
2085 if (state.selection) selection = state.selection; // May be set by brush.move (on start)! +
2086 if (empty(selection)) state.selection = null, redraw.call(that); +
2087 emit.end(); +
2088 } +
2089 +
2090 function keydowned() { +
2091 switch (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].keyCode) { +
2092 case 16: { // SHIFT +
2093 shifting = signX && signY; +
2094 break; +
2095 } +
2096 case 18: { // ALT +
2097 if (mode === MODE_HANDLE) { +
2098 if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; +
2099 if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; +
2100 mode = MODE_CENTER; +
2101 move(); +
2102 } +
2103 break; +
2104 } +
2105 case 32: { // SPACE; takes priority over ALT +
2106 if (mode === MODE_HANDLE || mode === MODE_CENTER) { +
2107 if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; +
2108 if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; +
2109 mode = MODE_SPACE; +
2110 overlay.attr("cursor", cursors.selection); +
2111 move(); +
2112 } +
2113 break; +
2114 } +
2115 default: return; +
2116 } +
2117 Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["default"])(); +
2118 } +
2119 +
2120 function keyupped() { +
2121 switch (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].keyCode) { +
2122 case 16: { // SHIFT +
2123 if (shifting) { +
2124 lockX = lockY = shifting = false; +
2125 move(); +
2126 } +
2127 break; +
2128 } +
2129 case 18: { // ALT +
2130 if (mode === MODE_CENTER) { +
2131 if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; +
2132 if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; +
2133 mode = MODE_HANDLE; +
2134 move(); +
2135 } +
2136 break; +
2137 } +
2138 case 32: { // SPACE +
2139 if (mode === MODE_SPACE) { +
2140 if (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].altKey) { +
2141 if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; +
2142 if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; +
2143 mode = MODE_CENTER; +
2144 } else { +
2145 if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; +
2146 if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; +
2147 mode = MODE_HANDLE; +
2148 } +
2149 overlay.attr("cursor", cursors[type]); +
2150 move(); +
2151 } +
2152 break; +
2153 } +
2154 default: return; +
2155 } +
2156 Object(_noevent__WEBPACK_IMPORTED_MODULE_7__["default"])(); +
2157 } +
2158 } +
2159 +
2160 function initialize() { +
2161 var state = this.__brush || {selection: null}; +
2162 state.extent = extent.apply(this, arguments); +
2163 state.dim = dim; +
2164 return state; +
2165 } +
2166 +
2167 brush.extent = function(_) { +
2168 return arguments.length ? (extent = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent; +
2169 }; +
2170 +
2171 brush.filter = function(_) { +
2172 return arguments.length ? (filter = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])(!!_), brush) : filter; +
2173 }; +
2174 +
2175 brush.handleSize = function(_) { +
2176 return arguments.length ? (handleSize = +_, brush) : handleSize; +
2177 }; +
2178 +
2179 brush.on = function() { +
2180 var value = listeners.on.apply(listeners, arguments); +
2181 return value === listeners ? brush : value; +
2182 }; +
2183 +
2184 return brush; +
2185} +
2186 +
2187 +
2188/***/ }), +
2189 +
2190/***/ "./node_modules/d3-brush/src/constant.js": +
2191/*!***********************************************!*\ +
2192 !*** ./node_modules/d3-brush/src/constant.js ***! +
2193 \***********************************************/ +
2194/*! exports provided: default */ +
2195/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2196 +
2197"use strict"; +
2198__webpack_require__.r(__webpack_exports__); +
2199/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
2200 return function() { +
2201 return x; +
2202 }; +
2203}); +
2204 +
2205 +
2206/***/ }), +
2207 +
2208/***/ "./node_modules/d3-brush/src/event.js": +
2209/*!********************************************!*\ +
2210 !*** ./node_modules/d3-brush/src/event.js ***! +
2211 \********************************************/ +
2212/*! exports provided: default */ +
2213/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2214 +
2215"use strict"; +
2216__webpack_require__.r(__webpack_exports__); +
2217/* harmony default export */ __webpack_exports__["default"] = (function(target, type, selection) { +
2218 this.target = target; +
2219 this.type = type; +
2220 this.selection = selection; +
2221}); +
2222 +
2223 +
2224/***/ }), +
2225 +
2226/***/ "./node_modules/d3-brush/src/index.js": +
2227/*!********************************************!*\ +
2228 !*** ./node_modules/d3-brush/src/index.js ***! +
2229 \********************************************/ +
2230/*! exports provided: brush, brushX, brushY, brushSelection */ +
2231/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2232 +
2233"use strict"; +
2234__webpack_require__.r(__webpack_exports__); +
2235/* harmony import */ var _brush__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./brush */ "./node_modules/d3-brush/src/brush.js"); +
2236/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brush", function() { return _brush__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
2237 +
2238/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushX", function() { return _brush__WEBPACK_IMPORTED_MODULE_0__["brushX"]; }); +
2239 +
2240/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushY", function() { return _brush__WEBPACK_IMPORTED_MODULE_0__["brushY"]; }); +
2241 +
2242/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushSelection", function() { return _brush__WEBPACK_IMPORTED_MODULE_0__["brushSelection"]; }); +
2243 +
2244 +
2245 +
2246 +
2247/***/ }), +
2248 +
2249/***/ "./node_modules/d3-brush/src/noevent.js": +
2250/*!**********************************************!*\ +
2251 !*** ./node_modules/d3-brush/src/noevent.js ***! +
2252 \**********************************************/ +
2253/*! exports provided: nopropagation, default */ +
2254/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2255 +
2256"use strict"; +
2257__webpack_require__.r(__webpack_exports__); +
2258/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nopropagation", function() { return nopropagation; }); +
2259/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
2260 +
2261 +
2262function nopropagation() { +
2263 d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +
2264} +
2265 +
2266/* harmony default export */ __webpack_exports__["default"] = (function() { +
2267 d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].preventDefault(); +
2268 d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +
2269}); +
2270 +
2271 +
2272/***/ }), +
2273 +
2274/***/ "./node_modules/d3-chord/src/array.js": +
2275/*!********************************************!*\ +
2276 !*** ./node_modules/d3-chord/src/array.js ***! +
2277 \********************************************/ +
2278/*! exports provided: slice */ +
2279/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2280 +
2281"use strict"; +
2282__webpack_require__.r(__webpack_exports__); +
2283/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +
2284var slice = Array.prototype.slice; +
2285 +
2286 +
2287/***/ }), +
2288 +
2289/***/ "./node_modules/d3-chord/src/chord.js": +
2290/*!********************************************!*\ +
2291 !*** ./node_modules/d3-chord/src/chord.js ***! +
2292 \********************************************/ +
2293/*! exports provided: default */ +
2294/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2295 +
2296"use strict"; +
2297__webpack_require__.r(__webpack_exports__); +
2298/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
2299/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "./node_modules/d3-chord/src/math.js"); +
2300 +
2301 +
2302 +
2303function compareValue(compare) { +
2304 return function(a, b) { +
2305 return compare( +
2306 a.source.value + a.target.value, +
2307 b.source.value + b.target.value +
2308 ); +
2309 }; +
2310} +
2311 +
2312/* harmony default export */ __webpack_exports__["default"] = (function() { +
2313 var padAngle = 0, +
2314 sortGroups = null, +
2315 sortSubgroups = null, +
2316 sortChords = null; +
2317 +
2318 function chord(matrix) { +
2319 var n = matrix.length, +
2320 groupSums = [], +
2321 groupIndex = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(n), +
2322 subgroupIndex = [], +
2323 chords = [], +
2324 groups = chords.groups = new Array(n), +
2325 subgroups = new Array(n * n), +
2326 k, +
2327 x, +
2328 x0, +
2329 dx, +
2330 i, +
2331 j; +
2332 +
2333 // Compute the sum. +
2334 k = 0, i = -1; while (++i < n) { +
2335 x = 0, j = -1; while (++j < n) { +
2336 x += matrix[i][j]; +
2337 } +
2338 groupSums.push(x); +
2339 subgroupIndex.push(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(n)); +
2340 k += x; +
2341 } +
2342 +
2343 // Sort groups… +
2344 if (sortGroups) groupIndex.sort(function(a, b) { +
2345 return sortGroups(groupSums[a], groupSums[b]); +
2346 }); +
2347 +
2348 // Sort subgroups… +
2349 if (sortSubgroups) subgroupIndex.forEach(function(d, i) { +
2350 d.sort(function(a, b) { +
2351 return sortSubgroups(matrix[i][a], matrix[i][b]); +
2352 }); +
2353 }); +
2354 +
2355 // Convert the sum to scaling factor for [0, 2pi]. +
2356 // TODO Allow start and end angle to be specified? +
2357 // TODO Allow padding to be specified as percentage? +
2358 k = Object(_math__WEBPACK_IMPORTED_MODULE_1__["max"])(0, _math__WEBPACK_IMPORTED_MODULE_1__["tau"] - padAngle * n) / k; +
2359 dx = k ? padAngle : _math__WEBPACK_IMPORTED_MODULE_1__["tau"] / n; +
2360 +
2361 // Compute the start and end angle for each group and subgroup. +
2362 // Note: Opera has a bug reordering object literal properties! +
2363 x = 0, i = -1; while (++i < n) { +
2364 x0 = x, j = -1; while (++j < n) { +
2365 var di = groupIndex[i], +
2366 dj = subgroupIndex[di][j], +
2367 v = matrix[di][dj], +
2368 a0 = x, +
2369 a1 = x += v * k; +
2370 subgroups[dj * n + di] = { +
2371 index: di, +
2372 subindex: dj, +
2373 startAngle: a0, +
2374 endAngle: a1, +
2375 value: v +
2376 }; +
2377 } +
2378 groups[di] = { +
2379 index: di, +
2380 startAngle: x0, +
2381 endAngle: x, +
2382 value: groupSums[di] +
2383 }; +
2384 x += dx; +
2385 } +
2386 +
2387 // Generate chords for each (non-empty) subgroup-subgroup link. +
2388 i = -1; while (++i < n) { +
2389 j = i - 1; while (++j < n) { +
2390 var source = subgroups[j * n + i], +
2391 target = subgroups[i * n + j]; +
2392 if (source.value || target.value) { +
2393 chords.push(source.value < target.value +
2394 ? {source: target, target: source} +
2395 : {source: source, target: target}); +
2396 } +
2397 } +
2398 } +
2399 +
2400 return sortChords ? chords.sort(sortChords) : chords; +
2401 } +
2402 +
2403 chord.padAngle = function(_) { +
2404 return arguments.length ? (padAngle = Object(_math__WEBPACK_IMPORTED_MODULE_1__["max"])(0, _), chord) : padAngle; +
2405 }; +
2406 +
2407 chord.sortGroups = function(_) { +
2408 return arguments.length ? (sortGroups = _, chord) : sortGroups; +
2409 }; +
2410 +
2411 chord.sortSubgroups = function(_) { +
2412 return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups; +
2413 }; +
2414 +
2415 chord.sortChords = function(_) { +
2416 return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._; +
2417 }; +
2418 +
2419 return chord; +
2420}); +
2421 +
2422 +
2423/***/ }), +
2424 +
2425/***/ "./node_modules/d3-chord/src/constant.js": +
2426/*!***********************************************!*\ +
2427 !*** ./node_modules/d3-chord/src/constant.js ***! +
2428 \***********************************************/ +
2429/*! exports provided: default */ +
2430/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2431 +
2432"use strict"; +
2433__webpack_require__.r(__webpack_exports__); +
2434/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
2435 return function() { +
2436 return x; +
2437 }; +
2438}); +
2439 +
2440 +
2441/***/ }), +
2442 +
2443/***/ "./node_modules/d3-chord/src/index.js": +
2444/*!********************************************!*\ +
2445 !*** ./node_modules/d3-chord/src/index.js ***! +
2446 \********************************************/ +
2447/*! exports provided: chord, ribbon */ +
2448/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2449 +
2450"use strict"; +
2451__webpack_require__.r(__webpack_exports__); +
2452/* harmony import */ var _chord__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chord */ "./node_modules/d3-chord/src/chord.js"); +
2453/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "chord", function() { return _chord__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
2454 +
2455/* harmony import */ var _ribbon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ribbon */ "./node_modules/d3-chord/src/ribbon.js"); +
2456/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ribbon", function() { return _ribbon__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
2457 +
2458 +
2459 +
2460 +
2461 +
2462/***/ }), +
2463 +
2464/***/ "./node_modules/d3-chord/src/math.js": +
2465/*!*******************************************!*\ +
2466 !*** ./node_modules/d3-chord/src/math.js ***! +
2467 \*******************************************/ +
2468/*! exports provided: cos, sin, pi, halfPi, tau, max */ +
2469/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2470 +
2471"use strict"; +
2472__webpack_require__.r(__webpack_exports__); +
2473/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cos", function() { return cos; }); +
2474/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sin", function() { return sin; }); +
2475/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pi", function() { return pi; }); +
2476/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "halfPi", function() { return halfPi; }); +
2477/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tau", function() { return tau; }); +
2478/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; }); +
2479var cos = Math.cos; +
2480var sin = Math.sin; +
2481var pi = Math.PI; +
2482var halfPi = pi / 2; +
2483var tau = pi * 2; +
2484var max = Math.max; +
2485 +
2486 +
2487/***/ }), +
2488 +
2489/***/ "./node_modules/d3-chord/src/ribbon.js": +
2490/*!*********************************************!*\ +
2491 !*** ./node_modules/d3-chord/src/ribbon.js ***! +
2492 \*********************************************/ +
2493/*! exports provided: default */ +
2494/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2495 +
2496"use strict"; +
2497__webpack_require__.r(__webpack_exports__); +
2498/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./node_modules/d3-chord/src/array.js"); +
2499/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-chord/src/constant.js"); +
2500/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "./node_modules/d3-chord/src/math.js"); +
2501/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/index.js"); +
2502 +
2503 +
2504 +
2505 +
2506 +
2507function defaultSource(d) { +
2508 return d.source; +
2509} +
2510 +
2511function defaultTarget(d) { +
2512 return d.target; +
2513} +
2514 +
2515function defaultRadius(d) { +
2516 return d.radius; +
2517} +
2518 +
2519function defaultStartAngle(d) { +
2520 return d.startAngle; +
2521} +
2522 +
2523function defaultEndAngle(d) { +
2524 return d.endAngle; +
2525} +
2526 +
2527/* harmony default export */ __webpack_exports__["default"] = (function() { +
2528 var source = defaultSource, +
2529 target = defaultTarget, +
2530 radius = defaultRadius, +
2531 startAngle = defaultStartAngle, +
2532 endAngle = defaultEndAngle, +
2533 context = null; +
2534 +
2535 function ribbon() { +
2536 var buffer, +
2537 argv = _array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(arguments), +
2538 s = source.apply(this, argv), +
2539 t = target.apply(this, argv), +
2540 sr = +radius.apply(this, (argv[0] = s, argv)), +
2541 sa0 = startAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], +
2542 sa1 = endAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], +
2543 sx0 = sr * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(sa0), +
2544 sy0 = sr * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(sa0), +
2545 tr = +radius.apply(this, (argv[0] = t, argv)), +
2546 ta0 = startAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], +
2547 ta1 = endAngle.apply(this, argv) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"]; +
2548 +
2549 if (!context) context = buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_3__["path"])(); +
2550 +
2551 context.moveTo(sx0, sy0); +
2552 context.arc(0, 0, sr, sa0, sa1); +
2553 if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr? +
2554 context.quadraticCurveTo(0, 0, tr * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(ta0), tr * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(ta0)); +
2555 context.arc(0, 0, tr, ta0, ta1); +
2556 } +
2557 context.quadraticCurveTo(0, 0, sx0, sy0); +
2558 context.closePath(); +
2559 +
2560 if (buffer) return context = null, buffer + "" || null; +
2561 } +
2562 +
2563 ribbon.radius = function(_) { +
2564 return arguments.length ? (radius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), ribbon) : radius; +
2565 }; +
2566 +
2567 ribbon.startAngle = function(_) { +
2568 return arguments.length ? (startAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), ribbon) : startAngle; +
2569 }; +
2570 +
2571 ribbon.endAngle = function(_) { +
2572 return arguments.length ? (endAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), ribbon) : endAngle; +
2573 }; +
2574 +
2575 ribbon.source = function(_) { +
2576 return arguments.length ? (source = _, ribbon) : source; +
2577 }; +
2578 +
2579 ribbon.target = function(_) { +
2580 return arguments.length ? (target = _, ribbon) : target; +
2581 }; +
2582 +
2583 ribbon.context = function(_) { +
2584 return arguments.length ? ((context = _ == null ? null : _), ribbon) : context; +
2585 }; +
2586 +
2587 return ribbon; +
2588}); +
2589 +
2590 +
2591/***/ }), +
2592 +
2593/***/ "./node_modules/d3-collection/src/entries.js": +
2594/*!***************************************************!*\ +
2595 !*** ./node_modules/d3-collection/src/entries.js ***! +
2596 \***************************************************/ +
2597/*! exports provided: default */ +
2598/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2599 +
2600"use strict"; +
2601__webpack_require__.r(__webpack_exports__); +
2602/* harmony default export */ __webpack_exports__["default"] = (function(map) { +
2603 var entries = []; +
2604 for (var key in map) entries.push({key: key, value: map[key]}); +
2605 return entries; +
2606}); +
2607 +
2608 +
2609/***/ }), +
2610 +
2611/***/ "./node_modules/d3-collection/src/index.js": +
2612/*!*************************************************!*\ +
2613 !*** ./node_modules/d3-collection/src/index.js ***! +
2614 \*************************************************/ +
2615/*! exports provided: nest, set, map, keys, values, entries */ +
2616/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2617 +
2618"use strict"; +
2619__webpack_require__.r(__webpack_exports__); +
2620/* harmony import */ var _nest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./nest */ "./node_modules/d3-collection/src/nest.js"); +
2621/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "nest", function() { return _nest__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
2622 +
2623/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./set */ "./node_modules/d3-collection/src/set.js"); +
2624/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "set", function() { return _set__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
2625 +
2626/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./map */ "./node_modules/d3-collection/src/map.js"); +
2627/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return _map__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
2628 +
2629/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./keys */ "./node_modules/d3-collection/src/keys.js"); +
2630/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "keys", function() { return _keys__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
2631 +
2632/* harmony import */ var _values__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./values */ "./node_modules/d3-collection/src/values.js"); +
2633/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "values", function() { return _values__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
2634 +
2635/* harmony import */ var _entries__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./entries */ "./node_modules/d3-collection/src/entries.js"); +
2636/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "entries", function() { return _entries__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
2637 +
2638 +
2639 +
2640 +
2641 +
2642 +
2643 +
2644 +
2645 +
2646/***/ }), +
2647 +
2648/***/ "./node_modules/d3-collection/src/keys.js": +
2649/*!************************************************!*\ +
2650 !*** ./node_modules/d3-collection/src/keys.js ***! +
2651 \************************************************/ +
2652/*! exports provided: default */ +
2653/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2654 +
2655"use strict"; +
2656__webpack_require__.r(__webpack_exports__); +
2657/* harmony default export */ __webpack_exports__["default"] = (function(map) { +
2658 var keys = []; +
2659 for (var key in map) keys.push(key); +
2660 return keys; +
2661}); +
2662 +
2663 +
2664/***/ }), +
2665 +
2666/***/ "./node_modules/d3-collection/src/map.js": +
2667/*!***********************************************!*\ +
2668 !*** ./node_modules/d3-collection/src/map.js ***! +
2669 \***********************************************/ +
2670/*! exports provided: prefix, default */ +
2671/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2672 +
2673"use strict"; +
2674__webpack_require__.r(__webpack_exports__); +
2675/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prefix", function() { return prefix; }); +
2676var prefix = "$"; +
2677 +
2678function Map() {} +
2679 +
2680Map.prototype = map.prototype = { +
2681 constructor: Map, +
2682 has: function(key) { +
2683 return (prefix + key) in this; +
2684 }, +
2685 get: function(key) { +
2686 return this[prefix + key]; +
2687 }, +
2688 set: function(key, value) { +
2689 this[prefix + key] = value; +
2690 return this; +
2691 }, +
2692 remove: function(key) { +
2693 var property = prefix + key; +
2694 return property in this && delete this[property]; +
2695 }, +
2696 clear: function() { +
2697 for (var property in this) if (property[0] === prefix) delete this[property]; +
2698 }, +
2699 keys: function() { +
2700 var keys = []; +
2701 for (var property in this) if (property[0] === prefix) keys.push(property.slice(1)); +
2702 return keys; +
2703 }, +
2704 values: function() { +
2705 var values = []; +
2706 for (var property in this) if (property[0] === prefix) values.push(this[property]); +
2707 return values; +
2708 }, +
2709 entries: function() { +
2710 var entries = []; +
2711 for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]}); +
2712 return entries; +
2713 }, +
2714 size: function() { +
2715 var size = 0; +
2716 for (var property in this) if (property[0] === prefix) ++size; +
2717 return size; +
2718 }, +
2719 empty: function() { +
2720 for (var property in this) if (property[0] === prefix) return false; +
2721 return true; +
2722 }, +
2723 each: function(f) { +
2724 for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this); +
2725 } +
2726}; +
2727 +
2728function map(object, f) { +
2729 var map = new Map; +
2730 +
2731 // Copy constructor. +
2732 if (object instanceof Map) object.each(function(value, key) { map.set(key, value); }); +
2733 +
2734 // Index array by numeric index or specified key function. +
2735 else if (Array.isArray(object)) { +
2736 var i = -1, +
2737 n = object.length, +
2738 o; +
2739 +
2740 if (f == null) while (++i < n) map.set(i, object[i]); +
2741 else while (++i < n) map.set(f(o = object[i], i, object), o); +
2742 } +
2743 +
2744 // Convert object to map. +
2745 else if (object) for (var key in object) map.set(key, object[key]); +
2746 +
2747 return map; +
2748} +
2749 +
2750/* harmony default export */ __webpack_exports__["default"] = (map); +
2751 +
2752 +
2753/***/ }), +
2754 +
2755/***/ "./node_modules/d3-collection/src/nest.js": +
2756/*!************************************************!*\ +
2757 !*** ./node_modules/d3-collection/src/nest.js ***! +
2758 \************************************************/ +
2759/*! exports provided: default */ +
2760/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2761 +
2762"use strict"; +
2763__webpack_require__.r(__webpack_exports__); +
2764/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ "./node_modules/d3-collection/src/map.js"); +
2765 +
2766 +
2767/* harmony default export */ __webpack_exports__["default"] = (function() { +
2768 var keys = [], +
2769 sortKeys = [], +
2770 sortValues, +
2771 rollup, +
2772 nest; +
2773 +
2774 function apply(array, depth, createResult, setResult) { +
2775 if (depth >= keys.length) { +
2776 if (sortValues != null) array.sort(sortValues); +
2777 return rollup != null ? rollup(array) : array; +
2778 } +
2779 +
2780 var i = -1, +
2781 n = array.length, +
2782 key = keys[depth++], +
2783 keyValue, +
2784 value, +
2785 valuesByKey = Object(_map__WEBPACK_IMPORTED_MODULE_0__["default"])(), +
2786 values, +
2787 result = createResult(); +
2788 +
2789 while (++i < n) { +
2790 if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) { +
2791 values.push(value); +
2792 } else { +
2793 valuesByKey.set(keyValue, [value]); +
2794 } +
2795 } +
2796 +
2797 valuesByKey.each(function(values, key) { +
2798 setResult(result, key, apply(values, depth, createResult, setResult)); +
2799 }); +
2800 +
2801 return result; +
2802 } +
2803 +
2804 function entries(map, depth) { +
2805 if (++depth > keys.length) return map; +
2806 var array, sortKey = sortKeys[depth - 1]; +
2807 if (rollup != null && depth >= keys.length) array = map.entries(); +
2808 else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); +
2809 return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array; +
2810 } +
2811 +
2812 return nest = { +
2813 object: function(array) { return apply(array, 0, createObject, setObject); }, +
2814 map: function(array) { return apply(array, 0, createMap, setMap); }, +
2815 entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); }, +
2816 key: function(d) { keys.push(d); return nest; }, +
2817 sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; }, +
2818 sortValues: function(order) { sortValues = order; return nest; }, +
2819 rollup: function(f) { rollup = f; return nest; } +
2820 }; +
2821}); +
2822 +
2823function createObject() { +
2824 return {}; +
2825} +
2826 +
2827function setObject(object, key, value) { +
2828 object[key] = value; +
2829} +
2830 +
2831function createMap() { +
2832 return Object(_map__WEBPACK_IMPORTED_MODULE_0__["default"])(); +
2833} +
2834 +
2835function setMap(map, key, value) { +
2836 map.set(key, value); +
2837} +
2838 +
2839 +
2840/***/ }), +
2841 +
2842/***/ "./node_modules/d3-collection/src/set.js": +
2843/*!***********************************************!*\ +
2844 !*** ./node_modules/d3-collection/src/set.js ***! +
2845 \***********************************************/ +
2846/*! exports provided: default */ +
2847/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2848 +
2849"use strict"; +
2850__webpack_require__.r(__webpack_exports__); +
2851/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./map */ "./node_modules/d3-collection/src/map.js"); +
2852 +
2853 +
2854function Set() {} +
2855 +
2856var proto = _map__WEBPACK_IMPORTED_MODULE_0__["default"].prototype; +
2857 +
2858Set.prototype = set.prototype = { +
2859 constructor: Set, +
2860 has: proto.has, +
2861 add: function(value) { +
2862 value += ""; +
2863 this[_map__WEBPACK_IMPORTED_MODULE_0__["prefix"] + value] = value; +
2864 return this; +
2865 }, +
2866 remove: proto.remove, +
2867 clear: proto.clear, +
2868 values: proto.keys, +
2869 size: proto.size, +
2870 empty: proto.empty, +
2871 each: proto.each +
2872}; +
2873 +
2874function set(object, f) { +
2875 var set = new Set; +
2876 +
2877 // Copy constructor. +
2878 if (object instanceof Set) object.each(function(value) { set.add(value); }); +
2879 +
2880 // Otherwise, assume it’s an array. +
2881 else if (object) { +
2882 var i = -1, n = object.length; +
2883 if (f == null) while (++i < n) set.add(object[i]); +
2884 else while (++i < n) set.add(f(object[i], i, object)); +
2885 } +
2886 +
2887 return set; +
2888} +
2889 +
2890/* harmony default export */ __webpack_exports__["default"] = (set); +
2891 +
2892 +
2893/***/ }), +
2894 +
2895/***/ "./node_modules/d3-collection/src/values.js": +
2896/*!**************************************************!*\ +
2897 !*** ./node_modules/d3-collection/src/values.js ***! +
2898 \**************************************************/ +
2899/*! exports provided: default */ +
2900/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2901 +
2902"use strict"; +
2903__webpack_require__.r(__webpack_exports__); +
2904/* harmony default export */ __webpack_exports__["default"] = (function(map) { +
2905 var values = []; +
2906 for (var key in map) values.push(map[key]); +
2907 return values; +
2908}); +
2909 +
2910 +
2911/***/ }), +
2912 +
2913/***/ "./node_modules/d3-color/src/color.js": +
2914/*!********************************************!*\ +
2915 !*** ./node_modules/d3-color/src/color.js ***! +
2916 \********************************************/ +
2917/*! exports provided: Color, darker, brighter, default, rgbConvert, rgb, Rgb, hslConvert, hsl */ +
2918/***/ (function(module, __webpack_exports__, __webpack_require__) { +
2919 +
2920"use strict"; +
2921__webpack_require__.r(__webpack_exports__); +
2922/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Color", function() { return Color; }); +
2923/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "darker", function() { return darker; }); +
2924/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "brighter", function() { return brighter; }); +
2925/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return color; }); +
2926/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbConvert", function() { return rgbConvert; }); +
2927/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgb", function() { return rgb; }); +
2928/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Rgb", function() { return Rgb; }); +
2929/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hslConvert", function() { return hslConvert; }); +
2930/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hsl", function() { return hsl; }); +
2931/* harmony import */ var _define__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define */ "./node_modules/d3-color/src/define.js"); +
2932 +
2933 +
2934function Color() {} +
2935 +
2936var darker = 0.7; +
2937var brighter = 1 / darker; +
2938 +
2939var reI = "\\s*([+-]?\\d+)\\s*", +
2940 reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", +
2941 reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", +
2942 reHex3 = /^#([0-9a-f]{3})$/, +
2943 reHex6 = /^#([0-9a-f]{6})$/, +
2944 reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), +
2945 reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), +
2946 reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), +
2947 reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), +
2948 reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), +
2949 reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); +
2950 +
2951var named = { +
2952 aliceblue: 0xf0f8ff, +
2953 antiquewhite: 0xfaebd7, +
2954 aqua: 0x00ffff, +
2955 aquamarine: 0x7fffd4, +
2956 azure: 0xf0ffff, +
2957 beige: 0xf5f5dc, +
2958 bisque: 0xffe4c4, +
2959 black: 0x000000, +
2960 blanchedalmond: 0xffebcd, +
2961 blue: 0x0000ff, +
2962 blueviolet: 0x8a2be2, +
2963 brown: 0xa52a2a, +
2964 burlywood: 0xdeb887, +
2965 cadetblue: 0x5f9ea0, +
2966 chartreuse: 0x7fff00, +
2967 chocolate: 0xd2691e, +
2968 coral: 0xff7f50, +
2969 cornflowerblue: 0x6495ed, +
2970 cornsilk: 0xfff8dc, +
2971 crimson: 0xdc143c, +
2972 cyan: 0x00ffff, +
2973 darkblue: 0x00008b, +
2974 darkcyan: 0x008b8b, +
2975 darkgoldenrod: 0xb8860b, +
2976 darkgray: 0xa9a9a9, +
2977 darkgreen: 0x006400, +
2978 darkgrey: 0xa9a9a9, +
2979 darkkhaki: 0xbdb76b, +
2980 darkmagenta: 0x8b008b, +
2981 darkolivegreen: 0x556b2f, +
2982 darkorange: 0xff8c00, +
2983 darkorchid: 0x9932cc, +
2984 darkred: 0x8b0000, +
2985 darksalmon: 0xe9967a, +
2986 darkseagreen: 0x8fbc8f, +
2987 darkslateblue: 0x483d8b, +
2988 darkslategray: 0x2f4f4f, +
2989 darkslategrey: 0x2f4f4f, +
2990 darkturquoise: 0x00ced1, +
2991 darkviolet: 0x9400d3, +
2992 deeppink: 0xff1493, +
2993 deepskyblue: 0x00bfff, +
2994 dimgray: 0x696969, +
2995 dimgrey: 0x696969, +
2996 dodgerblue: 0x1e90ff, +
2997 firebrick: 0xb22222, +
2998 floralwhite: 0xfffaf0, +
2999 forestgreen: 0x228b22, +
3000 fuchsia: 0xff00ff, +
3001 gainsboro: 0xdcdcdc, +
3002 ghostwhite: 0xf8f8ff, +
3003 gold: 0xffd700, +
3004 goldenrod: 0xdaa520, +
3005 gray: 0x808080, +
3006 green: 0x008000, +
3007 greenyellow: 0xadff2f, +
3008 grey: 0x808080, +
3009 honeydew: 0xf0fff0, +
3010 hotpink: 0xff69b4, +
3011 indianred: 0xcd5c5c, +
3012 indigo: 0x4b0082, +
3013 ivory: 0xfffff0, +
3014 khaki: 0xf0e68c, +
3015 lavender: 0xe6e6fa, +
3016 lavenderblush: 0xfff0f5, +
3017 lawngreen: 0x7cfc00, +
3018 lemonchiffon: 0xfffacd, +
3019 lightblue: 0xadd8e6, +
3020 lightcoral: 0xf08080, +
3021 lightcyan: 0xe0ffff, +
3022 lightgoldenrodyellow: 0xfafad2, +
3023 lightgray: 0xd3d3d3, +
3024 lightgreen: 0x90ee90, +
3025 lightgrey: 0xd3d3d3, +
3026 lightpink: 0xffb6c1, +
3027 lightsalmon: 0xffa07a, +
3028 lightseagreen: 0x20b2aa, +
3029 lightskyblue: 0x87cefa, +
3030 lightslategray: 0x778899, +
3031 lightslategrey: 0x778899, +
3032 lightsteelblue: 0xb0c4de, +
3033 lightyellow: 0xffffe0, +
3034 lime: 0x00ff00, +
3035 limegreen: 0x32cd32, +
3036 linen: 0xfaf0e6, +
3037 magenta: 0xff00ff, +
3038 maroon: 0x800000, +
3039 mediumaquamarine: 0x66cdaa, +
3040 mediumblue: 0x0000cd, +
3041 mediumorchid: 0xba55d3, +
3042 mediumpurple: 0x9370db, +
3043 mediumseagreen: 0x3cb371, +
3044 mediumslateblue: 0x7b68ee, +
3045 mediumspringgreen: 0x00fa9a, +
3046 mediumturquoise: 0x48d1cc, +
3047 mediumvioletred: 0xc71585, +
3048 midnightblue: 0x191970, +
3049 mintcream: 0xf5fffa, +
3050 mistyrose: 0xffe4e1, +
3051 moccasin: 0xffe4b5, +
3052 navajowhite: 0xffdead, +
3053 navy: 0x000080, +
3054 oldlace: 0xfdf5e6, +
3055 olive: 0x808000, +
3056 olivedrab: 0x6b8e23, +
3057 orange: 0xffa500, +
3058 orangered: 0xff4500, +
3059 orchid: 0xda70d6, +
3060 palegoldenrod: 0xeee8aa, +
3061 palegreen: 0x98fb98, +
3062 paleturquoise: 0xafeeee, +
3063 palevioletred: 0xdb7093, +
3064 papayawhip: 0xffefd5, +
3065 peachpuff: 0xffdab9, +
3066 peru: 0xcd853f, +
3067 pink: 0xffc0cb, +
3068 plum: 0xdda0dd, +
3069 powderblue: 0xb0e0e6, +
3070 purple: 0x800080, +
3071 rebeccapurple: 0x663399, +
3072 red: 0xff0000, +
3073 rosybrown: 0xbc8f8f, +
3074 royalblue: 0x4169e1, +
3075 saddlebrown: 0x8b4513, +
3076 salmon: 0xfa8072, +
3077 sandybrown: 0xf4a460, +
3078 seagreen: 0x2e8b57, +
3079 seashell: 0xfff5ee, +
3080 sienna: 0xa0522d, +
3081 silver: 0xc0c0c0, +
3082 skyblue: 0x87ceeb, +
3083 slateblue: 0x6a5acd, +
3084 slategray: 0x708090, +
3085 slategrey: 0x708090, +
3086 snow: 0xfffafa, +
3087 springgreen: 0x00ff7f, +
3088 steelblue: 0x4682b4, +
3089 tan: 0xd2b48c, +
3090 teal: 0x008080, +
3091 thistle: 0xd8bfd8, +
3092 tomato: 0xff6347, +
3093 turquoise: 0x40e0d0, +
3094 violet: 0xee82ee, +
3095 wheat: 0xf5deb3, +
3096 white: 0xffffff, +
3097 whitesmoke: 0xf5f5f5, +
3098 yellow: 0xffff00, +
3099 yellowgreen: 0x9acd32 +
3100}; +
3101 +
3102Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Color, color, { +
3103 displayable: function() { +
3104 return this.rgb().displayable(); +
3105 }, +
3106 hex: function() { +
3107 return this.rgb().hex(); +
3108 }, +
3109 toString: function() { +
3110 return this.rgb() + ""; +
3111 } +
3112}); +
3113 +
3114function color(format) { +
3115 var m; +
3116 format = (format + "").trim().toLowerCase(); +
3117 return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00 +
3118 : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000 +
3119 : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) +
3120 : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) +
3121 : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) +
3122 : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) +
3123 : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) +
3124 : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) +
3125 : named.hasOwnProperty(format) ? rgbn(named[format]) +
3126 : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) +
3127 : null; +
3128} +
3129 +
3130function rgbn(n) { +
3131 return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); +
3132} +
3133 +
3134function rgba(r, g, b, a) { +
3135 if (a <= 0) r = g = b = NaN; +
3136 return new Rgb(r, g, b, a); +
3137} +
3138 +
3139function rgbConvert(o) { +
3140 if (!(o instanceof Color)) o = color(o); +
3141 if (!o) return new Rgb; +
3142 o = o.rgb(); +
3143 return new Rgb(o.r, o.g, o.b, o.opacity); +
3144} +
3145 +
3146function rgb(r, g, b, opacity) { +
3147 return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); +
3148} +
3149 +
3150function Rgb(r, g, b, opacity) { +
3151 this.r = +r; +
3152 this.g = +g; +
3153 this.b = +b; +
3154 this.opacity = +opacity; +
3155} +
3156 +
3157Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Rgb, rgb, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(Color, { +
3158 brighter: function(k) { +
3159 k = k == null ? brighter : Math.pow(brighter, k); +
3160 return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); +
3161 }, +
3162 darker: function(k) { +
3163 k = k == null ? darker : Math.pow(darker, k); +
3164 return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); +
3165 }, +
3166 rgb: function() { +
3167 return this; +
3168 }, +
3169 displayable: function() { +
3170 return (0 <= this.r && this.r <= 255) +
3171 && (0 <= this.g && this.g <= 255) +
3172 && (0 <= this.b && this.b <= 255) +
3173 && (0 <= this.opacity && this.opacity <= 1); +
3174 }, +
3175 hex: function() { +
3176 return "#" + hex(this.r) + hex(this.g) + hex(this.b); +
3177 }, +
3178 toString: function() { +
3179 var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); +
3180 return (a === 1 ? "rgb(" : "rgba(") +
3181 + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " +
3182 + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " +
3183 + Math.max(0, Math.min(255, Math.round(this.b) || 0)) +
3184 + (a === 1 ? ")" : ", " + a + ")"); +
3185 } +
3186})); +
3187 +
3188function hex(value) { +
3189 value = Math.max(0, Math.min(255, Math.round(value) || 0)); +
3190 return (value < 16 ? "0" : "") + value.toString(16); +
3191} +
3192 +
3193function hsla(h, s, l, a) { +
3194 if (a <= 0) h = s = l = NaN; +
3195 else if (l <= 0 || l >= 1) h = s = NaN; +
3196 else if (s <= 0) h = NaN; +
3197 return new Hsl(h, s, l, a); +
3198} +
3199 +
3200function hslConvert(o) { +
3201 if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); +
3202 if (!(o instanceof Color)) o = color(o); +
3203 if (!o) return new Hsl; +
3204 if (o instanceof Hsl) return o; +
3205 o = o.rgb(); +
3206 var r = o.r / 255, +
3207 g = o.g / 255, +
3208 b = o.b / 255, +
3209 min = Math.min(r, g, b), +
3210 max = Math.max(r, g, b), +
3211 h = NaN, +
3212 s = max - min, +
3213 l = (max + min) / 2; +
3214 if (s) { +
3215 if (r === max) h = (g - b) / s + (g < b) * 6; +
3216 else if (g === max) h = (b - r) / s + 2; +
3217 else h = (r - g) / s + 4; +
3218 s /= l < 0.5 ? max + min : 2 - max - min; +
3219 h *= 60; +
3220 } else { +
3221 s = l > 0 && l < 1 ? 0 : h; +
3222 } +
3223 return new Hsl(h, s, l, o.opacity); +
3224} +
3225 +
3226function hsl(h, s, l, opacity) { +
3227 return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); +
3228} +
3229 +
3230function Hsl(h, s, l, opacity) { +
3231 this.h = +h; +
3232 this.s = +s; +
3233 this.l = +l; +
3234 this.opacity = +opacity; +
3235} +
3236 +
3237Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Hsl, hsl, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(Color, { +
3238 brighter: function(k) { +
3239 k = k == null ? brighter : Math.pow(brighter, k); +
3240 return new Hsl(this.h, this.s, this.l * k, this.opacity); +
3241 }, +
3242 darker: function(k) { +
3243 k = k == null ? darker : Math.pow(darker, k); +
3244 return new Hsl(this.h, this.s, this.l * k, this.opacity); +
3245 }, +
3246 rgb: function() { +
3247 var h = this.h % 360 + (this.h < 0) * 360, +
3248 s = isNaN(h) || isNaN(this.s) ? 0 : this.s, +
3249 l = this.l, +
3250 m2 = l + (l < 0.5 ? l : 1 - l) * s, +
3251 m1 = 2 * l - m2; +
3252 return new Rgb( +
3253 hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), +
3254 hsl2rgb(h, m1, m2), +
3255 hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), +
3256 this.opacity +
3257 ); +
3258 }, +
3259 displayable: function() { +
3260 return (0 <= this.s && this.s <= 1 || isNaN(this.s)) +
3261 && (0 <= this.l && this.l <= 1) +
3262 && (0 <= this.opacity && this.opacity <= 1); +
3263 } +
3264})); +
3265 +
3266/* From FvD 13.37, CSS Color Module Level 3 */ +
3267function hsl2rgb(h, m1, m2) { +
3268 return (h < 60 ? m1 + (m2 - m1) * h / 60 +
3269 : h < 180 ? m2 +
3270 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 +
3271 : m1) * 255; +
3272} +
3273 +
3274 +
3275/***/ }), +
3276 +
3277/***/ "./node_modules/d3-color/src/cubehelix.js": +
3278/*!************************************************!*\ +
3279 !*** ./node_modules/d3-color/src/cubehelix.js ***! +
3280 \************************************************/ +
3281/*! exports provided: default, Cubehelix */ +
3282/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3283 +
3284"use strict"; +
3285__webpack_require__.r(__webpack_exports__); +
3286/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return cubehelix; }); +
3287/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Cubehelix", function() { return Cubehelix; }); +
3288/* harmony import */ var _define__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define */ "./node_modules/d3-color/src/define.js"); +
3289/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "./node_modules/d3-color/src/color.js"); +
3290/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "./node_modules/d3-color/src/math.js"); +
3291 +
3292 +
3293 +
3294 +
3295var A = -0.14861, +
3296 B = +1.78277, +
3297 C = -0.29227, +
3298 D = -0.90649, +
3299 E = +1.97294, +
3300 ED = E * D, +
3301 EB = E * B, +
3302 BC_DA = B * C - D * A; +
3303 +
3304function cubehelixConvert(o) { +
3305 if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); +
3306 if (!(o instanceof _color__WEBPACK_IMPORTED_MODULE_1__["Rgb"])) o = Object(_color__WEBPACK_IMPORTED_MODULE_1__["rgbConvert"])(o); +
3307 var r = o.r / 255, +
3308 g = o.g / 255, +
3309 b = o.b / 255, +
3310 l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), +
3311 bl = b - l, +
3312 k = (E * (g - l) - C * bl) / D, +
3313 s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 +
3314 h = s ? Math.atan2(k, bl) * _math__WEBPACK_IMPORTED_MODULE_2__["rad2deg"] - 120 : NaN; +
3315 return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); +
3316} +
3317 +
3318function cubehelix(h, s, l, opacity) { +
3319 return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); +
3320} +
3321 +
3322function Cubehelix(h, s, l, opacity) { +
3323 this.h = +h; +
3324 this.s = +s; +
3325 this.l = +l; +
3326 this.opacity = +opacity; +
3327} +
3328 +
3329Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Cubehelix, cubehelix, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(_color__WEBPACK_IMPORTED_MODULE_1__["Color"], { +
3330 brighter: function(k) { +
3331 k = k == null ? _color__WEBPACK_IMPORTED_MODULE_1__["brighter"] : Math.pow(_color__WEBPACK_IMPORTED_MODULE_1__["brighter"], k); +
3332 return new Cubehelix(this.h, this.s, this.l * k, this.opacity); +
3333 }, +
3334 darker: function(k) { +
3335 k = k == null ? _color__WEBPACK_IMPORTED_MODULE_1__["darker"] : Math.pow(_color__WEBPACK_IMPORTED_MODULE_1__["darker"], k); +
3336 return new Cubehelix(this.h, this.s, this.l * k, this.opacity); +
3337 }, +
3338 rgb: function() { +
3339 var h = isNaN(this.h) ? 0 : (this.h + 120) * _math__WEBPACK_IMPORTED_MODULE_2__["deg2rad"], +
3340 l = +this.l, +
3341 a = isNaN(this.s) ? 0 : this.s * l * (1 - l), +
3342 cosh = Math.cos(h), +
3343 sinh = Math.sin(h); +
3344 return new _color__WEBPACK_IMPORTED_MODULE_1__["Rgb"]( +
3345 255 * (l + a * (A * cosh + B * sinh)), +
3346 255 * (l + a * (C * cosh + D * sinh)), +
3347 255 * (l + a * (E * cosh)), +
3348 this.opacity +
3349 ); +
3350 } +
3351})); +
3352 +
3353 +
3354/***/ }), +
3355 +
3356/***/ "./node_modules/d3-color/src/define.js": +
3357/*!*********************************************!*\ +
3358 !*** ./node_modules/d3-color/src/define.js ***! +
3359 \*********************************************/ +
3360/*! exports provided: default, extend */ +
3361/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3362 +
3363"use strict"; +
3364__webpack_require__.r(__webpack_exports__); +
3365/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; }); +
3366/* harmony default export */ __webpack_exports__["default"] = (function(constructor, factory, prototype) { +
3367 constructor.prototype = factory.prototype = prototype; +
3368 prototype.constructor = constructor; +
3369}); +
3370 +
3371function extend(parent, definition) { +
3372 var prototype = Object.create(parent.prototype); +
3373 for (var key in definition) prototype[key] = definition[key]; +
3374 return prototype; +
3375} +
3376 +
3377 +
3378/***/ }), +
3379 +
3380/***/ "./node_modules/d3-color/src/index.js": +
3381/*!********************************************!*\ +
3382 !*** ./node_modules/d3-color/src/index.js ***! +
3383 \********************************************/ +
3384/*! exports provided: color, rgb, hsl, lab, hcl, lch, gray, cubehelix */ +
3385/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3386 +
3387"use strict"; +
3388__webpack_require__.r(__webpack_exports__); +
3389/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color */ "./node_modules/d3-color/src/color.js"); +
3390/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "color", function() { return _color__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
3391 +
3392/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rgb", function() { return _color__WEBPACK_IMPORTED_MODULE_0__["rgb"]; }); +
3393 +
3394/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hsl", function() { return _color__WEBPACK_IMPORTED_MODULE_0__["hsl"]; }); +
3395 +
3396/* harmony import */ var _lab__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lab */ "./node_modules/d3-color/src/lab.js"); +
3397/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lab", function() { return _lab__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
3398 +
3399/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hcl", function() { return _lab__WEBPACK_IMPORTED_MODULE_1__["hcl"]; }); +
3400 +
3401/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lch", function() { return _lab__WEBPACK_IMPORTED_MODULE_1__["lch"]; }); +
3402 +
3403/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "gray", function() { return _lab__WEBPACK_IMPORTED_MODULE_1__["gray"]; }); +
3404 +
3405/* harmony import */ var _cubehelix__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cubehelix */ "./node_modules/d3-color/src/cubehelix.js"); +
3406/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cubehelix", function() { return _cubehelix__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
3407 +
3408 +
3409 +
3410 +
3411 +
3412 +
3413/***/ }), +
3414 +
3415/***/ "./node_modules/d3-color/src/lab.js": +
3416/*!******************************************!*\ +
3417 !*** ./node_modules/d3-color/src/lab.js ***! +
3418 \******************************************/ +
3419/*! exports provided: gray, default, Lab, lch, hcl, Hcl */ +
3420/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3421 +
3422"use strict"; +
3423__webpack_require__.r(__webpack_exports__); +
3424/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gray", function() { return gray; }); +
3425/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return lab; }); +
3426/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Lab", function() { return Lab; }); +
3427/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lch", function() { return lch; }); +
3428/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hcl", function() { return hcl; }); +
3429/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Hcl", function() { return Hcl; }); +
3430/* harmony import */ var _define__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./define */ "./node_modules/d3-color/src/define.js"); +
3431/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "./node_modules/d3-color/src/color.js"); +
3432/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "./node_modules/d3-color/src/math.js"); +
3433 +
3434 +
3435 +
3436 +
3437// https://beta.observablehq.com/@mbostock/lab-and-rgb +
3438var K = 18, +
3439 Xn = 0.96422, +
3440 Yn = 1, +
3441 Zn = 0.82521, +
3442 t0 = 4 / 29, +
3443 t1 = 6 / 29, +
3444 t2 = 3 * t1 * t1, +
3445 t3 = t1 * t1 * t1; +
3446 +
3447function labConvert(o) { +
3448 if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); +
3449 if (o instanceof Hcl) { +
3450 if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity); +
3451 var h = o.h * _math__WEBPACK_IMPORTED_MODULE_2__["deg2rad"]; +
3452 return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); +
3453 } +
3454 if (!(o instanceof _color__WEBPACK_IMPORTED_MODULE_1__["Rgb"])) o = Object(_color__WEBPACK_IMPORTED_MODULE_1__["rgbConvert"])(o); +
3455 var r = rgb2lrgb(o.r), +
3456 g = rgb2lrgb(o.g), +
3457 b = rgb2lrgb(o.b), +
3458 y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z; +
3459 if (r === g && g === b) x = z = y; else { +
3460 x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn); +
3461 z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn); +
3462 } +
3463 return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); +
3464} +
3465 +
3466function gray(l, opacity) { +
3467 return new Lab(l, 0, 0, opacity == null ? 1 : opacity); +
3468} +
3469 +
3470function lab(l, a, b, opacity) { +
3471 return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); +
3472} +
3473 +
3474function Lab(l, a, b, opacity) { +
3475 this.l = +l; +
3476 this.a = +a; +
3477 this.b = +b; +
3478 this.opacity = +opacity; +
3479} +
3480 +
3481Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Lab, lab, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(_color__WEBPACK_IMPORTED_MODULE_1__["Color"], { +
3482 brighter: function(k) { +
3483 return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity); +
3484 }, +
3485 darker: function(k) { +
3486 return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity); +
3487 }, +
3488 rgb: function() { +
3489 var y = (this.l + 16) / 116, +
3490 x = isNaN(this.a) ? y : y + this.a / 500, +
3491 z = isNaN(this.b) ? y : y - this.b / 200; +
3492 x = Xn * lab2xyz(x); +
3493 y = Yn * lab2xyz(y); +
3494 z = Zn * lab2xyz(z); +
3495 return new _color__WEBPACK_IMPORTED_MODULE_1__["Rgb"]( +
3496 lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z), +
3497 lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), +
3498 lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z), +
3499 this.opacity +
3500 ); +
3501 } +
3502})); +
3503 +
3504function xyz2lab(t) { +
3505 return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; +
3506} +
3507 +
3508function lab2xyz(t) { +
3509 return t > t1 ? t * t * t : t2 * (t - t0); +
3510} +
3511 +
3512function lrgb2rgb(x) { +
3513 return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); +
3514} +
3515 +
3516function rgb2lrgb(x) { +
3517 return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); +
3518} +
3519 +
3520function hclConvert(o) { +
3521 if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); +
3522 if (!(o instanceof Lab)) o = labConvert(o); +
3523 if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity); +
3524 var h = Math.atan2(o.b, o.a) * _math__WEBPACK_IMPORTED_MODULE_2__["rad2deg"]; +
3525 return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); +
3526} +
3527 +
3528function lch(l, c, h, opacity) { +
3529 return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity); +
3530} +
3531 +
3532function hcl(h, c, l, opacity) { +
3533 return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); +
3534} +
3535 +
3536function Hcl(h, c, l, opacity) { +
3537 this.h = +h; +
3538 this.c = +c; +
3539 this.l = +l; +
3540 this.opacity = +opacity; +
3541} +
3542 +
3543Object(_define__WEBPACK_IMPORTED_MODULE_0__["default"])(Hcl, hcl, Object(_define__WEBPACK_IMPORTED_MODULE_0__["extend"])(_color__WEBPACK_IMPORTED_MODULE_1__["Color"], { +
3544 brighter: function(k) { +
3545 return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity); +
3546 }, +
3547 darker: function(k) { +
3548 return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity); +
3549 }, +
3550 rgb: function() { +
3551 return labConvert(this).rgb(); +
3552 } +
3553})); +
3554 +
3555 +
3556/***/ }), +
3557 +
3558/***/ "./node_modules/d3-color/src/math.js": +
3559/*!*******************************************!*\ +
3560 !*** ./node_modules/d3-color/src/math.js ***! +
3561 \*******************************************/ +
3562/*! exports provided: deg2rad, rad2deg */ +
3563/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3564 +
3565"use strict"; +
3566__webpack_require__.r(__webpack_exports__); +
3567/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deg2rad", function() { return deg2rad; }); +
3568/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rad2deg", function() { return rad2deg; }); +
3569var deg2rad = Math.PI / 180; +
3570var rad2deg = 180 / Math.PI; +
3571 +
3572 +
3573/***/ }), +
3574 +
3575/***/ "./node_modules/d3-contour/src/area.js": +
3576/*!*********************************************!*\ +
3577 !*** ./node_modules/d3-contour/src/area.js ***! +
3578 \*********************************************/ +
3579/*! exports provided: default */ +
3580/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3581 +
3582"use strict"; +
3583__webpack_require__.r(__webpack_exports__); +
3584/* harmony default export */ __webpack_exports__["default"] = (function(ring) { +
3585 var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1]; +
3586 while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; +
3587 return area; +
3588}); +
3589 +
3590 +
3591/***/ }), +
3592 +
3593/***/ "./node_modules/d3-contour/src/array.js": +
3594/*!**********************************************!*\ +
3595 !*** ./node_modules/d3-contour/src/array.js ***! +
3596 \**********************************************/ +
3597/*! exports provided: slice */ +
3598/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3599 +
3600"use strict"; +
3601__webpack_require__.r(__webpack_exports__); +
3602/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +
3603var array = Array.prototype; +
3604 +
3605var slice = array.slice; +
3606 +
3607 +
3608/***/ }), +
3609 +
3610/***/ "./node_modules/d3-contour/src/ascending.js": +
3611/*!**************************************************!*\ +
3612 !*** ./node_modules/d3-contour/src/ascending.js ***! +
3613 \**************************************************/ +
3614/*! exports provided: default */ +
3615/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3616 +
3617"use strict"; +
3618__webpack_require__.r(__webpack_exports__); +
3619/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
3620 return a - b; +
3621}); +
3622 +
3623 +
3624/***/ }), +
3625 +
3626/***/ "./node_modules/d3-contour/src/blur.js": +
3627/*!*********************************************!*\ +
3628 !*** ./node_modules/d3-contour/src/blur.js ***! +
3629 \*********************************************/ +
3630/*! exports provided: blurX, blurY */ +
3631/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3632 +
3633"use strict"; +
3634__webpack_require__.r(__webpack_exports__); +
3635/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blurX", function() { return blurX; }); +
3636/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blurY", function() { return blurY; }); +
3637// TODO Optimize edge cases. +
3638// TODO Optimize index calculation. +
3639// TODO Optimize arguments. +
3640function blurX(source, target, r) { +
3641 var n = source.width, +
3642 m = source.height, +
3643 w = (r << 1) + 1; +
3644 for (var j = 0; j < m; ++j) { +
3645 for (var i = 0, sr = 0; i < n + r; ++i) { +
3646 if (i < n) { +
3647 sr += source.data[i + j * n]; +
3648 } +
3649 if (i >= r) { +
3650 if (i >= w) { +
3651 sr -= source.data[i - w + j * n]; +
3652 } +
3653 target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w); +
3654 } +
3655 } +
3656 } +
3657} +
3658 +
3659// TODO Optimize edge cases. +
3660// TODO Optimize index calculation. +
3661// TODO Optimize arguments. +
3662function blurY(source, target, r) { +
3663 var n = source.width, +
3664 m = source.height, +
3665 w = (r << 1) + 1; +
3666 for (var i = 0; i < n; ++i) { +
3667 for (var j = 0, sr = 0; j < m + r; ++j) { +
3668 if (j < m) { +
3669 sr += source.data[i + j * n]; +
3670 } +
3671 if (j >= r) { +
3672 if (j >= w) { +
3673 sr -= source.data[i + (j - w) * n]; +
3674 } +
3675 target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w); +
3676 } +
3677 } +
3678 } +
3679} +
3680 +
3681 +
3682/***/ }), +
3683 +
3684/***/ "./node_modules/d3-contour/src/constant.js": +
3685/*!*************************************************!*\ +
3686 !*** ./node_modules/d3-contour/src/constant.js ***! +
3687 \*************************************************/ +
3688/*! exports provided: default */ +
3689/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3690 +
3691"use strict"; +
3692__webpack_require__.r(__webpack_exports__); +
3693/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
3694 return function() { +
3695 return x; +
3696 }; +
3697}); +
3698 +
3699 +
3700/***/ }), +
3701 +
3702/***/ "./node_modules/d3-contour/src/contains.js": +
3703/*!*************************************************!*\ +
3704 !*** ./node_modules/d3-contour/src/contains.js ***! +
3705 \*************************************************/ +
3706/*! exports provided: default */ +
3707/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3708 +
3709"use strict"; +
3710__webpack_require__.r(__webpack_exports__); +
3711/* harmony default export */ __webpack_exports__["default"] = (function(ring, hole) { +
3712 var i = -1, n = hole.length, c; +
3713 while (++i < n) if (c = ringContains(ring, hole[i])) return c; +
3714 return 0; +
3715}); +
3716 +
3717function ringContains(ring, point) { +
3718 var x = point[0], y = point[1], contains = -1; +
3719 for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) { +
3720 var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1]; +
3721 if (segmentContains(pi, pj, point)) return 0; +
3722 if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains; +
3723 } +
3724 return contains; +
3725} +
3726 +
3727function segmentContains(a, b, c) { +
3728 var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]); +
3729} +
3730 +
3731function collinear(a, b, c) { +
3732 return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]); +
3733} +
3734 +
3735function within(p, q, r) { +
3736 return p <= q && q <= r || r <= q && q <= p; +
3737} +
3738 +
3739 +
3740/***/ }), +
3741 +
3742/***/ "./node_modules/d3-contour/src/contours.js": +
3743/*!*************************************************!*\ +
3744 !*** ./node_modules/d3-contour/src/contours.js ***! +
3745 \*************************************************/ +
3746/*! exports provided: default */ +
3747/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3748 +
3749"use strict"; +
3750__webpack_require__.r(__webpack_exports__); +
3751/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
3752/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-contour/src/array.js"); +
3753/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-contour/src/ascending.js"); +
3754/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./area */ "./node_modules/d3-contour/src/area.js"); +
3755/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-contour/src/constant.js"); +
3756/* harmony import */ var _contains__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contains */ "./node_modules/d3-contour/src/contains.js"); +
3757/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./noop */ "./node_modules/d3-contour/src/noop.js"); +
3758 +
3759 +
3760 +
3761 +
3762 +
3763 +
3764 +
3765 +
3766var cases = [ +
3767 [], +
3768 [[[1.0, 1.5], [0.5, 1.0]]], +
3769 [[[1.5, 1.0], [1.0, 1.5]]], +
3770 [[[1.5, 1.0], [0.5, 1.0]]], +
3771 [[[1.0, 0.5], [1.5, 1.0]]], +
3772 [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], +
3773 [[[1.0, 0.5], [1.0, 1.5]]], +
3774 [[[1.0, 0.5], [0.5, 1.0]]], +
3775 [[[0.5, 1.0], [1.0, 0.5]]], +
3776 [[[1.0, 1.5], [1.0, 0.5]]], +
3777 [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], +
3778 [[[1.5, 1.0], [1.0, 0.5]]], +
3779 [[[0.5, 1.0], [1.5, 1.0]]], +
3780 [[[1.0, 1.5], [1.5, 1.0]]], +
3781 [[[0.5, 1.0], [1.0, 1.5]]], +
3782 [] +
3783]; +
3784 +
3785/* harmony default export */ __webpack_exports__["default"] = (function() { +
3786 var dx = 1, +
3787 dy = 1, +
3788 threshold = d3_array__WEBPACK_IMPORTED_MODULE_0__["thresholdSturges"], +
3789 smooth = smoothLinear; +
3790 +
3791 function contours(values) { +
3792 var tz = threshold(values); +
3793 +
3794 // Convert number of thresholds into uniform thresholds. +
3795 if (!Array.isArray(tz)) { +
3796 var domain = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["extent"])(values), start = domain[0], stop = domain[1]; +
3797 tz = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(start, stop, tz); +
3798 tz = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz); +
3799 } else { +
3800 tz = tz.slice().sort(_ascending__WEBPACK_IMPORTED_MODULE_2__["default"]); +
3801 } +
3802 +
3803 return tz.map(function(value) { +
3804 return contour(values, value); +
3805 }); +
3806 } +
3807 +
3808 // Accumulate, smooth contour rings, assign holes to exterior rings. +
3809 // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js +
3810 function contour(values, value) { +
3811 var polygons = [], +
3812 holes = []; +
3813 +
3814 isorings(values, value, function(ring) { +
3815 smooth(ring, values, value); +
3816 if (Object(_area__WEBPACK_IMPORTED_MODULE_3__["default"])(ring) > 0) polygons.push([ring]); +
3817 else holes.push(ring); +
3818 }); +
3819 +
3820 holes.forEach(function(hole) { +
3821 for (var i = 0, n = polygons.length, polygon; i < n; ++i) { +
3822 if (Object(_contains__WEBPACK_IMPORTED_MODULE_5__["default"])((polygon = polygons[i])[0], hole) !== -1) { +
3823 polygon.push(hole); +
3824 return; +
3825 } +
3826 } +
3827 }); +
3828 +
3829 return { +
3830 type: "MultiPolygon", +
3831 value: value, +
3832 coordinates: polygons +
3833 }; +
3834 } +
3835 +
3836 // Marching squares with isolines stitched into rings. +
3837 // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js +
3838 function isorings(values, value, callback) { +
3839 var fragmentByStart = new Array, +
3840 fragmentByEnd = new Array, +
3841 x, y, t0, t1, t2, t3; +
3842 +
3843 // Special case for the first row (y = -1, t2 = t3 = 0). +
3844 x = y = -1; +
3845 t1 = values[0] >= value; +
3846 cases[t1 << 1].forEach(stitch); +
3847 while (++x < dx - 1) { +
3848 t0 = t1, t1 = values[x + 1] >= value; +
3849 cases[t0 | t1 << 1].forEach(stitch); +
3850 } +
3851 cases[t1 << 0].forEach(stitch); +
3852 +
3853 // General case for the intermediate rows. +
3854 while (++y < dy - 1) { +
3855 x = -1; +
3856 t1 = values[y * dx + dx] >= value; +
3857 t2 = values[y * dx] >= value; +
3858 cases[t1 << 1 | t2 << 2].forEach(stitch); +
3859 while (++x < dx - 1) { +
3860 t0 = t1, t1 = values[y * dx + dx + x + 1] >= value; +
3861 t3 = t2, t2 = values[y * dx + x + 1] >= value; +
3862 cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch); +
3863 } +
3864 cases[t1 | t2 << 3].forEach(stitch); +
3865 } +
3866 +
3867 // Special case for the last row (y = dy - 1, t0 = t1 = 0). +
3868 x = -1; +
3869 t2 = values[y * dx] >= value; +
3870 cases[t2 << 2].forEach(stitch); +
3871 while (++x < dx - 1) { +
3872 t3 = t2, t2 = values[y * dx + x + 1] >= value; +
3873 cases[t2 << 2 | t3 << 3].forEach(stitch); +
3874 } +
3875 cases[t2 << 3].forEach(stitch); +
3876 +
3877 function stitch(line) { +
3878 var start = [line[0][0] + x, line[0][1] + y], +
3879 end = [line[1][0] + x, line[1][1] + y], +
3880 startIndex = index(start), +
3881 endIndex = index(end), +
3882 f, g; +
3883 if (f = fragmentByEnd[startIndex]) { +
3884 if (g = fragmentByStart[endIndex]) { +
3885 delete fragmentByEnd[f.end]; +
3886 delete fragmentByStart[g.start]; +
3887 if (f === g) { +
3888 f.ring.push(end); +
3889 callback(f.ring); +
3890 } else { +
3891 fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)}; +
3892 } +
3893 } else { +
3894 delete fragmentByEnd[f.end]; +
3895 f.ring.push(end); +
3896 fragmentByEnd[f.end = endIndex] = f; +
3897 } +
3898 } else if (f = fragmentByStart[endIndex]) { +
3899 if (g = fragmentByEnd[startIndex]) { +
3900 delete fragmentByStart[f.start]; +
3901 delete fragmentByEnd[g.end]; +
3902 if (f === g) { +
3903 f.ring.push(end); +
3904 callback(f.ring); +
3905 } else { +
3906 fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)}; +
3907 } +
3908 } else { +
3909 delete fragmentByStart[f.start]; +
3910 f.ring.unshift(start); +
3911 fragmentByStart[f.start = startIndex] = f; +
3912 } +
3913 } else { +
3914 fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]}; +
3915 } +
3916 } +
3917 } +
3918 +
3919 function index(point) { +
3920 return point[0] * 2 + point[1] * (dx + 1) * 4; +
3921 } +
3922 +
3923 function smoothLinear(ring, values, value) { +
3924 ring.forEach(function(point) { +
3925 var x = point[0], +
3926 y = point[1], +
3927 xt = x | 0, +
3928 yt = y | 0, +
3929 v0, +
3930 v1 = values[yt * dx + xt]; +
3931 if (x > 0 && x < dx && xt === x) { +
3932 v0 = values[yt * dx + xt - 1]; +
3933 point[0] = x + (value - v0) / (v1 - v0) - 0.5; +
3934 } +
3935 if (y > 0 && y < dy && yt === y) { +
3936 v0 = values[(yt - 1) * dx + xt]; +
3937 point[1] = y + (value - v0) / (v1 - v0) - 0.5; +
3938 } +
3939 }); +
3940 } +
3941 +
3942 contours.contour = contour; +
3943 +
3944 contours.size = function(_) { +
3945 if (!arguments.length) return [dx, dy]; +
3946 var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); +
3947 if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size"); +
3948 return dx = _0, dy = _1, contours; +
3949 }; +
3950 +
3951 contours.thresholds = function(_) { +
3952 return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_)) : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_), contours) : threshold; +
3953 }; +
3954 +
3955 contours.smooth = function(_) { +
3956 return arguments.length ? (smooth = _ ? smoothLinear : _noop__WEBPACK_IMPORTED_MODULE_6__["default"], contours) : smooth === smoothLinear; +
3957 }; +
3958 +
3959 return contours; +
3960}); +
3961 +
3962 +
3963/***/ }), +
3964 +
3965/***/ "./node_modules/d3-contour/src/density.js": +
3966/*!************************************************!*\ +
3967 !*** ./node_modules/d3-contour/src/density.js ***! +
3968 \************************************************/ +
3969/*! exports provided: default */ +
3970/***/ (function(module, __webpack_exports__, __webpack_require__) { +
3971 +
3972"use strict"; +
3973__webpack_require__.r(__webpack_exports__); +
3974/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
3975/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-contour/src/array.js"); +
3976/* harmony import */ var _blur__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./blur */ "./node_modules/d3-contour/src/blur.js"); +
3977/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-contour/src/constant.js"); +
3978/* harmony import */ var _contours__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contours */ "./node_modules/d3-contour/src/contours.js"); +
3979 +
3980 +
3981 +
3982 +
3983 +
3984 +
3985function defaultX(d) { +
3986 return d[0]; +
3987} +
3988 +
3989function defaultY(d) { +
3990 return d[1]; +
3991} +
3992 +
3993function defaultWeight() { +
3994 return 1; +
3995} +
3996 +
3997/* harmony default export */ __webpack_exports__["default"] = (function() { +
3998 var x = defaultX, +
3999 y = defaultY, +
4000 weight = defaultWeight, +
4001 dx = 960, +
4002 dy = 500, +
4003 r = 20, // blur radius +
4004 k = 2, // log2(grid cell size) +
4005 o = r * 3, // grid offset, to pad for blur +
4006 n = (dx + o * 2) >> k, // grid width +
4007 m = (dy + o * 2) >> k, // grid height +
4008 threshold = Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(20); +
4009 +
4010 function density(data) { +
4011 var values0 = new Float32Array(n * m), +
4012 values1 = new Float32Array(n * m); +
4013 +
4014 data.forEach(function(d, i, data) { +
4015 var xi = (+x(d, i, data) + o) >> k, +
4016 yi = (+y(d, i, data) + o) >> k, +
4017 wi = +weight(d, i, data); +
4018 if (xi >= 0 && xi < n && yi >= 0 && yi < m) { +
4019 values0[xi + yi * n] += wi; +
4020 } +
4021 }); +
4022 +
4023 // TODO Optimize. +
4024 Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurX"])({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); +
4025 Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurY"])({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); +
4026 Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurX"])({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); +
4027 Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurY"])({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); +
4028 Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurX"])({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); +
4029 Object(_blur__WEBPACK_IMPORTED_MODULE_2__["blurY"])({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); +
4030 +
4031 var tz = threshold(values0); +
4032 +
4033 // Convert number of thresholds into uniform thresholds. +
4034 if (!Array.isArray(tz)) { +
4035 var stop = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["max"])(values0); +
4036 tz = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(0, stop, tz); +
4037 tz = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(0, Math.floor(stop / tz) * tz, tz); +
4038 tz.shift(); +
4039 } +
4040 +
4041 return Object(_contours__WEBPACK_IMPORTED_MODULE_4__["default"])() +
4042 .thresholds(tz) +
4043 .size([n, m]) +
4044 (values0) +
4045 .map(transform); +
4046 } +
4047 +
4048 function transform(geometry) { +
4049 geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel. +
4050 geometry.coordinates.forEach(transformPolygon); +
4051 return geometry; +
4052 } +
4053 +
4054 function transformPolygon(coordinates) { +
4055 coordinates.forEach(transformRing); +
4056 } +
4057 +
4058 function transformRing(coordinates) { +
4059 coordinates.forEach(transformPoint); +
4060 } +
4061 +
4062 // TODO Optimize. +
4063 function transformPoint(coordinates) { +
4064 coordinates[0] = coordinates[0] * Math.pow(2, k) - o; +
4065 coordinates[1] = coordinates[1] * Math.pow(2, k) - o; +
4066 } +
4067 +
4068 function resize() { +
4069 o = r * 3; +
4070 n = (dx + o * 2) >> k; +
4071 m = (dy + o * 2) >> k; +
4072 return density; +
4073 } +
4074 +
4075 density.x = function(_) { +
4076 return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), density) : x; +
4077 }; +
4078 +
4079 density.y = function(_) { +
4080 return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), density) : y; +
4081 }; +
4082 +
4083 density.weight = function(_) { +
4084 return arguments.length ? (weight = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+_), density) : weight; +
4085 }; +
4086 +
4087 density.size = function(_) { +
4088 if (!arguments.length) return [dx, dy]; +
4089 var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); +
4090 if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size"); +
4091 return dx = _0, dy = _1, resize(); +
4092 }; +
4093 +
4094 density.cellSize = function(_) { +
4095 if (!arguments.length) return 1 << k; +
4096 if (!((_ = +_) >= 1)) throw new Error("invalid cell size"); +
4097 return k = Math.floor(Math.log(_) / Math.LN2), resize(); +
4098 }; +
4099 +
4100 density.thresholds = function(_) { +
4101 return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(_array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_)) : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(_), density) : threshold; +
4102 }; +
4103 +
4104 density.bandwidth = function(_) { +
4105 if (!arguments.length) return Math.sqrt(r * (r + 1)); +
4106 if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth"); +
4107 return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize(); +
4108 }; +
4109 +
4110 return density; +
4111}); +
4112 +
4113 +
4114/***/ }), +
4115 +
4116/***/ "./node_modules/d3-contour/src/index.js": +
4117/*!**********************************************!*\ +
4118 !*** ./node_modules/d3-contour/src/index.js ***! +
4119 \**********************************************/ +
4120/*! exports provided: contours, contourDensity */ +
4121/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4122 +
4123"use strict"; +
4124__webpack_require__.r(__webpack_exports__); +
4125/* harmony import */ var _contours__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./contours */ "./node_modules/d3-contour/src/contours.js"); +
4126/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "contours", function() { return _contours__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
4127 +
4128/* harmony import */ var _density__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./density */ "./node_modules/d3-contour/src/density.js"); +
4129/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "contourDensity", function() { return _density__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
4130 +
4131 +
4132 +
4133 +
4134 +
4135/***/ }), +
4136 +
4137/***/ "./node_modules/d3-contour/src/noop.js": +
4138/*!*********************************************!*\ +
4139 !*** ./node_modules/d3-contour/src/noop.js ***! +
4140 \*********************************************/ +
4141/*! exports provided: default */ +
4142/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4143 +
4144"use strict"; +
4145__webpack_require__.r(__webpack_exports__); +
4146/* harmony default export */ __webpack_exports__["default"] = (function() {}); +
4147 +
4148 +
4149/***/ }), +
4150 +
4151/***/ "./node_modules/d3-dispatch/src/dispatch.js": +
4152/*!**************************************************!*\ +
4153 !*** ./node_modules/d3-dispatch/src/dispatch.js ***! +
4154 \**************************************************/ +
4155/*! exports provided: default */ +
4156/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4157 +
4158"use strict"; +
4159__webpack_require__.r(__webpack_exports__); +
4160var noop = {value: function() {}}; +
4161 +
4162function dispatch() { +
4163 for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { +
4164 if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); +
4165 _[t] = []; +
4166 } +
4167 return new Dispatch(_); +
4168} +
4169 +
4170function Dispatch(_) { +
4171 this._ = _; +
4172} +
4173 +
4174function parseTypenames(typenames, types) { +
4175 return typenames.trim().split(/^|\s+/).map(function(t) { +
4176 var name = "", i = t.indexOf("."); +
4177 if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); +
4178 if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); +
4179 return {type: t, name: name}; +
4180 }); +
4181} +
4182 +
4183Dispatch.prototype = dispatch.prototype = { +
4184 constructor: Dispatch, +
4185 on: function(typename, callback) { +
4186 var _ = this._, +
4187 T = parseTypenames(typename + "", _), +
4188 t, +
4189 i = -1, +
4190 n = T.length; +
4191 +
4192 // If no callback was specified, return the callback of the given type and name. +
4193 if (arguments.length < 2) { +
4194 while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; +
4195 return; +
4196 } +
4197 +
4198 // If a type was specified, set the callback for the given type and name. +
4199 // Otherwise, if a null callback was specified, remove callbacks of the given name. +
4200 if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); +
4201 while (++i < n) { +
4202 if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); +
4203 else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); +
4204 } +
4205 +
4206 return this; +
4207 }, +
4208 copy: function() { +
4209 var copy = {}, _ = this._; +
4210 for (var t in _) copy[t] = _[t].slice(); +
4211 return new Dispatch(copy); +
4212 }, +
4213 call: function(type, that) { +
4214 if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; +
4215 if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); +
4216 for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); +
4217 }, +
4218 apply: function(type, that, args) { +
4219 if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); +
4220 for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); +
4221 } +
4222}; +
4223 +
4224function get(type, name) { +
4225 for (var i = 0, n = type.length, c; i < n; ++i) { +
4226 if ((c = type[i]).name === name) { +
4227 return c.value; +
4228 } +
4229 } +
4230} +
4231 +
4232function set(type, name, callback) { +
4233 for (var i = 0, n = type.length; i < n; ++i) { +
4234 if (type[i].name === name) { +
4235 type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); +
4236 break; +
4237 } +
4238 } +
4239 if (callback != null) type.push({name: name, value: callback}); +
4240 return type; +
4241} +
4242 +
4243/* harmony default export */ __webpack_exports__["default"] = (dispatch); +
4244 +
4245 +
4246/***/ }), +
4247 +
4248/***/ "./node_modules/d3-dispatch/src/index.js": +
4249/*!***********************************************!*\ +
4250 !*** ./node_modules/d3-dispatch/src/index.js ***! +
4251 \***********************************************/ +
4252/*! exports provided: dispatch */ +
4253/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4254 +
4255"use strict"; +
4256__webpack_require__.r(__webpack_exports__); +
4257/* harmony import */ var _dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dispatch */ "./node_modules/d3-dispatch/src/dispatch.js"); +
4258/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return _dispatch__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
4259 +
4260 +
4261 +
4262 +
4263/***/ }), +
4264 +
4265/***/ "./node_modules/d3-drag/src/constant.js": +
4266/*!**********************************************!*\ +
4267 !*** ./node_modules/d3-drag/src/constant.js ***! +
4268 \**********************************************/ +
4269/*! exports provided: default */ +
4270/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4271 +
4272"use strict"; +
4273__webpack_require__.r(__webpack_exports__); +
4274/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
4275 return function() { +
4276 return x; +
4277 }; +
4278}); +
4279 +
4280 +
4281/***/ }), +
4282 +
4283/***/ "./node_modules/d3-drag/src/drag.js": +
4284/*!******************************************!*\ +
4285 !*** ./node_modules/d3-drag/src/drag.js ***! +
4286 \******************************************/ +
4287/*! exports provided: default */ +
4288/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4289 +
4290"use strict"; +
4291__webpack_require__.r(__webpack_exports__); +
4292/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/index.js"); +
4293/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
4294/* harmony import */ var _nodrag__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nodrag */ "./node_modules/d3-drag/src/nodrag.js"); +
4295/* harmony import */ var _noevent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./noevent */ "./node_modules/d3-drag/src/noevent.js"); +
4296/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-drag/src/constant.js"); +
4297/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./event */ "./node_modules/d3-drag/src/event.js"); +
4298 +
4299 +
4300 +
4301 +
4302 +
4303 +
4304 +
4305// Ignore right-click, since that should open the context menu. +
4306function defaultFilter() { +
4307 return !d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].button; +
4308} +
4309 +
4310function defaultContainer() { +
4311 return this.parentNode; +
4312} +
4313 +
4314function defaultSubject(d) { +
4315 return d == null ? {x: d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].x, y: d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].y} : d; +
4316} +
4317 +
4318function defaultTouchable() { +
4319 return "ontouchstart" in this; +
4320} +
4321 +
4322/* harmony default export */ __webpack_exports__["default"] = (function() { +
4323 var filter = defaultFilter, +
4324 container = defaultContainer, +
4325 subject = defaultSubject, +
4326 touchable = defaultTouchable, +
4327 gestures = {}, +
4328 listeners = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])("start", "drag", "end"), +
4329 active = 0, +
4330 mousedownx, +
4331 mousedowny, +
4332 mousemoving, +
4333 touchending, +
4334 clickDistance2 = 0; +
4335 +
4336 function drag(selection) { +
4337 selection +
4338 .on("mousedown.drag", mousedowned) +
4339 .filter(touchable) +
4340 .on("touchstart.drag", touchstarted) +
4341 .on("touchmove.drag", touchmoved) +
4342 .on("touchend.drag touchcancel.drag", touchended) +
4343 .style("touch-action", "none") +
4344 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); +
4345 } +
4346 +
4347 function mousedowned() { +
4348 if (touchending || !filter.apply(this, arguments)) return; +
4349 var gesture = beforestart("mouse", container.apply(this, arguments), d3_selection__WEBPACK_IMPORTED_MODULE_1__["mouse"], this, arguments); +
4350 if (!gesture) return; +
4351 Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["select"])(d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true); +
4352 Object(_nodrag__WEBPACK_IMPORTED_MODULE_2__["default"])(d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].view); +
4353 Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["nopropagation"])(); +
4354 mousemoving = false; +
4355 mousedownx = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].clientX; +
4356 mousedowny = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].clientY; +
4357 gesture("start"); +
4358 } +
4359 +
4360 function mousemoved() { +
4361 Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["default"])(); +
4362 if (!mousemoving) { +
4363 var dx = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].clientX - mousedownx, dy = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].clientY - mousedowny; +
4364 mousemoving = dx * dx + dy * dy > clickDistance2; +
4365 } +
4366 gestures.mouse("drag"); +
4367 } +
4368 +
4369 function mouseupped() { +
4370 Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["select"])(d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].view).on("mousemove.drag mouseup.drag", null); +
4371 Object(_nodrag__WEBPACK_IMPORTED_MODULE_2__["yesdrag"])(d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].view, mousemoving); +
4372 Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["default"])(); +
4373 gestures.mouse("end"); +
4374 } +
4375 +
4376 function touchstarted() { +
4377 if (!filter.apply(this, arguments)) return; +
4378 var touches = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].changedTouches, +
4379 c = container.apply(this, arguments), +
4380 n = touches.length, i, gesture; +
4381 +
4382 for (i = 0; i < n; ++i) { +
4383 if (gesture = beforestart(touches[i].identifier, c, d3_selection__WEBPACK_IMPORTED_MODULE_1__["touch"], this, arguments)) { +
4384 Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["nopropagation"])(); +
4385 gesture("start"); +
4386 } +
4387 } +
4388 } +
4389 +
4390 function touchmoved() { +
4391 var touches = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].changedTouches, +
4392 n = touches.length, i, gesture; +
4393 +
4394 for (i = 0; i < n; ++i) { +
4395 if (gesture = gestures[touches[i].identifier]) { +
4396 Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["default"])(); +
4397 gesture("drag"); +
4398 } +
4399 } +
4400 } +
4401 +
4402 function touchended() { +
4403 var touches = d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].changedTouches, +
4404 n = touches.length, i, gesture; +
4405 +
4406 if (touchending) clearTimeout(touchending); +
4407 touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! +
4408 for (i = 0; i < n; ++i) { +
4409 if (gesture = gestures[touches[i].identifier]) { +
4410 Object(_noevent__WEBPACK_IMPORTED_MODULE_3__["nopropagation"])(); +
4411 gesture("end"); +
4412 } +
4413 } +
4414 } +
4415 +
4416 function beforestart(id, container, point, that, args) { +
4417 var p = point(container, id), s, dx, dy, +
4418 sublisteners = listeners.copy(); +
4419 +
4420 if (!Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["customEvent"])(new _event__WEBPACK_IMPORTED_MODULE_5__["default"](drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() { +
4421 if ((d3_selection__WEBPACK_IMPORTED_MODULE_1__["event"].subject = s = subject.apply(that, args)) == null) return false; +
4422 dx = s.x - p[0] || 0; +
4423 dy = s.y - p[1] || 0; +
4424 return true; +
4425 })) return; +
4426 +
4427 return function gesture(type) { +
4428 var p0 = p, n; +
4429 switch (type) { +
4430 case "start": gestures[id] = gesture, n = active++; break; +
4431 case "end": delete gestures[id], --active; // nobreak +
4432 case "drag": p = point(container, id), n = active; break; +
4433 } +
4434 Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["customEvent"])(new _event__WEBPACK_IMPORTED_MODULE_5__["default"](drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]); +
4435 }; +
4436 } +
4437 +
4438 drag.filter = function(_) { +
4439 return arguments.length ? (filter = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(!!_), drag) : filter; +
4440 }; +
4441 +
4442 drag.container = function(_) { +
4443 return arguments.length ? (container = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_), drag) : container; +
4444 }; +
4445 +
4446 drag.subject = function(_) { +
4447 return arguments.length ? (subject = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(_), drag) : subject; +
4448 }; +
4449 +
4450 drag.touchable = function(_) { +
4451 return arguments.length ? (touchable = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_4__["default"])(!!_), drag) : touchable; +
4452 }; +
4453 +
4454 drag.on = function() { +
4455 var value = listeners.on.apply(listeners, arguments); +
4456 return value === listeners ? drag : value; +
4457 }; +
4458 +
4459 drag.clickDistance = function(_) { +
4460 return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); +
4461 }; +
4462 +
4463 return drag; +
4464}); +
4465 +
4466 +
4467/***/ }), +
4468 +
4469/***/ "./node_modules/d3-drag/src/event.js": +
4470/*!*******************************************!*\ +
4471 !*** ./node_modules/d3-drag/src/event.js ***! +
4472 \*******************************************/ +
4473/*! exports provided: default */ +
4474/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4475 +
4476"use strict"; +
4477__webpack_require__.r(__webpack_exports__); +
4478/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DragEvent; }); +
4479function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) { +
4480 this.target = target; +
4481 this.type = type; +
4482 this.subject = subject; +
4483 this.identifier = id; +
4484 this.active = active; +
4485 this.x = x; +
4486 this.y = y; +
4487 this.dx = dx; +
4488 this.dy = dy; +
4489 this._ = dispatch; +
4490} +
4491 +
4492DragEvent.prototype.on = function() { +
4493 var value = this._.on.apply(this._, arguments); +
4494 return value === this._ ? this : value; +
4495}; +
4496 +
4497 +
4498/***/ }), +
4499 +
4500/***/ "./node_modules/d3-drag/src/index.js": +
4501/*!*******************************************!*\ +
4502 !*** ./node_modules/d3-drag/src/index.js ***! +
4503 \*******************************************/ +
4504/*! exports provided: drag, dragDisable, dragEnable */ +
4505/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4506 +
4507"use strict"; +
4508__webpack_require__.r(__webpack_exports__); +
4509/* harmony import */ var _drag__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drag */ "./node_modules/d3-drag/src/drag.js"); +
4510/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drag", function() { return _drag__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
4511 +
4512/* harmony import */ var _nodrag__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nodrag */ "./node_modules/d3-drag/src/nodrag.js"); +
4513/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragDisable", function() { return _nodrag__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
4514 +
4515/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragEnable", function() { return _nodrag__WEBPACK_IMPORTED_MODULE_1__["yesdrag"]; }); +
4516 +
4517 +
4518 +
4519 +
4520 +
4521/***/ }), +
4522 +
4523/***/ "./node_modules/d3-drag/src/nodrag.js": +
4524/*!********************************************!*\ +
4525 !*** ./node_modules/d3-drag/src/nodrag.js ***! +
4526 \********************************************/ +
4527/*! exports provided: default, yesdrag */ +
4528/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4529 +
4530"use strict"; +
4531__webpack_require__.r(__webpack_exports__); +
4532/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "yesdrag", function() { return yesdrag; }); +
4533/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
4534/* harmony import */ var _noevent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noevent */ "./node_modules/d3-drag/src/noevent.js"); +
4535 +
4536 +
4537 +
4538/* harmony default export */ __webpack_exports__["default"] = (function(view) { +
4539 var root = view.document.documentElement, +
4540 selection = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["select"])(view).on("dragstart.drag", _noevent__WEBPACK_IMPORTED_MODULE_1__["default"], true); +
4541 if ("onselectstart" in root) { +
4542 selection.on("selectstart.drag", _noevent__WEBPACK_IMPORTED_MODULE_1__["default"], true); +
4543 } else { +
4544 root.__noselect = root.style.MozUserSelect; +
4545 root.style.MozUserSelect = "none"; +
4546 } +
4547}); +
4548 +
4549function yesdrag(view, noclick) { +
4550 var root = view.document.documentElement, +
4551 selection = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["select"])(view).on("dragstart.drag", null); +
4552 if (noclick) { +
4553 selection.on("click.drag", _noevent__WEBPACK_IMPORTED_MODULE_1__["default"], true); +
4554 setTimeout(function() { selection.on("click.drag", null); }, 0); +
4555 } +
4556 if ("onselectstart" in root) { +
4557 selection.on("selectstart.drag", null); +
4558 } else { +
4559 root.style.MozUserSelect = root.__noselect; +
4560 delete root.__noselect; +
4561 } +
4562} +
4563 +
4564 +
4565/***/ }), +
4566 +
4567/***/ "./node_modules/d3-drag/src/noevent.js": +
4568/*!*********************************************!*\ +
4569 !*** ./node_modules/d3-drag/src/noevent.js ***! +
4570 \*********************************************/ +
4571/*! exports provided: nopropagation, default */ +
4572/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4573 +
4574"use strict"; +
4575__webpack_require__.r(__webpack_exports__); +
4576/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nopropagation", function() { return nopropagation; }); +
4577/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
4578 +
4579 +
4580function nopropagation() { +
4581 d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +
4582} +
4583 +
4584/* harmony default export */ __webpack_exports__["default"] = (function() { +
4585 d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].preventDefault(); +
4586 d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +
4587}); +
4588 +
4589 +
4590/***/ }), +
4591 +
4592/***/ "./node_modules/d3-dsv/src/csv.js": +
4593/*!****************************************!*\ +
4594 !*** ./node_modules/d3-dsv/src/csv.js ***! +
4595 \****************************************/ +
4596/*! exports provided: csvParse, csvParseRows, csvFormat, csvFormatRows */ +
4597/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4598 +
4599"use strict"; +
4600__webpack_require__.r(__webpack_exports__); +
4601/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csvParse", function() { return csvParse; }); +
4602/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csvParseRows", function() { return csvParseRows; }); +
4603/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csvFormat", function() { return csvFormat; }); +
4604/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csvFormatRows", function() { return csvFormatRows; }); +
4605/* harmony import */ var _dsv__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv */ "./node_modules/d3-dsv/src/dsv.js"); +
4606 +
4607 +
4608var csv = Object(_dsv__WEBPACK_IMPORTED_MODULE_0__["default"])(","); +
4609 +
4610var csvParse = csv.parse; +
4611var csvParseRows = csv.parseRows; +
4612var csvFormat = csv.format; +
4613var csvFormatRows = csv.formatRows; +
4614 +
4615 +
4616/***/ }), +
4617 +
4618/***/ "./node_modules/d3-dsv/src/dsv.js": +
4619/*!****************************************!*\ +
4620 !*** ./node_modules/d3-dsv/src/dsv.js ***! +
4621 \****************************************/ +
4622/*! exports provided: default */ +
4623/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4624 +
4625"use strict"; +
4626__webpack_require__.r(__webpack_exports__); +
4627var EOL = {}, +
4628 EOF = {}, +
4629 QUOTE = 34, +
4630 NEWLINE = 10, +
4631 RETURN = 13; +
4632 +
4633function objectConverter(columns) { +
4634 return new Function("d", "return {" + columns.map(function(name, i) { +
4635 return JSON.stringify(name) + ": d[" + i + "]"; +
4636 }).join(",") + "}"); +
4637} +
4638 +
4639function customConverter(columns, f) { +
4640 var object = objectConverter(columns); +
4641 return function(row, i) { +
4642 return f(object(row), i, columns); +
4643 }; +
4644} +
4645 +
4646// Compute unique columns in order of discovery. +
4647function inferColumns(rows) { +
4648 var columnSet = Object.create(null), +
4649 columns = []; +
4650 +
4651 rows.forEach(function(row) { +
4652 for (var column in row) { +
4653 if (!(column in columnSet)) { +
4654 columns.push(columnSet[column] = column); +
4655 } +
4656 } +
4657 }); +
4658 +
4659 return columns; +
4660} +
4661 +
4662/* harmony default export */ __webpack_exports__["default"] = (function(delimiter) { +
4663 var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), +
4664 DELIMITER = delimiter.charCodeAt(0); +
4665 +
4666 function parse(text, f) { +
4667 var convert, columns, rows = parseRows(text, function(row, i) { +
4668 if (convert) return convert(row, i - 1); +
4669 columns = row, convert = f ? customConverter(row, f) : objectConverter(row); +
4670 }); +
4671 rows.columns = columns || []; +
4672 return rows; +
4673 } +
4674 +
4675 function parseRows(text, f) { +
4676 var rows = [], // output rows +
4677 N = text.length, +
4678 I = 0, // current character index +
4679 n = 0, // current line number +
4680 t, // current token +
4681 eof = N <= 0, // current token followed by EOF? +
4682 eol = false; // current token followed by EOL? +
4683 +
4684 // Strip the trailing newline. +
4685 if (text.charCodeAt(N - 1) === NEWLINE) --N; +
4686 if (text.charCodeAt(N - 1) === RETURN) --N; +
4687 +
4688 function token() { +
4689 if (eof) return EOF; +
4690 if (eol) return eol = false, EOL; +
4691 +
4692 // Unescape quotes. +
4693 var i, j = I, c; +
4694 if (text.charCodeAt(j) === QUOTE) { +
4695 while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE); +
4696 if ((i = I) >= N) eof = true; +
4697 else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true; +
4698 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } +
4699 return text.slice(j + 1, i - 1).replace(/""/g, "\""); +
4700 } +
4701 +
4702 // Find next delimiter or newline. +
4703 while (I < N) { +
4704 if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true; +
4705 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } +
4706 else if (c !== DELIMITER) continue; +
4707 return text.slice(j, i); +
4708 } +
4709 +
4710 // Return last token before EOF. +
4711 return eof = true, text.slice(j, N); +
4712 } +
4713 +
4714 while ((t = token()) !== EOF) { +
4715 var row = []; +
4716 while (t !== EOL && t !== EOF) row.push(t), t = token(); +
4717 if (f && (row = f(row, n++)) == null) continue; +
4718 rows.push(row); +
4719 } +
4720 +
4721 return rows; +
4722 } +
4723 +
4724 function format(rows, columns) { +
4725 if (columns == null) columns = inferColumns(rows); +
4726 return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) { +
4727 return columns.map(function(column) { +
4728 return formatValue(row[column]); +
4729 }).join(delimiter); +
4730 })).join("\n"); +
4731 } +
4732 +
4733 function formatRows(rows) { +
4734 return rows.map(formatRow).join("\n"); +
4735 } +
4736 +
4737 function formatRow(row) { +
4738 return row.map(formatValue).join(delimiter); +
4739 } +
4740 +
4741 function formatValue(text) { +
4742 return text == null ? "" +
4743 : reFormat.test(text += "") ? "\"" + text.replace(/"/g, "\"\"") + "\"" +
4744 : text; +
4745 } +
4746 +
4747 return { +
4748 parse: parse, +
4749 parseRows: parseRows, +
4750 format: format, +
4751 formatRows: formatRows +
4752 }; +
4753}); +
4754 +
4755 +
4756/***/ }), +
4757 +
4758/***/ "./node_modules/d3-dsv/src/index.js": +
4759/*!******************************************!*\ +
4760 !*** ./node_modules/d3-dsv/src/index.js ***! +
4761 \******************************************/ +
4762/*! exports provided: dsvFormat, csvParse, csvParseRows, csvFormat, csvFormatRows, tsvParse, tsvParseRows, tsvFormat, tsvFormatRows */ +
4763/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4764 +
4765"use strict"; +
4766__webpack_require__.r(__webpack_exports__); +
4767/* harmony import */ var _dsv__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv */ "./node_modules/d3-dsv/src/dsv.js"); +
4768/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dsvFormat", function() { return _dsv__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
4769 +
4770/* harmony import */ var _csv__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./csv */ "./node_modules/d3-dsv/src/csv.js"); +
4771/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvParse", function() { return _csv__WEBPACK_IMPORTED_MODULE_1__["csvParse"]; }); +
4772 +
4773/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvParseRows", function() { return _csv__WEBPACK_IMPORTED_MODULE_1__["csvParseRows"]; }); +
4774 +
4775/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormat", function() { return _csv__WEBPACK_IMPORTED_MODULE_1__["csvFormat"]; }); +
4776 +
4777/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormatRows", function() { return _csv__WEBPACK_IMPORTED_MODULE_1__["csvFormatRows"]; }); +
4778 +
4779/* harmony import */ var _tsv__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tsv */ "./node_modules/d3-dsv/src/tsv.js"); +
4780/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvParse", function() { return _tsv__WEBPACK_IMPORTED_MODULE_2__["tsvParse"]; }); +
4781 +
4782/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvParseRows", function() { return _tsv__WEBPACK_IMPORTED_MODULE_2__["tsvParseRows"]; }); +
4783 +
4784/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormat", function() { return _tsv__WEBPACK_IMPORTED_MODULE_2__["tsvFormat"]; }); +
4785 +
4786/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormatRows", function() { return _tsv__WEBPACK_IMPORTED_MODULE_2__["tsvFormatRows"]; }); +
4787 +
4788 +
4789 +
4790 +
4791 +
4792 +
4793/***/ }), +
4794 +
4795/***/ "./node_modules/d3-dsv/src/tsv.js": +
4796/*!****************************************!*\ +
4797 !*** ./node_modules/d3-dsv/src/tsv.js ***! +
4798 \****************************************/ +
4799/*! exports provided: tsvParse, tsvParseRows, tsvFormat, tsvFormatRows */ +
4800/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4801 +
4802"use strict"; +
4803__webpack_require__.r(__webpack_exports__); +
4804/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsvParse", function() { return tsvParse; }); +
4805/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsvParseRows", function() { return tsvParseRows; }); +
4806/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsvFormat", function() { return tsvFormat; }); +
4807/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsvFormatRows", function() { return tsvFormatRows; }); +
4808/* harmony import */ var _dsv__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dsv */ "./node_modules/d3-dsv/src/dsv.js"); +
4809 +
4810 +
4811var tsv = Object(_dsv__WEBPACK_IMPORTED_MODULE_0__["default"])("\t"); +
4812 +
4813var tsvParse = tsv.parse; +
4814var tsvParseRows = tsv.parseRows; +
4815var tsvFormat = tsv.format; +
4816var tsvFormatRows = tsv.formatRows; +
4817 +
4818 +
4819/***/ }), +
4820 +
4821/***/ "./node_modules/d3-ease/src/back.js": +
4822/*!******************************************!*\ +
4823 !*** ./node_modules/d3-ease/src/back.js ***! +
4824 \******************************************/ +
4825/*! exports provided: backIn, backOut, backInOut */ +
4826/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4827 +
4828"use strict"; +
4829__webpack_require__.r(__webpack_exports__); +
4830/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "backIn", function() { return backIn; }); +
4831/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "backOut", function() { return backOut; }); +
4832/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "backInOut", function() { return backInOut; }); +
4833var overshoot = 1.70158; +
4834 +
4835var backIn = (function custom(s) { +
4836 s = +s; +
4837 +
4838 function backIn(t) { +
4839 return t * t * ((s + 1) * t - s); +
4840 } +
4841 +
4842 backIn.overshoot = custom; +
4843 +
4844 return backIn; +
4845})(overshoot); +
4846 +
4847var backOut = (function custom(s) { +
4848 s = +s; +
4849 +
4850 function backOut(t) { +
4851 return --t * t * ((s + 1) * t + s) + 1; +
4852 } +
4853 +
4854 backOut.overshoot = custom; +
4855 +
4856 return backOut; +
4857})(overshoot); +
4858 +
4859var backInOut = (function custom(s) { +
4860 s = +s; +
4861 +
4862 function backInOut(t) { +
4863 return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2; +
4864 } +
4865 +
4866 backInOut.overshoot = custom; +
4867 +
4868 return backInOut; +
4869})(overshoot); +
4870 +
4871 +
4872/***/ }), +
4873 +
4874/***/ "./node_modules/d3-ease/src/bounce.js": +
4875/*!********************************************!*\ +
4876 !*** ./node_modules/d3-ease/src/bounce.js ***! +
4877 \********************************************/ +
4878/*! exports provided: bounceIn, bounceOut, bounceInOut */ +
4879/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4880 +
4881"use strict"; +
4882__webpack_require__.r(__webpack_exports__); +
4883/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bounceIn", function() { return bounceIn; }); +
4884/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bounceOut", function() { return bounceOut; }); +
4885/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bounceInOut", function() { return bounceInOut; }); +
4886var b1 = 4 / 11, +
4887 b2 = 6 / 11, +
4888 b3 = 8 / 11, +
4889 b4 = 3 / 4, +
4890 b5 = 9 / 11, +
4891 b6 = 10 / 11, +
4892 b7 = 15 / 16, +
4893 b8 = 21 / 22, +
4894 b9 = 63 / 64, +
4895 b0 = 1 / b1 / b1; +
4896 +
4897function bounceIn(t) { +
4898 return 1 - bounceOut(1 - t); +
4899} +
4900 +
4901function bounceOut(t) { +
4902 return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9; +
4903} +
4904 +
4905function bounceInOut(t) { +
4906 return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; +
4907} +
4908 +
4909 +
4910/***/ }), +
4911 +
4912/***/ "./node_modules/d3-ease/src/circle.js": +
4913/*!********************************************!*\ +
4914 !*** ./node_modules/d3-ease/src/circle.js ***! +
4915 \********************************************/ +
4916/*! exports provided: circleIn, circleOut, circleInOut */ +
4917/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4918 +
4919"use strict"; +
4920__webpack_require__.r(__webpack_exports__); +
4921/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circleIn", function() { return circleIn; }); +
4922/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circleOut", function() { return circleOut; }); +
4923/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circleInOut", function() { return circleInOut; }); +
4924function circleIn(t) { +
4925 return 1 - Math.sqrt(1 - t * t); +
4926} +
4927 +
4928function circleOut(t) { +
4929 return Math.sqrt(1 - --t * t); +
4930} +
4931 +
4932function circleInOut(t) { +
4933 return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; +
4934} +
4935 +
4936 +
4937/***/ }), +
4938 +
4939/***/ "./node_modules/d3-ease/src/cubic.js": +
4940/*!*******************************************!*\ +
4941 !*** ./node_modules/d3-ease/src/cubic.js ***! +
4942 \*******************************************/ +
4943/*! exports provided: cubicIn, cubicOut, cubicInOut */ +
4944/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4945 +
4946"use strict"; +
4947__webpack_require__.r(__webpack_exports__); +
4948/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cubicIn", function() { return cubicIn; }); +
4949/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cubicOut", function() { return cubicOut; }); +
4950/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cubicInOut", function() { return cubicInOut; }); +
4951function cubicIn(t) { +
4952 return t * t * t; +
4953} +
4954 +
4955function cubicOut(t) { +
4956 return --t * t * t + 1; +
4957} +
4958 +
4959function cubicInOut(t) { +
4960 return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; +
4961} +
4962 +
4963 +
4964/***/ }), +
4965 +
4966/***/ "./node_modules/d3-ease/src/elastic.js": +
4967/*!*********************************************!*\ +
4968 !*** ./node_modules/d3-ease/src/elastic.js ***! +
4969 \*********************************************/ +
4970/*! exports provided: elasticIn, elasticOut, elasticInOut */ +
4971/***/ (function(module, __webpack_exports__, __webpack_require__) { +
4972 +
4973"use strict"; +
4974__webpack_require__.r(__webpack_exports__); +
4975/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elasticIn", function() { return elasticIn; }); +
4976/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elasticOut", function() { return elasticOut; }); +
4977/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elasticInOut", function() { return elasticInOut; }); +
4978var tau = 2 * Math.PI, +
4979 amplitude = 1, +
4980 period = 0.3; +
4981 +
4982var elasticIn = (function custom(a, p) { +
4983 var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); +
4984 +
4985 function elasticIn(t) { +
4986 return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p); +
4987 } +
4988 +
4989 elasticIn.amplitude = function(a) { return custom(a, p * tau); }; +
4990 elasticIn.period = function(p) { return custom(a, p); }; +
4991 +
4992 return elasticIn; +
4993})(amplitude, period); +
4994 +
4995var elasticOut = (function custom(a, p) { +
4996 var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); +
4997 +
4998 function elasticOut(t) { +
4999 return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p); +
5000 } +
5001 +
5002 elasticOut.amplitude = function(a) { return custom(a, p * tau); }; +
5003 elasticOut.period = function(p) { return custom(a, p); }; +
5004 +
5005 return elasticOut; +
5006})(amplitude, period); +
5007 +
5008var elasticInOut = (function custom(a, p) { +
5009 var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); +
5010 +
5011 function elasticInOut(t) { +
5012 return ((t = t * 2 - 1) < 0 +
5013 ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p) +
5014 : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2; +
5015 } +
5016 +
5017 elasticInOut.amplitude = function(a) { return custom(a, p * tau); }; +
5018 elasticInOut.period = function(p) { return custom(a, p); }; +
5019 +
5020 return elasticInOut; +
5021})(amplitude, period); +
5022 +
5023 +
5024/***/ }), +
5025 +
5026/***/ "./node_modules/d3-ease/src/exp.js": +
5027/*!*****************************************!*\ +
5028 !*** ./node_modules/d3-ease/src/exp.js ***! +
5029 \*****************************************/ +
5030/*! exports provided: expIn, expOut, expInOut */ +
5031/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5032 +
5033"use strict"; +
5034__webpack_require__.r(__webpack_exports__); +
5035/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expIn", function() { return expIn; }); +
5036/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expOut", function() { return expOut; }); +
5037/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expInOut", function() { return expInOut; }); +
5038function expIn(t) { +
5039 return Math.pow(2, 10 * t - 10); +
5040} +
5041 +
5042function expOut(t) { +
5043 return 1 - Math.pow(2, -10 * t); +
5044} +
5045 +
5046function expInOut(t) { +
5047 return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2; +
5048} +
5049 +
5050 +
5051/***/ }), +
5052 +
5053/***/ "./node_modules/d3-ease/src/index.js": +
5054/*!*******************************************!*\ +
5055 !*** ./node_modules/d3-ease/src/index.js ***! +
5056 \*******************************************/ +
5057/*! exports provided: easeLinear, easeQuad, easeQuadIn, easeQuadOut, easeQuadInOut, easeCubic, easeCubicIn, easeCubicOut, easeCubicInOut, easePoly, easePolyIn, easePolyOut, easePolyInOut, easeSin, easeSinIn, easeSinOut, easeSinInOut, easeExp, easeExpIn, easeExpOut, easeExpInOut, easeCircle, easeCircleIn, easeCircleOut, easeCircleInOut, easeBounce, easeBounceIn, easeBounceOut, easeBounceInOut, easeBack, easeBackIn, easeBackOut, easeBackInOut, easeElastic, easeElasticIn, easeElasticOut, easeElasticInOut */ +
5058/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5059 +
5060"use strict"; +
5061__webpack_require__.r(__webpack_exports__); +
5062/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-ease/src/linear.js"); +
5063/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeLinear", function() { return _linear__WEBPACK_IMPORTED_MODULE_0__["linear"]; }); +
5064 +
5065/* harmony import */ var _quad__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./quad */ "./node_modules/d3-ease/src/quad.js"); +
5066/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuad", function() { return _quad__WEBPACK_IMPORTED_MODULE_1__["quadInOut"]; }); +
5067 +
5068/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadIn", function() { return _quad__WEBPACK_IMPORTED_MODULE_1__["quadIn"]; }); +
5069 +
5070/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadOut", function() { return _quad__WEBPACK_IMPORTED_MODULE_1__["quadOut"]; }); +
5071 +
5072/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadInOut", function() { return _quad__WEBPACK_IMPORTED_MODULE_1__["quadInOut"]; }); +
5073 +
5074/* harmony import */ var _cubic__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cubic */ "./node_modules/d3-ease/src/cubic.js"); +
5075/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubic", function() { return _cubic__WEBPACK_IMPORTED_MODULE_2__["cubicInOut"]; }); +
5076 +
5077/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicIn", function() { return _cubic__WEBPACK_IMPORTED_MODULE_2__["cubicIn"]; }); +
5078 +
5079/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicOut", function() { return _cubic__WEBPACK_IMPORTED_MODULE_2__["cubicOut"]; }); +
5080 +
5081/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicInOut", function() { return _cubic__WEBPACK_IMPORTED_MODULE_2__["cubicInOut"]; }); +
5082 +
5083/* harmony import */ var _poly__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./poly */ "./node_modules/d3-ease/src/poly.js"); +
5084/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePoly", function() { return _poly__WEBPACK_IMPORTED_MODULE_3__["polyInOut"]; }); +
5085 +
5086/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyIn", function() { return _poly__WEBPACK_IMPORTED_MODULE_3__["polyIn"]; }); +
5087 +
5088/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyOut", function() { return _poly__WEBPACK_IMPORTED_MODULE_3__["polyOut"]; }); +
5089 +
5090/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyInOut", function() { return _poly__WEBPACK_IMPORTED_MODULE_3__["polyInOut"]; }); +
5091 +
5092/* harmony import */ var _sin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sin */ "./node_modules/d3-ease/src/sin.js"); +
5093/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSin", function() { return _sin__WEBPACK_IMPORTED_MODULE_4__["sinInOut"]; }); +
5094 +
5095/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinIn", function() { return _sin__WEBPACK_IMPORTED_MODULE_4__["sinIn"]; }); +
5096 +
5097/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinOut", function() { return _sin__WEBPACK_IMPORTED_MODULE_4__["sinOut"]; }); +
5098 +
5099/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinInOut", function() { return _sin__WEBPACK_IMPORTED_MODULE_4__["sinInOut"]; }); +
5100 +
5101/* harmony import */ var _exp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exp */ "./node_modules/d3-ease/src/exp.js"); +
5102/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExp", function() { return _exp__WEBPACK_IMPORTED_MODULE_5__["expInOut"]; }); +
5103 +
5104/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpIn", function() { return _exp__WEBPACK_IMPORTED_MODULE_5__["expIn"]; }); +
5105 +
5106/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpOut", function() { return _exp__WEBPACK_IMPORTED_MODULE_5__["expOut"]; }); +
5107 +
5108/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpInOut", function() { return _exp__WEBPACK_IMPORTED_MODULE_5__["expInOut"]; }); +
5109 +
5110/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./circle */ "./node_modules/d3-ease/src/circle.js"); +
5111/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircle", function() { return _circle__WEBPACK_IMPORTED_MODULE_6__["circleInOut"]; }); +
5112 +
5113/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleIn", function() { return _circle__WEBPACK_IMPORTED_MODULE_6__["circleIn"]; }); +
5114 +
5115/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleOut", function() { return _circle__WEBPACK_IMPORTED_MODULE_6__["circleOut"]; }); +
5116 +
5117/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleInOut", function() { return _circle__WEBPACK_IMPORTED_MODULE_6__["circleInOut"]; }); +
5118 +
5119/* harmony import */ var _bounce__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bounce */ "./node_modules/d3-ease/src/bounce.js"); +
5120/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounce", function() { return _bounce__WEBPACK_IMPORTED_MODULE_7__["bounceOut"]; }); +
5121 +
5122/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceIn", function() { return _bounce__WEBPACK_IMPORTED_MODULE_7__["bounceIn"]; }); +
5123 +
5124/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceOut", function() { return _bounce__WEBPACK_IMPORTED_MODULE_7__["bounceOut"]; }); +
5125 +
5126/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceInOut", function() { return _bounce__WEBPACK_IMPORTED_MODULE_7__["bounceInOut"]; }); +
5127 +
5128/* harmony import */ var _back__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./back */ "./node_modules/d3-ease/src/back.js"); +
5129/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBack", function() { return _back__WEBPACK_IMPORTED_MODULE_8__["backInOut"]; }); +
5130 +
5131/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackIn", function() { return _back__WEBPACK_IMPORTED_MODULE_8__["backIn"]; }); +
5132 +
5133/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackOut", function() { return _back__WEBPACK_IMPORTED_MODULE_8__["backOut"]; }); +
5134 +
5135/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackInOut", function() { return _back__WEBPACK_IMPORTED_MODULE_8__["backInOut"]; }); +
5136 +
5137/* harmony import */ var _elastic__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./elastic */ "./node_modules/d3-ease/src/elastic.js"); +
5138/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElastic", function() { return _elastic__WEBPACK_IMPORTED_MODULE_9__["elasticOut"]; }); +
5139 +
5140/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticIn", function() { return _elastic__WEBPACK_IMPORTED_MODULE_9__["elasticIn"]; }); +
5141 +
5142/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticOut", function() { return _elastic__WEBPACK_IMPORTED_MODULE_9__["elasticOut"]; }); +
5143 +
5144/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticInOut", function() { return _elastic__WEBPACK_IMPORTED_MODULE_9__["elasticInOut"]; }); +
5145 +
5146 +
5147 +
5148 +
5149 +
5150 +
5151 +
5152 +
5153 +
5154 +
5155 +
5156 +
5157 +
5158 +
5159 +
5160 +
5161 +
5162 +
5163 +
5164 +
5165 +
5166 +
5167/***/ }), +
5168 +
5169/***/ "./node_modules/d3-ease/src/linear.js": +
5170/*!********************************************!*\ +
5171 !*** ./node_modules/d3-ease/src/linear.js ***! +
5172 \********************************************/ +
5173/*! exports provided: linear */ +
5174/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5175 +
5176"use strict"; +
5177__webpack_require__.r(__webpack_exports__); +
5178/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linear", function() { return linear; }); +
5179function linear(t) { +
5180 return +t; +
5181} +
5182 +
5183 +
5184/***/ }), +
5185 +
5186/***/ "./node_modules/d3-ease/src/poly.js": +
5187/*!******************************************!*\ +
5188 !*** ./node_modules/d3-ease/src/poly.js ***! +
5189 \******************************************/ +
5190/*! exports provided: polyIn, polyOut, polyInOut */ +
5191/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5192 +
5193"use strict"; +
5194__webpack_require__.r(__webpack_exports__); +
5195/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "polyIn", function() { return polyIn; }); +
5196/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "polyOut", function() { return polyOut; }); +
5197/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "polyInOut", function() { return polyInOut; }); +
5198var exponent = 3; +
5199 +
5200var polyIn = (function custom(e) { +
5201 e = +e; +
5202 +
5203 function polyIn(t) { +
5204 return Math.pow(t, e); +
5205 } +
5206 +
5207 polyIn.exponent = custom; +
5208 +
5209 return polyIn; +
5210})(exponent); +
5211 +
5212var polyOut = (function custom(e) { +
5213 e = +e; +
5214 +
5215 function polyOut(t) { +
5216 return 1 - Math.pow(1 - t, e); +
5217 } +
5218 +
5219 polyOut.exponent = custom; +
5220 +
5221 return polyOut; +
5222})(exponent); +
5223 +
5224var polyInOut = (function custom(e) { +
5225 e = +e; +
5226 +
5227 function polyInOut(t) { +
5228 return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; +
5229 } +
5230 +
5231 polyInOut.exponent = custom; +
5232 +
5233 return polyInOut; +
5234})(exponent); +
5235 +
5236 +
5237/***/ }), +
5238 +
5239/***/ "./node_modules/d3-ease/src/quad.js": +
5240/*!******************************************!*\ +
5241 !*** ./node_modules/d3-ease/src/quad.js ***! +
5242 \******************************************/ +
5243/*! exports provided: quadIn, quadOut, quadInOut */ +
5244/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5245 +
5246"use strict"; +
5247__webpack_require__.r(__webpack_exports__); +
5248/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quadIn", function() { return quadIn; }); +
5249/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quadOut", function() { return quadOut; }); +
5250/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quadInOut", function() { return quadInOut; }); +
5251function quadIn(t) { +
5252 return t * t; +
5253} +
5254 +
5255function quadOut(t) { +
5256 return t * (2 - t); +
5257} +
5258 +
5259function quadInOut(t) { +
5260 return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2; +
5261} +
5262 +
5263 +
5264/***/ }), +
5265 +
5266/***/ "./node_modules/d3-ease/src/sin.js": +
5267/*!*****************************************!*\ +
5268 !*** ./node_modules/d3-ease/src/sin.js ***! +
5269 \*****************************************/ +
5270/*! exports provided: sinIn, sinOut, sinInOut */ +
5271/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5272 +
5273"use strict"; +
5274__webpack_require__.r(__webpack_exports__); +
5275/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sinIn", function() { return sinIn; }); +
5276/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sinOut", function() { return sinOut; }); +
5277/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sinInOut", function() { return sinInOut; }); +
5278var pi = Math.PI, +
5279 halfPi = pi / 2; +
5280 +
5281function sinIn(t) { +
5282 return 1 - Math.cos(t * halfPi); +
5283} +
5284 +
5285function sinOut(t) { +
5286 return Math.sin(t * halfPi); +
5287} +
5288 +
5289function sinInOut(t) { +
5290 return (1 - Math.cos(pi * t)) / 2; +
5291} +
5292 +
5293 +
5294/***/ }), +
5295 +
5296/***/ "./node_modules/d3-fetch/src/blob.js": +
5297/*!*******************************************!*\ +
5298 !*** ./node_modules/d3-fetch/src/blob.js ***! +
5299 \*******************************************/ +
5300/*! exports provided: default */ +
5301/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5302 +
5303"use strict"; +
5304__webpack_require__.r(__webpack_exports__); +
5305function responseBlob(response) { +
5306 if (!response.ok) throw new Error(response.status + " " + response.statusText); +
5307 return response.blob(); +
5308} +
5309 +
5310/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { +
5311 return fetch(input, init).then(responseBlob); +
5312}); +
5313 +
5314 +
5315/***/ }), +
5316 +
5317/***/ "./node_modules/d3-fetch/src/buffer.js": +
5318/*!*********************************************!*\ +
5319 !*** ./node_modules/d3-fetch/src/buffer.js ***! +
5320 \*********************************************/ +
5321/*! exports provided: default */ +
5322/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5323 +
5324"use strict"; +
5325__webpack_require__.r(__webpack_exports__); +
5326function responseArrayBuffer(response) { +
5327 if (!response.ok) throw new Error(response.status + " " + response.statusText); +
5328 return response.arrayBuffer(); +
5329} +
5330 +
5331/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { +
5332 return fetch(input, init).then(responseArrayBuffer); +
5333}); +
5334 +
5335 +
5336/***/ }), +
5337 +
5338/***/ "./node_modules/d3-fetch/src/dsv.js": +
5339/*!******************************************!*\ +
5340 !*** ./node_modules/d3-fetch/src/dsv.js ***! +
5341 \******************************************/ +
5342/*! exports provided: default, csv, tsv */ +
5343/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5344 +
5345"use strict"; +
5346__webpack_require__.r(__webpack_exports__); +
5347/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return dsv; }); +
5348/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "csv", function() { return csv; }); +
5349/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tsv", function() { return tsv; }); +
5350/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dsv */ "./node_modules/d3-dsv/src/index.js"); +
5351/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./text */ "./node_modules/d3-fetch/src/text.js"); +
5352 +
5353 +
5354 +
5355function dsvParse(parse) { +
5356 return function(input, init, row) { +
5357 if (arguments.length === 2 && typeof init === "function") row = init, init = undefined; +
5358 return Object(_text__WEBPACK_IMPORTED_MODULE_1__["default"])(input, init).then(function(response) { +
5359 return parse(response, row); +
5360 }); +
5361 }; +
5362} +
5363 +
5364function dsv(delimiter, input, init, row) { +
5365 if (arguments.length === 3 && typeof init === "function") row = init, init = undefined; +
5366 var format = Object(d3_dsv__WEBPACK_IMPORTED_MODULE_0__["dsvFormat"])(delimiter); +
5367 return Object(_text__WEBPACK_IMPORTED_MODULE_1__["default"])(input, init).then(function(response) { +
5368 return format.parse(response, row); +
5369 }); +
5370} +
5371 +
5372var csv = dsvParse(d3_dsv__WEBPACK_IMPORTED_MODULE_0__["csvParse"]); +
5373var tsv = dsvParse(d3_dsv__WEBPACK_IMPORTED_MODULE_0__["tsvParse"]); +
5374 +
5375 +
5376/***/ }), +
5377 +
5378/***/ "./node_modules/d3-fetch/src/image.js": +
5379/*!********************************************!*\ +
5380 !*** ./node_modules/d3-fetch/src/image.js ***! +
5381 \********************************************/ +
5382/*! exports provided: default */ +
5383/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5384 +
5385"use strict"; +
5386__webpack_require__.r(__webpack_exports__); +
5387/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { +
5388 return new Promise(function(resolve, reject) { +
5389 var image = new Image; +
5390 for (var key in init) image[key] = init[key]; +
5391 image.onerror = reject; +
5392 image.onload = function() { resolve(image); }; +
5393 image.src = input; +
5394 }); +
5395}); +
5396 +
5397 +
5398/***/ }), +
5399 +
5400/***/ "./node_modules/d3-fetch/src/index.js": +
5401/*!********************************************!*\ +
5402 !*** ./node_modules/d3-fetch/src/index.js ***! +
5403 \********************************************/ +
5404/*! exports provided: blob, buffer, dsv, csv, tsv, image, json, text, xml, html, svg */ +
5405/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5406 +
5407"use strict"; +
5408__webpack_require__.r(__webpack_exports__); +
5409/* harmony import */ var _blob__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./blob */ "./node_modules/d3-fetch/src/blob.js"); +
5410/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return _blob__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
5411 +
5412/* harmony import */ var _buffer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buffer */ "./node_modules/d3-fetch/src/buffer.js"); +
5413/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return _buffer__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
5414 +
5415/* harmony import */ var _dsv__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dsv */ "./node_modules/d3-fetch/src/dsv.js"); +
5416/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dsv", function() { return _dsv__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
5417 +
5418/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csv", function() { return _dsv__WEBPACK_IMPORTED_MODULE_2__["csv"]; }); +
5419 +
5420/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsv", function() { return _dsv__WEBPACK_IMPORTED_MODULE_2__["tsv"]; }); +
5421 +
5422/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./image */ "./node_modules/d3-fetch/src/image.js"); +
5423/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "image", function() { return _image__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
5424 +
5425/* harmony import */ var _json__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./json */ "./node_modules/d3-fetch/src/json.js"); +
5426/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "json", function() { return _json__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
5427 +
5428/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./text */ "./node_modules/d3-fetch/src/text.js"); +
5429/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "text", function() { return _text__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
5430 +
5431/* harmony import */ var _xml__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./xml */ "./node_modules/d3-fetch/src/xml.js"); +
5432/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "xml", function() { return _xml__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
5433 +
5434/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "html", function() { return _xml__WEBPACK_IMPORTED_MODULE_6__["html"]; }); +
5435 +
5436/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "svg", function() { return _xml__WEBPACK_IMPORTED_MODULE_6__["svg"]; }); +
5437 +
5438 +
5439 +
5440 +
5441 +
5442 +
5443 +
5444 +
5445 +
5446 +
5447/***/ }), +
5448 +
5449/***/ "./node_modules/d3-fetch/src/json.js": +
5450/*!*******************************************!*\ +
5451 !*** ./node_modules/d3-fetch/src/json.js ***! +
5452 \*******************************************/ +
5453/*! exports provided: default */ +
5454/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5455 +
5456"use strict"; +
5457__webpack_require__.r(__webpack_exports__); +
5458function responseJson(response) { +
5459 if (!response.ok) throw new Error(response.status + " " + response.statusText); +
5460 return response.json(); +
5461} +
5462 +
5463/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { +
5464 return fetch(input, init).then(responseJson); +
5465}); +
5466 +
5467 +
5468/***/ }), +
5469 +
5470/***/ "./node_modules/d3-fetch/src/text.js": +
5471/*!*******************************************!*\ +
5472 !*** ./node_modules/d3-fetch/src/text.js ***! +
5473 \*******************************************/ +
5474/*! exports provided: default */ +
5475/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5476 +
5477"use strict"; +
5478__webpack_require__.r(__webpack_exports__); +
5479function responseText(response) { +
5480 if (!response.ok) throw new Error(response.status + " " + response.statusText); +
5481 return response.text(); +
5482} +
5483 +
5484/* harmony default export */ __webpack_exports__["default"] = (function(input, init) { +
5485 return fetch(input, init).then(responseText); +
5486}); +
5487 +
5488 +
5489/***/ }), +
5490 +
5491/***/ "./node_modules/d3-fetch/src/xml.js": +
5492/*!******************************************!*\ +
5493 !*** ./node_modules/d3-fetch/src/xml.js ***! +
5494 \******************************************/ +
5495/*! exports provided: default, html, svg */ +
5496/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5497 +
5498"use strict"; +
5499__webpack_require__.r(__webpack_exports__); +
5500/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "html", function() { return html; }); +
5501/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "svg", function() { return svg; }); +
5502/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./text */ "./node_modules/d3-fetch/src/text.js"); +
5503 +
5504 +
5505function parser(type) { +
5506 return function(input, init) { +
5507 return Object(_text__WEBPACK_IMPORTED_MODULE_0__["default"])(input, init).then(function(text) { +
5508 return (new DOMParser).parseFromString(text, type); +
5509 }); +
5510 }; +
5511} +
5512 +
5513/* harmony default export */ __webpack_exports__["default"] = (parser("application/xml")); +
5514 +
5515var html = parser("text/html"); +
5516 +
5517var svg = parser("image/svg+xml"); +
5518 +
5519 +
5520/***/ }), +
5521 +
5522/***/ "./node_modules/d3-force/src/center.js": +
5523/*!*********************************************!*\ +
5524 !*** ./node_modules/d3-force/src/center.js ***! +
5525 \*********************************************/ +
5526/*! exports provided: default */ +
5527/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5528 +
5529"use strict"; +
5530__webpack_require__.r(__webpack_exports__); +
5531/* harmony default export */ __webpack_exports__["default"] = (function(x, y) { +
5532 var nodes; +
5533 +
5534 if (x == null) x = 0; +
5535 if (y == null) y = 0; +
5536 +
5537 function force() { +
5538 var i, +
5539 n = nodes.length, +
5540 node, +
5541 sx = 0, +
5542 sy = 0; +
5543 +
5544 for (i = 0; i < n; ++i) { +
5545 node = nodes[i], sx += node.x, sy += node.y; +
5546 } +
5547 +
5548 for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { +
5549 node = nodes[i], node.x -= sx, node.y -= sy; +
5550 } +
5551 } +
5552 +
5553 force.initialize = function(_) { +
5554 nodes = _; +
5555 }; +
5556 +
5557 force.x = function(_) { +
5558 return arguments.length ? (x = +_, force) : x; +
5559 }; +
5560 +
5561 force.y = function(_) { +
5562 return arguments.length ? (y = +_, force) : y; +
5563 }; +
5564 +
5565 return force; +
5566}); +
5567 +
5568 +
5569/***/ }), +
5570 +
5571/***/ "./node_modules/d3-force/src/collide.js": +
5572/*!**********************************************!*\ +
5573 !*** ./node_modules/d3-force/src/collide.js ***! +
5574 \**********************************************/ +
5575/*! exports provided: default */ +
5576/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5577 +
5578"use strict"; +
5579__webpack_require__.r(__webpack_exports__); +
5580/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); +
5581/* harmony import */ var _jiggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle */ "./node_modules/d3-force/src/jiggle.js"); +
5582/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-quadtree */ "./node_modules/d3-quadtree/src/index.js"); +
5583 +
5584 +
5585 +
5586 +
5587function x(d) { +
5588 return d.x + d.vx; +
5589} +
5590 +
5591function y(d) { +
5592 return d.y + d.vy; +
5593} +
5594 +
5595/* harmony default export */ __webpack_exports__["default"] = (function(radius) { +
5596 var nodes, +
5597 radii, +
5598 strength = 1, +
5599 iterations = 1; +
5600 +
5601 if (typeof radius !== "function") radius = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(radius == null ? 1 : +radius); +
5602 +
5603 function force() { +
5604 var i, n = nodes.length, +
5605 tree, +
5606 node, +
5607 xi, +
5608 yi, +
5609 ri, +
5610 ri2; +
5611 +
5612 for (var k = 0; k < iterations; ++k) { +
5613 tree = Object(d3_quadtree__WEBPACK_IMPORTED_MODULE_2__["quadtree"])(nodes, x, y).visitAfter(prepare); +
5614 for (i = 0; i < n; ++i) { +
5615 node = nodes[i]; +
5616 ri = radii[node.index], ri2 = ri * ri; +
5617 xi = node.x + node.vx; +
5618 yi = node.y + node.vy; +
5619 tree.visit(apply); +
5620 } +
5621 } +
5622 +
5623 function apply(quad, x0, y0, x1, y1) { +
5624 var data = quad.data, rj = quad.r, r = ri + rj; +
5625 if (data) { +
5626 if (data.index > node.index) { +
5627 var x = xi - data.x - data.vx, +
5628 y = yi - data.y - data.vy, +
5629 l = x * x + y * y; +
5630 if (l < r * r) { +
5631 if (x === 0) x = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += x * x; +
5632 if (y === 0) y = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += y * y; +
5633 l = (r - (l = Math.sqrt(l))) / l * strength; +
5634 node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); +
5635 node.vy += (y *= l) * r; +
5636 data.vx -= x * (r = 1 - r); +
5637 data.vy -= y * r; +
5638 } +
5639 } +
5640 return; +
5641 } +
5642 return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; +
5643 } +
5644 } +
5645 +
5646 function prepare(quad) { +
5647 if (quad.data) return quad.r = radii[quad.data.index]; +
5648 for (var i = quad.r = 0; i < 4; ++i) { +
5649 if (quad[i] && quad[i].r > quad.r) { +
5650 quad.r = quad[i].r; +
5651 } +
5652 } +
5653 } +
5654 +
5655 function initialize() { +
5656 if (!nodes) return; +
5657 var i, n = nodes.length, node; +
5658 radii = new Array(n); +
5659 for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); +
5660 } +
5661 +
5662 force.initialize = function(_) { +
5663 nodes = _; +
5664 initialize(); +
5665 }; +
5666 +
5667 force.iterations = function(_) { +
5668 return arguments.length ? (iterations = +_, force) : iterations; +
5669 }; +
5670 +
5671 force.strength = function(_) { +
5672 return arguments.length ? (strength = +_, force) : strength; +
5673 }; +
5674 +
5675 force.radius = function(_) { +
5676 return arguments.length ? (radius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : radius; +
5677 }; +
5678 +
5679 return force; +
5680}); +
5681 +
5682 +
5683/***/ }), +
5684 +
5685/***/ "./node_modules/d3-force/src/constant.js": +
5686/*!***********************************************!*\ +
5687 !*** ./node_modules/d3-force/src/constant.js ***! +
5688 \***********************************************/ +
5689/*! exports provided: default */ +
5690/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5691 +
5692"use strict"; +
5693__webpack_require__.r(__webpack_exports__); +
5694/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
5695 return function() { +
5696 return x; +
5697 }; +
5698}); +
5699 +
5700 +
5701/***/ }), +
5702 +
5703/***/ "./node_modules/d3-force/src/index.js": +
5704/*!********************************************!*\ +
5705 !*** ./node_modules/d3-force/src/index.js ***! +
5706 \********************************************/ +
5707/*! exports provided: forceCenter, forceCollide, forceLink, forceManyBody, forceRadial, forceSimulation, forceX, forceY */ +
5708/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5709 +
5710"use strict"; +
5711__webpack_require__.r(__webpack_exports__); +
5712/* harmony import */ var _center__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./center */ "./node_modules/d3-force/src/center.js"); +
5713/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceCenter", function() { return _center__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
5714 +
5715/* harmony import */ var _collide__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./collide */ "./node_modules/d3-force/src/collide.js"); +
5716/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceCollide", function() { return _collide__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
5717 +
5718/* harmony import */ var _link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./link */ "./node_modules/d3-force/src/link.js"); +
5719/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceLink", function() { return _link__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
5720 +
5721/* harmony import */ var _manyBody__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./manyBody */ "./node_modules/d3-force/src/manyBody.js"); +
5722/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceManyBody", function() { return _manyBody__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
5723 +
5724/* harmony import */ var _radial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./radial */ "./node_modules/d3-force/src/radial.js"); +
5725/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceRadial", function() { return _radial__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
5726 +
5727/* harmony import */ var _simulation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simulation */ "./node_modules/d3-force/src/simulation.js"); +
5728/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceSimulation", function() { return _simulation__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
5729 +
5730/* harmony import */ var _x__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./x */ "./node_modules/d3-force/src/x.js"); +
5731/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceX", function() { return _x__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
5732 +
5733/* harmony import */ var _y__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./y */ "./node_modules/d3-force/src/y.js"); +
5734/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceY", function() { return _y__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +
5735 +
5736 +
5737 +
5738 +
5739 +
5740 +
5741 +
5742 +
5743 +
5744 +
5745 +
5746/***/ }), +
5747 +
5748/***/ "./node_modules/d3-force/src/jiggle.js": +
5749/*!*********************************************!*\ +
5750 !*** ./node_modules/d3-force/src/jiggle.js ***! +
5751 \*********************************************/ +
5752/*! exports provided: default */ +
5753/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5754 +
5755"use strict"; +
5756__webpack_require__.r(__webpack_exports__); +
5757/* harmony default export */ __webpack_exports__["default"] = (function() { +
5758 return (Math.random() - 0.5) * 1e-6; +
5759}); +
5760 +
5761 +
5762/***/ }), +
5763 +
5764/***/ "./node_modules/d3-force/src/link.js": +
5765/*!*******************************************!*\ +
5766 !*** ./node_modules/d3-force/src/link.js ***! +
5767 \*******************************************/ +
5768/*! exports provided: default */ +
5769/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5770 +
5771"use strict"; +
5772__webpack_require__.r(__webpack_exports__); +
5773/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); +
5774/* harmony import */ var _jiggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle */ "./node_modules/d3-force/src/jiggle.js"); +
5775/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-collection */ "./node_modules/d3-collection/src/index.js"); +
5776 +
5777 +
5778 +
5779 +
5780function index(d) { +
5781 return d.index; +
5782} +
5783 +
5784function find(nodeById, nodeId) { +
5785 var node = nodeById.get(nodeId); +
5786 if (!node) throw new Error("missing: " + nodeId); +
5787 return node; +
5788} +
5789 +
5790/* harmony default export */ __webpack_exports__["default"] = (function(links) { +
5791 var id = index, +
5792 strength = defaultStrength, +
5793 strengths, +
5794 distance = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(30), +
5795 distances, +
5796 nodes, +
5797 count, +
5798 bias, +
5799 iterations = 1; +
5800 +
5801 if (links == null) links = []; +
5802 +
5803 function defaultStrength(link) { +
5804 return 1 / Math.min(count[link.source.index], count[link.target.index]); +
5805 } +
5806 +
5807 function force(alpha) { +
5808 for (var k = 0, n = links.length; k < iterations; ++k) { +
5809 for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { +
5810 link = links[i], source = link.source, target = link.target; +
5811 x = target.x + target.vx - source.x - source.vx || Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(); +
5812 y = target.y + target.vy - source.y - source.vy || Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(); +
5813 l = Math.sqrt(x * x + y * y); +
5814 l = (l - distances[i]) / l * alpha * strengths[i]; +
5815 x *= l, y *= l; +
5816 target.vx -= x * (b = bias[i]); +
5817 target.vy -= y * b; +
5818 source.vx += x * (b = 1 - b); +
5819 source.vy += y * b; +
5820 } +
5821 } +
5822 } +
5823 +
5824 function initialize() { +
5825 if (!nodes) return; +
5826 +
5827 var i, +
5828 n = nodes.length, +
5829 m = links.length, +
5830 nodeById = Object(d3_collection__WEBPACK_IMPORTED_MODULE_2__["map"])(nodes, id), +
5831 link; +
5832 +
5833 for (i = 0, count = new Array(n); i < m; ++i) { +
5834 link = links[i], link.index = i; +
5835 if (typeof link.source !== "object") link.source = find(nodeById, link.source); +
5836 if (typeof link.target !== "object") link.target = find(nodeById, link.target); +
5837 count[link.source.index] = (count[link.source.index] || 0) + 1; +
5838 count[link.target.index] = (count[link.target.index] || 0) + 1; +
5839 } +
5840 +
5841 for (i = 0, bias = new Array(m); i < m; ++i) { +
5842 link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); +
5843 } +
5844 +
5845 strengths = new Array(m), initializeStrength(); +
5846 distances = new Array(m), initializeDistance(); +
5847 } +
5848 +
5849 function initializeStrength() { +
5850 if (!nodes) return; +
5851 +
5852 for (var i = 0, n = links.length; i < n; ++i) { +
5853 strengths[i] = +strength(links[i], i, links); +
5854 } +
5855 } +
5856 +
5857 function initializeDistance() { +
5858 if (!nodes) return; +
5859 +
5860 for (var i = 0, n = links.length; i < n; ++i) { +
5861 distances[i] = +distance(links[i], i, links); +
5862 } +
5863 } +
5864 +
5865 force.initialize = function(_) { +
5866 nodes = _; +
5867 initialize(); +
5868 }; +
5869 +
5870 force.links = function(_) { +
5871 return arguments.length ? (links = _, initialize(), force) : links; +
5872 }; +
5873 +
5874 force.id = function(_) { +
5875 return arguments.length ? (id = _, force) : id; +
5876 }; +
5877 +
5878 force.iterations = function(_) { +
5879 return arguments.length ? (iterations = +_, force) : iterations; +
5880 }; +
5881 +
5882 force.strength = function(_) { +
5883 return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initializeStrength(), force) : strength; +
5884 }; +
5885 +
5886 force.distance = function(_) { +
5887 return arguments.length ? (distance = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initializeDistance(), force) : distance; +
5888 }; +
5889 +
5890 return force; +
5891}); +
5892 +
5893 +
5894/***/ }), +
5895 +
5896/***/ "./node_modules/d3-force/src/manyBody.js": +
5897/*!***********************************************!*\ +
5898 !*** ./node_modules/d3-force/src/manyBody.js ***! +
5899 \***********************************************/ +
5900/*! exports provided: default */ +
5901/***/ (function(module, __webpack_exports__, __webpack_require__) { +
5902 +
5903"use strict"; +
5904__webpack_require__.r(__webpack_exports__); +
5905/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); +
5906/* harmony import */ var _jiggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jiggle */ "./node_modules/d3-force/src/jiggle.js"); +
5907/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-quadtree */ "./node_modules/d3-quadtree/src/index.js"); +
5908/* harmony import */ var _simulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simulation */ "./node_modules/d3-force/src/simulation.js"); +
5909 +
5910 +
5911 +
5912 +
5913 +
5914/* harmony default export */ __webpack_exports__["default"] = (function() { +
5915 var nodes, +
5916 node, +
5917 alpha, +
5918 strength = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(-30), +
5919 strengths, +
5920 distanceMin2 = 1, +
5921 distanceMax2 = Infinity, +
5922 theta2 = 0.81; +
5923 +
5924 function force(_) { +
5925 var i, n = nodes.length, tree = Object(d3_quadtree__WEBPACK_IMPORTED_MODULE_2__["quadtree"])(nodes, _simulation__WEBPACK_IMPORTED_MODULE_3__["x"], _simulation__WEBPACK_IMPORTED_MODULE_3__["y"]).visitAfter(accumulate); +
5926 for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); +
5927 } +
5928 +
5929 function initialize() { +
5930 if (!nodes) return; +
5931 var i, n = nodes.length, node; +
5932 strengths = new Array(n); +
5933 for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); +
5934 } +
5935 +
5936 function accumulate(quad) { +
5937 var strength = 0, q, c, weight = 0, x, y, i; +
5938 +
5939 // For internal nodes, accumulate forces from child quadrants. +
5940 if (quad.length) { +
5941 for (x = y = i = 0; i < 4; ++i) { +
5942 if ((q = quad[i]) && (c = Math.abs(q.value))) { +
5943 strength += q.value, weight += c, x += c * q.x, y += c * q.y; +
5944 } +
5945 } +
5946 quad.x = x / weight; +
5947 quad.y = y / weight; +
5948 } +
5949 +
5950 // For leaf nodes, accumulate forces from coincident quadrants. +
5951 else { +
5952 q = quad; +
5953 q.x = q.data.x; +
5954 q.y = q.data.y; +
5955 do strength += strengths[q.data.index]; +
5956 while (q = q.next); +
5957 } +
5958 +
5959 quad.value = strength; +
5960 } +
5961 +
5962 function apply(quad, x1, _, x2) { +
5963 if (!quad.value) return true; +
5964 +
5965 var x = quad.x - node.x, +
5966 y = quad.y - node.y, +
5967 w = x2 - x1, +
5968 l = x * x + y * y; +
5969 +
5970 // Apply the Barnes-Hut approximation if possible. +
5971 // Limit forces for very close nodes; randomize direction if coincident. +
5972 if (w * w / theta2 < l) { +
5973 if (l < distanceMax2) { +
5974 if (x === 0) x = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += x * x; +
5975 if (y === 0) y = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += y * y; +
5976 if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); +
5977 node.vx += x * quad.value * alpha / l; +
5978 node.vy += y * quad.value * alpha / l; +
5979 } +
5980 return true; +
5981 } +
5982 +
5983 // Otherwise, process points directly. +
5984 else if (quad.length || l >= distanceMax2) return; +
5985 +
5986 // Limit forces for very close nodes; randomize direction if coincident. +
5987 if (quad.data !== node || quad.next) { +
5988 if (x === 0) x = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += x * x; +
5989 if (y === 0) y = Object(_jiggle__WEBPACK_IMPORTED_MODULE_1__["default"])(), l += y * y; +
5990 if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); +
5991 } +
5992 +
5993 do if (quad.data !== node) { +
5994 w = strengths[quad.data.index] * alpha / l; +
5995 node.vx += x * w; +
5996 node.vy += y * w; +
5997 } while (quad = quad.next); +
5998 } +
5999 +
6000 force.initialize = function(_) { +
6001 nodes = _; +
6002 initialize(); +
6003 }; +
6004 +
6005 force.strength = function(_) { +
6006 return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; +
6007 }; +
6008 +
6009 force.distanceMin = function(_) { +
6010 return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); +
6011 }; +
6012 +
6013 force.distanceMax = function(_) { +
6014 return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); +
6015 }; +
6016 +
6017 force.theta = function(_) { +
6018 return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); +
6019 }; +
6020 +
6021 return force; +
6022}); +
6023 +
6024 +
6025/***/ }), +
6026 +
6027/***/ "./node_modules/d3-force/src/radial.js": +
6028/*!*********************************************!*\ +
6029 !*** ./node_modules/d3-force/src/radial.js ***! +
6030 \*********************************************/ +
6031/*! exports provided: default */ +
6032/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6033 +
6034"use strict"; +
6035__webpack_require__.r(__webpack_exports__); +
6036/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); +
6037 +
6038 +
6039/* harmony default export */ __webpack_exports__["default"] = (function(radius, x, y) { +
6040 var nodes, +
6041 strength = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1), +
6042 strengths, +
6043 radiuses; +
6044 +
6045 if (typeof radius !== "function") radius = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+radius); +
6046 if (x == null) x = 0; +
6047 if (y == null) y = 0; +
6048 +
6049 function force(alpha) { +
6050 for (var i = 0, n = nodes.length; i < n; ++i) { +
6051 var node = nodes[i], +
6052 dx = node.x - x || 1e-6, +
6053 dy = node.y - y || 1e-6, +
6054 r = Math.sqrt(dx * dx + dy * dy), +
6055 k = (radiuses[i] - r) * strengths[i] * alpha / r; +
6056 node.vx += dx * k; +
6057 node.vy += dy * k; +
6058 } +
6059 } +
6060 +
6061 function initialize() { +
6062 if (!nodes) return; +
6063 var i, n = nodes.length; +
6064 strengths = new Array(n); +
6065 radiuses = new Array(n); +
6066 for (i = 0; i < n; ++i) { +
6067 radiuses[i] = +radius(nodes[i], i, nodes); +
6068 strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); +
6069 } +
6070 } +
6071 +
6072 force.initialize = function(_) { +
6073 nodes = _, initialize(); +
6074 }; +
6075 +
6076 force.strength = function(_) { +
6077 return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; +
6078 }; +
6079 +
6080 force.radius = function(_) { +
6081 return arguments.length ? (radius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : radius; +
6082 }; +
6083 +
6084 force.x = function(_) { +
6085 return arguments.length ? (x = +_, force) : x; +
6086 }; +
6087 +
6088 force.y = function(_) { +
6089 return arguments.length ? (y = +_, force) : y; +
6090 }; +
6091 +
6092 return force; +
6093}); +
6094 +
6095 +
6096/***/ }), +
6097 +
6098/***/ "./node_modules/d3-force/src/simulation.js": +
6099/*!*************************************************!*\ +
6100 !*** ./node_modules/d3-force/src/simulation.js ***! +
6101 \*************************************************/ +
6102/*! exports provided: x, y, default */ +
6103/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6104 +
6105"use strict"; +
6106__webpack_require__.r(__webpack_exports__); +
6107/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return x; }); +
6108/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return y; }); +
6109/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/index.js"); +
6110/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-collection */ "./node_modules/d3-collection/src/index.js"); +
6111/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/index.js"); +
6112 +
6113 +
6114 +
6115 +
6116function x(d) { +
6117 return d.x; +
6118} +
6119 +
6120function y(d) { +
6121 return d.y; +
6122} +
6123 +
6124var initialRadius = 10, +
6125 initialAngle = Math.PI * (3 - Math.sqrt(5)); +
6126 +
6127/* harmony default export */ __webpack_exports__["default"] = (function(nodes) { +
6128 var simulation, +
6129 alpha = 1, +
6130 alphaMin = 0.001, +
6131 alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), +
6132 alphaTarget = 0, +
6133 velocityDecay = 0.6, +
6134 forces = Object(d3_collection__WEBPACK_IMPORTED_MODULE_1__["map"])(), +
6135 stepper = Object(d3_timer__WEBPACK_IMPORTED_MODULE_2__["timer"])(step), +
6136 event = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])("tick", "end"); +
6137 +
6138 if (nodes == null) nodes = []; +
6139 +
6140 function step() { +
6141 tick(); +
6142 event.call("tick", simulation); +
6143 if (alpha < alphaMin) { +
6144 stepper.stop(); +
6145 event.call("end", simulation); +
6146 } +
6147 } +
6148 +
6149 function tick() { +
6150 var i, n = nodes.length, node; +
6151 +
6152 alpha += (alphaTarget - alpha) * alphaDecay; +
6153 +
6154 forces.each(function(force) { +
6155 force(alpha); +
6156 }); +
6157 +
6158 for (i = 0; i < n; ++i) { +
6159 node = nodes[i]; +
6160 if (node.fx == null) node.x += node.vx *= velocityDecay; +
6161 else node.x = node.fx, node.vx = 0; +
6162 if (node.fy == null) node.y += node.vy *= velocityDecay; +
6163 else node.y = node.fy, node.vy = 0; +
6164 } +
6165 } +
6166 +
6167 function initializeNodes() { +
6168 for (var i = 0, n = nodes.length, node; i < n; ++i) { +
6169 node = nodes[i], node.index = i; +
6170 if (isNaN(node.x) || isNaN(node.y)) { +
6171 var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; +
6172 node.x = radius * Math.cos(angle); +
6173 node.y = radius * Math.sin(angle); +
6174 } +
6175 if (isNaN(node.vx) || isNaN(node.vy)) { +
6176 node.vx = node.vy = 0; +
6177 } +
6178 } +
6179 } +
6180 +
6181 function initializeForce(force) { +
6182 if (force.initialize) force.initialize(nodes); +
6183 return force; +
6184 } +
6185 +
6186 initializeNodes(); +
6187 +
6188 return simulation = { +
6189 tick: tick, +
6190 +
6191 restart: function() { +
6192 return stepper.restart(step), simulation; +
6193 }, +
6194 +
6195 stop: function() { +
6196 return stepper.stop(), simulation; +
6197 }, +
6198 +
6199 nodes: function(_) { +
6200 return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes; +
6201 }, +
6202 +
6203 alpha: function(_) { +
6204 return arguments.length ? (alpha = +_, simulation) : alpha; +
6205 }, +
6206 +
6207 alphaMin: function(_) { +
6208 return arguments.length ? (alphaMin = +_, simulation) : alphaMin; +
6209 }, +
6210 +
6211 alphaDecay: function(_) { +
6212 return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; +
6213 }, +
6214 +
6215 alphaTarget: function(_) { +
6216 return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; +
6217 }, +
6218 +
6219 velocityDecay: function(_) { +
6220 return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; +
6221 }, +
6222 +
6223 force: function(name, _) { +
6224 return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); +
6225 }, +
6226 +
6227 find: function(x, y, radius) { +
6228 var i = 0, +
6229 n = nodes.length, +
6230 dx, +
6231 dy, +
6232 d2, +
6233 node, +
6234 closest; +
6235 +
6236 if (radius == null) radius = Infinity; +
6237 else radius *= radius; +
6238 +
6239 for (i = 0; i < n; ++i) { +
6240 node = nodes[i]; +
6241 dx = x - node.x; +
6242 dy = y - node.y; +
6243 d2 = dx * dx + dy * dy; +
6244 if (d2 < radius) closest = node, radius = d2; +
6245 } +
6246 +
6247 return closest; +
6248 }, +
6249 +
6250 on: function(name, _) { +
6251 return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); +
6252 } +
6253 }; +
6254}); +
6255 +
6256 +
6257/***/ }), +
6258 +
6259/***/ "./node_modules/d3-force/src/x.js": +
6260/*!****************************************!*\ +
6261 !*** ./node_modules/d3-force/src/x.js ***! +
6262 \****************************************/ +
6263/*! exports provided: default */ +
6264/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6265 +
6266"use strict"; +
6267__webpack_require__.r(__webpack_exports__); +
6268/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); +
6269 +
6270 +
6271/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
6272 var strength = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1), +
6273 nodes, +
6274 strengths, +
6275 xz; +
6276 +
6277 if (typeof x !== "function") x = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(x == null ? 0 : +x); +
6278 +
6279 function force(alpha) { +
6280 for (var i = 0, n = nodes.length, node; i < n; ++i) { +
6281 node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; +
6282 } +
6283 } +
6284 +
6285 function initialize() { +
6286 if (!nodes) return; +
6287 var i, n = nodes.length; +
6288 strengths = new Array(n); +
6289 xz = new Array(n); +
6290 for (i = 0; i < n; ++i) { +
6291 strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); +
6292 } +
6293 } +
6294 +
6295 force.initialize = function(_) { +
6296 nodes = _; +
6297 initialize(); +
6298 }; +
6299 +
6300 force.strength = function(_) { +
6301 return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; +
6302 }; +
6303 +
6304 force.x = function(_) { +
6305 return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : x; +
6306 }; +
6307 +
6308 return force; +
6309}); +
6310 +
6311 +
6312/***/ }), +
6313 +
6314/***/ "./node_modules/d3-force/src/y.js": +
6315/*!****************************************!*\ +
6316 !*** ./node_modules/d3-force/src/y.js ***! +
6317 \****************************************/ +
6318/*! exports provided: default */ +
6319/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6320 +
6321"use strict"; +
6322__webpack_require__.r(__webpack_exports__); +
6323/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-force/src/constant.js"); +
6324 +
6325 +
6326/* harmony default export */ __webpack_exports__["default"] = (function(y) { +
6327 var strength = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1), +
6328 nodes, +
6329 strengths, +
6330 yz; +
6331 +
6332 if (typeof y !== "function") y = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(y == null ? 0 : +y); +
6333 +
6334 function force(alpha) { +
6335 for (var i = 0, n = nodes.length, node; i < n; ++i) { +
6336 node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; +
6337 } +
6338 } +
6339 +
6340 function initialize() { +
6341 if (!nodes) return; +
6342 var i, n = nodes.length; +
6343 strengths = new Array(n); +
6344 yz = new Array(n); +
6345 for (i = 0; i < n; ++i) { +
6346 strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); +
6347 } +
6348 } +
6349 +
6350 force.initialize = function(_) { +
6351 nodes = _; +
6352 initialize(); +
6353 }; +
6354 +
6355 force.strength = function(_) { +
6356 return arguments.length ? (strength = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength; +
6357 }; +
6358 +
6359 force.y = function(_) { +
6360 return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : y; +
6361 }; +
6362 +
6363 return force; +
6364}); +
6365 +
6366 +
6367/***/ }), +
6368 +
6369/***/ "./node_modules/d3-format/src/defaultLocale.js": +
6370/*!*****************************************************!*\ +
6371 !*** ./node_modules/d3-format/src/defaultLocale.js ***! +
6372 \*****************************************************/ +
6373/*! exports provided: format, formatPrefix, default */ +
6374/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6375 +
6376"use strict"; +
6377__webpack_require__.r(__webpack_exports__); +
6378/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "format", function() { return format; }); +
6379/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatPrefix", function() { return formatPrefix; }); +
6380/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return defaultLocale; }); +
6381/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale */ "./node_modules/d3-format/src/locale.js"); +
6382 +
6383 +
6384var locale; +
6385var format; +
6386var formatPrefix; +
6387 +
6388defaultLocale({ +
6389 decimal: ".", +
6390 thousands: ",", +
6391 grouping: [3], +
6392 currency: ["$", ""] +
6393}); +
6394 +
6395function defaultLocale(definition) { +
6396 locale = Object(_locale__WEBPACK_IMPORTED_MODULE_0__["default"])(definition); +
6397 format = locale.format; +
6398 formatPrefix = locale.formatPrefix; +
6399 return locale; +
6400} +
6401 +
6402 +
6403/***/ }), +
6404 +
6405/***/ "./node_modules/d3-format/src/exponent.js": +
6406/*!************************************************!*\ +
6407 !*** ./node_modules/d3-format/src/exponent.js ***! +
6408 \************************************************/ +
6409/*! exports provided: default */ +
6410/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6411 +
6412"use strict"; +
6413__webpack_require__.r(__webpack_exports__); +
6414/* harmony import */ var _formatDecimal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal */ "./node_modules/d3-format/src/formatDecimal.js"); +
6415 +
6416 +
6417/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
6418 return x = Object(_formatDecimal__WEBPACK_IMPORTED_MODULE_0__["default"])(Math.abs(x)), x ? x[1] : NaN; +
6419}); +
6420 +
6421 +
6422/***/ }), +
6423 +
6424/***/ "./node_modules/d3-format/src/formatDecimal.js": +
6425/*!*****************************************************!*\ +
6426 !*** ./node_modules/d3-format/src/formatDecimal.js ***! +
6427 \*****************************************************/ +
6428/*! exports provided: default */ +
6429/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6430 +
6431"use strict"; +
6432__webpack_require__.r(__webpack_exports__); +
6433// Computes the decimal coefficient and exponent of the specified number x with +
6434// significant digits p, where x is positive and p is in [1, 21] or undefined. +
6435// For example, formatDecimal(1.23) returns ["123", 0]. +
6436/* harmony default export */ __webpack_exports__["default"] = (function(x, p) { +
6437 if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity +
6438 var i, coefficient = x.slice(0, i); +
6439 +
6440 // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ +
6441 // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). +
6442 return [ +
6443 coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +
6444 +x.slice(i + 1) +
6445 ]; +
6446}); +
6447 +
6448 +
6449/***/ }), +
6450 +
6451/***/ "./node_modules/d3-format/src/formatGroup.js": +
6452/*!***************************************************!*\ +
6453 !*** ./node_modules/d3-format/src/formatGroup.js ***! +
6454 \***************************************************/ +
6455/*! exports provided: default */ +
6456/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6457 +
6458"use strict"; +
6459__webpack_require__.r(__webpack_exports__); +
6460/* harmony default export */ __webpack_exports__["default"] = (function(grouping, thousands) { +
6461 return function(value, width) { +
6462 var i = value.length, +
6463 t = [], +
6464 j = 0, +
6465 g = grouping[0], +
6466 length = 0; +
6467 +
6468 while (i > 0 && g > 0) { +
6469 if (length + g + 1 > width) g = Math.max(1, width - length); +
6470 t.push(value.substring(i -= g, i + g)); +
6471 if ((length += g + 1) > width) break; +
6472 g = grouping[j = (j + 1) % grouping.length]; +
6473 } +
6474 +
6475 return t.reverse().join(thousands); +
6476 }; +
6477}); +
6478 +
6479 +
6480/***/ }), +
6481 +
6482/***/ "./node_modules/d3-format/src/formatNumerals.js": +
6483/*!******************************************************!*\ +
6484 !*** ./node_modules/d3-format/src/formatNumerals.js ***! +
6485 \******************************************************/ +
6486/*! exports provided: default */ +
6487/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6488 +
6489"use strict"; +
6490__webpack_require__.r(__webpack_exports__); +
6491/* harmony default export */ __webpack_exports__["default"] = (function(numerals) { +
6492 return function(value) { +
6493 return value.replace(/[0-9]/g, function(i) { +
6494 return numerals[+i]; +
6495 }); +
6496 }; +
6497}); +
6498 +
6499 +
6500/***/ }), +
6501 +
6502/***/ "./node_modules/d3-format/src/formatPrefixAuto.js": +
6503/*!********************************************************!*\ +
6504 !*** ./node_modules/d3-format/src/formatPrefixAuto.js ***! +
6505 \********************************************************/ +
6506/*! exports provided: prefixExponent, default */ +
6507/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6508 +
6509"use strict"; +
6510__webpack_require__.r(__webpack_exports__); +
6511/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prefixExponent", function() { return prefixExponent; }); +
6512/* harmony import */ var _formatDecimal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal */ "./node_modules/d3-format/src/formatDecimal.js"); +
6513 +
6514 +
6515var prefixExponent; +
6516 +
6517/* harmony default export */ __webpack_exports__["default"] = (function(x, p) { +
6518 var d = Object(_formatDecimal__WEBPACK_IMPORTED_MODULE_0__["default"])(x, p); +
6519 if (!d) return x + ""; +
6520 var coefficient = d[0], +
6521 exponent = d[1], +
6522 i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, +
6523 n = coefficient.length; +
6524 return i === n ? coefficient +
6525 : i > n ? coefficient + new Array(i - n + 1).join("0") +
6526 : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) +
6527 : "0." + new Array(1 - i).join("0") + Object(_formatDecimal__WEBPACK_IMPORTED_MODULE_0__["default"])(x, Math.max(0, p + i - 1))[0]; // less than 1y! +
6528}); +
6529 +
6530 +
6531/***/ }), +
6532 +
6533/***/ "./node_modules/d3-format/src/formatRounded.js": +
6534/*!*****************************************************!*\ +
6535 !*** ./node_modules/d3-format/src/formatRounded.js ***! +
6536 \*****************************************************/ +
6537/*! exports provided: default */ +
6538/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6539 +
6540"use strict"; +
6541__webpack_require__.r(__webpack_exports__); +
6542/* harmony import */ var _formatDecimal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatDecimal */ "./node_modules/d3-format/src/formatDecimal.js"); +
6543 +
6544 +
6545/* harmony default export */ __webpack_exports__["default"] = (function(x, p) { +
6546 var d = Object(_formatDecimal__WEBPACK_IMPORTED_MODULE_0__["default"])(x, p); +
6547 if (!d) return x + ""; +
6548 var coefficient = d[0], +
6549 exponent = d[1]; +
6550 return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient +
6551 : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) +
6552 : coefficient + new Array(exponent - coefficient.length + 2).join("0"); +
6553}); +
6554 +
6555 +
6556/***/ }), +
6557 +
6558/***/ "./node_modules/d3-format/src/formatSpecifier.js": +
6559/*!*******************************************************!*\ +
6560 !*** ./node_modules/d3-format/src/formatSpecifier.js ***! +
6561 \*******************************************************/ +
6562/*! exports provided: default */ +
6563/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6564 +
6565"use strict"; +
6566__webpack_require__.r(__webpack_exports__); +
6567/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return formatSpecifier; }); +
6568// [[fill]align][sign][symbol][0][width][,][.precision][~][type] +
6569var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; +
6570 +
6571function formatSpecifier(specifier) { +
6572 return new FormatSpecifier(specifier); +
6573} +
6574 +
6575formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof +
6576 +
6577function FormatSpecifier(specifier) { +
6578 if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); +
6579 var match; +
6580 this.fill = match[1] || " "; +
6581 this.align = match[2] || ">"; +
6582 this.sign = match[3] || "-"; +
6583 this.symbol = match[4] || ""; +
6584 this.zero = !!match[5]; +
6585 this.width = match[6] && +match[6]; +
6586 this.comma = !!match[7]; +
6587 this.precision = match[8] && +match[8].slice(1); +
6588 this.trim = !!match[9]; +
6589 this.type = match[10] || ""; +
6590} +
6591 +
6592FormatSpecifier.prototype.toString = function() { +
6593 return this.fill +
6594 + this.align +
6595 + this.sign +
6596 + this.symbol +
6597 + (this.zero ? "0" : "") +
6598 + (this.width == null ? "" : Math.max(1, this.width | 0)) +
6599 + (this.comma ? "," : "") +
6600 + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) +
6601 + (this.trim ? "~" : "") +
6602 + this.type; +
6603}; +
6604 +
6605 +
6606/***/ }), +
6607 +
6608/***/ "./node_modules/d3-format/src/formatTrim.js": +
6609/*!**************************************************!*\ +
6610 !*** ./node_modules/d3-format/src/formatTrim.js ***! +
6611 \**************************************************/ +
6612/*! exports provided: default */ +
6613/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6614 +
6615"use strict"; +
6616__webpack_require__.r(__webpack_exports__); +
6617// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. +
6618/* harmony default export */ __webpack_exports__["default"] = (function(s) { +
6619 out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { +
6620 switch (s[i]) { +
6621 case ".": i0 = i1 = i; break; +
6622 case "0": if (i0 === 0) i0 = i; i1 = i; break; +
6623 default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break; +
6624 } +
6625 } +
6626 return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; +
6627}); +
6628 +
6629 +
6630/***/ }), +
6631 +
6632/***/ "./node_modules/d3-format/src/formatTypes.js": +
6633/*!***************************************************!*\ +
6634 !*** ./node_modules/d3-format/src/formatTypes.js ***! +
6635 \***************************************************/ +
6636/*! exports provided: default */ +
6637/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6638 +
6639"use strict"; +
6640__webpack_require__.r(__webpack_exports__); +
6641/* harmony import */ var _formatPrefixAuto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatPrefixAuto */ "./node_modules/d3-format/src/formatPrefixAuto.js"); +
6642/* harmony import */ var _formatRounded__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatRounded */ "./node_modules/d3-format/src/formatRounded.js"); +
6643 +
6644 +
6645 +
6646/* harmony default export */ __webpack_exports__["default"] = ({ +
6647 "%": function(x, p) { return (x * 100).toFixed(p); }, +
6648 "b": function(x) { return Math.round(x).toString(2); }, +
6649 "c": function(x) { return x + ""; }, +
6650 "d": function(x) { return Math.round(x).toString(10); }, +
6651 "e": function(x, p) { return x.toExponential(p); }, +
6652 "f": function(x, p) { return x.toFixed(p); }, +
6653 "g": function(x, p) { return x.toPrecision(p); }, +
6654 "o": function(x) { return Math.round(x).toString(8); }, +
6655 "p": function(x, p) { return Object(_formatRounded__WEBPACK_IMPORTED_MODULE_1__["default"])(x * 100, p); }, +
6656 "r": _formatRounded__WEBPACK_IMPORTED_MODULE_1__["default"], +
6657 "s": _formatPrefixAuto__WEBPACK_IMPORTED_MODULE_0__["default"], +
6658 "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, +
6659 "x": function(x) { return Math.round(x).toString(16); } +
6660}); +
6661 +
6662 +
6663/***/ }), +
6664 +
6665/***/ "./node_modules/d3-format/src/identity.js": +
6666/*!************************************************!*\ +
6667 !*** ./node_modules/d3-format/src/identity.js ***! +
6668 \************************************************/ +
6669/*! exports provided: default */ +
6670/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6671 +
6672"use strict"; +
6673__webpack_require__.r(__webpack_exports__); +
6674/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
6675 return x; +
6676}); +
6677 +
6678 +
6679/***/ }), +
6680 +
6681/***/ "./node_modules/d3-format/src/index.js": +
6682/*!*********************************************!*\ +
6683 !*** ./node_modules/d3-format/src/index.js ***! +
6684 \*********************************************/ +
6685/*! exports provided: formatDefaultLocale, format, formatPrefix, formatLocale, formatSpecifier, precisionFixed, precisionPrefix, precisionRound */ +
6686/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6687 +
6688"use strict"; +
6689__webpack_require__.r(__webpack_exports__); +
6690/* harmony import */ var _defaultLocale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale */ "./node_modules/d3-format/src/defaultLocale.js"); +
6691/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatDefaultLocale", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
6692 +
6693/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "format", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["format"]; }); +
6694 +
6695/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatPrefix", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["formatPrefix"]; }); +
6696 +
6697/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale */ "./node_modules/d3-format/src/locale.js"); +
6698/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatLocale", function() { return _locale__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
6699 +
6700/* harmony import */ var _formatSpecifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatSpecifier */ "./node_modules/d3-format/src/formatSpecifier.js"); +
6701/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatSpecifier", function() { return _formatSpecifier__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
6702 +
6703/* harmony import */ var _precisionFixed__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./precisionFixed */ "./node_modules/d3-format/src/precisionFixed.js"); +
6704/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionFixed", function() { return _precisionFixed__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
6705 +
6706/* harmony import */ var _precisionPrefix__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./precisionPrefix */ "./node_modules/d3-format/src/precisionPrefix.js"); +
6707/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionPrefix", function() { return _precisionPrefix__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
6708 +
6709/* harmony import */ var _precisionRound__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./precisionRound */ "./node_modules/d3-format/src/precisionRound.js"); +
6710/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionRound", function() { return _precisionRound__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
6711 +
6712 +
6713 +
6714 +
6715 +
6716 +
6717 +
6718 +
6719 +
6720/***/ }), +
6721 +
6722/***/ "./node_modules/d3-format/src/locale.js": +
6723/*!**********************************************!*\ +
6724 !*** ./node_modules/d3-format/src/locale.js ***! +
6725 \**********************************************/ +
6726/*! exports provided: default */ +
6727/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6728 +
6729"use strict"; +
6730__webpack_require__.r(__webpack_exports__); +
6731/* harmony import */ var _exponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent */ "./node_modules/d3-format/src/exponent.js"); +
6732/* harmony import */ var _formatGroup__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatGroup */ "./node_modules/d3-format/src/formatGroup.js"); +
6733/* harmony import */ var _formatNumerals__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatNumerals */ "./node_modules/d3-format/src/formatNumerals.js"); +
6734/* harmony import */ var _formatSpecifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./formatSpecifier */ "./node_modules/d3-format/src/formatSpecifier.js"); +
6735/* harmony import */ var _formatTrim__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./formatTrim */ "./node_modules/d3-format/src/formatTrim.js"); +
6736/* harmony import */ var _formatTypes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatTypes */ "./node_modules/d3-format/src/formatTypes.js"); +
6737/* harmony import */ var _formatPrefixAuto__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./formatPrefixAuto */ "./node_modules/d3-format/src/formatPrefixAuto.js"); +
6738/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./identity */ "./node_modules/d3-format/src/identity.js"); +
6739 +
6740 +
6741 +
6742 +
6743 +
6744 +
6745 +
6746 +
6747 +
6748var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; +
6749 +
6750/* harmony default export */ __webpack_exports__["default"] = (function(locale) { +
6751 var group = locale.grouping && locale.thousands ? Object(_formatGroup__WEBPACK_IMPORTED_MODULE_1__["default"])(locale.grouping, locale.thousands) : _identity__WEBPACK_IMPORTED_MODULE_7__["default"], +
6752 currency = locale.currency, +
6753 decimal = locale.decimal, +
6754 numerals = locale.numerals ? Object(_formatNumerals__WEBPACK_IMPORTED_MODULE_2__["default"])(locale.numerals) : _identity__WEBPACK_IMPORTED_MODULE_7__["default"], +
6755 percent = locale.percent || "%"; +
6756 +
6757 function newFormat(specifier) { +
6758 specifier = Object(_formatSpecifier__WEBPACK_IMPORTED_MODULE_3__["default"])(specifier); +
6759 +
6760 var fill = specifier.fill, +
6761 align = specifier.align, +
6762 sign = specifier.sign, +
6763 symbol = specifier.symbol, +
6764 zero = specifier.zero, +
6765 width = specifier.width, +
6766 comma = specifier.comma, +
6767 precision = specifier.precision, +
6768 trim = specifier.trim, +
6769 type = specifier.type; +
6770 +
6771 // The "n" type is an alias for ",g". +
6772 if (type === "n") comma = true, type = "g"; +
6773 +
6774 // The "" type, and any invalid type, is an alias for ".12~g". +
6775 else if (!_formatTypes__WEBPACK_IMPORTED_MODULE_5__["default"][type]) precision == null && (precision = 12), trim = true, type = "g"; +
6776 +
6777 // If zero fill is specified, padding goes after sign and before digits. +
6778 if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; +
6779 +
6780 // Compute the prefix and suffix. +
6781 // For SI-prefix, the suffix is lazily computed. +
6782 var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", +
6783 suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : ""; +
6784 +
6785 // What format function should we use? +
6786 // Is this an integer type? +
6787 // Can this type generate exponential notation? +
6788 var formatType = _formatTypes__WEBPACK_IMPORTED_MODULE_5__["default"][type], +
6789 maybeSuffix = /[defgprs%]/.test(type); +
6790 +
6791 // Set the default precision if not specified, +
6792 // or clamp the specified precision to the supported range. +
6793 // For significant precision, it must be in [1, 21]. +
6794 // For fixed precision, it must be in [0, 20]. +
6795 precision = precision == null ? 6 +
6796 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) +
6797 : Math.max(0, Math.min(20, precision)); +
6798 +
6799 function format(value) { +
6800 var valuePrefix = prefix, +
6801 valueSuffix = suffix, +
6802 i, n, c; +
6803 +
6804 if (type === "c") { +
6805 valueSuffix = formatType(value) + valueSuffix; +
6806 value = ""; +
6807 } else { +
6808 value = +value; +
6809 +
6810 // Perform the initial formatting. +
6811 var valueNegative = value < 0; +
6812 value = formatType(Math.abs(value), precision); +
6813 +
6814 // Trim insignificant zeros. +
6815 if (trim) value = Object(_formatTrim__WEBPACK_IMPORTED_MODULE_4__["default"])(value); +
6816 +
6817 // If a negative value rounds to zero during formatting, treat as positive. +
6818 if (valueNegative && +value === 0) valueNegative = false; +
6819 +
6820 // Compute the prefix and suffix. +
6821 valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; +
6822 valueSuffix = (type === "s" ? prefixes[8 + _formatPrefixAuto__WEBPACK_IMPORTED_MODULE_6__["prefixExponent"] / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); +
6823 +
6824 // Break the formatted value into the integer “value” part that can be +
6825 // grouped, and fractional or exponential “suffix” part that is not. +
6826 if (maybeSuffix) { +
6827 i = -1, n = value.length; +
6828 while (++i < n) { +
6829 if (c = value.charCodeAt(i), 48 > c || c > 57) { +
6830 valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; +
6831 value = value.slice(0, i); +
6832 break; +
6833 } +
6834 } +
6835 } +
6836 } +
6837 +
6838 // If the fill character is not "0", grouping is applied before padding. +
6839 if (comma && !zero) value = group(value, Infinity); +
6840 +
6841 // Compute the padding. +
6842 var length = valuePrefix.length + value.length + valueSuffix.length, +
6843 padding = length < width ? new Array(width - length + 1).join(fill) : ""; +
6844 +
6845 // If the fill character is "0", grouping is applied after padding. +
6846 if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; +
6847 +
6848 // Reconstruct the final output based on the desired alignment. +
6849 switch (align) { +
6850 case "<": value = valuePrefix + value + valueSuffix + padding; break; +
6851 case "=": value = valuePrefix + padding + value + valueSuffix; break; +
6852 case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; +
6853 default: value = padding + valuePrefix + value + valueSuffix; break; +
6854 } +
6855 +
6856 return numerals(value); +
6857 } +
6858 +
6859 format.toString = function() { +
6860 return specifier + ""; +
6861 }; +
6862 +
6863 return format; +
6864 } +
6865 +
6866 function formatPrefix(specifier, value) { +
6867 var f = newFormat((specifier = Object(_formatSpecifier__WEBPACK_IMPORTED_MODULE_3__["default"])(specifier), specifier.type = "f", specifier)), +
6868 e = Math.max(-8, Math.min(8, Math.floor(Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(value) / 3))) * 3, +
6869 k = Math.pow(10, -e), +
6870 prefix = prefixes[8 + e / 3]; +
6871 return function(value) { +
6872 return f(k * value) + prefix; +
6873 }; +
6874 } +
6875 +
6876 return { +
6877 format: newFormat, +
6878 formatPrefix: formatPrefix +
6879 }; +
6880}); +
6881 +
6882 +
6883/***/ }), +
6884 +
6885/***/ "./node_modules/d3-format/src/precisionFixed.js": +
6886/*!******************************************************!*\ +
6887 !*** ./node_modules/d3-format/src/precisionFixed.js ***! +
6888 \******************************************************/ +
6889/*! exports provided: default */ +
6890/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6891 +
6892"use strict"; +
6893__webpack_require__.r(__webpack_exports__); +
6894/* harmony import */ var _exponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent */ "./node_modules/d3-format/src/exponent.js"); +
6895 +
6896 +
6897/* harmony default export */ __webpack_exports__["default"] = (function(step) { +
6898 return Math.max(0, -Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(Math.abs(step))); +
6899}); +
6900 +
6901 +
6902/***/ }), +
6903 +
6904/***/ "./node_modules/d3-format/src/precisionPrefix.js": +
6905/*!*******************************************************!*\ +
6906 !*** ./node_modules/d3-format/src/precisionPrefix.js ***! +
6907 \*******************************************************/ +
6908/*! exports provided: default */ +
6909/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6910 +
6911"use strict"; +
6912__webpack_require__.r(__webpack_exports__); +
6913/* harmony import */ var _exponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent */ "./node_modules/d3-format/src/exponent.js"); +
6914 +
6915 +
6916/* harmony default export */ __webpack_exports__["default"] = (function(step, value) { +
6917 return Math.max(0, Math.max(-8, Math.min(8, Math.floor(Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(value) / 3))) * 3 - Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(Math.abs(step))); +
6918}); +
6919 +
6920 +
6921/***/ }), +
6922 +
6923/***/ "./node_modules/d3-format/src/precisionRound.js": +
6924/*!******************************************************!*\ +
6925 !*** ./node_modules/d3-format/src/precisionRound.js ***! +
6926 \******************************************************/ +
6927/*! exports provided: default */ +
6928/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6929 +
6930"use strict"; +
6931__webpack_require__.r(__webpack_exports__); +
6932/* harmony import */ var _exponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exponent */ "./node_modules/d3-format/src/exponent.js"); +
6933 +
6934 +
6935/* harmony default export */ __webpack_exports__["default"] = (function(step, max) { +
6936 step = Math.abs(step), max = Math.abs(max) - step; +
6937 return Math.max(0, Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(max) - Object(_exponent__WEBPACK_IMPORTED_MODULE_0__["default"])(step)) + 1; +
6938}); +
6939 +
6940 +
6941/***/ }), +
6942 +
6943/***/ "./node_modules/d3-geo/src/adder.js": +
6944/*!******************************************!*\ +
6945 !*** ./node_modules/d3-geo/src/adder.js ***! +
6946 \******************************************/ +
6947/*! exports provided: default */ +
6948/***/ (function(module, __webpack_exports__, __webpack_require__) { +
6949 +
6950"use strict"; +
6951__webpack_require__.r(__webpack_exports__); +
6952// Adds floating point numbers with twice the normal precision. +
6953// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and +
6954// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) +
6955// 305–363 (1997). +
6956// Code adapted from GeographicLib by Charles F. F. Karney, +
6957// http://geographiclib.sourceforge.net/ +
6958 +
6959/* harmony default export */ __webpack_exports__["default"] = (function() { +
6960 return new Adder; +
6961}); +
6962 +
6963function Adder() { +
6964 this.reset(); +
6965} +
6966 +
6967Adder.prototype = { +
6968 constructor: Adder, +
6969 reset: function() { +
6970 this.s = // rounded value +
6971 this.t = 0; // exact error +
6972 }, +
6973 add: function(y) { +
6974 add(temp, y, this.t); +
6975 add(this, temp.s, this.s); +
6976 if (this.s) this.t += temp.t; +
6977 else this.s = temp.t; +
6978 }, +
6979 valueOf: function() { +
6980 return this.s; +
6981 } +
6982}; +
6983 +
6984var temp = new Adder; +
6985 +
6986function add(adder, a, b) { +
6987 var x = adder.s = a + b, +
6988 bv = x - a, +
6989 av = x - bv; +
6990 adder.t = (a - av) + (b - bv); +
6991} +
6992 +
6993 +
6994/***/ }), +
6995 +
6996/***/ "./node_modules/d3-geo/src/area.js": +
6997/*!*****************************************!*\ +
6998 !*** ./node_modules/d3-geo/src/area.js ***! +
6999 \*****************************************/ +
7000/*! exports provided: areaRingSum, areaStream, default */ +
7001/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7002 +
7003"use strict"; +
7004__webpack_require__.r(__webpack_exports__); +
7005/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "areaRingSum", function() { return areaRingSum; }); +
7006/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "areaStream", function() { return areaStream; }); +
7007/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder */ "./node_modules/d3-geo/src/adder.js"); +
7008/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
7009/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./noop */ "./node_modules/d3-geo/src/noop.js"); +
7010/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stream */ "./node_modules/d3-geo/src/stream.js"); +
7011 +
7012 +
7013 +
7014 +
7015 +
7016var areaRingSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(); +
7017 +
7018var areaSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), +
7019 lambda00, +
7020 phi00, +
7021 lambda0, +
7022 cosPhi0, +
7023 sinPhi0; +
7024 +
7025var areaStream = { +
7026 point: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
7027 lineStart: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
7028 lineEnd: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
7029 polygonStart: function() { +
7030 areaRingSum.reset(); +
7031 areaStream.lineStart = areaRingStart; +
7032 areaStream.lineEnd = areaRingEnd; +
7033 }, +
7034 polygonEnd: function() { +
7035 var areaRing = +areaRingSum; +
7036 areaSum.add(areaRing < 0 ? _math__WEBPACK_IMPORTED_MODULE_1__["tau"] + areaRing : areaRing); +
7037 this.lineStart = this.lineEnd = this.point = _noop__WEBPACK_IMPORTED_MODULE_2__["default"]; +
7038 }, +
7039 sphere: function() { +
7040 areaSum.add(_math__WEBPACK_IMPORTED_MODULE_1__["tau"]); +
7041 } +
7042}; +
7043 +
7044function areaRingStart() { +
7045 areaStream.point = areaPointFirst; +
7046} +
7047 +
7048function areaRingEnd() { +
7049 areaPoint(lambda00, phi00); +
7050} +
7051 +
7052function areaPointFirst(lambda, phi) { +
7053 areaStream.point = areaPoint; +
7054 lambda00 = lambda, phi00 = phi; +
7055 lambda *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"]; +
7056 lambda0 = lambda, cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi = phi / 2 + _math__WEBPACK_IMPORTED_MODULE_1__["quarterPi"]), sinPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi); +
7057} +
7058 +
7059function areaPoint(lambda, phi) { +
7060 lambda *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"]; +
7061 phi = phi / 2 + _math__WEBPACK_IMPORTED_MODULE_1__["quarterPi"]; // half the angular distance from south pole +
7062 +
7063 // Spherical excess E for a spherical triangle with vertices: south pole, +
7064 // previous point, current point. Uses a formula derived from Cagnoli’s +
7065 // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). +
7066 var dLambda = lambda - lambda0, +
7067 sdLambda = dLambda >= 0 ? 1 : -1, +
7068 adLambda = sdLambda * dLambda, +
7069 cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi), +
7070 sinPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), +
7071 k = sinPhi0 * sinPhi, +
7072 u = cosPhi0 * cosPhi + k * Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(adLambda), +
7073 v = k * sdLambda * Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(adLambda); +
7074 areaRingSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(v, u)); +
7075 +
7076 // Advance the previous points. +
7077 lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; +
7078} +
7079 +
7080/* harmony default export */ __webpack_exports__["default"] = (function(object) { +
7081 areaSum.reset(); +
7082 Object(_stream__WEBPACK_IMPORTED_MODULE_3__["default"])(object, areaStream); +
7083 return areaSum * 2; +
7084}); +
7085 +
7086 +
7087/***/ }), +
7088 +
7089/***/ "./node_modules/d3-geo/src/bounds.js": +
7090/*!*******************************************!*\ +
7091 !*** ./node_modules/d3-geo/src/bounds.js ***! +
7092 \*******************************************/ +
7093/*! exports provided: default */ +
7094/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7095 +
7096"use strict"; +
7097__webpack_require__.r(__webpack_exports__); +
7098/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder */ "./node_modules/d3-geo/src/adder.js"); +
7099/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area */ "./node_modules/d3-geo/src/area.js"); +
7100/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cartesian */ "./node_modules/d3-geo/src/cartesian.js"); +
7101/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
7102/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stream */ "./node_modules/d3-geo/src/stream.js"); +
7103 +
7104 +
7105 +
7106 +
7107 +
7108 +
7109var lambda0, phi0, lambda1, phi1, // bounds +
7110 lambda2, // previous lambda-coordinate +
7111 lambda00, phi00, // first point +
7112 p0, // previous 3D point +
7113 deltaSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), +
7114 ranges, +
7115 range; +
7116 +
7117var boundsStream = { +
7118 point: boundsPoint, +
7119 lineStart: boundsLineStart, +
7120 lineEnd: boundsLineEnd, +
7121 polygonStart: function() { +
7122 boundsStream.point = boundsRingPoint; +
7123 boundsStream.lineStart = boundsRingStart; +
7124 boundsStream.lineEnd = boundsRingEnd; +
7125 deltaSum.reset(); +
7126 _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].polygonStart(); +
7127 }, +
7128 polygonEnd: function() { +
7129 _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].polygonEnd(); +
7130 boundsStream.point = boundsPoint; +
7131 boundsStream.lineStart = boundsLineStart; +
7132 boundsStream.lineEnd = boundsLineEnd; +
7133 if (_area__WEBPACK_IMPORTED_MODULE_1__["areaRingSum"] < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90); +
7134 else if (deltaSum > _math__WEBPACK_IMPORTED_MODULE_3__["epsilon"]) phi1 = 90; +
7135 else if (deltaSum < -_math__WEBPACK_IMPORTED_MODULE_3__["epsilon"]) phi0 = -90; +
7136 range[0] = lambda0, range[1] = lambda1; +
7137 } +
7138}; +
7139 +
7140function boundsPoint(lambda, phi) { +
7141 ranges.push(range = [lambda0 = lambda, lambda1 = lambda]); +
7142 if (phi < phi0) phi0 = phi; +
7143 if (phi > phi1) phi1 = phi; +
7144} +
7145 +
7146function linePoint(lambda, phi) { +
7147 var p = Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["cartesian"])([lambda * _math__WEBPACK_IMPORTED_MODULE_3__["radians"], phi * _math__WEBPACK_IMPORTED_MODULE_3__["radians"]]); +
7148 if (p0) { +
7149 var normal = Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["cartesianCross"])(p0, p), +
7150 equatorial = [normal[1], -normal[0], 0], +
7151 inflection = Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["cartesianCross"])(equatorial, normal); +
7152 Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["cartesianNormalizeInPlace"])(inflection); +
7153 inflection = Object(_cartesian__WEBPACK_IMPORTED_MODULE_2__["spherical"])(inflection); +
7154 var delta = lambda - lambda2, +
7155 sign = delta > 0 ? 1 : -1, +
7156 lambdai = inflection[0] * _math__WEBPACK_IMPORTED_MODULE_3__["degrees"] * sign, +
7157 phii, +
7158 antimeridian = Object(_math__WEBPACK_IMPORTED_MODULE_3__["abs"])(delta) > 180; +
7159 if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { +
7160 phii = inflection[1] * _math__WEBPACK_IMPORTED_MODULE_3__["degrees"]; +
7161 if (phii > phi1) phi1 = phii; +
7162 } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { +
7163 phii = -inflection[1] * _math__WEBPACK_IMPORTED_MODULE_3__["degrees"]; +
7164 if (phii < phi0) phi0 = phii; +
7165 } else { +
7166 if (phi < phi0) phi0 = phi; +
7167 if (phi > phi1) phi1 = phi; +
7168 } +
7169 if (antimeridian) { +
7170 if (lambda < lambda2) { +
7171 if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda; +
7172 } else { +
7173 if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda; +
7174 } +
7175 } else { +
7176 if (lambda1 >= lambda0) { +
7177 if (lambda < lambda0) lambda0 = lambda; +
7178 if (lambda > lambda1) lambda1 = lambda; +
7179 } else { +
7180 if (lambda > lambda2) { +
7181 if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda; +
7182 } else { +
7183 if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda; +
7184 } +
7185 } +
7186 } +
7187 } else { +
7188 ranges.push(range = [lambda0 = lambda, lambda1 = lambda]); +
7189 } +
7190 if (phi < phi0) phi0 = phi; +
7191 if (phi > phi1) phi1 = phi; +
7192 p0 = p, lambda2 = lambda; +
7193} +
7194 +
7195function boundsLineStart() { +
7196 boundsStream.point = linePoint; +
7197} +
7198 +
7199function boundsLineEnd() { +
7200 range[0] = lambda0, range[1] = lambda1; +
7201 boundsStream.point = boundsPoint; +
7202 p0 = null; +
7203} +
7204 +
7205function boundsRingPoint(lambda, phi) { +
7206 if (p0) { +
7207 var delta = lambda - lambda2; +
7208 deltaSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_3__["abs"])(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); +
7209 } else { +
7210 lambda00 = lambda, phi00 = phi; +
7211 } +
7212 _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].point(lambda, phi); +
7213 linePoint(lambda, phi); +
7214} +
7215 +
7216function boundsRingStart() { +
7217 _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].lineStart(); +
7218} +
7219 +
7220function boundsRingEnd() { +
7221 boundsRingPoint(lambda00, phi00); +
7222 _area__WEBPACK_IMPORTED_MODULE_1__["areaStream"].lineEnd(); +
7223 if (Object(_math__WEBPACK_IMPORTED_MODULE_3__["abs"])(deltaSum) > _math__WEBPACK_IMPORTED_MODULE_3__["epsilon"]) lambda0 = -(lambda1 = 180); +
7224 range[0] = lambda0, range[1] = lambda1; +
7225 p0 = null; +
7226} +
7227 +
7228// Finds the left-right distance between two longitudes. +
7229// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want +
7230// the distance between ±180° to be 360°. +
7231function angle(lambda0, lambda1) { +
7232 return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; +
7233} +
7234 +
7235function rangeCompare(a, b) { +
7236 return a[0] - b[0]; +
7237} +
7238 +
7239function rangeContains(range, x) { +
7240 return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; +
7241} +
7242 +
7243/* harmony default export */ __webpack_exports__["default"] = (function(feature) { +
7244 var i, n, a, b, merged, deltaMax, delta; +
7245 +
7246 phi1 = lambda1 = -(lambda0 = phi0 = Infinity); +
7247 ranges = []; +
7248 Object(_stream__WEBPACK_IMPORTED_MODULE_4__["default"])(feature, boundsStream); +
7249 +
7250 // First, sort ranges by their minimum longitudes. +
7251 if (n = ranges.length) { +
7252 ranges.sort(rangeCompare); +
7253 +
7254 // Then, merge any ranges that overlap. +
7255 for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { +
7256 b = ranges[i]; +
7257 if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { +
7258 if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; +
7259 if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; +
7260 } else { +
7261 merged.push(a = b); +
7262 } +
7263 } +
7264 +
7265 // Finally, find the largest gap between the merged ranges. +
7266 // The final bounding box will be the inverse of this gap. +
7267 for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { +
7268 b = merged[i]; +
7269 if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1]; +
7270 } +
7271 } +
7272 +
7273 ranges = range = null; +
7274 +
7275 return lambda0 === Infinity || phi0 === Infinity +
7276 ? [[NaN, NaN], [NaN, NaN]] +
7277 : [[lambda0, phi0], [lambda1, phi1]]; +
7278}); +
7279 +
7280 +
7281/***/ }), +
7282 +
7283/***/ "./node_modules/d3-geo/src/cartesian.js": +
7284/*!**********************************************!*\ +
7285 !*** ./node_modules/d3-geo/src/cartesian.js ***! +
7286 \**********************************************/ +
7287/*! exports provided: spherical, cartesian, cartesianDot, cartesianCross, cartesianAddInPlace, cartesianScale, cartesianNormalizeInPlace */ +
7288/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7289 +
7290"use strict"; +
7291__webpack_require__.r(__webpack_exports__); +
7292/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "spherical", function() { return spherical; }); +
7293/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesian", function() { return cartesian; }); +
7294/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianDot", function() { return cartesianDot; }); +
7295/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianCross", function() { return cartesianCross; }); +
7296/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianAddInPlace", function() { return cartesianAddInPlace; }); +
7297/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianScale", function() { return cartesianScale; }); +
7298/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cartesianNormalizeInPlace", function() { return cartesianNormalizeInPlace; }); +
7299/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
7300 +
7301 +
7302function spherical(cartesian) { +
7303 return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(cartesian[1], cartesian[0]), Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(cartesian[2])]; +
7304} +
7305 +
7306function cartesian(spherical) { +
7307 var lambda = spherical[0], phi = spherical[1], cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi); +
7308 return [cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda), cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda), Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi)]; +
7309} +
7310 +
7311function cartesianDot(a, b) { +
7312 return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +
7313} +
7314 +
7315function cartesianCross(a, b) { +
7316 return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; +
7317} +
7318 +
7319// TODO return a +
7320function cartesianAddInPlace(a, b) { +
7321 a[0] += b[0], a[1] += b[1], a[2] += b[2]; +
7322} +
7323 +
7324function cartesianScale(vector, k) { +
7325 return [vector[0] * k, vector[1] * k, vector[2] * k]; +
7326} +
7327 +
7328// TODO return d +
7329function cartesianNormalizeInPlace(d) { +
7330 var l = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); +
7331 d[0] /= l, d[1] /= l, d[2] /= l; +
7332} +
7333 +
7334 +
7335/***/ }), +
7336 +
7337/***/ "./node_modules/d3-geo/src/centroid.js": +
7338/*!*********************************************!*\ +
7339 !*** ./node_modules/d3-geo/src/centroid.js ***! +
7340 \*********************************************/ +
7341/*! exports provided: default */ +
7342/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7343 +
7344"use strict"; +
7345__webpack_require__.r(__webpack_exports__); +
7346/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
7347/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noop */ "./node_modules/d3-geo/src/noop.js"); +
7348/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stream */ "./node_modules/d3-geo/src/stream.js"); +
7349 +
7350 +
7351 +
7352 +
7353var W0, W1, +
7354 X0, Y0, Z0, +
7355 X1, Y1, Z1, +
7356 X2, Y2, Z2, +
7357 lambda00, phi00, // first point +
7358 x0, y0, z0; // previous point +
7359 +
7360var centroidStream = { +
7361 sphere: _noop__WEBPACK_IMPORTED_MODULE_1__["default"], +
7362 point: centroidPoint, +
7363 lineStart: centroidLineStart, +
7364 lineEnd: centroidLineEnd, +
7365 polygonStart: function() { +
7366 centroidStream.lineStart = centroidRingStart; +
7367 centroidStream.lineEnd = centroidRingEnd; +
7368 }, +
7369 polygonEnd: function() { +
7370 centroidStream.lineStart = centroidLineStart; +
7371 centroidStream.lineEnd = centroidLineEnd; +
7372 } +
7373}; +
7374 +
7375// Arithmetic mean of Cartesian vectors. +
7376function centroidPoint(lambda, phi) { +
7377 lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; +
7378 var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi); +
7379 centroidPointCartesian(cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda), cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda), Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi)); +
7380} +
7381 +
7382function centroidPointCartesian(x, y, z) { +
7383 ++W0; +
7384 X0 += (x - X0) / W0; +
7385 Y0 += (y - Y0) / W0; +
7386 Z0 += (z - Z0) / W0; +
7387} +
7388 +
7389function centroidLineStart() { +
7390 centroidStream.point = centroidLinePointFirst; +
7391} +
7392 +
7393function centroidLinePointFirst(lambda, phi) { +
7394 lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; +
7395 var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi); +
7396 x0 = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda); +
7397 y0 = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda); +
7398 z0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi); +
7399 centroidStream.point = centroidLinePoint; +
7400 centroidPointCartesian(x0, y0, z0); +
7401} +
7402 +
7403function centroidLinePoint(lambda, phi) { +
7404 lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; +
7405 var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi), +
7406 x = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda), +
7407 y = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda), +
7408 z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi), +
7409 w = Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); +
7410 W1 += w; +
7411 X1 += w * (x0 + (x0 = x)); +
7412 Y1 += w * (y0 + (y0 = y)); +
7413 Z1 += w * (z0 + (z0 = z)); +
7414 centroidPointCartesian(x0, y0, z0); +
7415} +
7416 +
7417function centroidLineEnd() { +
7418 centroidStream.point = centroidPoint; +
7419} +
7420 +
7421// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, +
7422// J. Applied Mechanics 42, 239 (1975). +
7423function centroidRingStart() { +
7424 centroidStream.point = centroidRingPointFirst; +
7425} +
7426 +
7427function centroidRingEnd() { +
7428 centroidRingPoint(lambda00, phi00); +
7429 centroidStream.point = centroidPoint; +
7430} +
7431 +
7432function centroidRingPointFirst(lambda, phi) { +
7433 lambda00 = lambda, phi00 = phi; +
7434 lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; +
7435 centroidStream.point = centroidRingPoint; +
7436 var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi); +
7437 x0 = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda); +
7438 y0 = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda); +
7439 z0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi); +
7440 centroidPointCartesian(x0, y0, z0); +
7441} +
7442 +
7443function centroidRingPoint(lambda, phi) { +
7444 lambda *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_0__["radians"]; +
7445 var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi), +
7446 x = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(lambda), +
7447 y = cosPhi * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(lambda), +
7448 z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi), +
7449 cx = y0 * z - z0 * y, +
7450 cy = z0 * x - x0 * z, +
7451 cz = x0 * y - y0 * x, +
7452 m = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(cx * cx + cy * cy + cz * cz), +
7453 w = Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(m), // line weight = angle +
7454 v = m && -w / m; // area weight multiplier +
7455 X2 += v * cx; +
7456 Y2 += v * cy; +
7457 Z2 += v * cz; +
7458 W1 += w; +
7459 X1 += w * (x0 + (x0 = x)); +
7460 Y1 += w * (y0 + (y0 = y)); +
7461 Z1 += w * (z0 + (z0 = z)); +
7462 centroidPointCartesian(x0, y0, z0); +
7463} +
7464 +
7465/* harmony default export */ __webpack_exports__["default"] = (function(object) { +
7466 W0 = W1 = +
7467 X0 = Y0 = Z0 = +
7468 X1 = Y1 = Z1 = +
7469 X2 = Y2 = Z2 = 0; +
7470 Object(_stream__WEBPACK_IMPORTED_MODULE_2__["default"])(object, centroidStream); +
7471 +
7472 var x = X2, +
7473 y = Y2, +
7474 z = Z2, +
7475 m = x * x + y * y + z * z; +
7476 +
7477 // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. +
7478 if (m < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon2"]) { +
7479 x = X1, y = Y1, z = Z1; +
7480 // If the feature has zero length, fall back to arithmetic mean of point vectors. +
7481 if (W1 < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) x = X0, y = Y0, z = Z0; +
7482 m = x * x + y * y + z * z; +
7483 // If the feature still has an undefined ccentroid, then return. +
7484 if (m < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon2"]) return [NaN, NaN]; +
7485 } +
7486 +
7487 return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(y, x) * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"], Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(z / Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(m)) * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"]]; +
7488}); +
7489 +
7490 +
7491/***/ }), +
7492 +
7493/***/ "./node_modules/d3-geo/src/circle.js": +
7494/*!*******************************************!*\ +
7495 !*** ./node_modules/d3-geo/src/circle.js ***! +
7496 \*******************************************/ +
7497/*! exports provided: circleStream, default */ +
7498/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7499 +
7500"use strict"; +
7501__webpack_require__.r(__webpack_exports__); +
7502/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circleStream", function() { return circleStream; }); +
7503/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cartesian */ "./node_modules/d3-geo/src/cartesian.js"); +
7504/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-geo/src/constant.js"); +
7505/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
7506/* harmony import */ var _rotation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rotation */ "./node_modules/d3-geo/src/rotation.js"); +
7507 +
7508 +
7509 +
7510 +
7511 +
7512// Generates a circle centered at [0°, 0°], with a given radius and precision. +
7513function circleStream(stream, radius, delta, direction, t0, t1) { +
7514 if (!delta) return; +
7515 var cosRadius = Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(radius), +
7516 sinRadius = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(radius), +
7517 step = direction * delta; +
7518 if (t0 == null) { +
7519 t0 = radius + direction * _math__WEBPACK_IMPORTED_MODULE_2__["tau"]; +
7520 t1 = radius - step / 2; +
7521 } else { +
7522 t0 = circleRadius(cosRadius, t0); +
7523 t1 = circleRadius(cosRadius, t1); +
7524 if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * _math__WEBPACK_IMPORTED_MODULE_2__["tau"]; +
7525 } +
7526 for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { +
7527 point = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["spherical"])([cosRadius, -sinRadius * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(t), -sinRadius * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(t)]); +
7528 stream.point(point[0], point[1]); +
7529 } +
7530} +
7531 +
7532// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. +
7533function circleRadius(cosRadius, point) { +
7534 point = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesian"])(point), point[0] -= cosRadius; +
7535 Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianNormalizeInPlace"])(point); +
7536 var radius = Object(_math__WEBPACK_IMPORTED_MODULE_2__["acos"])(-point[1]); +
7537 return ((-point[2] < 0 ? -radius : radius) + _math__WEBPACK_IMPORTED_MODULE_2__["tau"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) % _math__WEBPACK_IMPORTED_MODULE_2__["tau"]; +
7538} +
7539 +
7540/* harmony default export */ __webpack_exports__["default"] = (function() { +
7541 var center = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])([0, 0]), +
7542 radius = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(90), +
7543 precision = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(6), +
7544 ring, +
7545 rotate, +
7546 stream = {point: point}; +
7547 +
7548 function point(x, y) { +
7549 ring.push(x = rotate(x, y)); +
7550 x[0] *= _math__WEBPACK_IMPORTED_MODULE_2__["degrees"], x[1] *= _math__WEBPACK_IMPORTED_MODULE_2__["degrees"]; +
7551 } +
7552 +
7553 function circle() { +
7554 var c = center.apply(this, arguments), +
7555 r = radius.apply(this, arguments) * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], +
7556 p = precision.apply(this, arguments) * _math__WEBPACK_IMPORTED_MODULE_2__["radians"]; +
7557 ring = []; +
7558 rotate = Object(_rotation__WEBPACK_IMPORTED_MODULE_3__["rotateRadians"])(-c[0] * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], -c[1] * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], 0).invert; +
7559 circleStream(stream, r, p, 1); +
7560 c = {type: "Polygon", coordinates: [ring]}; +
7561 ring = rotate = null; +
7562 return c; +
7563 } +
7564 +
7565 circle.center = function(_) { +
7566 return arguments.length ? (center = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])([+_[0], +_[1]]), circle) : center; +
7567 }; +
7568 +
7569 circle.radius = function(_) { +
7570 return arguments.length ? (radius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), circle) : radius; +
7571 }; +
7572 +
7573 circle.precision = function(_) { +
7574 return arguments.length ? (precision = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), circle) : precision; +
7575 }; +
7576 +
7577 return circle; +
7578}); +
7579 +
7580 +
7581/***/ }), +
7582 +
7583/***/ "./node_modules/d3-geo/src/clip/antimeridian.js": +
7584/*!******************************************************!*\ +
7585 !*** ./node_modules/d3-geo/src/clip/antimeridian.js ***! +
7586 \******************************************************/ +
7587/*! exports provided: default */ +
7588/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7589 +
7590"use strict"; +
7591__webpack_require__.r(__webpack_exports__); +
7592/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/clip/index.js"); +
7593/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
7594 +
7595 +
7596 +
7597/* harmony default export */ __webpack_exports__["default"] = (Object(_index__WEBPACK_IMPORTED_MODULE_0__["default"])( +
7598 function() { return true; }, +
7599 clipAntimeridianLine, +
7600 clipAntimeridianInterpolate, +
7601 [-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], -_math__WEBPACK_IMPORTED_MODULE_1__["halfPi"]] +
7602)); +
7603 +
7604// Takes a line and cuts into visible segments. Return values: 0 - there were +
7605// intersections or the line was empty; 1 - no intersections; 2 - there were +
7606// intersections, and the first and last segments should be rejoined. +
7607function clipAntimeridianLine(stream) { +
7608 var lambda0 = NaN, +
7609 phi0 = NaN, +
7610 sign0 = NaN, +
7611 clean; // no intersections +
7612 +
7613 return { +
7614 lineStart: function() { +
7615 stream.lineStart(); +
7616 clean = 1; +
7617 }, +
7618 point: function(lambda1, phi1) { +
7619 var sign1 = lambda1 > 0 ? _math__WEBPACK_IMPORTED_MODULE_1__["pi"] : -_math__WEBPACK_IMPORTED_MODULE_1__["pi"], +
7620 delta = Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda1 - lambda0); +
7621 if (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(delta - _math__WEBPACK_IMPORTED_MODULE_1__["pi"]) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) { // line crosses a pole +
7622 stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? _math__WEBPACK_IMPORTED_MODULE_1__["halfPi"] : -_math__WEBPACK_IMPORTED_MODULE_1__["halfPi"]); +
7623 stream.point(sign0, phi0); +
7624 stream.lineEnd(); +
7625 stream.lineStart(); +
7626 stream.point(sign1, phi0); +
7627 stream.point(lambda1, phi0); +
7628 clean = 0; +
7629 } else if (sign0 !== sign1 && delta >= _math__WEBPACK_IMPORTED_MODULE_1__["pi"]) { // line crosses antimeridian +
7630 if (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda0 - sign0) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) lambda0 -= sign0 * _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]; // handle degeneracies +
7631 if (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda1 - sign1) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) lambda1 -= sign1 * _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]; +
7632 phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); +
7633 stream.point(sign0, phi0); +
7634 stream.lineEnd(); +
7635 stream.lineStart(); +
7636 stream.point(sign1, phi0); +
7637 clean = 0; +
7638 } +
7639 stream.point(lambda0 = lambda1, phi0 = phi1); +
7640 sign0 = sign1; +
7641 }, +
7642 lineEnd: function() { +
7643 stream.lineEnd(); +
7644 lambda0 = phi0 = NaN; +
7645 }, +
7646 clean: function() { +
7647 return 2 - clean; // if intersections, rejoin first and last segments +
7648 } +
7649 }; +
7650} +
7651 +
7652function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { +
7653 var cosPhi0, +
7654 cosPhi1, +
7655 sinLambda0Lambda1 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda0 - lambda1); +
7656 return Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(sinLambda0Lambda1) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"] +
7657 ? Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan"])((Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi0) * (cosPhi1 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi1)) * Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda1) +
7658 - Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi1) * (cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi0)) * Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda0)) +
7659 / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) +
7660 : (phi0 + phi1) / 2; +
7661} +
7662 +
7663function clipAntimeridianInterpolate(from, to, direction, stream) { +
7664 var phi; +
7665 if (from == null) { +
7666 phi = direction * _math__WEBPACK_IMPORTED_MODULE_1__["halfPi"]; +
7667 stream.point(-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], phi); +
7668 stream.point(0, phi); +
7669 stream.point(_math__WEBPACK_IMPORTED_MODULE_1__["pi"], phi); +
7670 stream.point(_math__WEBPACK_IMPORTED_MODULE_1__["pi"], 0); +
7671 stream.point(_math__WEBPACK_IMPORTED_MODULE_1__["pi"], -phi); +
7672 stream.point(0, -phi); +
7673 stream.point(-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], -phi); +
7674 stream.point(-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], 0); +
7675 stream.point(-_math__WEBPACK_IMPORTED_MODULE_1__["pi"], phi); +
7676 } else if (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(from[0] - to[0]) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) { +
7677 var lambda = from[0] < to[0] ? _math__WEBPACK_IMPORTED_MODULE_1__["pi"] : -_math__WEBPACK_IMPORTED_MODULE_1__["pi"]; +
7678 phi = direction * lambda / 2; +
7679 stream.point(-lambda, phi); +
7680 stream.point(0, phi); +
7681 stream.point(lambda, phi); +
7682 } else { +
7683 stream.point(to[0], to[1]); +
7684 } +
7685} +
7686 +
7687 +
7688/***/ }), +
7689 +
7690/***/ "./node_modules/d3-geo/src/clip/buffer.js": +
7691/*!************************************************!*\ +
7692 !*** ./node_modules/d3-geo/src/clip/buffer.js ***! +
7693 \************************************************/ +
7694/*! exports provided: default */ +
7695/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7696 +
7697"use strict"; +
7698__webpack_require__.r(__webpack_exports__); +
7699/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "./node_modules/d3-geo/src/noop.js"); +
7700 +
7701 +
7702/* harmony default export */ __webpack_exports__["default"] = (function() { +
7703 var lines = [], +
7704 line; +
7705 return { +
7706 point: function(x, y) { +
7707 line.push([x, y]); +
7708 }, +
7709 lineStart: function() { +
7710 lines.push(line = []); +
7711 }, +
7712 lineEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
7713 rejoin: function() { +
7714 if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); +
7715 }, +
7716 result: function() { +
7717 var result = lines; +
7718 lines = []; +
7719 line = null; +
7720 return result; +
7721 } +
7722 }; +
7723}); +
7724 +
7725 +
7726/***/ }), +
7727 +
7728/***/ "./node_modules/d3-geo/src/clip/circle.js": +
7729/*!************************************************!*\ +
7730 !*** ./node_modules/d3-geo/src/clip/circle.js ***! +
7731 \************************************************/ +
7732/*! exports provided: default */ +
7733/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7734 +
7735"use strict"; +
7736__webpack_require__.r(__webpack_exports__); +
7737/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cartesian */ "./node_modules/d3-geo/src/cartesian.js"); +
7738/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../circle */ "./node_modules/d3-geo/src/circle.js"); +
7739/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
7740/* harmony import */ var _pointEqual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../pointEqual */ "./node_modules/d3-geo/src/pointEqual.js"); +
7741/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/clip/index.js"); +
7742 +
7743 +
7744 +
7745 +
7746 +
7747 +
7748/* harmony default export */ __webpack_exports__["default"] = (function(radius) { +
7749 var cr = Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(radius), +
7750 delta = 6 * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], +
7751 smallRadius = cr > 0, +
7752 notHemisphere = Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(cr) > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; // TODO optimise for this common case +
7753 +
7754 function interpolate(from, to, direction, stream) { +
7755 Object(_circle__WEBPACK_IMPORTED_MODULE_1__["circleStream"])(stream, radius, delta, direction, from, to); +
7756 } +
7757 +
7758 function visible(lambda, phi) { +
7759 return Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(lambda) * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(phi) > cr; +
7760 } +
7761 +
7762 // Takes a line and cuts into visible segments. Return values used for polygon +
7763 // clipping: 0 - there were intersections or the line was empty; 1 - no +
7764 // intersections 2 - there were intersections, and the first and last segments +
7765 // should be rejoined. +
7766 function clipLine(stream) { +
7767 var point0, // previous point +
7768 c0, // code for previous point +
7769 v0, // visibility of previous point +
7770 v00, // visibility of first point +
7771 clean; // no intersections +
7772 return { +
7773 lineStart: function() { +
7774 v00 = v0 = false; +
7775 clean = 1; +
7776 }, +
7777 point: function(lambda, phi) { +
7778 var point1 = [lambda, phi], +
7779 point2, +
7780 v = visible(lambda, phi), +
7781 c = smallRadius +
7782 ? v ? 0 : code(lambda, phi) +
7783 : v ? code(lambda + (lambda < 0 ? _math__WEBPACK_IMPORTED_MODULE_2__["pi"] : -_math__WEBPACK_IMPORTED_MODULE_2__["pi"]), phi) : 0; +
7784 if (!point0 && (v00 = v0 = v)) stream.lineStart(); +
7785 // Handle degeneracies. +
7786 // TODO ignore if not clipping polygons. +
7787 if (v !== v0) { +
7788 point2 = intersect(point0, point1); +
7789 if (!point2 || Object(_pointEqual__WEBPACK_IMPORTED_MODULE_3__["default"])(point0, point2) || Object(_pointEqual__WEBPACK_IMPORTED_MODULE_3__["default"])(point1, point2)) { +
7790 point1[0] += _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; +
7791 point1[1] += _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; +
7792 v = visible(point1[0], point1[1]); +
7793 } +
7794 } +
7795 if (v !== v0) { +
7796 clean = 0; +
7797 if (v) { +
7798 // outside going in +
7799 stream.lineStart(); +
7800 point2 = intersect(point1, point0); +
7801 stream.point(point2[0], point2[1]); +
7802 } else { +
7803 // inside going out +
7804 point2 = intersect(point0, point1); +
7805 stream.point(point2[0], point2[1]); +
7806 stream.lineEnd(); +
7807 } +
7808 point0 = point2; +
7809 } else if (notHemisphere && point0 && smallRadius ^ v) { +
7810 var t; +
7811 // If the codes for two points are different, or are both zero, +
7812 // and there this segment intersects with the small circle. +
7813 if (!(c & c0) && (t = intersect(point1, point0, true))) { +
7814 clean = 0; +
7815 if (smallRadius) { +
7816 stream.lineStart(); +
7817 stream.point(t[0][0], t[0][1]); +
7818 stream.point(t[1][0], t[1][1]); +
7819 stream.lineEnd(); +
7820 } else { +
7821 stream.point(t[1][0], t[1][1]); +
7822 stream.lineEnd(); +
7823 stream.lineStart(); +
7824 stream.point(t[0][0], t[0][1]); +
7825 } +
7826 } +
7827 } +
7828 if (v && (!point0 || !Object(_pointEqual__WEBPACK_IMPORTED_MODULE_3__["default"])(point0, point1))) { +
7829 stream.point(point1[0], point1[1]); +
7830 } +
7831 point0 = point1, v0 = v, c0 = c; +
7832 }, +
7833 lineEnd: function() { +
7834 if (v0) stream.lineEnd(); +
7835 point0 = null; +
7836 }, +
7837 // Rejoin first and last segments if there were intersections and the first +
7838 // and last points were visible. +
7839 clean: function() { +
7840 return clean | ((v00 && v0) << 1); +
7841 } +
7842 }; +
7843 } +
7844 +
7845 // Intersects the great circle between a and b with the clip circle. +
7846 function intersect(a, b, two) { +
7847 var pa = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesian"])(a), +
7848 pb = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesian"])(b); +
7849 +
7850 // We have two planes, n1.p = d1 and n2.p = d2. +
7851 // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). +
7852 var n1 = [1, 0, 0], // normal +
7853 n2 = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianCross"])(pa, pb), +
7854 n2n2 = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianDot"])(n2, n2), +
7855 n1n2 = n2[0], // cartesianDot(n1, n2), +
7856 determinant = n2n2 - n1n2 * n1n2; +
7857 +
7858 // Two polar points. +
7859 if (!determinant) return !two && a; +
7860 +
7861 var c1 = cr * n2n2 / determinant, +
7862 c2 = -cr * n1n2 / determinant, +
7863 n1xn2 = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianCross"])(n1, n2), +
7864 A = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianScale"])(n1, c1), +
7865 B = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianScale"])(n2, c2); +
7866 Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianAddInPlace"])(A, B); +
7867 +
7868 // Solve |p(t)|^2 = 1. +
7869 var u = n1xn2, +
7870 w = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianDot"])(A, u), +
7871 uu = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianDot"])(u, u), +
7872 t2 = w * w - uu * (Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianDot"])(A, A) - 1); +
7873 +
7874 if (t2 < 0) return; +
7875 +
7876 var t = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(t2), +
7877 q = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianScale"])(u, (-w - t) / uu); +
7878 Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianAddInPlace"])(q, A); +
7879 q = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["spherical"])(q); +
7880 +
7881 if (!two) return q; +
7882 +
7883 // Two intersection points. +
7884 var lambda0 = a[0], +
7885 lambda1 = b[0], +
7886 phi0 = a[1], +
7887 phi1 = b[1], +
7888 z; +
7889 +
7890 if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; +
7891 +
7892 var delta = lambda1 - lambda0, +
7893 polar = Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(delta - _math__WEBPACK_IMPORTED_MODULE_2__["pi"]) < _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"], +
7894 meridian = polar || delta < _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; +
7895 +
7896 if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; +
7897 +
7898 // Check that the first point is between a and b. +
7899 if (meridian +
7900 ? polar +
7901 ? phi0 + phi1 > 0 ^ q[1] < (Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(q[0] - lambda0) < _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] ? phi0 : phi1) +
7902 : phi0 <= q[1] && q[1] <= phi1 +
7903 : delta > _math__WEBPACK_IMPORTED_MODULE_2__["pi"] ^ (lambda0 <= q[0] && q[0] <= lambda1)) { +
7904 var q1 = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianScale"])(u, (-w + t) / uu); +
7905 Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesianAddInPlace"])(q1, A); +
7906 return [q, Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["spherical"])(q1)]; +
7907 } +
7908 } +
7909 +
7910 // Generates a 4-bit vector representing the location of a point relative to +
7911 // the small circle's bounding box. +
7912 function code(lambda, phi) { +
7913 var r = smallRadius ? radius : _math__WEBPACK_IMPORTED_MODULE_2__["pi"] - radius, +
7914 code = 0; +
7915 if (lambda < -r) code |= 1; // left +
7916 else if (lambda > r) code |= 2; // right +
7917 if (phi < -r) code |= 4; // below +
7918 else if (phi > r) code |= 8; // above +
7919 return code; +
7920 } +
7921 +
7922 return Object(_index__WEBPACK_IMPORTED_MODULE_4__["default"])(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-_math__WEBPACK_IMPORTED_MODULE_2__["pi"], radius - _math__WEBPACK_IMPORTED_MODULE_2__["pi"]]); +
7923}); +
7924 +
7925 +
7926/***/ }), +
7927 +
7928/***/ "./node_modules/d3-geo/src/clip/extent.js": +
7929/*!************************************************!*\ +
7930 !*** ./node_modules/d3-geo/src/clip/extent.js ***! +
7931 \************************************************/ +
7932/*! exports provided: default */ +
7933/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7934 +
7935"use strict"; +
7936__webpack_require__.r(__webpack_exports__); +
7937/* harmony import */ var _rectangle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rectangle */ "./node_modules/d3-geo/src/clip/rectangle.js"); +
7938 +
7939 +
7940/* harmony default export */ __webpack_exports__["default"] = (function() { +
7941 var x0 = 0, +
7942 y0 = 0, +
7943 x1 = 960, +
7944 y1 = 500, +
7945 cache, +
7946 cacheStream, +
7947 clip; +
7948 +
7949 return clip = { +
7950 stream: function(stream) { +
7951 return cache && cacheStream === stream ? cache : cache = Object(_rectangle__WEBPACK_IMPORTED_MODULE_0__["default"])(x0, y0, x1, y1)(cacheStream = stream); +
7952 }, +
7953 extent: function(_) { +
7954 return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; +
7955 } +
7956 }; +
7957}); +
7958 +
7959 +
7960/***/ }), +
7961 +
7962/***/ "./node_modules/d3-geo/src/clip/index.js": +
7963/*!***********************************************!*\ +
7964 !*** ./node_modules/d3-geo/src/clip/index.js ***! +
7965 \***********************************************/ +
7966/*! exports provided: default */ +
7967/***/ (function(module, __webpack_exports__, __webpack_require__) { +
7968 +
7969"use strict"; +
7970__webpack_require__.r(__webpack_exports__); +
7971/* harmony import */ var _buffer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./buffer */ "./node_modules/d3-geo/src/clip/buffer.js"); +
7972/* harmony import */ var _rejoin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rejoin */ "./node_modules/d3-geo/src/clip/rejoin.js"); +
7973/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
7974/* harmony import */ var _polygonContains__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../polygonContains */ "./node_modules/d3-geo/src/polygonContains.js"); +
7975/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
7976 +
7977 +
7978 +
7979 +
7980 +
7981 +
7982/* harmony default export */ __webpack_exports__["default"] = (function(pointVisible, clipLine, interpolate, start) { +
7983 return function(sink) { +
7984 var line = clipLine(sink), +
7985 ringBuffer = Object(_buffer__WEBPACK_IMPORTED_MODULE_0__["default"])(), +
7986 ringSink = clipLine(ringBuffer), +
7987 polygonStarted = false, +
7988 polygon, +
7989 segments, +
7990 ring; +
7991 +
7992 var clip = { +
7993 point: point, +
7994 lineStart: lineStart, +
7995 lineEnd: lineEnd, +
7996 polygonStart: function() { +
7997 clip.point = pointRing; +
7998 clip.lineStart = ringStart; +
7999 clip.lineEnd = ringEnd; +
8000 segments = []; +
8001 polygon = []; +
8002 }, +
8003 polygonEnd: function() { +
8004 clip.point = point; +
8005 clip.lineStart = lineStart; +
8006 clip.lineEnd = lineEnd; +
8007 segments = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__["merge"])(segments); +
8008 var startInside = Object(_polygonContains__WEBPACK_IMPORTED_MODULE_3__["default"])(polygon, start); +
8009 if (segments.length) { +
8010 if (!polygonStarted) sink.polygonStart(), polygonStarted = true; +
8011 Object(_rejoin__WEBPACK_IMPORTED_MODULE_1__["default"])(segments, compareIntersection, startInside, interpolate, sink); +
8012 } else if (startInside) { +
8013 if (!polygonStarted) sink.polygonStart(), polygonStarted = true; +
8014 sink.lineStart(); +
8015 interpolate(null, null, 1, sink); +
8016 sink.lineEnd(); +
8017 } +
8018 if (polygonStarted) sink.polygonEnd(), polygonStarted = false; +
8019 segments = polygon = null; +
8020 }, +
8021 sphere: function() { +
8022 sink.polygonStart(); +
8023 sink.lineStart(); +
8024 interpolate(null, null, 1, sink); +
8025 sink.lineEnd(); +
8026 sink.polygonEnd(); +
8027 } +
8028 }; +
8029 +
8030 function point(lambda, phi) { +
8031 if (pointVisible(lambda, phi)) sink.point(lambda, phi); +
8032 } +
8033 +
8034 function pointLine(lambda, phi) { +
8035 line.point(lambda, phi); +
8036 } +
8037 +
8038 function lineStart() { +
8039 clip.point = pointLine; +
8040 line.lineStart(); +
8041 } +
8042 +
8043 function lineEnd() { +
8044 clip.point = point; +
8045 line.lineEnd(); +
8046 } +
8047 +
8048 function pointRing(lambda, phi) { +
8049 ring.push([lambda, phi]); +
8050 ringSink.point(lambda, phi); +
8051 } +
8052 +
8053 function ringStart() { +
8054 ringSink.lineStart(); +
8055 ring = []; +
8056 } +
8057 +
8058 function ringEnd() { +
8059 pointRing(ring[0][0], ring[0][1]); +
8060 ringSink.lineEnd(); +
8061 +
8062 var clean = ringSink.clean(), +
8063 ringSegments = ringBuffer.result(), +
8064 i, n = ringSegments.length, m, +
8065 segment, +
8066 point; +
8067 +
8068 ring.pop(); +
8069 polygon.push(ring); +
8070 ring = null; +
8071 +
8072 if (!n) return; +
8073 +
8074 // No intersections. +
8075 if (clean & 1) { +
8076 segment = ringSegments[0]; +
8077 if ((m = segment.length - 1) > 0) { +
8078 if (!polygonStarted) sink.polygonStart(), polygonStarted = true; +
8079 sink.lineStart(); +
8080 for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); +
8081 sink.lineEnd(); +
8082 } +
8083 return; +
8084 } +
8085 +
8086 // Rejoin connected segments. +
8087 // TODO reuse ringBuffer.rejoin()? +
8088 if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); +
8089 +
8090 segments.push(ringSegments.filter(validSegment)); +
8091 } +
8092 +
8093 return clip; +
8094 }; +
8095}); +
8096 +
8097function validSegment(segment) { +
8098 return segment.length > 1; +
8099} +
8100 +
8101// Intersections are sorted along the clip edge. For both antimeridian cutting +
8102// and circle clipping, the same comparison is used. +
8103function compareIntersection(a, b) { +
8104 return ((a = a.x)[0] < 0 ? a[1] - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] : _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - a[1]) +
8105 - ((b = b.x)[0] < 0 ? b[1] - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] : _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - b[1]); +
8106} +
8107 +
8108 +
8109/***/ }), +
8110 +
8111/***/ "./node_modules/d3-geo/src/clip/line.js": +
8112/*!**********************************************!*\ +
8113 !*** ./node_modules/d3-geo/src/clip/line.js ***! +
8114 \**********************************************/ +
8115/*! exports provided: default */ +
8116/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8117 +
8118"use strict"; +
8119__webpack_require__.r(__webpack_exports__); +
8120/* harmony default export */ __webpack_exports__["default"] = (function(a, b, x0, y0, x1, y1) { +
8121 var ax = a[0], +
8122 ay = a[1], +
8123 bx = b[0], +
8124 by = b[1], +
8125 t0 = 0, +
8126 t1 = 1, +
8127 dx = bx - ax, +
8128 dy = by - ay, +
8129 r; +
8130 +
8131 r = x0 - ax; +
8132 if (!dx && r > 0) return; +
8133 r /= dx; +
8134 if (dx < 0) { +
8135 if (r < t0) return; +
8136 if (r < t1) t1 = r; +
8137 } else if (dx > 0) { +
8138 if (r > t1) return; +
8139 if (r > t0) t0 = r; +
8140 } +
8141 +
8142 r = x1 - ax; +
8143 if (!dx && r < 0) return; +
8144 r /= dx; +
8145 if (dx < 0) { +
8146 if (r > t1) return; +
8147 if (r > t0) t0 = r; +
8148 } else if (dx > 0) { +
8149 if (r < t0) return; +
8150 if (r < t1) t1 = r; +
8151 } +
8152 +
8153 r = y0 - ay; +
8154 if (!dy && r > 0) return; +
8155 r /= dy; +
8156 if (dy < 0) { +
8157 if (r < t0) return; +
8158 if (r < t1) t1 = r; +
8159 } else if (dy > 0) { +
8160 if (r > t1) return; +
8161 if (r > t0) t0 = r; +
8162 } +
8163 +
8164 r = y1 - ay; +
8165 if (!dy && r < 0) return; +
8166 r /= dy; +
8167 if (dy < 0) { +
8168 if (r > t1) return; +
8169 if (r > t0) t0 = r; +
8170 } else if (dy > 0) { +
8171 if (r < t0) return; +
8172 if (r < t1) t1 = r; +
8173 } +
8174 +
8175 if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; +
8176 if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; +
8177 return true; +
8178}); +
8179 +
8180 +
8181/***/ }), +
8182 +
8183/***/ "./node_modules/d3-geo/src/clip/rectangle.js": +
8184/*!***************************************************!*\ +
8185 !*** ./node_modules/d3-geo/src/clip/rectangle.js ***! +
8186 \***************************************************/ +
8187/*! exports provided: default */ +
8188/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8189 +
8190"use strict"; +
8191__webpack_require__.r(__webpack_exports__); +
8192/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return clipRectangle; }); +
8193/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
8194/* harmony import */ var _buffer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./buffer */ "./node_modules/d3-geo/src/clip/buffer.js"); +
8195/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./line */ "./node_modules/d3-geo/src/clip/line.js"); +
8196/* harmony import */ var _rejoin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./rejoin */ "./node_modules/d3-geo/src/clip/rejoin.js"); +
8197/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
8198 +
8199 +
8200 +
8201 +
8202 +
8203 +
8204var clipMax = 1e9, clipMin = -clipMax; +
8205 +
8206// TODO Use d3-polygon’s polygonContains here for the ring check? +
8207// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? +
8208 +
8209function clipRectangle(x0, y0, x1, y1) { +
8210 +
8211 function visible(x, y) { +
8212 return x0 <= x && x <= x1 && y0 <= y && y <= y1; +
8213 } +
8214 +
8215 function interpolate(from, to, direction, stream) { +
8216 var a = 0, a1 = 0; +
8217 if (from == null +
8218 || (a = corner(from, direction)) !== (a1 = corner(to, direction)) +
8219 || comparePoint(from, to) < 0 ^ direction > 0) { +
8220 do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); +
8221 while ((a = (a + direction + 4) % 4) !== a1); +
8222 } else { +
8223 stream.point(to[0], to[1]); +
8224 } +
8225 } +
8226 +
8227 function corner(p, direction) { +
8228 return Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(p[0] - x0) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"] ? direction > 0 ? 0 : 3 +
8229 : Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(p[0] - x1) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"] ? direction > 0 ? 2 : 1 +
8230 : Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(p[1] - y0) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"] ? direction > 0 ? 1 : 0 +
8231 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon +
8232 } +
8233 +
8234 function compareIntersection(a, b) { +
8235 return comparePoint(a.x, b.x); +
8236 } +
8237 +
8238 function comparePoint(a, b) { +
8239 var ca = corner(a, 1), +
8240 cb = corner(b, 1); +
8241 return ca !== cb ? ca - cb +
8242 : ca === 0 ? b[1] - a[1] +
8243 : ca === 1 ? a[0] - b[0] +
8244 : ca === 2 ? a[1] - b[1] +
8245 : b[0] - a[0]; +
8246 } +
8247 +
8248 return function(stream) { +
8249 var activeStream = stream, +
8250 bufferStream = Object(_buffer__WEBPACK_IMPORTED_MODULE_1__["default"])(), +
8251 segments, +
8252 polygon, +
8253 ring, +
8254 x__, y__, v__, // first point +
8255 x_, y_, v_, // previous point +
8256 first, +
8257 clean; +
8258 +
8259 var clipStream = { +
8260 point: point, +
8261 lineStart: lineStart, +
8262 lineEnd: lineEnd, +
8263 polygonStart: polygonStart, +
8264 polygonEnd: polygonEnd +
8265 }; +
8266 +
8267 function point(x, y) { +
8268 if (visible(x, y)) activeStream.point(x, y); +
8269 } +
8270 +
8271 function polygonInside() { +
8272 var winding = 0; +
8273 +
8274 for (var i = 0, n = polygon.length; i < n; ++i) { +
8275 for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { +
8276 a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; +
8277 if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } +
8278 else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } +
8279 } +
8280 } +
8281 +
8282 return winding; +
8283 } +
8284 +
8285 // Buffer geometry within a polygon and then clip it en masse. +
8286 function polygonStart() { +
8287 activeStream = bufferStream, segments = [], polygon = [], clean = true; +
8288 } +
8289 +
8290 function polygonEnd() { +
8291 var startInside = polygonInside(), +
8292 cleanInside = clean && startInside, +
8293 visible = (segments = Object(d3_array__WEBPACK_IMPORTED_MODULE_4__["merge"])(segments)).length; +
8294 if (cleanInside || visible) { +
8295 stream.polygonStart(); +
8296 if (cleanInside) { +
8297 stream.lineStart(); +
8298 interpolate(null, null, 1, stream); +
8299 stream.lineEnd(); +
8300 } +
8301 if (visible) { +
8302 Object(_rejoin__WEBPACK_IMPORTED_MODULE_3__["default"])(segments, compareIntersection, startInside, interpolate, stream); +
8303 } +
8304 stream.polygonEnd(); +
8305 } +
8306 activeStream = stream, segments = polygon = ring = null; +
8307 } +
8308 +
8309 function lineStart() { +
8310 clipStream.point = linePoint; +
8311 if (polygon) polygon.push(ring = []); +
8312 first = true; +
8313 v_ = false; +
8314 x_ = y_ = NaN; +
8315 } +
8316 +
8317 // TODO rather than special-case polygons, simply handle them separately. +
8318 // Ideally, coincident intersection points should be jittered to avoid +
8319 // clipping issues. +
8320 function lineEnd() { +
8321 if (segments) { +
8322 linePoint(x__, y__); +
8323 if (v__ && v_) bufferStream.rejoin(); +
8324 segments.push(bufferStream.result()); +
8325 } +
8326 clipStream.point = point; +
8327 if (v_) activeStream.lineEnd(); +
8328 } +
8329 +
8330 function linePoint(x, y) { +
8331 var v = visible(x, y); +
8332 if (polygon) ring.push([x, y]); +
8333 if (first) { +
8334 x__ = x, y__ = y, v__ = v; +
8335 first = false; +
8336 if (v) { +
8337 activeStream.lineStart(); +
8338 activeStream.point(x, y); +
8339 } +
8340 } else { +
8341 if (v && v_) activeStream.point(x, y); +
8342 else { +
8343 var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], +
8344 b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; +
8345 if (Object(_line__WEBPACK_IMPORTED_MODULE_2__["default"])(a, b, x0, y0, x1, y1)) { +
8346 if (!v_) { +
8347 activeStream.lineStart(); +
8348 activeStream.point(a[0], a[1]); +
8349 } +
8350 activeStream.point(b[0], b[1]); +
8351 if (!v) activeStream.lineEnd(); +
8352 clean = false; +
8353 } else if (v) { +
8354 activeStream.lineStart(); +
8355 activeStream.point(x, y); +
8356 clean = false; +
8357 } +
8358 } +
8359 } +
8360 x_ = x, y_ = y, v_ = v; +
8361 } +
8362 +
8363 return clipStream; +
8364 }; +
8365} +
8366 +
8367 +
8368/***/ }), +
8369 +
8370/***/ "./node_modules/d3-geo/src/clip/rejoin.js": +
8371/*!************************************************!*\ +
8372 !*** ./node_modules/d3-geo/src/clip/rejoin.js ***! +
8373 \************************************************/ +
8374/*! exports provided: default */ +
8375/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8376 +
8377"use strict"; +
8378__webpack_require__.r(__webpack_exports__); +
8379/* harmony import */ var _pointEqual__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pointEqual */ "./node_modules/d3-geo/src/pointEqual.js"); +
8380 +
8381 +
8382function Intersection(point, points, other, entry) { +
8383 this.x = point; +
8384 this.z = points; +
8385 this.o = other; // another intersection +
8386 this.e = entry; // is an entry? +
8387 this.v = false; // visited +
8388 this.n = this.p = null; // next & previous +
8389} +
8390 +
8391// A generalized polygon clipping algorithm: given a polygon that has been cut +
8392// into its visible line segments, and rejoins the segments by interpolating +
8393// along the clip edge. +
8394/* harmony default export */ __webpack_exports__["default"] = (function(segments, compareIntersection, startInside, interpolate, stream) { +
8395 var subject = [], +
8396 clip = [], +
8397 i, +
8398 n; +
8399 +
8400 segments.forEach(function(segment) { +
8401 if ((n = segment.length - 1) <= 0) return; +
8402 var n, p0 = segment[0], p1 = segment[n], x; +
8403 +
8404 // If the first and last points of a segment are coincident, then treat as a +
8405 // closed ring. TODO if all rings are closed, then the winding order of the +
8406 // exterior ring should be checked. +
8407 if (Object(_pointEqual__WEBPACK_IMPORTED_MODULE_0__["default"])(p0, p1)) { +
8408 stream.lineStart(); +
8409 for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); +
8410 stream.lineEnd(); +
8411 return; +
8412 } +
8413 +
8414 subject.push(x = new Intersection(p0, segment, null, true)); +
8415 clip.push(x.o = new Intersection(p0, null, x, false)); +
8416 subject.push(x = new Intersection(p1, segment, null, false)); +
8417 clip.push(x.o = new Intersection(p1, null, x, true)); +
8418 }); +
8419 +
8420 if (!subject.length) return; +
8421 +
8422 clip.sort(compareIntersection); +
8423 link(subject); +
8424 link(clip); +
8425 +
8426 for (i = 0, n = clip.length; i < n; ++i) { +
8427 clip[i].e = startInside = !startInside; +
8428 } +
8429 +
8430 var start = subject[0], +
8431 points, +
8432 point; +
8433 +
8434 while (1) { +
8435 // Find first unvisited intersection. +
8436 var current = start, +
8437 isSubject = true; +
8438 while (current.v) if ((current = current.n) === start) return; +
8439 points = current.z; +
8440 stream.lineStart(); +
8441 do { +
8442 current.v = current.o.v = true; +
8443 if (current.e) { +
8444 if (isSubject) { +
8445 for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); +
8446 } else { +
8447 interpolate(current.x, current.n.x, 1, stream); +
8448 } +
8449 current = current.n; +
8450 } else { +
8451 if (isSubject) { +
8452 points = current.p.z; +
8453 for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); +
8454 } else { +
8455 interpolate(current.x, current.p.x, -1, stream); +
8456 } +
8457 current = current.p; +
8458 } +
8459 current = current.o; +
8460 points = current.z; +
8461 isSubject = !isSubject; +
8462 } while (!current.v); +
8463 stream.lineEnd(); +
8464 } +
8465}); +
8466 +
8467function link(array) { +
8468 if (!(n = array.length)) return; +
8469 var n, +
8470 i = 0, +
8471 a = array[0], +
8472 b; +
8473 while (++i < n) { +
8474 a.n = b = array[i]; +
8475 b.p = a; +
8476 a = b; +
8477 } +
8478 a.n = b = array[0]; +
8479 b.p = a; +
8480} +
8481 +
8482 +
8483/***/ }), +
8484 +
8485/***/ "./node_modules/d3-geo/src/compose.js": +
8486/*!********************************************!*\ +
8487 !*** ./node_modules/d3-geo/src/compose.js ***! +
8488 \********************************************/ +
8489/*! exports provided: default */ +
8490/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8491 +
8492"use strict"; +
8493__webpack_require__.r(__webpack_exports__); +
8494/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
8495 +
8496 function compose(x, y) { +
8497 return x = a(x, y), b(x[0], x[1]); +
8498 } +
8499 +
8500 if (a.invert && b.invert) compose.invert = function(x, y) { +
8501 return x = b.invert(x, y), x && a.invert(x[0], x[1]); +
8502 }; +
8503 +
8504 return compose; +
8505}); +
8506 +
8507 +
8508/***/ }), +
8509 +
8510/***/ "./node_modules/d3-geo/src/constant.js": +
8511/*!*********************************************!*\ +
8512 !*** ./node_modules/d3-geo/src/constant.js ***! +
8513 \*********************************************/ +
8514/*! exports provided: default */ +
8515/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8516 +
8517"use strict"; +
8518__webpack_require__.r(__webpack_exports__); +
8519/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
8520 return function() { +
8521 return x; +
8522 }; +
8523}); +
8524 +
8525 +
8526/***/ }), +
8527 +
8528/***/ "./node_modules/d3-geo/src/contains.js": +
8529/*!*********************************************!*\ +
8530 !*** ./node_modules/d3-geo/src/contains.js ***! +
8531 \*********************************************/ +
8532/*! exports provided: default */ +
8533/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8534 +
8535"use strict"; +
8536__webpack_require__.r(__webpack_exports__); +
8537/* harmony import */ var _polygonContains__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./polygonContains */ "./node_modules/d3-geo/src/polygonContains.js"); +
8538/* harmony import */ var _distance__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./distance */ "./node_modules/d3-geo/src/distance.js"); +
8539/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
8540 +
8541 +
8542 +
8543 +
8544var containsObjectType = { +
8545 Feature: function(object, point) { +
8546 return containsGeometry(object.geometry, point); +
8547 }, +
8548 FeatureCollection: function(object, point) { +
8549 var features = object.features, i = -1, n = features.length; +
8550 while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; +
8551 return false; +
8552 } +
8553}; +
8554 +
8555var containsGeometryType = { +
8556 Sphere: function() { +
8557 return true; +
8558 }, +
8559 Point: function(object, point) { +
8560 return containsPoint(object.coordinates, point); +
8561 }, +
8562 MultiPoint: function(object, point) { +
8563 var coordinates = object.coordinates, i = -1, n = coordinates.length; +
8564 while (++i < n) if (containsPoint(coordinates[i], point)) return true; +
8565 return false; +
8566 }, +
8567 LineString: function(object, point) { +
8568 return containsLine(object.coordinates, point); +
8569 }, +
8570 MultiLineString: function(object, point) { +
8571 var coordinates = object.coordinates, i = -1, n = coordinates.length; +
8572 while (++i < n) if (containsLine(coordinates[i], point)) return true; +
8573 return false; +
8574 }, +
8575 Polygon: function(object, point) { +
8576 return containsPolygon(object.coordinates, point); +
8577 }, +
8578 MultiPolygon: function(object, point) { +
8579 var coordinates = object.coordinates, i = -1, n = coordinates.length; +
8580 while (++i < n) if (containsPolygon(coordinates[i], point)) return true; +
8581 return false; +
8582 }, +
8583 GeometryCollection: function(object, point) { +
8584 var geometries = object.geometries, i = -1, n = geometries.length; +
8585 while (++i < n) if (containsGeometry(geometries[i], point)) return true; +
8586 return false; +
8587 } +
8588}; +
8589 +
8590function containsGeometry(geometry, point) { +
8591 return geometry && containsGeometryType.hasOwnProperty(geometry.type) +
8592 ? containsGeometryType[geometry.type](geometry, point) +
8593 : false; +
8594} +
8595 +
8596function containsPoint(coordinates, point) { +
8597 return Object(_distance__WEBPACK_IMPORTED_MODULE_1__["default"])(coordinates, point) === 0; +
8598} +
8599 +
8600function containsLine(coordinates, point) { +
8601 var ab = Object(_distance__WEBPACK_IMPORTED_MODULE_1__["default"])(coordinates[0], coordinates[1]), +
8602 ao = Object(_distance__WEBPACK_IMPORTED_MODULE_1__["default"])(coordinates[0], point), +
8603 ob = Object(_distance__WEBPACK_IMPORTED_MODULE_1__["default"])(point, coordinates[1]); +
8604 return ao + ob <= ab + _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; +
8605} +
8606 +
8607function containsPolygon(coordinates, point) { +
8608 return !!Object(_polygonContains__WEBPACK_IMPORTED_MODULE_0__["default"])(coordinates.map(ringRadians), pointRadians(point)); +
8609} +
8610 +
8611function ringRadians(ring) { +
8612 return ring = ring.map(pointRadians), ring.pop(), ring; +
8613} +
8614 +
8615function pointRadians(point) { +
8616 return [point[0] * _math__WEBPACK_IMPORTED_MODULE_2__["radians"], point[1] * _math__WEBPACK_IMPORTED_MODULE_2__["radians"]]; +
8617} +
8618 +
8619/* harmony default export */ __webpack_exports__["default"] = (function(object, point) { +
8620 return (object && containsObjectType.hasOwnProperty(object.type) +
8621 ? containsObjectType[object.type] +
8622 : containsGeometry)(object, point); +
8623}); +
8624 +
8625 +
8626/***/ }), +
8627 +
8628/***/ "./node_modules/d3-geo/src/distance.js": +
8629/*!*********************************************!*\ +
8630 !*** ./node_modules/d3-geo/src/distance.js ***! +
8631 \*********************************************/ +
8632/*! exports provided: default */ +
8633/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8634 +
8635"use strict"; +
8636__webpack_require__.r(__webpack_exports__); +
8637/* harmony import */ var _length__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./length */ "./node_modules/d3-geo/src/length.js"); +
8638 +
8639 +
8640var coordinates = [null, null], +
8641 object = {type: "LineString", coordinates: coordinates}; +
8642 +
8643/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
8644 coordinates[0] = a; +
8645 coordinates[1] = b; +
8646 return Object(_length__WEBPACK_IMPORTED_MODULE_0__["default"])(object); +
8647}); +
8648 +
8649 +
8650/***/ }), +
8651 +
8652/***/ "./node_modules/d3-geo/src/graticule.js": +
8653/*!**********************************************!*\ +
8654 !*** ./node_modules/d3-geo/src/graticule.js ***! +
8655 \**********************************************/ +
8656/*! exports provided: default, graticule10 */ +
8657/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8658 +
8659"use strict"; +
8660__webpack_require__.r(__webpack_exports__); +
8661/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return graticule; }); +
8662/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "graticule10", function() { return graticule10; }); +
8663/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
8664/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
8665 +
8666 +
8667 +
8668function graticuleX(y0, y1, dy) { +
8669 var y = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(y0, y1 - _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"], dy).concat(y1); +
8670 return function(x) { return y.map(function(y) { return [x, y]; }); }; +
8671} +
8672 +
8673function graticuleY(x0, x1, dx) { +
8674 var x = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(x0, x1 - _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"], dx).concat(x1); +
8675 return function(y) { return x.map(function(x) { return [x, y]; }); }; +
8676} +
8677 +
8678function graticule() { +
8679 var x1, x0, X1, X0, +
8680 y1, y0, Y1, Y0, +
8681 dx = 10, dy = dx, DX = 90, DY = 360, +
8682 x, y, X, Y, +
8683 precision = 2.5; +
8684 +
8685 function graticule() { +
8686 return {type: "MultiLineString", coordinates: lines()}; +
8687 } +
8688 +
8689 function lines() { +
8690 return Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["ceil"])(X0 / DX) * DX, X1, DX).map(X) +
8691 .concat(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["ceil"])(Y0 / DY) * DY, Y1, DY).map(Y)) +
8692 .concat(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["ceil"])(x0 / dx) * dx, x1, dx).filter(function(x) { return Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(x % DX) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]; }).map(x)) +
8693 .concat(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["ceil"])(y0 / dy) * dy, y1, dy).filter(function(y) { return Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(y % DY) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]; }).map(y)); +
8694 } +
8695 +
8696 graticule.lines = function() { +
8697 return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); +
8698 }; +
8699 +
8700 graticule.outline = function() { +
8701 return { +
8702 type: "Polygon", +
8703 coordinates: [ +
8704 X(X0).concat( +
8705 Y(Y1).slice(1), +
8706 X(X1).reverse().slice(1), +
8707 Y(Y0).reverse().slice(1)) +
8708 ] +
8709 }; +
8710 }; +
8711 +
8712 graticule.extent = function(_) { +
8713 if (!arguments.length) return graticule.extentMinor(); +
8714 return graticule.extentMajor(_).extentMinor(_); +
8715 }; +
8716 +
8717 graticule.extentMajor = function(_) { +
8718 if (!arguments.length) return [[X0, Y0], [X1, Y1]]; +
8719 X0 = +_[0][0], X1 = +_[1][0]; +
8720 Y0 = +_[0][1], Y1 = +_[1][1]; +
8721 if (X0 > X1) _ = X0, X0 = X1, X1 = _; +
8722 if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; +
8723 return graticule.precision(precision); +
8724 }; +
8725 +
8726 graticule.extentMinor = function(_) { +
8727 if (!arguments.length) return [[x0, y0], [x1, y1]]; +
8728 x0 = +_[0][0], x1 = +_[1][0]; +
8729 y0 = +_[0][1], y1 = +_[1][1]; +
8730 if (x0 > x1) _ = x0, x0 = x1, x1 = _; +
8731 if (y0 > y1) _ = y0, y0 = y1, y1 = _; +
8732 return graticule.precision(precision); +
8733 }; +
8734 +
8735 graticule.step = function(_) { +
8736 if (!arguments.length) return graticule.stepMinor(); +
8737 return graticule.stepMajor(_).stepMinor(_); +
8738 }; +
8739 +
8740 graticule.stepMajor = function(_) { +
8741 if (!arguments.length) return [DX, DY]; +
8742 DX = +_[0], DY = +_[1]; +
8743 return graticule; +
8744 }; +
8745 +
8746 graticule.stepMinor = function(_) { +
8747 if (!arguments.length) return [dx, dy]; +
8748 dx = +_[0], dy = +_[1]; +
8749 return graticule; +
8750 }; +
8751 +
8752 graticule.precision = function(_) { +
8753 if (!arguments.length) return precision; +
8754 precision = +_; +
8755 x = graticuleX(y0, y1, 90); +
8756 y = graticuleY(x0, x1, precision); +
8757 X = graticuleX(Y0, Y1, 90); +
8758 Y = graticuleY(X0, X1, precision); +
8759 return graticule; +
8760 }; +
8761 +
8762 return graticule +
8763 .extentMajor([[-180, -90 + _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]], [180, 90 - _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]]]) +
8764 .extentMinor([[-180, -80 - _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]], [180, 80 + _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"]]]); +
8765} +
8766 +
8767function graticule10() { +
8768 return graticule()(); +
8769} +
8770 +
8771 +
8772/***/ }), +
8773 +
8774/***/ "./node_modules/d3-geo/src/identity.js": +
8775/*!*********************************************!*\ +
8776 !*** ./node_modules/d3-geo/src/identity.js ***! +
8777 \*********************************************/ +
8778/*! exports provided: default */ +
8779/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8780 +
8781"use strict"; +
8782__webpack_require__.r(__webpack_exports__); +
8783/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
8784 return x; +
8785}); +
8786 +
8787 +
8788/***/ }), +
8789 +
8790/***/ "./node_modules/d3-geo/src/index.js": +
8791/*!******************************************!*\ +
8792 !*** ./node_modules/d3-geo/src/index.js ***! +
8793 \******************************************/ +
8794/*! exports provided: geoArea, geoBounds, geoCentroid, geoCircle, geoClipAntimeridian, geoClipCircle, geoClipExtent, geoClipRectangle, geoContains, geoDistance, geoGraticule, geoGraticule10, geoInterpolate, geoLength, geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEqualAreaRaw, geoAzimuthalEquidistant, geoAzimuthalEquidistantRaw, geoConicConformal, geoConicConformalRaw, geoConicEqualArea, geoConicEqualAreaRaw, geoConicEquidistant, geoConicEquidistantRaw, geoEqualEarth, geoEqualEarthRaw, geoEquirectangular, geoEquirectangularRaw, geoGnomonic, geoGnomonicRaw, geoIdentity, geoProjection, geoProjectionMutator, geoMercator, geoMercatorRaw, geoNaturalEarth1, geoNaturalEarth1Raw, geoOrthographic, geoOrthographicRaw, geoStereographic, geoStereographicRaw, geoTransverseMercator, geoTransverseMercatorRaw, geoRotation, geoStream, geoTransform */ +
8795/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8796 +
8797"use strict"; +
8798__webpack_require__.r(__webpack_exports__); +
8799/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area */ "./node_modules/d3-geo/src/area.js"); +
8800/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoArea", function() { return _area__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
8801 +
8802/* harmony import */ var _bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bounds */ "./node_modules/d3-geo/src/bounds.js"); +
8803/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoBounds", function() { return _bounds__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
8804 +
8805/* harmony import */ var _centroid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./centroid */ "./node_modules/d3-geo/src/centroid.js"); +
8806/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoCentroid", function() { return _centroid__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
8807 +
8808/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./circle */ "./node_modules/d3-geo/src/circle.js"); +
8809/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoCircle", function() { return _circle__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
8810 +
8811/* harmony import */ var _clip_antimeridian__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./clip/antimeridian */ "./node_modules/d3-geo/src/clip/antimeridian.js"); +
8812/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipAntimeridian", function() { return _clip_antimeridian__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
8813 +
8814/* harmony import */ var _clip_circle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./clip/circle */ "./node_modules/d3-geo/src/clip/circle.js"); +
8815/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipCircle", function() { return _clip_circle__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
8816 +
8817/* harmony import */ var _clip_extent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clip/extent */ "./node_modules/d3-geo/src/clip/extent.js"); +
8818/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipExtent", function() { return _clip_extent__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
8819 +
8820/* harmony import */ var _clip_rectangle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./clip/rectangle */ "./node_modules/d3-geo/src/clip/rectangle.js"); +
8821/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipRectangle", function() { return _clip_rectangle__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +
8822 +
8823/* harmony import */ var _contains__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./contains */ "./node_modules/d3-geo/src/contains.js"); +
8824/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoContains", function() { return _contains__WEBPACK_IMPORTED_MODULE_8__["default"]; }); +
8825 +
8826/* harmony import */ var _distance__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./distance */ "./node_modules/d3-geo/src/distance.js"); +
8827/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoDistance", function() { return _distance__WEBPACK_IMPORTED_MODULE_9__["default"]; }); +
8828 +
8829/* harmony import */ var _graticule__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./graticule */ "./node_modules/d3-geo/src/graticule.js"); +
8830/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGraticule", function() { return _graticule__WEBPACK_IMPORTED_MODULE_10__["default"]; }); +
8831 +
8832/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGraticule10", function() { return _graticule__WEBPACK_IMPORTED_MODULE_10__["graticule10"]; }); +
8833 +
8834/* harmony import */ var _interpolate__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./interpolate */ "./node_modules/d3-geo/src/interpolate.js"); +
8835/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoInterpolate", function() { return _interpolate__WEBPACK_IMPORTED_MODULE_11__["default"]; }); +
8836 +
8837/* harmony import */ var _length__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./length */ "./node_modules/d3-geo/src/length.js"); +
8838/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoLength", function() { return _length__WEBPACK_IMPORTED_MODULE_12__["default"]; }); +
8839 +
8840/* harmony import */ var _path_index__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./path/index */ "./node_modules/d3-geo/src/path/index.js"); +
8841/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoPath", function() { return _path_index__WEBPACK_IMPORTED_MODULE_13__["default"]; }); +
8842 +
8843/* harmony import */ var _projection_albers__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./projection/albers */ "./node_modules/d3-geo/src/projection/albers.js"); +
8844/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAlbers", function() { return _projection_albers__WEBPACK_IMPORTED_MODULE_14__["default"]; }); +
8845 +
8846/* harmony import */ var _projection_albersUsa__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./projection/albersUsa */ "./node_modules/d3-geo/src/projection/albersUsa.js"); +
8847/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAlbersUsa", function() { return _projection_albersUsa__WEBPACK_IMPORTED_MODULE_15__["default"]; }); +
8848 +
8849/* harmony import */ var _projection_azimuthalEqualArea__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./projection/azimuthalEqualArea */ "./node_modules/d3-geo/src/projection/azimuthalEqualArea.js"); +
8850/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualArea", function() { return _projection_azimuthalEqualArea__WEBPACK_IMPORTED_MODULE_16__["default"]; }); +
8851 +
8852/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualAreaRaw", function() { return _projection_azimuthalEqualArea__WEBPACK_IMPORTED_MODULE_16__["azimuthalEqualAreaRaw"]; }); +
8853 +
8854/* harmony import */ var _projection_azimuthalEquidistant__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./projection/azimuthalEquidistant */ "./node_modules/d3-geo/src/projection/azimuthalEquidistant.js"); +
8855/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistant", function() { return _projection_azimuthalEquidistant__WEBPACK_IMPORTED_MODULE_17__["default"]; }); +
8856 +
8857/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistantRaw", function() { return _projection_azimuthalEquidistant__WEBPACK_IMPORTED_MODULE_17__["azimuthalEquidistantRaw"]; }); +
8858 +
8859/* harmony import */ var _projection_conicConformal__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./projection/conicConformal */ "./node_modules/d3-geo/src/projection/conicConformal.js"); +
8860/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicConformal", function() { return _projection_conicConformal__WEBPACK_IMPORTED_MODULE_18__["default"]; }); +
8861 +
8862/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicConformalRaw", function() { return _projection_conicConformal__WEBPACK_IMPORTED_MODULE_18__["conicConformalRaw"]; }); +
8863 +
8864/* harmony import */ var _projection_conicEqualArea__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./projection/conicEqualArea */ "./node_modules/d3-geo/src/projection/conicEqualArea.js"); +
8865/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualArea", function() { return _projection_conicEqualArea__WEBPACK_IMPORTED_MODULE_19__["default"]; }); +
8866 +
8867/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualAreaRaw", function() { return _projection_conicEqualArea__WEBPACK_IMPORTED_MODULE_19__["conicEqualAreaRaw"]; }); +
8868 +
8869/* harmony import */ var _projection_conicEquidistant__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./projection/conicEquidistant */ "./node_modules/d3-geo/src/projection/conicEquidistant.js"); +
8870/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistant", function() { return _projection_conicEquidistant__WEBPACK_IMPORTED_MODULE_20__["default"]; }); +
8871 +
8872/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistantRaw", function() { return _projection_conicEquidistant__WEBPACK_IMPORTED_MODULE_20__["conicEquidistantRaw"]; }); +
8873 +
8874/* harmony import */ var _projection_equalEarth__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./projection/equalEarth */ "./node_modules/d3-geo/src/projection/equalEarth.js"); +
8875/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEqualEarth", function() { return _projection_equalEarth__WEBPACK_IMPORTED_MODULE_21__["default"]; }); +
8876 +
8877/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEqualEarthRaw", function() { return _projection_equalEarth__WEBPACK_IMPORTED_MODULE_21__["equalEarthRaw"]; }); +
8878 +
8879/* harmony import */ var _projection_equirectangular__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./projection/equirectangular */ "./node_modules/d3-geo/src/projection/equirectangular.js"); +
8880/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangular", function() { return _projection_equirectangular__WEBPACK_IMPORTED_MODULE_22__["default"]; }); +
8881 +
8882/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangularRaw", function() { return _projection_equirectangular__WEBPACK_IMPORTED_MODULE_22__["equirectangularRaw"]; }); +
8883 +
8884/* harmony import */ var _projection_gnomonic__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./projection/gnomonic */ "./node_modules/d3-geo/src/projection/gnomonic.js"); +
8885/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGnomonic", function() { return _projection_gnomonic__WEBPACK_IMPORTED_MODULE_23__["default"]; }); +
8886 +
8887/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGnomonicRaw", function() { return _projection_gnomonic__WEBPACK_IMPORTED_MODULE_23__["gnomonicRaw"]; }); +
8888 +
8889/* harmony import */ var _projection_identity__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./projection/identity */ "./node_modules/d3-geo/src/projection/identity.js"); +
8890/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoIdentity", function() { return _projection_identity__WEBPACK_IMPORTED_MODULE_24__["default"]; }); +
8891 +
8892/* harmony import */ var _projection_index__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./projection/index */ "./node_modules/d3-geo/src/projection/index.js"); +
8893/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoProjection", function() { return _projection_index__WEBPACK_IMPORTED_MODULE_25__["default"]; }); +
8894 +
8895/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoProjectionMutator", function() { return _projection_index__WEBPACK_IMPORTED_MODULE_25__["projectionMutator"]; }); +
8896 +
8897/* harmony import */ var _projection_mercator__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./projection/mercator */ "./node_modules/d3-geo/src/projection/mercator.js"); +
8898/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoMercator", function() { return _projection_mercator__WEBPACK_IMPORTED_MODULE_26__["default"]; }); +
8899 +
8900/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoMercatorRaw", function() { return _projection_mercator__WEBPACK_IMPORTED_MODULE_26__["mercatorRaw"]; }); +
8901 +
8902/* harmony import */ var _projection_naturalEarth1__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./projection/naturalEarth1 */ "./node_modules/d3-geo/src/projection/naturalEarth1.js"); +
8903/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoNaturalEarth1", function() { return _projection_naturalEarth1__WEBPACK_IMPORTED_MODULE_27__["default"]; }); +
8904 +
8905/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoNaturalEarth1Raw", function() { return _projection_naturalEarth1__WEBPACK_IMPORTED_MODULE_27__["naturalEarth1Raw"]; }); +
8906 +
8907/* harmony import */ var _projection_orthographic__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./projection/orthographic */ "./node_modules/d3-geo/src/projection/orthographic.js"); +
8908/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoOrthographic", function() { return _projection_orthographic__WEBPACK_IMPORTED_MODULE_28__["default"]; }); +
8909 +
8910/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoOrthographicRaw", function() { return _projection_orthographic__WEBPACK_IMPORTED_MODULE_28__["orthographicRaw"]; }); +
8911 +
8912/* harmony import */ var _projection_stereographic__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./projection/stereographic */ "./node_modules/d3-geo/src/projection/stereographic.js"); +
8913/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStereographic", function() { return _projection_stereographic__WEBPACK_IMPORTED_MODULE_29__["default"]; }); +
8914 +
8915/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStereographicRaw", function() { return _projection_stereographic__WEBPACK_IMPORTED_MODULE_29__["stereographicRaw"]; }); +
8916 +
8917/* harmony import */ var _projection_transverseMercator__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./projection/transverseMercator */ "./node_modules/d3-geo/src/projection/transverseMercator.js"); +
8918/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercator", function() { return _projection_transverseMercator__WEBPACK_IMPORTED_MODULE_30__["default"]; }); +
8919 +
8920/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercatorRaw", function() { return _projection_transverseMercator__WEBPACK_IMPORTED_MODULE_30__["transverseMercatorRaw"]; }); +
8921 +
8922/* harmony import */ var _rotation__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./rotation */ "./node_modules/d3-geo/src/rotation.js"); +
8923/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoRotation", function() { return _rotation__WEBPACK_IMPORTED_MODULE_31__["default"]; }); +
8924 +
8925/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./stream */ "./node_modules/d3-geo/src/stream.js"); +
8926/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStream", function() { return _stream__WEBPACK_IMPORTED_MODULE_32__["default"]; }); +
8927 +
8928/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./transform */ "./node_modules/d3-geo/src/transform.js"); +
8929/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransform", function() { return _transform__WEBPACK_IMPORTED_MODULE_33__["default"]; }); +
8930 +
8931 +
8932 +
8933 +
8934 +
8935 +
8936 +
8937 // DEPRECATED! Use d3.geoIdentity().clipExtent(…). +
8938 +
8939 +
8940 +
8941 +
8942 +
8943 +
8944 +
8945 +
8946 +
8947 +
8948 +
8949 +
8950 +
8951 +
8952 +
8953 +
8954 +
8955 +
8956 +
8957 +
8958 +
8959 +
8960 +
8961 +
8962 +
8963 +
8964 +
8965 +
8966 +
8967/***/ }), +
8968 +
8969/***/ "./node_modules/d3-geo/src/interpolate.js": +
8970/*!************************************************!*\ +
8971 !*** ./node_modules/d3-geo/src/interpolate.js ***! +
8972 \************************************************/ +
8973/*! exports provided: default */ +
8974/***/ (function(module, __webpack_exports__, __webpack_require__) { +
8975 +
8976"use strict"; +
8977__webpack_require__.r(__webpack_exports__); +
8978/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
8979 +
8980 +
8981/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
8982 var x0 = a[0] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], +
8983 y0 = a[1] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], +
8984 x1 = b[0] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], +
8985 y1 = b[1] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], +
8986 cy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y0), +
8987 sy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y0), +
8988 cy1 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y1), +
8989 sy1 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y1), +
8990 kx0 = cy0 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x0), +
8991 ky0 = cy0 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x0), +
8992 kx1 = cy1 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x1), +
8993 ky1 = cy1 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x1), +
8994 d = 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["haversin"])(y1 - y0) + cy0 * cy1 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["haversin"])(x1 - x0))), +
8995 k = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(d); +
8996 +
8997 var interpolate = d ? function(t) { +
8998 var B = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(t *= d) / k, +
8999 A = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(d - t) / k, +
9000 x = A * kx0 + B * kx1, +
9001 y = A * ky0 + B * ky1, +
9002 z = A * sy0 + B * sy1; +
9003 return [ +
9004 Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(y, x) * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"], +
9005 Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(z, Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(x * x + y * y)) * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"] +
9006 ]; +
9007 } : function() { +
9008 return [x0 * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"], y0 * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"]]; +
9009 }; +
9010 +
9011 interpolate.distance = d; +
9012 +
9013 return interpolate; +
9014}); +
9015 +
9016 +
9017/***/ }), +
9018 +
9019/***/ "./node_modules/d3-geo/src/length.js": +
9020/*!*******************************************!*\ +
9021 !*** ./node_modules/d3-geo/src/length.js ***! +
9022 \*******************************************/ +
9023/*! exports provided: default */ +
9024/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9025 +
9026"use strict"; +
9027__webpack_require__.r(__webpack_exports__); +
9028/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder */ "./node_modules/d3-geo/src/adder.js"); +
9029/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
9030/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./noop */ "./node_modules/d3-geo/src/noop.js"); +
9031/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stream */ "./node_modules/d3-geo/src/stream.js"); +
9032 +
9033 +
9034 +
9035 +
9036 +
9037var lengthSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), +
9038 lambda0, +
9039 sinPhi0, +
9040 cosPhi0; +
9041 +
9042var lengthStream = { +
9043 sphere: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
9044 point: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
9045 lineStart: lengthLineStart, +
9046 lineEnd: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
9047 polygonStart: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
9048 polygonEnd: _noop__WEBPACK_IMPORTED_MODULE_2__["default"] +
9049}; +
9050 +
9051function lengthLineStart() { +
9052 lengthStream.point = lengthPointFirst; +
9053 lengthStream.lineEnd = lengthLineEnd; +
9054} +
9055 +
9056function lengthLineEnd() { +
9057 lengthStream.point = lengthStream.lineEnd = _noop__WEBPACK_IMPORTED_MODULE_2__["default"]; +
9058} +
9059 +
9060function lengthPointFirst(lambda, phi) { +
9061 lambda *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"]; +
9062 lambda0 = lambda, sinPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi); +
9063 lengthStream.point = lengthPoint; +
9064} +
9065 +
9066function lengthPoint(lambda, phi) { +
9067 lambda *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"], phi *= _math__WEBPACK_IMPORTED_MODULE_1__["radians"]; +
9068 var sinPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), +
9069 cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi), +
9070 delta = Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda - lambda0), +
9071 cosDelta = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(delta), +
9072 sinDelta = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(delta), +
9073 x = cosPhi * sinDelta, +
9074 y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta, +
9075 z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta; +
9076 lengthSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["sqrt"])(x * x + y * y), z)); +
9077 lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi; +
9078} +
9079 +
9080/* harmony default export */ __webpack_exports__["default"] = (function(object) { +
9081 lengthSum.reset(); +
9082 Object(_stream__WEBPACK_IMPORTED_MODULE_3__["default"])(object, lengthStream); +
9083 return +lengthSum; +
9084}); +
9085 +
9086 +
9087/***/ }), +
9088 +
9089/***/ "./node_modules/d3-geo/src/math.js": +
9090/*!*****************************************!*\ +
9091 !*** ./node_modules/d3-geo/src/math.js ***! +
9092 \*****************************************/ +
9093/*! exports provided: epsilon, epsilon2, pi, halfPi, quarterPi, tau, degrees, radians, abs, atan, atan2, cos, ceil, exp, floor, log, pow, sin, sign, sqrt, tan, acos, asin, haversin */ +
9094/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9095 +
9096"use strict"; +
9097__webpack_require__.r(__webpack_exports__); +
9098/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon", function() { return epsilon; }); +
9099/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon2", function() { return epsilon2; }); +
9100/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pi", function() { return pi; }); +
9101/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "halfPi", function() { return halfPi; }); +
9102/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "quarterPi", function() { return quarterPi; }); +
9103/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tau", function() { return tau; }); +
9104/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "degrees", function() { return degrees; }); +
9105/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "radians", function() { return radians; }); +
9106/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "abs", function() { return abs; }); +
9107/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atan", function() { return atan; }); +
9108/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atan2", function() { return atan2; }); +
9109/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cos", function() { return cos; }); +
9110/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ceil", function() { return ceil; }); +
9111/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exp", function() { return exp; }); +
9112/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "floor", function() { return floor; }); +
9113/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "log", function() { return log; }); +
9114/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pow", function() { return pow; }); +
9115/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sin", function() { return sin; }); +
9116/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sign", function() { return sign; }); +
9117/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sqrt", function() { return sqrt; }); +
9118/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tan", function() { return tan; }); +
9119/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "acos", function() { return acos; }); +
9120/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asin", function() { return asin; }); +
9121/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "haversin", function() { return haversin; }); +
9122var epsilon = 1e-6; +
9123var epsilon2 = 1e-12; +
9124var pi = Math.PI; +
9125var halfPi = pi / 2; +
9126var quarterPi = pi / 4; +
9127var tau = pi * 2; +
9128 +
9129var degrees = 180 / pi; +
9130var radians = pi / 180; +
9131 +
9132var abs = Math.abs; +
9133var atan = Math.atan; +
9134var atan2 = Math.atan2; +
9135var cos = Math.cos; +
9136var ceil = Math.ceil; +
9137var exp = Math.exp; +
9138var floor = Math.floor; +
9139var log = Math.log; +
9140var pow = Math.pow; +
9141var sin = Math.sin; +
9142var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; +
9143var sqrt = Math.sqrt; +
9144var tan = Math.tan; +
9145 +
9146function acos(x) { +
9147 return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); +
9148} +
9149 +
9150function asin(x) { +
9151 return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x); +
9152} +
9153 +
9154function haversin(x) { +
9155 return (x = sin(x / 2)) * x; +
9156} +
9157 +
9158 +
9159/***/ }), +
9160 +
9161/***/ "./node_modules/d3-geo/src/noop.js": +
9162/*!*****************************************!*\ +
9163 !*** ./node_modules/d3-geo/src/noop.js ***! +
9164 \*****************************************/ +
9165/*! exports provided: default */ +
9166/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9167 +
9168"use strict"; +
9169__webpack_require__.r(__webpack_exports__); +
9170/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return noop; }); +
9171function noop() {} +
9172 +
9173 +
9174/***/ }), +
9175 +
9176/***/ "./node_modules/d3-geo/src/path/area.js": +
9177/*!**********************************************!*\ +
9178 !*** ./node_modules/d3-geo/src/path/area.js ***! +
9179 \**********************************************/ +
9180/*! exports provided: default */ +
9181/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9182 +
9183"use strict"; +
9184__webpack_require__.r(__webpack_exports__); +
9185/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../adder */ "./node_modules/d3-geo/src/adder.js"); +
9186/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
9187/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../noop */ "./node_modules/d3-geo/src/noop.js"); +
9188 +
9189 +
9190 +
9191 +
9192var areaSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), +
9193 areaRingSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), +
9194 x00, +
9195 y00, +
9196 x0, +
9197 y0; +
9198 +
9199var areaStream = { +
9200 point: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
9201 lineStart: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
9202 lineEnd: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
9203 polygonStart: function() { +
9204 areaStream.lineStart = areaRingStart; +
9205 areaStream.lineEnd = areaRingEnd; +
9206 }, +
9207 polygonEnd: function() { +
9208 areaStream.lineStart = areaStream.lineEnd = areaStream.point = _noop__WEBPACK_IMPORTED_MODULE_2__["default"]; +
9209 areaSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(areaRingSum)); +
9210 areaRingSum.reset(); +
9211 }, +
9212 result: function() { +
9213 var area = areaSum / 2; +
9214 areaSum.reset(); +
9215 return area; +
9216 } +
9217}; +
9218 +
9219function areaRingStart() { +
9220 areaStream.point = areaPointFirst; +
9221} +
9222 +
9223function areaPointFirst(x, y) { +
9224 areaStream.point = areaPoint; +
9225 x00 = x0 = x, y00 = y0 = y; +
9226} +
9227 +
9228function areaPoint(x, y) { +
9229 areaRingSum.add(y0 * x - x0 * y); +
9230 x0 = x, y0 = y; +
9231} +
9232 +
9233function areaRingEnd() { +
9234 areaPoint(x00, y00); +
9235} +
9236 +
9237/* harmony default export */ __webpack_exports__["default"] = (areaStream); +
9238 +
9239 +
9240/***/ }), +
9241 +
9242/***/ "./node_modules/d3-geo/src/path/bounds.js": +
9243/*!************************************************!*\ +
9244 !*** ./node_modules/d3-geo/src/path/bounds.js ***! +
9245 \************************************************/ +
9246/*! exports provided: default */ +
9247/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9248 +
9249"use strict"; +
9250__webpack_require__.r(__webpack_exports__); +
9251/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "./node_modules/d3-geo/src/noop.js"); +
9252 +
9253 +
9254var x0 = Infinity, +
9255 y0 = x0, +
9256 x1 = -x0, +
9257 y1 = x1; +
9258 +
9259var boundsStream = { +
9260 point: boundsPoint, +
9261 lineStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
9262 lineEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
9263 polygonStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
9264 polygonEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
9265 result: function() { +
9266 var bounds = [[x0, y0], [x1, y1]]; +
9267 x1 = y1 = -(y0 = x0 = Infinity); +
9268 return bounds; +
9269 } +
9270}; +
9271 +
9272function boundsPoint(x, y) { +
9273 if (x < x0) x0 = x; +
9274 if (x > x1) x1 = x; +
9275 if (y < y0) y0 = y; +
9276 if (y > y1) y1 = y; +
9277} +
9278 +
9279/* harmony default export */ __webpack_exports__["default"] = (boundsStream); +
9280 +
9281 +
9282/***/ }), +
9283 +
9284/***/ "./node_modules/d3-geo/src/path/centroid.js": +
9285/*!**************************************************!*\ +
9286 !*** ./node_modules/d3-geo/src/path/centroid.js ***! +
9287 \**************************************************/ +
9288/*! exports provided: default */ +
9289/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9290 +
9291"use strict"; +
9292__webpack_require__.r(__webpack_exports__); +
9293/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
9294 +
9295 +
9296// TODO Enforce positive area for exterior, negative area for interior? +
9297 +
9298var X0 = 0, +
9299 Y0 = 0, +
9300 Z0 = 0, +
9301 X1 = 0, +
9302 Y1 = 0, +
9303 Z1 = 0, +
9304 X2 = 0, +
9305 Y2 = 0, +
9306 Z2 = 0, +
9307 x00, +
9308 y00, +
9309 x0, +
9310 y0; +
9311 +
9312var centroidStream = { +
9313 point: centroidPoint, +
9314 lineStart: centroidLineStart, +
9315 lineEnd: centroidLineEnd, +
9316 polygonStart: function() { +
9317 centroidStream.lineStart = centroidRingStart; +
9318 centroidStream.lineEnd = centroidRingEnd; +
9319 }, +
9320 polygonEnd: function() { +
9321 centroidStream.point = centroidPoint; +
9322 centroidStream.lineStart = centroidLineStart; +
9323 centroidStream.lineEnd = centroidLineEnd; +
9324 }, +
9325 result: function() { +
9326 var centroid = Z2 ? [X2 / Z2, Y2 / Z2] +
9327 : Z1 ? [X1 / Z1, Y1 / Z1] +
9328 : Z0 ? [X0 / Z0, Y0 / Z0] +
9329 : [NaN, NaN]; +
9330 X0 = Y0 = Z0 = +
9331 X1 = Y1 = Z1 = +
9332 X2 = Y2 = Z2 = 0; +
9333 return centroid; +
9334 } +
9335}; +
9336 +
9337function centroidPoint(x, y) { +
9338 X0 += x; +
9339 Y0 += y; +
9340 ++Z0; +
9341} +
9342 +
9343function centroidLineStart() { +
9344 centroidStream.point = centroidPointFirstLine; +
9345} +
9346 +
9347function centroidPointFirstLine(x, y) { +
9348 centroidStream.point = centroidPointLine; +
9349 centroidPoint(x0 = x, y0 = y); +
9350} +
9351 +
9352function centroidPointLine(x, y) { +
9353 var dx = x - x0, dy = y - y0, z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(dx * dx + dy * dy); +
9354 X1 += z * (x0 + x) / 2; +
9355 Y1 += z * (y0 + y) / 2; +
9356 Z1 += z; +
9357 centroidPoint(x0 = x, y0 = y); +
9358} +
9359 +
9360function centroidLineEnd() { +
9361 centroidStream.point = centroidPoint; +
9362} +
9363 +
9364function centroidRingStart() { +
9365 centroidStream.point = centroidPointFirstRing; +
9366} +
9367 +
9368function centroidRingEnd() { +
9369 centroidPointRing(x00, y00); +
9370} +
9371 +
9372function centroidPointFirstRing(x, y) { +
9373 centroidStream.point = centroidPointRing; +
9374 centroidPoint(x00 = x0 = x, y00 = y0 = y); +
9375} +
9376 +
9377function centroidPointRing(x, y) { +
9378 var dx = x - x0, +
9379 dy = y - y0, +
9380 z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(dx * dx + dy * dy); +
9381 +
9382 X1 += z * (x0 + x) / 2; +
9383 Y1 += z * (y0 + y) / 2; +
9384 Z1 += z; +
9385 +
9386 z = y0 * x - x0 * y; +
9387 X2 += z * (x0 + x); +
9388 Y2 += z * (y0 + y); +
9389 Z2 += z * 3; +
9390 centroidPoint(x0 = x, y0 = y); +
9391} +
9392 +
9393/* harmony default export */ __webpack_exports__["default"] = (centroidStream); +
9394 +
9395 +
9396/***/ }), +
9397 +
9398/***/ "./node_modules/d3-geo/src/path/context.js": +
9399/*!*************************************************!*\ +
9400 !*** ./node_modules/d3-geo/src/path/context.js ***! +
9401 \*************************************************/ +
9402/*! exports provided: default */ +
9403/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9404 +
9405"use strict"; +
9406__webpack_require__.r(__webpack_exports__); +
9407/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return PathContext; }); +
9408/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
9409/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop */ "./node_modules/d3-geo/src/noop.js"); +
9410 +
9411 +
9412 +
9413function PathContext(context) { +
9414 this._context = context; +
9415} +
9416 +
9417PathContext.prototype = { +
9418 _radius: 4.5, +
9419 pointRadius: function(_) { +
9420 return this._radius = _, this; +
9421 }, +
9422 polygonStart: function() { +
9423 this._line = 0; +
9424 }, +
9425 polygonEnd: function() { +
9426 this._line = NaN; +
9427 }, +
9428 lineStart: function() { +
9429 this._point = 0; +
9430 }, +
9431 lineEnd: function() { +
9432 if (this._line === 0) this._context.closePath(); +
9433 this._point = NaN; +
9434 }, +
9435 point: function(x, y) { +
9436 switch (this._point) { +
9437 case 0: { +
9438 this._context.moveTo(x, y); +
9439 this._point = 1; +
9440 break; +
9441 } +
9442 case 1: { +
9443 this._context.lineTo(x, y); +
9444 break; +
9445 } +
9446 default: { +
9447 this._context.moveTo(x + this._radius, y); +
9448 this._context.arc(x, y, this._radius, 0, _math__WEBPACK_IMPORTED_MODULE_0__["tau"]); +
9449 break; +
9450 } +
9451 } +
9452 }, +
9453 result: _noop__WEBPACK_IMPORTED_MODULE_1__["default"] +
9454}; +
9455 +
9456 +
9457/***/ }), +
9458 +
9459/***/ "./node_modules/d3-geo/src/path/index.js": +
9460/*!***********************************************!*\ +
9461 !*** ./node_modules/d3-geo/src/path/index.js ***! +
9462 \***********************************************/ +
9463/*! exports provided: default */ +
9464/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9465 +
9466"use strict"; +
9467__webpack_require__.r(__webpack_exports__); +
9468/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../identity */ "./node_modules/d3-geo/src/identity.js"); +
9469/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stream */ "./node_modules/d3-geo/src/stream.js"); +
9470/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./area */ "./node_modules/d3-geo/src/path/area.js"); +
9471/* harmony import */ var _bounds__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bounds */ "./node_modules/d3-geo/src/path/bounds.js"); +
9472/* harmony import */ var _centroid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./centroid */ "./node_modules/d3-geo/src/path/centroid.js"); +
9473/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./context */ "./node_modules/d3-geo/src/path/context.js"); +
9474/* harmony import */ var _measure__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./measure */ "./node_modules/d3-geo/src/path/measure.js"); +
9475/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./string */ "./node_modules/d3-geo/src/path/string.js"); +
9476 +
9477 +
9478 +
9479 +
9480 +
9481 +
9482 +
9483 +
9484 +
9485/* harmony default export */ __webpack_exports__["default"] = (function(projection, context) { +
9486 var pointRadius = 4.5, +
9487 projectionStream, +
9488 contextStream; +
9489 +
9490 function path(object) { +
9491 if (object) { +
9492 if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); +
9493 Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(contextStream)); +
9494 } +
9495 return contextStream.result(); +
9496 } +
9497 +
9498 path.area = function(object) { +
9499 Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(_area__WEBPACK_IMPORTED_MODULE_2__["default"])); +
9500 return _area__WEBPACK_IMPORTED_MODULE_2__["default"].result(); +
9501 }; +
9502 +
9503 path.measure = function(object) { +
9504 Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(_measure__WEBPACK_IMPORTED_MODULE_6__["default"])); +
9505 return _measure__WEBPACK_IMPORTED_MODULE_6__["default"].result(); +
9506 }; +
9507 +
9508 path.bounds = function(object) { +
9509 Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(_bounds__WEBPACK_IMPORTED_MODULE_3__["default"])); +
9510 return _bounds__WEBPACK_IMPORTED_MODULE_3__["default"].result(); +
9511 }; +
9512 +
9513 path.centroid = function(object) { +
9514 Object(_stream__WEBPACK_IMPORTED_MODULE_1__["default"])(object, projectionStream(_centroid__WEBPACK_IMPORTED_MODULE_4__["default"])); +
9515 return _centroid__WEBPACK_IMPORTED_MODULE_4__["default"].result(); +
9516 }; +
9517 +
9518 path.projection = function(_) { +
9519 return arguments.length ? (projectionStream = _ == null ? (projection = null, _identity__WEBPACK_IMPORTED_MODULE_0__["default"]) : (projection = _).stream, path) : projection; +
9520 }; +
9521 +
9522 path.context = function(_) { +
9523 if (!arguments.length) return context; +
9524 contextStream = _ == null ? (context = null, new _string__WEBPACK_IMPORTED_MODULE_7__["default"]) : new _context__WEBPACK_IMPORTED_MODULE_5__["default"](context = _); +
9525 if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); +
9526 return path; +
9527 }; +
9528 +
9529 path.pointRadius = function(_) { +
9530 if (!arguments.length) return pointRadius; +
9531 pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); +
9532 return path; +
9533 }; +
9534 +
9535 return path.projection(projection).context(context); +
9536}); +
9537 +
9538 +
9539/***/ }), +
9540 +
9541/***/ "./node_modules/d3-geo/src/path/measure.js": +
9542/*!*************************************************!*\ +
9543 !*** ./node_modules/d3-geo/src/path/measure.js ***! +
9544 \*************************************************/ +
9545/*! exports provided: default */ +
9546/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9547 +
9548"use strict"; +
9549__webpack_require__.r(__webpack_exports__); +
9550/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../adder */ "./node_modules/d3-geo/src/adder.js"); +
9551/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
9552/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../noop */ "./node_modules/d3-geo/src/noop.js"); +
9553 +
9554 +
9555 +
9556 +
9557var lengthSum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(), +
9558 lengthRing, +
9559 x00, +
9560 y00, +
9561 x0, +
9562 y0; +
9563 +
9564var lengthStream = { +
9565 point: _noop__WEBPACK_IMPORTED_MODULE_2__["default"], +
9566 lineStart: function() { +
9567 lengthStream.point = lengthPointFirst; +
9568 }, +
9569 lineEnd: function() { +
9570 if (lengthRing) lengthPoint(x00, y00); +
9571 lengthStream.point = _noop__WEBPACK_IMPORTED_MODULE_2__["default"]; +
9572 }, +
9573 polygonStart: function() { +
9574 lengthRing = true; +
9575 }, +
9576 polygonEnd: function() { +
9577 lengthRing = null; +
9578 }, +
9579 result: function() { +
9580 var length = +lengthSum; +
9581 lengthSum.reset(); +
9582 return length; +
9583 } +
9584}; +
9585 +
9586function lengthPointFirst(x, y) { +
9587 lengthStream.point = lengthPoint; +
9588 x00 = x0 = x, y00 = y0 = y; +
9589} +
9590 +
9591function lengthPoint(x, y) { +
9592 x0 -= x, y0 -= y; +
9593 lengthSum.add(Object(_math__WEBPACK_IMPORTED_MODULE_1__["sqrt"])(x0 * x0 + y0 * y0)); +
9594 x0 = x, y0 = y; +
9595} +
9596 +
9597/* harmony default export */ __webpack_exports__["default"] = (lengthStream); +
9598 +
9599 +
9600/***/ }), +
9601 +
9602/***/ "./node_modules/d3-geo/src/path/string.js": +
9603/*!************************************************!*\ +
9604 !*** ./node_modules/d3-geo/src/path/string.js ***! +
9605 \************************************************/ +
9606/*! exports provided: default */ +
9607/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9608 +
9609"use strict"; +
9610__webpack_require__.r(__webpack_exports__); +
9611/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return PathString; }); +
9612function PathString() { +
9613 this._string = []; +
9614} +
9615 +
9616PathString.prototype = { +
9617 _radius: 4.5, +
9618 _circle: circle(4.5), +
9619 pointRadius: function(_) { +
9620 if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; +
9621 return this; +
9622 }, +
9623 polygonStart: function() { +
9624 this._line = 0; +
9625 }, +
9626 polygonEnd: function() { +
9627 this._line = NaN; +
9628 }, +
9629 lineStart: function() { +
9630 this._point = 0; +
9631 }, +
9632 lineEnd: function() { +
9633 if (this._line === 0) this._string.push("Z"); +
9634 this._point = NaN; +
9635 }, +
9636 point: function(x, y) { +
9637 switch (this._point) { +
9638 case 0: { +
9639 this._string.push("M", x, ",", y); +
9640 this._point = 1; +
9641 break; +
9642 } +
9643 case 1: { +
9644 this._string.push("L", x, ",", y); +
9645 break; +
9646 } +
9647 default: { +
9648 if (this._circle == null) this._circle = circle(this._radius); +
9649 this._string.push("M", x, ",", y, this._circle); +
9650 break; +
9651 } +
9652 } +
9653 }, +
9654 result: function() { +
9655 if (this._string.length) { +
9656 var result = this._string.join(""); +
9657 this._string = []; +
9658 return result; +
9659 } else { +
9660 return null; +
9661 } +
9662 } +
9663}; +
9664 +
9665function circle(radius) { +
9666 return "m0," + radius +
9667 + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius +
9668 + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius +
9669 + "z"; +
9670} +
9671 +
9672 +
9673/***/ }), +
9674 +
9675/***/ "./node_modules/d3-geo/src/pointEqual.js": +
9676/*!***********************************************!*\ +
9677 !*** ./node_modules/d3-geo/src/pointEqual.js ***! +
9678 \***********************************************/ +
9679/*! exports provided: default */ +
9680/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9681 +
9682"use strict"; +
9683__webpack_require__.r(__webpack_exports__); +
9684/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
9685 +
9686 +
9687/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
9688 return Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(a[0] - b[0]) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"] && Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(a[1] - b[1]) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]; +
9689}); +
9690 +
9691 +
9692/***/ }), +
9693 +
9694/***/ "./node_modules/d3-geo/src/polygonContains.js": +
9695/*!****************************************************!*\ +
9696 !*** ./node_modules/d3-geo/src/polygonContains.js ***! +
9697 \****************************************************/ +
9698/*! exports provided: default */ +
9699/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9700 +
9701"use strict"; +
9702__webpack_require__.r(__webpack_exports__); +
9703/* harmony import */ var _adder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adder */ "./node_modules/d3-geo/src/adder.js"); +
9704/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cartesian */ "./node_modules/d3-geo/src/cartesian.js"); +
9705/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
9706 +
9707 +
9708 +
9709 +
9710var sum = Object(_adder__WEBPACK_IMPORTED_MODULE_0__["default"])(); +
9711 +
9712/* harmony default export */ __webpack_exports__["default"] = (function(polygon, point) { +
9713 var lambda = point[0], +
9714 phi = point[1], +
9715 sinPhi = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(phi), +
9716 normal = [Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(lambda), -Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(lambda), 0], +
9717 angle = 0, +
9718 winding = 0; +
9719 +
9720 sum.reset(); +
9721 +
9722 if (sinPhi === 1) phi = _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] + _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; +
9723 else if (sinPhi === -1) phi = -_math__WEBPACK_IMPORTED_MODULE_2__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]; +
9724 +
9725 for (var i = 0, n = polygon.length; i < n; ++i) { +
9726 if (!(m = (ring = polygon[i]).length)) continue; +
9727 var ring, +
9728 m, +
9729 point0 = ring[m - 1], +
9730 lambda0 = point0[0], +
9731 phi0 = point0[1] / 2 + _math__WEBPACK_IMPORTED_MODULE_2__["quarterPi"], +
9732 sinPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(phi0), +
9733 cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(phi0); +
9734 +
9735 for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { +
9736 var point1 = ring[j], +
9737 lambda1 = point1[0], +
9738 phi1 = point1[1] / 2 + _math__WEBPACK_IMPORTED_MODULE_2__["quarterPi"], +
9739 sinPhi1 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(phi1), +
9740 cosPhi1 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(phi1), +
9741 delta = lambda1 - lambda0, +
9742 sign = delta >= 0 ? 1 : -1, +
9743 absDelta = sign * delta, +
9744 antimeridian = absDelta > _math__WEBPACK_IMPORTED_MODULE_2__["pi"], +
9745 k = sinPhi0 * sinPhi1; +
9746 +
9747 sum.add(Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(k * sign * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(absDelta), cosPhi0 * cosPhi1 + k * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(absDelta))); +
9748 angle += antimeridian ? delta + sign * _math__WEBPACK_IMPORTED_MODULE_2__["tau"] : delta; +
9749 +
9750 // Are the longitudes either side of the point’s meridian (lambda), +
9751 // and are the latitudes smaller than the parallel (phi)? +
9752 if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { +
9753 var arc = Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesianCross"])(Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesian"])(point0), Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesian"])(point1)); +
9754 Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesianNormalizeInPlace"])(arc); +
9755 var intersection = Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesianCross"])(normal, arc); +
9756 Object(_cartesian__WEBPACK_IMPORTED_MODULE_1__["cartesianNormalizeInPlace"])(intersection); +
9757 var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * Object(_math__WEBPACK_IMPORTED_MODULE_2__["asin"])(intersection[2]); +
9758 if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { +
9759 winding += antimeridian ^ delta >= 0 ? 1 : -1; +
9760 } +
9761 } +
9762 } +
9763 } +
9764 +
9765 // First, determine whether the South pole is inside or outside: +
9766 // +
9767 // It is inside if: +
9768 // * the polygon winds around it in a clockwise direction. +
9769 // * the polygon does not (cumulatively) wind around it, but has a negative +
9770 // (counter-clockwise) area. +
9771 // +
9772 // Second, count the (signed) number of times a segment crosses a lambda +
9773 // from the point to the South pole. If it is zero, then the point is the +
9774 // same side as the South pole. +
9775 +
9776 return (angle < -_math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] || angle < _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] && sum < -_math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) ^ (winding & 1); +
9777}); +
9778 +
9779 +
9780/***/ }), +
9781 +
9782/***/ "./node_modules/d3-geo/src/projection/albers.js": +
9783/*!******************************************************!*\ +
9784 !*** ./node_modules/d3-geo/src/projection/albers.js ***! +
9785 \******************************************************/ +
9786/*! exports provided: default */ +
9787/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9788 +
9789"use strict"; +
9790__webpack_require__.r(__webpack_exports__); +
9791/* harmony import */ var _conicEqualArea__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./conicEqualArea */ "./node_modules/d3-geo/src/projection/conicEqualArea.js"); +
9792 +
9793 +
9794/* harmony default export */ __webpack_exports__["default"] = (function() { +
9795 return Object(_conicEqualArea__WEBPACK_IMPORTED_MODULE_0__["default"])() +
9796 .parallels([29.5, 45.5]) +
9797 .scale(1070) +
9798 .translate([480, 250]) +
9799 .rotate([96, 0]) +
9800 .center([-0.6, 38.7]); +
9801}); +
9802 +
9803 +
9804/***/ }), +
9805 +
9806/***/ "./node_modules/d3-geo/src/projection/albersUsa.js": +
9807/*!*********************************************************!*\ +
9808 !*** ./node_modules/d3-geo/src/projection/albersUsa.js ***! +
9809 \*********************************************************/ +
9810/*! exports provided: default */ +
9811/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9812 +
9813"use strict"; +
9814__webpack_require__.r(__webpack_exports__); +
9815/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
9816/* harmony import */ var _albers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./albers */ "./node_modules/d3-geo/src/projection/albers.js"); +
9817/* harmony import */ var _conicEqualArea__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conicEqualArea */ "./node_modules/d3-geo/src/projection/conicEqualArea.js"); +
9818/* harmony import */ var _fit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fit */ "./node_modules/d3-geo/src/projection/fit.js"); +
9819 +
9820 +
9821 +
9822 +
9823 +
9824// The projections must have mutually exclusive clip regions on the sphere, +
9825// as this will avoid emitting interleaving lines and polygons. +
9826function multiplex(streams) { +
9827 var n = streams.length; +
9828 return { +
9829 point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, +
9830 sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, +
9831 lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, +
9832 lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, +
9833 polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, +
9834 polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } +
9835 }; +
9836} +
9837 +
9838// A composite projection for the United States, configured by default for +
9839// 960×500. The projection also works quite well at 960×600 if you change the +
9840// scale to 1285 and adjust the translate accordingly. The set of standard +
9841// parallels for each region comes from USGS, which is published here: +
9842// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers +
9843/* harmony default export */ __webpack_exports__["default"] = (function() { +
9844 var cache, +
9845 cacheStream, +
9846 lower48 = Object(_albers__WEBPACK_IMPORTED_MODULE_1__["default"])(), lower48Point, +
9847 alaska = Object(_conicEqualArea__WEBPACK_IMPORTED_MODULE_2__["default"])().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 +
9848 hawaii = Object(_conicEqualArea__WEBPACK_IMPORTED_MODULE_2__["default"])().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 +
9849 point, pointStream = {point: function(x, y) { point = [x, y]; }}; +
9850 +
9851 function albersUsa(coordinates) { +
9852 var x = coordinates[0], y = coordinates[1]; +
9853 return point = null, +
9854 (lower48Point.point(x, y), point) +
9855 || (alaskaPoint.point(x, y), point) +
9856 || (hawaiiPoint.point(x, y), point); +
9857 } +
9858 +
9859 albersUsa.invert = function(coordinates) { +
9860 var k = lower48.scale(), +
9861 t = lower48.translate(), +
9862 x = (coordinates[0] - t[0]) / k, +
9863 y = (coordinates[1] - t[1]) / k; +
9864 return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska +
9865 : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii +
9866 : lower48).invert(coordinates); +
9867 }; +
9868 +
9869 albersUsa.stream = function(stream) { +
9870 return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); +
9871 }; +
9872 +
9873 albersUsa.precision = function(_) { +
9874 if (!arguments.length) return lower48.precision(); +
9875 lower48.precision(_), alaska.precision(_), hawaii.precision(_); +
9876 return reset(); +
9877 }; +
9878 +
9879 albersUsa.scale = function(_) { +
9880 if (!arguments.length) return lower48.scale(); +
9881 lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); +
9882 return albersUsa.translate(lower48.translate()); +
9883 }; +
9884 +
9885 albersUsa.translate = function(_) { +
9886 if (!arguments.length) return lower48.translate(); +
9887 var k = lower48.scale(), x = +_[0], y = +_[1]; +
9888 +
9889 lower48Point = lower48 +
9890 .translate(_) +
9891 .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) +
9892 .stream(pointStream); +
9893 +
9894 alaskaPoint = alaska +
9895 .translate([x - 0.307 * k, y + 0.201 * k]) +
9896 .clipExtent([[x - 0.425 * k + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"], y + 0.120 * k + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]], [x - 0.214 * k - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"], y + 0.234 * k - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]]]) +
9897 .stream(pointStream); +
9898 +
9899 hawaiiPoint = hawaii +
9900 .translate([x - 0.205 * k, y + 0.212 * k]) +
9901 .clipExtent([[x - 0.214 * k + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"], y + 0.166 * k + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]], [x - 0.115 * k - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"], y + 0.234 * k - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]]]) +
9902 .stream(pointStream); +
9903 +
9904 return reset(); +
9905 }; +
9906 +
9907 albersUsa.fitExtent = function(extent, object) { +
9908 return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitExtent"])(albersUsa, extent, object); +
9909 }; +
9910 +
9911 albersUsa.fitSize = function(size, object) { +
9912 return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitSize"])(albersUsa, size, object); +
9913 }; +
9914 +
9915 albersUsa.fitWidth = function(width, object) { +
9916 return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitWidth"])(albersUsa, width, object); +
9917 }; +
9918 +
9919 albersUsa.fitHeight = function(height, object) { +
9920 return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitHeight"])(albersUsa, height, object); +
9921 }; +
9922 +
9923 function reset() { +
9924 cache = cacheStream = null; +
9925 return albersUsa; +
9926 } +
9927 +
9928 return albersUsa.scale(1070); +
9929}); +
9930 +
9931 +
9932/***/ }), +
9933 +
9934/***/ "./node_modules/d3-geo/src/projection/azimuthal.js": +
9935/*!*********************************************************!*\ +
9936 !*** ./node_modules/d3-geo/src/projection/azimuthal.js ***! +
9937 \*********************************************************/ +
9938/*! exports provided: azimuthalRaw, azimuthalInvert */ +
9939/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9940 +
9941"use strict"; +
9942__webpack_require__.r(__webpack_exports__); +
9943/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "azimuthalRaw", function() { return azimuthalRaw; }); +
9944/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "azimuthalInvert", function() { return azimuthalInvert; }); +
9945/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
9946 +
9947 +
9948function azimuthalRaw(scale) { +
9949 return function(x, y) { +
9950 var cx = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x), +
9951 cy = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y), +
9952 k = scale(cx * cy); +
9953 return [ +
9954 k * cy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x), +
9955 k * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y) +
9956 ]; +
9957 } +
9958} +
9959 +
9960function azimuthalInvert(angle) { +
9961 return function(x, y) { +
9962 var z = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(x * x + y * y), +
9963 c = angle(z), +
9964 sc = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(c), +
9965 cc = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(c); +
9966 return [ +
9967 Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(x * sc, z * cc), +
9968 Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(z && y * sc / z) +
9969 ]; +
9970 } +
9971} +
9972 +
9973 +
9974/***/ }), +
9975 +
9976/***/ "./node_modules/d3-geo/src/projection/azimuthalEqualArea.js": +
9977/*!******************************************************************!*\ +
9978 !*** ./node_modules/d3-geo/src/projection/azimuthalEqualArea.js ***! +
9979 \******************************************************************/ +
9980/*! exports provided: azimuthalEqualAreaRaw, default */ +
9981/***/ (function(module, __webpack_exports__, __webpack_require__) { +
9982 +
9983"use strict"; +
9984__webpack_require__.r(__webpack_exports__); +
9985/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "azimuthalEqualAreaRaw", function() { return azimuthalEqualAreaRaw; }); +
9986/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
9987/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "./node_modules/d3-geo/src/projection/azimuthal.js"); +
9988/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/projection/index.js"); +
9989 +
9990 +
9991 +
9992 +
9993var azimuthalEqualAreaRaw = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalRaw"])(function(cxcy) { +
9994 return Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(2 / (1 + cxcy)); +
9995}); +
9996 +
9997azimuthalEqualAreaRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(function(z) { +
9998 return 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(z / 2); +
9999}); +
10000 +
10001/* harmony default export */ __webpack_exports__["default"] = (function() { +
10002 return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(azimuthalEqualAreaRaw) +
10003 .scale(124.75) +
10004 .clipAngle(180 - 1e-3); +
10005}); +
10006 +
10007 +
10008/***/ }), +
10009 +
10010/***/ "./node_modules/d3-geo/src/projection/azimuthalEquidistant.js": +
10011/*!********************************************************************!*\ +
10012 !*** ./node_modules/d3-geo/src/projection/azimuthalEquidistant.js ***! +
10013 \********************************************************************/ +
10014/*! exports provided: azimuthalEquidistantRaw, default */ +
10015/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10016 +
10017"use strict"; +
10018__webpack_require__.r(__webpack_exports__); +
10019/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "azimuthalEquidistantRaw", function() { return azimuthalEquidistantRaw; }); +
10020/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10021/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "./node_modules/d3-geo/src/projection/azimuthal.js"); +
10022/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/projection/index.js"); +
10023 +
10024 +
10025 +
10026 +
10027var azimuthalEquidistantRaw = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalRaw"])(function(c) { +
10028 return (c = Object(_math__WEBPACK_IMPORTED_MODULE_0__["acos"])(c)) && c / Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(c); +
10029}); +
10030 +
10031azimuthalEquidistantRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(function(z) { +
10032 return z; +
10033}); +
10034 +
10035/* harmony default export */ __webpack_exports__["default"] = (function() { +
10036 return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(azimuthalEquidistantRaw) +
10037 .scale(79.4188) +
10038 .clipAngle(180 - 1e-3); +
10039}); +
10040 +
10041 +
10042/***/ }), +
10043 +
10044/***/ "./node_modules/d3-geo/src/projection/conic.js": +
10045/*!*****************************************************!*\ +
10046 !*** ./node_modules/d3-geo/src/projection/conic.js ***! +
10047 \*****************************************************/ +
10048/*! exports provided: conicProjection */ +
10049/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10050 +
10051"use strict"; +
10052__webpack_require__.r(__webpack_exports__); +
10053/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "conicProjection", function() { return conicProjection; }); +
10054/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10055/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/projection/index.js"); +
10056 +
10057 +
10058 +
10059function conicProjection(projectAt) { +
10060 var phi0 = 0, +
10061 phi1 = _math__WEBPACK_IMPORTED_MODULE_0__["pi"] / 3, +
10062 m = Object(_index__WEBPACK_IMPORTED_MODULE_1__["projectionMutator"])(projectAt), +
10063 p = m(phi0, phi1); +
10064 +
10065 p.parallels = function(_) { +
10066 return arguments.length ? m(phi0 = _[0] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"], phi1 = _[1] * _math__WEBPACK_IMPORTED_MODULE_0__["radians"]) : [phi0 * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"], phi1 * _math__WEBPACK_IMPORTED_MODULE_0__["degrees"]]; +
10067 }; +
10068 +
10069 return p; +
10070} +
10071 +
10072 +
10073/***/ }), +
10074 +
10075/***/ "./node_modules/d3-geo/src/projection/conicConformal.js": +
10076/*!**************************************************************!*\ +
10077 !*** ./node_modules/d3-geo/src/projection/conicConformal.js ***! +
10078 \**************************************************************/ +
10079/*! exports provided: conicConformalRaw, default */ +
10080/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10081 +
10082"use strict"; +
10083__webpack_require__.r(__webpack_exports__); +
10084/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "conicConformalRaw", function() { return conicConformalRaw; }); +
10085/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10086/* harmony import */ var _conic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conic */ "./node_modules/d3-geo/src/projection/conic.js"); +
10087/* harmony import */ var _mercator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mercator */ "./node_modules/d3-geo/src/projection/mercator.js"); +
10088 +
10089 +
10090 +
10091 +
10092function tany(y) { +
10093 return Object(_math__WEBPACK_IMPORTED_MODULE_0__["tan"])((_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + y) / 2); +
10094} +
10095 +
10096function conicConformalRaw(y0, y1) { +
10097 var cy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y0), +
10098 n = y0 === y1 ? Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y0) : Object(_math__WEBPACK_IMPORTED_MODULE_0__["log"])(cy0 / Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y1)) / Object(_math__WEBPACK_IMPORTED_MODULE_0__["log"])(tany(y1) / tany(y0)), +
10099 f = cy0 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["pow"])(tany(y0), n) / n; +
10100 +
10101 if (!n) return _mercator__WEBPACK_IMPORTED_MODULE_2__["mercatorRaw"]; +
10102 +
10103 function project(x, y) { +
10104 if (f > 0) { if (y < -_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) y = -_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]; } +
10105 else { if (y > _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) y = _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] - _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]; } +
10106 var r = f / Object(_math__WEBPACK_IMPORTED_MODULE_0__["pow"])(tany(y), n); +
10107 return [r * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(n * x), f - r * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(n * x)]; +
10108 } +
10109 +
10110 project.invert = function(x, y) { +
10111 var fy = f - y, r = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(n) * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(x * x + fy * fy); +
10112 return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(x, Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(fy)) / n * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(fy), 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["pow"])(f / r, 1 / n)) - _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"]]; +
10113 }; +
10114 +
10115 return project; +
10116} +
10117 +
10118/* harmony default export */ __webpack_exports__["default"] = (function() { +
10119 return Object(_conic__WEBPACK_IMPORTED_MODULE_1__["conicProjection"])(conicConformalRaw) +
10120 .scale(109.5) +
10121 .parallels([30, 30]); +
10122}); +
10123 +
10124 +
10125/***/ }), +
10126 +
10127/***/ "./node_modules/d3-geo/src/projection/conicEqualArea.js": +
10128/*!**************************************************************!*\ +
10129 !*** ./node_modules/d3-geo/src/projection/conicEqualArea.js ***! +
10130 \**************************************************************/ +
10131/*! exports provided: conicEqualAreaRaw, default */ +
10132/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10133 +
10134"use strict"; +
10135__webpack_require__.r(__webpack_exports__); +
10136/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "conicEqualAreaRaw", function() { return conicEqualAreaRaw; }); +
10137/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10138/* harmony import */ var _conic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conic */ "./node_modules/d3-geo/src/projection/conic.js"); +
10139/* harmony import */ var _cylindricalEqualArea__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cylindricalEqualArea */ "./node_modules/d3-geo/src/projection/cylindricalEqualArea.js"); +
10140 +
10141 +
10142 +
10143 +
10144function conicEqualAreaRaw(y0, y1) { +
10145 var sy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y0), n = (sy0 + Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y1)) / 2; +
10146 +
10147 // Are the parallels symmetrical around the Equator? +
10148 if (Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(n) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) return Object(_cylindricalEqualArea__WEBPACK_IMPORTED_MODULE_2__["cylindricalEqualAreaRaw"])(y0); +
10149 +
10150 var c = 1 + sy0 * (2 * n - sy0), r0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(c) / n; +
10151 +
10152 function project(x, y) { +
10153 var r = Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(c - 2 * n * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y)) / n; +
10154 return [r * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x *= n), r0 - r * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x)]; +
10155 } +
10156 +
10157 project.invert = function(x, y) { +
10158 var r0y = r0 - y; +
10159 return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(x, Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(r0y)) / n * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(r0y), Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; +
10160 }; +
10161 +
10162 return project; +
10163} +
10164 +
10165/* harmony default export */ __webpack_exports__["default"] = (function() { +
10166 return Object(_conic__WEBPACK_IMPORTED_MODULE_1__["conicProjection"])(conicEqualAreaRaw) +
10167 .scale(155.424) +
10168 .center([0, 33.6442]); +
10169}); +
10170 +
10171 +
10172/***/ }), +
10173 +
10174/***/ "./node_modules/d3-geo/src/projection/conicEquidistant.js": +
10175/*!****************************************************************!*\ +
10176 !*** ./node_modules/d3-geo/src/projection/conicEquidistant.js ***! +
10177 \****************************************************************/ +
10178/*! exports provided: conicEquidistantRaw, default */ +
10179/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10180 +
10181"use strict"; +
10182__webpack_require__.r(__webpack_exports__); +
10183/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "conicEquidistantRaw", function() { return conicEquidistantRaw; }); +
10184/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10185/* harmony import */ var _conic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conic */ "./node_modules/d3-geo/src/projection/conic.js"); +
10186/* harmony import */ var _equirectangular__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./equirectangular */ "./node_modules/d3-geo/src/projection/equirectangular.js"); +
10187 +
10188 +
10189 +
10190 +
10191function conicEquidistantRaw(y0, y1) { +
10192 var cy0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y0), +
10193 n = y0 === y1 ? Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y0) : (cy0 - Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y1)) / (y1 - y0), +
10194 g = cy0 / n + y0; +
10195 +
10196 if (Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(n) < _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) return _equirectangular__WEBPACK_IMPORTED_MODULE_2__["equirectangularRaw"]; +
10197 +
10198 function project(x, y) { +
10199 var gy = g - y, nx = n * x; +
10200 return [gy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(nx), g - gy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(nx)]; +
10201 } +
10202 +
10203 project.invert = function(x, y) { +
10204 var gy = g - y; +
10205 return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan2"])(x, Object(_math__WEBPACK_IMPORTED_MODULE_0__["abs"])(gy)) / n * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(gy), g - Object(_math__WEBPACK_IMPORTED_MODULE_0__["sign"])(n) * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sqrt"])(x * x + gy * gy)]; +
10206 }; +
10207 +
10208 return project; +
10209} +
10210 +
10211/* harmony default export */ __webpack_exports__["default"] = (function() { +
10212 return Object(_conic__WEBPACK_IMPORTED_MODULE_1__["conicProjection"])(conicEquidistantRaw) +
10213 .scale(131.154) +
10214 .center([0, 13.9389]); +
10215}); +
10216 +
10217 +
10218/***/ }), +
10219 +
10220/***/ "./node_modules/d3-geo/src/projection/cylindricalEqualArea.js": +
10221/*!********************************************************************!*\ +
10222 !*** ./node_modules/d3-geo/src/projection/cylindricalEqualArea.js ***! +
10223 \********************************************************************/ +
10224/*! exports provided: cylindricalEqualAreaRaw */ +
10225/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10226 +
10227"use strict"; +
10228__webpack_require__.r(__webpack_exports__); +
10229/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cylindricalEqualAreaRaw", function() { return cylindricalEqualAreaRaw; }); +
10230/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10231 +
10232 +
10233function cylindricalEqualAreaRaw(phi0) { +
10234 var cosPhi0 = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(phi0); +
10235 +
10236 function forward(lambda, phi) { +
10237 return [lambda * cosPhi0, Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(phi) / cosPhi0]; +
10238 } +
10239 +
10240 forward.invert = function(x, y) { +
10241 return [x / cosPhi0, Object(_math__WEBPACK_IMPORTED_MODULE_0__["asin"])(y * cosPhi0)]; +
10242 }; +
10243 +
10244 return forward; +
10245} +
10246 +
10247 +
10248/***/ }), +
10249 +
10250/***/ "./node_modules/d3-geo/src/projection/equalEarth.js": +
10251/*!**********************************************************!*\ +
10252 !*** ./node_modules/d3-geo/src/projection/equalEarth.js ***! +
10253 \**********************************************************/ +
10254/*! exports provided: equalEarthRaw, default */ +
10255/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10256 +
10257"use strict"; +
10258__webpack_require__.r(__webpack_exports__); +
10259/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "equalEarthRaw", function() { return equalEarthRaw; }); +
10260/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./node_modules/d3-geo/src/projection/index.js"); +
10261/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math.js */ "./node_modules/d3-geo/src/math.js"); +
10262 +
10263 +
10264 +
10265var A1 = 1.340264, +
10266 A2 = -0.081106, +
10267 A3 = 0.000893, +
10268 A4 = 0.003796, +
10269 M = Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["sqrt"])(3) / 2, +
10270 iterations = 12; +
10271 +
10272function equalEarthRaw(lambda, phi) { +
10273 var l = Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["asin"])(M * Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi)), l2 = l * l, l6 = l2 * l2 * l2; +
10274 return [ +
10275 lambda * Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["cos"])(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))), +
10276 l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) +
10277 ]; +
10278} +
10279 +
10280equalEarthRaw.invert = function(x, y) { +
10281 var l = y, l2 = l * l, l6 = l2 * l2 * l2; +
10282 for (var i = 0, delta, fy, fpy; i < iterations; ++i) { +
10283 fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y; +
10284 fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2); +
10285 l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2; +
10286 if (Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["abs"])(delta) < _math_js__WEBPACK_IMPORTED_MODULE_1__["epsilon2"]) break; +
10287 } +
10288 return [ +
10289 M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["cos"])(l), +
10290 Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["asin"])(Object(_math_js__WEBPACK_IMPORTED_MODULE_1__["sin"])(l) / M) +
10291 ]; +
10292}; +
10293 +
10294/* harmony default export */ __webpack_exports__["default"] = (function() { +
10295 return Object(_index_js__WEBPACK_IMPORTED_MODULE_0__["default"])(equalEarthRaw) +
10296 .scale(177.158); +
10297}); +
10298 +
10299 +
10300/***/ }), +
10301 +
10302/***/ "./node_modules/d3-geo/src/projection/equirectangular.js": +
10303/*!***************************************************************!*\ +
10304 !*** ./node_modules/d3-geo/src/projection/equirectangular.js ***! +
10305 \***************************************************************/ +
10306/*! exports provided: equirectangularRaw, default */ +
10307/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10308 +
10309"use strict"; +
10310__webpack_require__.r(__webpack_exports__); +
10311/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "equirectangularRaw", function() { return equirectangularRaw; }); +
10312/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/projection/index.js"); +
10313 +
10314 +
10315function equirectangularRaw(lambda, phi) { +
10316 return [lambda, phi]; +
10317} +
10318 +
10319equirectangularRaw.invert = equirectangularRaw; +
10320 +
10321/* harmony default export */ __webpack_exports__["default"] = (function() { +
10322 return Object(_index__WEBPACK_IMPORTED_MODULE_0__["default"])(equirectangularRaw) +
10323 .scale(152.63); +
10324}); +
10325 +
10326 +
10327/***/ }), +
10328 +
10329/***/ "./node_modules/d3-geo/src/projection/fit.js": +
10330/*!***************************************************!*\ +
10331 !*** ./node_modules/d3-geo/src/projection/fit.js ***! +
10332 \***************************************************/ +
10333/*! exports provided: fitExtent, fitSize, fitWidth, fitHeight */ +
10334/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10335 +
10336"use strict"; +
10337__webpack_require__.r(__webpack_exports__); +
10338/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fitExtent", function() { return fitExtent; }); +
10339/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fitSize", function() { return fitSize; }); +
10340/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fitWidth", function() { return fitWidth; }); +
10341/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fitHeight", function() { return fitHeight; }); +
10342/* harmony import */ var _stream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../stream */ "./node_modules/d3-geo/src/stream.js"); +
10343/* harmony import */ var _path_bounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../path/bounds */ "./node_modules/d3-geo/src/path/bounds.js"); +
10344 +
10345 +
10346 +
10347function fit(projection, fitBounds, object) { +
10348 var clip = projection.clipExtent && projection.clipExtent(); +
10349 projection.scale(150).translate([0, 0]); +
10350 if (clip != null) projection.clipExtent(null); +
10351 Object(_stream__WEBPACK_IMPORTED_MODULE_0__["default"])(object, projection.stream(_path_bounds__WEBPACK_IMPORTED_MODULE_1__["default"])); +
10352 fitBounds(_path_bounds__WEBPACK_IMPORTED_MODULE_1__["default"].result()); +
10353 if (clip != null) projection.clipExtent(clip); +
10354 return projection; +
10355} +
10356 +
10357function fitExtent(projection, extent, object) { +
10358 return fit(projection, function(b) { +
10359 var w = extent[1][0] - extent[0][0], +
10360 h = extent[1][1] - extent[0][1], +
10361 k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), +
10362 x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, +
10363 y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; +
10364 projection.scale(150 * k).translate([x, y]); +
10365 }, object); +
10366} +
10367 +
10368function fitSize(projection, size, object) { +
10369 return fitExtent(projection, [[0, 0], size], object); +
10370} +
10371 +
10372function fitWidth(projection, width, object) { +
10373 return fit(projection, function(b) { +
10374 var w = +width, +
10375 k = w / (b[1][0] - b[0][0]), +
10376 x = (w - k * (b[1][0] + b[0][0])) / 2, +
10377 y = -k * b[0][1]; +
10378 projection.scale(150 * k).translate([x, y]); +
10379 }, object); +
10380} +
10381 +
10382function fitHeight(projection, height, object) { +
10383 return fit(projection, function(b) { +
10384 var h = +height, +
10385 k = h / (b[1][1] - b[0][1]), +
10386 x = -k * b[0][0], +
10387 y = (h - k * (b[1][1] + b[0][1])) / 2; +
10388 projection.scale(150 * k).translate([x, y]); +
10389 }, object); +
10390} +
10391 +
10392 +
10393/***/ }), +
10394 +
10395/***/ "./node_modules/d3-geo/src/projection/gnomonic.js": +
10396/*!********************************************************!*\ +
10397 !*** ./node_modules/d3-geo/src/projection/gnomonic.js ***! +
10398 \********************************************************/ +
10399/*! exports provided: gnomonicRaw, default */ +
10400/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10401 +
10402"use strict"; +
10403__webpack_require__.r(__webpack_exports__); +
10404/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gnomonicRaw", function() { return gnomonicRaw; }); +
10405/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10406/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "./node_modules/d3-geo/src/projection/azimuthal.js"); +
10407/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/projection/index.js"); +
10408 +
10409 +
10410 +
10411 +
10412function gnomonicRaw(x, y) { +
10413 var cy = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y), k = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x) * cy; +
10414 return [cy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x) / k, Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y) / k]; +
10415} +
10416 +
10417gnomonicRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(_math__WEBPACK_IMPORTED_MODULE_0__["atan"]); +
10418 +
10419/* harmony default export */ __webpack_exports__["default"] = (function() { +
10420 return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(gnomonicRaw) +
10421 .scale(144.049) +
10422 .clipAngle(60); +
10423}); +
10424 +
10425 +
10426/***/ }), +
10427 +
10428/***/ "./node_modules/d3-geo/src/projection/identity.js": +
10429/*!********************************************************!*\ +
10430 !*** ./node_modules/d3-geo/src/projection/identity.js ***! +
10431 \********************************************************/ +
10432/*! exports provided: default */ +
10433/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10434 +
10435"use strict"; +
10436__webpack_require__.r(__webpack_exports__); +
10437/* harmony import */ var _clip_rectangle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../clip/rectangle */ "./node_modules/d3-geo/src/clip/rectangle.js"); +
10438/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../identity */ "./node_modules/d3-geo/src/identity.js"); +
10439/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../transform */ "./node_modules/d3-geo/src/transform.js"); +
10440/* harmony import */ var _fit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fit */ "./node_modules/d3-geo/src/projection/fit.js"); +
10441 +
10442 +
10443 +
10444 +
10445 +
10446function scaleTranslate(kx, ky, tx, ty) { +
10447 return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? _identity__WEBPACK_IMPORTED_MODULE_1__["default"] : Object(_transform__WEBPACK_IMPORTED_MODULE_2__["transformer"])({ +
10448 point: function(x, y) { +
10449 this.stream.point(x * kx + tx, y * ky + ty); +
10450 } +
10451 }); +
10452} +
10453 +
10454/* harmony default export */ __webpack_exports__["default"] = (function() { +
10455 var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = _identity__WEBPACK_IMPORTED_MODULE_1__["default"], // scale, translate and reflect +
10456 x0 = null, y0, x1, y1, // clip extent +
10457 postclip = _identity__WEBPACK_IMPORTED_MODULE_1__["default"], +
10458 cache, +
10459 cacheStream, +
10460 projection; +
10461 +
10462 function reset() { +
10463 cache = cacheStream = null; +
10464 return projection; +
10465 } +
10466 +
10467 return projection = { +
10468 stream: function(stream) { +
10469 return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream)); +
10470 }, +
10471 postclip: function(_) { +
10472 return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; +
10473 }, +
10474 clipExtent: function(_) { +
10475 return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, _identity__WEBPACK_IMPORTED_MODULE_1__["default"]) : Object(_clip_rectangle__WEBPACK_IMPORTED_MODULE_0__["default"])(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; +
10476 }, +
10477 scale: function(_) { +
10478 return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k; +
10479 }, +
10480 translate: function(_) { +
10481 return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; +
10482 }, +
10483 reflectX: function(_) { +
10484 return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; +
10485 }, +
10486 reflectY: function(_) { +
10487 return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; +
10488 }, +
10489 fitExtent: function(extent, object) { +
10490 return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitExtent"])(projection, extent, object); +
10491 }, +
10492 fitSize: function(size, object) { +
10493 return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitSize"])(projection, size, object); +
10494 }, +
10495 fitWidth: function(width, object) { +
10496 return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitWidth"])(projection, width, object); +
10497 }, +
10498 fitHeight: function(height, object) { +
10499 return Object(_fit__WEBPACK_IMPORTED_MODULE_3__["fitHeight"])(projection, height, object); +
10500 } +
10501 }; +
10502}); +
10503 +
10504 +
10505/***/ }), +
10506 +
10507/***/ "./node_modules/d3-geo/src/projection/index.js": +
10508/*!*****************************************************!*\ +
10509 !*** ./node_modules/d3-geo/src/projection/index.js ***! +
10510 \*****************************************************/ +
10511/*! exports provided: default, projectionMutator */ +
10512/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10513 +
10514"use strict"; +
10515__webpack_require__.r(__webpack_exports__); +
10516/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return projection; }); +
10517/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "projectionMutator", function() { return projectionMutator; }); +
10518/* harmony import */ var _clip_antimeridian__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../clip/antimeridian */ "./node_modules/d3-geo/src/clip/antimeridian.js"); +
10519/* harmony import */ var _clip_circle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../clip/circle */ "./node_modules/d3-geo/src/clip/circle.js"); +
10520/* harmony import */ var _clip_rectangle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../clip/rectangle */ "./node_modules/d3-geo/src/clip/rectangle.js"); +
10521/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../compose */ "./node_modules/d3-geo/src/compose.js"); +
10522/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../identity */ "./node_modules/d3-geo/src/identity.js"); +
10523/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10524/* harmony import */ var _rotation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../rotation */ "./node_modules/d3-geo/src/rotation.js"); +
10525/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../transform */ "./node_modules/d3-geo/src/transform.js"); +
10526/* harmony import */ var _fit__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./fit */ "./node_modules/d3-geo/src/projection/fit.js"); +
10527/* harmony import */ var _resample__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./resample */ "./node_modules/d3-geo/src/projection/resample.js"); +
10528 +
10529 +
10530 +
10531 +
10532 +
10533 +
10534 +
10535 +
10536 +
10537 +
10538 +
10539var transformRadians = Object(_transform__WEBPACK_IMPORTED_MODULE_7__["transformer"])({ +
10540 point: function(x, y) { +
10541 this.stream.point(x * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], y * _math__WEBPACK_IMPORTED_MODULE_5__["radians"]); +
10542 } +
10543}); +
10544 +
10545function transformRotate(rotate) { +
10546 return Object(_transform__WEBPACK_IMPORTED_MODULE_7__["transformer"])({ +
10547 point: function(x, y) { +
10548 var r = rotate(x, y); +
10549 return this.stream.point(r[0], r[1]); +
10550 } +
10551 }); +
10552} +
10553 +
10554function scaleTranslate(k, dx, dy) { +
10555 function transform(x, y) { +
10556 return [dx + k * x, dy - k * y]; +
10557 } +
10558 transform.invert = function(x, y) { +
10559 return [(x - dx) / k, (dy - y) / k]; +
10560 }; +
10561 return transform; +
10562} +
10563 +
10564function scaleTranslateRotate(k, dx, dy, alpha) { +
10565 var cosAlpha = Object(_math__WEBPACK_IMPORTED_MODULE_5__["cos"])(alpha), +
10566 sinAlpha = Object(_math__WEBPACK_IMPORTED_MODULE_5__["sin"])(alpha), +
10567 a = cosAlpha * k, +
10568 b = sinAlpha * k, +
10569 ai = cosAlpha / k, +
10570 bi = sinAlpha / k, +
10571 ci = (sinAlpha * dy - cosAlpha * dx) / k, +
10572 fi = (sinAlpha * dx + cosAlpha * dy) / k; +
10573 function transform(x, y) { +
10574 return [a * x - b * y + dx, dy - b * x - a * y]; +
10575 } +
10576 transform.invert = function(x, y) { +
10577 return [ai * x - bi * y + ci, fi - bi * x - ai * y]; +
10578 }; +
10579 return transform; +
10580} +
10581 +
10582function projection(project) { +
10583 return projectionMutator(function() { return project; })(); +
10584} +
10585 +
10586function projectionMutator(projectAt) { +
10587 var project, +
10588 k = 150, // scale +
10589 x = 480, y = 250, // translate +
10590 lambda = 0, phi = 0, // center +
10591 deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate +
10592 alpha = 0, // post-rotate +
10593 theta = null, preclip = _clip_antimeridian__WEBPACK_IMPORTED_MODULE_0__["default"], // pre-clip angle +
10594 x0 = null, y0, x1, y1, postclip = _identity__WEBPACK_IMPORTED_MODULE_4__["default"], // post-clip extent +
10595 delta2 = 0.5, // precision +
10596 projectResample, +
10597 projectTransform, +
10598 projectRotateTransform, +
10599 cache, +
10600 cacheStream; +
10601 +
10602 function projection(point) { +
10603 return projectRotateTransform(point[0] * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], point[1] * _math__WEBPACK_IMPORTED_MODULE_5__["radians"]); +
10604 } +
10605 +
10606 function invert(point) { +
10607 point = projectRotateTransform.invert(point[0], point[1]); +
10608 return point && [point[0] * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"], point[1] * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]]; +
10609 } +
10610 +
10611 projection.stream = function(stream) { +
10612 return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); +
10613 }; +
10614 +
10615 projection.preclip = function(_) { +
10616 return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; +
10617 }; +
10618 +
10619 projection.postclip = function(_) { +
10620 return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; +
10621 }; +
10622 +
10623 projection.clipAngle = function(_) { +
10624 return arguments.length ? (preclip = +_ ? Object(_clip_circle__WEBPACK_IMPORTED_MODULE_1__["default"])(theta = _ * _math__WEBPACK_IMPORTED_MODULE_5__["radians"]) : (theta = null, _clip_antimeridian__WEBPACK_IMPORTED_MODULE_0__["default"]), reset()) : theta * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]; +
10625 }; +
10626 +
10627 projection.clipExtent = function(_) { +
10628 return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, _identity__WEBPACK_IMPORTED_MODULE_4__["default"]) : Object(_clip_rectangle__WEBPACK_IMPORTED_MODULE_2__["default"])(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; +
10629 }; +
10630 +
10631 projection.scale = function(_) { +
10632 return arguments.length ? (k = +_, recenter()) : k; +
10633 }; +
10634 +
10635 projection.translate = function(_) { +
10636 return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; +
10637 }; +
10638 +
10639 projection.center = function(_) { +
10640 return arguments.length ? (lambda = _[0] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], phi = _[1] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], recenter()) : [lambda * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"], phi * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]]; +
10641 }; +
10642 +
10643 projection.rotate = function(_) { +
10644 return arguments.length ? (deltaLambda = _[0] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], deltaPhi = _[1] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], deltaGamma = _.length > 2 ? _[2] % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"] : 0, recenter()) : [deltaLambda * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"], deltaPhi * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"], deltaGamma * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]]; +
10645 }; +
10646 +
10647 projection.angle = function(_) { +
10648 return arguments.length ? (alpha = _ % 360 * _math__WEBPACK_IMPORTED_MODULE_5__["radians"], recenter()) : alpha * _math__WEBPACK_IMPORTED_MODULE_5__["degrees"]; +
10649 }; +
10650 +
10651 projection.precision = function(_) { +
10652 return arguments.length ? (projectResample = Object(_resample__WEBPACK_IMPORTED_MODULE_9__["default"])(projectTransform, delta2 = _ * _), reset()) : Object(_math__WEBPACK_IMPORTED_MODULE_5__["sqrt"])(delta2); +
10653 }; +
10654 +
10655 projection.fitExtent = function(extent, object) { +
10656 return Object(_fit__WEBPACK_IMPORTED_MODULE_8__["fitExtent"])(projection, extent, object); +
10657 }; +
10658 +
10659 projection.fitSize = function(size, object) { +
10660 return Object(_fit__WEBPACK_IMPORTED_MODULE_8__["fitSize"])(projection, size, object); +
10661 }; +
10662 +
10663 projection.fitWidth = function(width, object) { +
10664 return Object(_fit__WEBPACK_IMPORTED_MODULE_8__["fitWidth"])(projection, width, object); +
10665 }; +
10666 +
10667 projection.fitHeight = function(height, object) { +
10668 return Object(_fit__WEBPACK_IMPORTED_MODULE_8__["fitHeight"])(projection, height, object); +
10669 }; +
10670 +
10671 function recenter() { +
10672 var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)), +
10673 transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha); +
10674 rotate = Object(_rotation__WEBPACK_IMPORTED_MODULE_6__["rotateRadians"])(deltaLambda, deltaPhi, deltaGamma); +
10675 projectTransform = Object(_compose__WEBPACK_IMPORTED_MODULE_3__["default"])(project, transform); +
10676 projectRotateTransform = Object(_compose__WEBPACK_IMPORTED_MODULE_3__["default"])(rotate, projectTransform); +
10677 projectResample = Object(_resample__WEBPACK_IMPORTED_MODULE_9__["default"])(projectTransform, delta2); +
10678 return reset(); +
10679 } +
10680 +
10681 function reset() { +
10682 cache = cacheStream = null; +
10683 return projection; +
10684 } +
10685 +
10686 return function() { +
10687 project = projectAt.apply(this, arguments); +
10688 projection.invert = project.invert && invert; +
10689 return recenter(); +
10690 }; +
10691} +
10692 +
10693 +
10694/***/ }), +
10695 +
10696/***/ "./node_modules/d3-geo/src/projection/mercator.js": +
10697/*!********************************************************!*\ +
10698 !*** ./node_modules/d3-geo/src/projection/mercator.js ***! +
10699 \********************************************************/ +
10700/*! exports provided: mercatorRaw, default, mercatorProjection */ +
10701/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10702 +
10703"use strict"; +
10704__webpack_require__.r(__webpack_exports__); +
10705/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mercatorRaw", function() { return mercatorRaw; }); +
10706/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mercatorProjection", function() { return mercatorProjection; }); +
10707/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10708/* harmony import */ var _rotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../rotation */ "./node_modules/d3-geo/src/rotation.js"); +
10709/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/projection/index.js"); +
10710 +
10711 +
10712 +
10713 +
10714function mercatorRaw(lambda, phi) { +
10715 return [lambda, Object(_math__WEBPACK_IMPORTED_MODULE_0__["log"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["tan"])((_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + phi) / 2))]; +
10716} +
10717 +
10718mercatorRaw.invert = function(x, y) { +
10719 return [x, 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["exp"])(y)) - _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"]]; +
10720}; +
10721 +
10722/* harmony default export */ __webpack_exports__["default"] = (function() { +
10723 return mercatorProjection(mercatorRaw) +
10724 .scale(961 / _math__WEBPACK_IMPORTED_MODULE_0__["tau"]); +
10725}); +
10726 +
10727function mercatorProjection(project) { +
10728 var m = Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(project), +
10729 center = m.center, +
10730 scale = m.scale, +
10731 translate = m.translate, +
10732 clipExtent = m.clipExtent, +
10733 x0 = null, y0, x1, y1; // clip extent +
10734 +
10735 m.scale = function(_) { +
10736 return arguments.length ? (scale(_), reclip()) : scale(); +
10737 }; +
10738 +
10739 m.translate = function(_) { +
10740 return arguments.length ? (translate(_), reclip()) : translate(); +
10741 }; +
10742 +
10743 m.center = function(_) { +
10744 return arguments.length ? (center(_), reclip()) : center(); +
10745 }; +
10746 +
10747 m.clipExtent = function(_) { +
10748 return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; +
10749 }; +
10750 +
10751 function reclip() { +
10752 var k = _math__WEBPACK_IMPORTED_MODULE_0__["pi"] * scale(), +
10753 t = m(Object(_rotation__WEBPACK_IMPORTED_MODULE_1__["default"])(m.rotate()).invert([0, 0])); +
10754 return clipExtent(x0 == null +
10755 ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw +
10756 ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] +
10757 : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); +
10758 } +
10759 +
10760 return reclip(); +
10761} +
10762 +
10763 +
10764/***/ }), +
10765 +
10766/***/ "./node_modules/d3-geo/src/projection/naturalEarth1.js": +
10767/*!*************************************************************!*\ +
10768 !*** ./node_modules/d3-geo/src/projection/naturalEarth1.js ***! +
10769 \*************************************************************/ +
10770/*! exports provided: naturalEarth1Raw, default */ +
10771/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10772 +
10773"use strict"; +
10774__webpack_require__.r(__webpack_exports__); +
10775/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "naturalEarth1Raw", function() { return naturalEarth1Raw; }); +
10776/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/projection/index.js"); +
10777/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10778 +
10779 +
10780 +
10781function naturalEarth1Raw(lambda, phi) { +
10782 var phi2 = phi * phi, phi4 = phi2 * phi2; +
10783 return [ +
10784 lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), +
10785 phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) +
10786 ]; +
10787} +
10788 +
10789naturalEarth1Raw.invert = function(x, y) { +
10790 var phi = y, i = 25, delta; +
10791 do { +
10792 var phi2 = phi * phi, phi4 = phi2 * phi2; +
10793 phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / +
10794 (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); +
10795 } while (Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(delta) > _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && --i > 0); +
10796 return [ +
10797 x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), +
10798 phi +
10799 ]; +
10800}; +
10801 +
10802/* harmony default export */ __webpack_exports__["default"] = (function() { +
10803 return Object(_index__WEBPACK_IMPORTED_MODULE_0__["default"])(naturalEarth1Raw) +
10804 .scale(175.295); +
10805}); +
10806 +
10807 +
10808/***/ }), +
10809 +
10810/***/ "./node_modules/d3-geo/src/projection/orthographic.js": +
10811/*!************************************************************!*\ +
10812 !*** ./node_modules/d3-geo/src/projection/orthographic.js ***! +
10813 \************************************************************/ +
10814/*! exports provided: orthographicRaw, default */ +
10815/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10816 +
10817"use strict"; +
10818__webpack_require__.r(__webpack_exports__); +
10819/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "orthographicRaw", function() { return orthographicRaw; }); +
10820/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10821/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "./node_modules/d3-geo/src/projection/azimuthal.js"); +
10822/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/projection/index.js"); +
10823 +
10824 +
10825 +
10826 +
10827function orthographicRaw(x, y) { +
10828 return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y) * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x), Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y)]; +
10829} +
10830 +
10831orthographicRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(_math__WEBPACK_IMPORTED_MODULE_0__["asin"]); +
10832 +
10833/* harmony default export */ __webpack_exports__["default"] = (function() { +
10834 return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(orthographicRaw) +
10835 .scale(249.5) +
10836 .clipAngle(90 + _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]); +
10837}); +
10838 +
10839 +
10840/***/ }), +
10841 +
10842/***/ "./node_modules/d3-geo/src/projection/resample.js": +
10843/*!********************************************************!*\ +
10844 !*** ./node_modules/d3-geo/src/projection/resample.js ***! +
10845 \********************************************************/ +
10846/*! exports provided: default */ +
10847/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10848 +
10849"use strict"; +
10850__webpack_require__.r(__webpack_exports__); +
10851/* harmony import */ var _cartesian__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cartesian */ "./node_modules/d3-geo/src/cartesian.js"); +
10852/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10853/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../transform */ "./node_modules/d3-geo/src/transform.js"); +
10854 +
10855 +
10856 +
10857 +
10858var maxDepth = 16, // maximum depth of subdivision +
10859 cosMinDistance = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(30 * _math__WEBPACK_IMPORTED_MODULE_1__["radians"]); // cos(minimum angular distance) +
10860 +
10861/* harmony default export */ __webpack_exports__["default"] = (function(project, delta2) { +
10862 return +delta2 ? resample(project, delta2) : resampleNone(project); +
10863}); +
10864 +
10865function resampleNone(project) { +
10866 return Object(_transform__WEBPACK_IMPORTED_MODULE_2__["transformer"])({ +
10867 point: function(x, y) { +
10868 x = project(x, y); +
10869 this.stream.point(x[0], x[1]); +
10870 } +
10871 }); +
10872} +
10873 +
10874function resample(project, delta2) { +
10875 +
10876 function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { +
10877 var dx = x1 - x0, +
10878 dy = y1 - y0, +
10879 d2 = dx * dx + dy * dy; +
10880 if (d2 > 4 * delta2 && depth--) { +
10881 var a = a0 + a1, +
10882 b = b0 + b1, +
10883 c = c0 + c1, +
10884 m = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sqrt"])(a * a + b * b + c * c), +
10885 phi2 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["asin"])(c /= m), +
10886 lambda2 = Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(c) - 1) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"] || Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda0 - lambda1) < _math__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? (lambda0 + lambda1) / 2 : Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(b, a), +
10887 p = project(lambda2, phi2), +
10888 x2 = p[0], +
10889 y2 = p[1], +
10890 dx2 = x2 - x0, +
10891 dy2 = y2 - y0, +
10892 dz = dy * dx2 - dx * dy2; +
10893 if (dz * dz / d2 > delta2 // perpendicular projected distance +
10894 || Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end +
10895 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance +
10896 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); +
10897 stream.point(x2, y2); +
10898 resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); +
10899 } +
10900 } +
10901 } +
10902 return function(stream) { +
10903 var lambda00, x00, y00, a00, b00, c00, // first point +
10904 lambda0, x0, y0, a0, b0, c0; // previous point +
10905 +
10906 var resampleStream = { +
10907 point: point, +
10908 lineStart: lineStart, +
10909 lineEnd: lineEnd, +
10910 polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, +
10911 polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } +
10912 }; +
10913 +
10914 function point(x, y) { +
10915 x = project(x, y); +
10916 stream.point(x[0], x[1]); +
10917 } +
10918 +
10919 function lineStart() { +
10920 x0 = NaN; +
10921 resampleStream.point = linePoint; +
10922 stream.lineStart(); +
10923 } +
10924 +
10925 function linePoint(lambda, phi) { +
10926 var c = Object(_cartesian__WEBPACK_IMPORTED_MODULE_0__["cartesian"])([lambda, phi]), p = project(lambda, phi); +
10927 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); +
10928 stream.point(x0, y0); +
10929 } +
10930 +
10931 function lineEnd() { +
10932 resampleStream.point = point; +
10933 stream.lineEnd(); +
10934 } +
10935 +
10936 function ringStart() { +
10937 lineStart(); +
10938 resampleStream.point = ringPoint; +
10939 resampleStream.lineEnd = ringEnd; +
10940 } +
10941 +
10942 function ringPoint(lambda, phi) { +
10943 linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; +
10944 resampleStream.point = linePoint; +
10945 } +
10946 +
10947 function ringEnd() { +
10948 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); +
10949 resampleStream.lineEnd = lineEnd; +
10950 lineEnd(); +
10951 } +
10952 +
10953 return resampleStream; +
10954 }; +
10955} +
10956 +
10957 +
10958/***/ }), +
10959 +
10960/***/ "./node_modules/d3-geo/src/projection/stereographic.js": +
10961/*!*************************************************************!*\ +
10962 !*** ./node_modules/d3-geo/src/projection/stereographic.js ***! +
10963 \*************************************************************/ +
10964/*! exports provided: stereographicRaw, default */ +
10965/***/ (function(module, __webpack_exports__, __webpack_require__) { +
10966 +
10967"use strict"; +
10968__webpack_require__.r(__webpack_exports__); +
10969/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stereographicRaw", function() { return stereographicRaw; }); +
10970/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
10971/* harmony import */ var _azimuthal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./azimuthal */ "./node_modules/d3-geo/src/projection/azimuthal.js"); +
10972/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index */ "./node_modules/d3-geo/src/projection/index.js"); +
10973 +
10974 +
10975 +
10976 +
10977function stereographicRaw(x, y) { +
10978 var cy = Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(y), k = 1 + Object(_math__WEBPACK_IMPORTED_MODULE_0__["cos"])(x) * cy; +
10979 return [cy * Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(x) / k, Object(_math__WEBPACK_IMPORTED_MODULE_0__["sin"])(y) / k]; +
10980} +
10981 +
10982stereographicRaw.invert = Object(_azimuthal__WEBPACK_IMPORTED_MODULE_1__["azimuthalInvert"])(function(z) { +
10983 return 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan"])(z); +
10984}); +
10985 +
10986/* harmony default export */ __webpack_exports__["default"] = (function() { +
10987 return Object(_index__WEBPACK_IMPORTED_MODULE_2__["default"])(stereographicRaw) +
10988 .scale(250) +
10989 .clipAngle(142); +
10990}); +
10991 +
10992 +
10993/***/ }), +
10994 +
10995/***/ "./node_modules/d3-geo/src/projection/transverseMercator.js": +
10996/*!******************************************************************!*\ +
10997 !*** ./node_modules/d3-geo/src/projection/transverseMercator.js ***! +
10998 \******************************************************************/ +
10999/*! exports provided: transverseMercatorRaw, default */ +
11000/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11001 +
11002"use strict"; +
11003__webpack_require__.r(__webpack_exports__); +
11004/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transverseMercatorRaw", function() { return transverseMercatorRaw; }); +
11005/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-geo/src/math.js"); +
11006/* harmony import */ var _mercator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mercator */ "./node_modules/d3-geo/src/projection/mercator.js"); +
11007 +
11008 +
11009 +
11010function transverseMercatorRaw(lambda, phi) { +
11011 return [Object(_math__WEBPACK_IMPORTED_MODULE_0__["log"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["tan"])((_math__WEBPACK_IMPORTED_MODULE_0__["halfPi"] + phi) / 2)), -lambda]; +
11012} +
11013 +
11014transverseMercatorRaw.invert = function(x, y) { +
11015 return [-y, 2 * Object(_math__WEBPACK_IMPORTED_MODULE_0__["atan"])(Object(_math__WEBPACK_IMPORTED_MODULE_0__["exp"])(x)) - _math__WEBPACK_IMPORTED_MODULE_0__["halfPi"]]; +
11016}; +
11017 +
11018/* harmony default export */ __webpack_exports__["default"] = (function() { +
11019 var m = Object(_mercator__WEBPACK_IMPORTED_MODULE_1__["mercatorProjection"])(transverseMercatorRaw), +
11020 center = m.center, +
11021 rotate = m.rotate; +
11022 +
11023 m.center = function(_) { +
11024 return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); +
11025 }; +
11026 +
11027 m.rotate = function(_) { +
11028 return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); +
11029 }; +
11030 +
11031 return rotate([0, 0, 90]) +
11032 .scale(159.155); +
11033}); +
11034 +
11035 +
11036/***/ }), +
11037 +
11038/***/ "./node_modules/d3-geo/src/rotation.js": +
11039/*!*********************************************!*\ +
11040 !*** ./node_modules/d3-geo/src/rotation.js ***! +
11041 \*********************************************/ +
11042/*! exports provided: rotateRadians, default */ +
11043/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11044 +
11045"use strict"; +
11046__webpack_require__.r(__webpack_exports__); +
11047/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotateRadians", function() { return rotateRadians; }); +
11048/* harmony import */ var _compose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./compose */ "./node_modules/d3-geo/src/compose.js"); +
11049/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ "./node_modules/d3-geo/src/math.js"); +
11050 +
11051 +
11052 +
11053function rotationIdentity(lambda, phi) { +
11054 return [Object(_math__WEBPACK_IMPORTED_MODULE_1__["abs"])(lambda) > _math__WEBPACK_IMPORTED_MODULE_1__["pi"] ? lambda + Math.round(-lambda / _math__WEBPACK_IMPORTED_MODULE_1__["tau"]) * _math__WEBPACK_IMPORTED_MODULE_1__["tau"] : lambda, phi]; +
11055} +
11056 +
11057rotationIdentity.invert = rotationIdentity; +
11058 +
11059function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { +
11060 return (deltaLambda %= _math__WEBPACK_IMPORTED_MODULE_1__["tau"]) ? (deltaPhi || deltaGamma ? Object(_compose__WEBPACK_IMPORTED_MODULE_0__["default"])(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) +
11061 : rotationLambda(deltaLambda)) +
11062 : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) +
11063 : rotationIdentity); +
11064} +
11065 +
11066function forwardRotationLambda(deltaLambda) { +
11067 return function(lambda, phi) { +
11068 return lambda += deltaLambda, [lambda > _math__WEBPACK_IMPORTED_MODULE_1__["pi"] ? lambda - _math__WEBPACK_IMPORTED_MODULE_1__["tau"] : lambda < -_math__WEBPACK_IMPORTED_MODULE_1__["pi"] ? lambda + _math__WEBPACK_IMPORTED_MODULE_1__["tau"] : lambda, phi]; +
11069 }; +
11070} +
11071 +
11072function rotationLambda(deltaLambda) { +
11073 var rotation = forwardRotationLambda(deltaLambda); +
11074 rotation.invert = forwardRotationLambda(-deltaLambda); +
11075 return rotation; +
11076} +
11077 +
11078function rotationPhiGamma(deltaPhi, deltaGamma) { +
11079 var cosDeltaPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(deltaPhi), +
11080 sinDeltaPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(deltaPhi), +
11081 cosDeltaGamma = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(deltaGamma), +
11082 sinDeltaGamma = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(deltaGamma); +
11083 +
11084 function rotation(lambda, phi) { +
11085 var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi), +
11086 x = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(lambda) * cosPhi, +
11087 y = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda) * cosPhi, +
11088 z = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), +
11089 k = z * cosDeltaPhi + x * sinDeltaPhi; +
11090 return [ +
11091 Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), +
11092 Object(_math__WEBPACK_IMPORTED_MODULE_1__["asin"])(k * cosDeltaGamma + y * sinDeltaGamma) +
11093 ]; +
11094 } +
11095 +
11096 rotation.invert = function(lambda, phi) { +
11097 var cosPhi = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(phi), +
11098 x = Object(_math__WEBPACK_IMPORTED_MODULE_1__["cos"])(lambda) * cosPhi, +
11099 y = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(lambda) * cosPhi, +
11100 z = Object(_math__WEBPACK_IMPORTED_MODULE_1__["sin"])(phi), +
11101 k = z * cosDeltaGamma - y * sinDeltaGamma; +
11102 return [ +
11103 Object(_math__WEBPACK_IMPORTED_MODULE_1__["atan2"])(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), +
11104 Object(_math__WEBPACK_IMPORTED_MODULE_1__["asin"])(k * cosDeltaPhi - x * sinDeltaPhi) +
11105 ]; +
11106 }; +
11107 +
11108 return rotation; +
11109} +
11110 +
11111/* harmony default export */ __webpack_exports__["default"] = (function(rotate) { +
11112 rotate = rotateRadians(rotate[0] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"], rotate[1] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"], rotate.length > 2 ? rotate[2] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"] : 0); +
11113 +
11114 function forward(coordinates) { +
11115 coordinates = rotate(coordinates[0] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"], coordinates[1] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"]); +
11116 return coordinates[0] *= _math__WEBPACK_IMPORTED_MODULE_1__["degrees"], coordinates[1] *= _math__WEBPACK_IMPORTED_MODULE_1__["degrees"], coordinates; +
11117 } +
11118 +
11119 forward.invert = function(coordinates) { +
11120 coordinates = rotate.invert(coordinates[0] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"], coordinates[1] * _math__WEBPACK_IMPORTED_MODULE_1__["radians"]); +
11121 return coordinates[0] *= _math__WEBPACK_IMPORTED_MODULE_1__["degrees"], coordinates[1] *= _math__WEBPACK_IMPORTED_MODULE_1__["degrees"], coordinates; +
11122 }; +
11123 +
11124 return forward; +
11125}); +
11126 +
11127 +
11128/***/ }), +
11129 +
11130/***/ "./node_modules/d3-geo/src/stream.js": +
11131/*!*******************************************!*\ +
11132 !*** ./node_modules/d3-geo/src/stream.js ***! +
11133 \*******************************************/ +
11134/*! exports provided: default */ +
11135/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11136 +
11137"use strict"; +
11138__webpack_require__.r(__webpack_exports__); +
11139function streamGeometry(geometry, stream) { +
11140 if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { +
11141 streamGeometryType[geometry.type](geometry, stream); +
11142 } +
11143} +
11144 +
11145var streamObjectType = { +
11146 Feature: function(object, stream) { +
11147 streamGeometry(object.geometry, stream); +
11148 }, +
11149 FeatureCollection: function(object, stream) { +
11150 var features = object.features, i = -1, n = features.length; +
11151 while (++i < n) streamGeometry(features[i].geometry, stream); +
11152 } +
11153}; +
11154 +
11155var streamGeometryType = { +
11156 Sphere: function(object, stream) { +
11157 stream.sphere(); +
11158 }, +
11159 Point: function(object, stream) { +
11160 object = object.coordinates; +
11161 stream.point(object[0], object[1], object[2]); +
11162 }, +
11163 MultiPoint: function(object, stream) { +
11164 var coordinates = object.coordinates, i = -1, n = coordinates.length; +
11165 while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); +
11166 }, +
11167 LineString: function(object, stream) { +
11168 streamLine(object.coordinates, stream, 0); +
11169 }, +
11170 MultiLineString: function(object, stream) { +
11171 var coordinates = object.coordinates, i = -1, n = coordinates.length; +
11172 while (++i < n) streamLine(coordinates[i], stream, 0); +
11173 }, +
11174 Polygon: function(object, stream) { +
11175 streamPolygon(object.coordinates, stream); +
11176 }, +
11177 MultiPolygon: function(object, stream) { +
11178 var coordinates = object.coordinates, i = -1, n = coordinates.length; +
11179 while (++i < n) streamPolygon(coordinates[i], stream); +
11180 }, +
11181 GeometryCollection: function(object, stream) { +
11182 var geometries = object.geometries, i = -1, n = geometries.length; +
11183 while (++i < n) streamGeometry(geometries[i], stream); +
11184 } +
11185}; +
11186 +
11187function streamLine(coordinates, stream, closed) { +
11188 var i = -1, n = coordinates.length - closed, coordinate; +
11189 stream.lineStart(); +
11190 while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); +
11191 stream.lineEnd(); +
11192} +
11193 +
11194function streamPolygon(coordinates, stream) { +
11195 var i = -1, n = coordinates.length; +
11196 stream.polygonStart(); +
11197 while (++i < n) streamLine(coordinates[i], stream, 1); +
11198 stream.polygonEnd(); +
11199} +
11200 +
11201/* harmony default export */ __webpack_exports__["default"] = (function(object, stream) { +
11202 if (object && streamObjectType.hasOwnProperty(object.type)) { +
11203 streamObjectType[object.type](object, stream); +
11204 } else { +
11205 streamGeometry(object, stream); +
11206 } +
11207}); +
11208 +
11209 +
11210/***/ }), +
11211 +
11212/***/ "./node_modules/d3-geo/src/transform.js": +
11213/*!**********************************************!*\ +
11214 !*** ./node_modules/d3-geo/src/transform.js ***! +
11215 \**********************************************/ +
11216/*! exports provided: default, transformer */ +
11217/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11218 +
11219"use strict"; +
11220__webpack_require__.r(__webpack_exports__); +
11221/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transformer", function() { return transformer; }); +
11222/* harmony default export */ __webpack_exports__["default"] = (function(methods) { +
11223 return { +
11224 stream: transformer(methods) +
11225 }; +
11226}); +
11227 +
11228function transformer(methods) { +
11229 return function(stream) { +
11230 var s = new TransformStream; +
11231 for (var key in methods) s[key] = methods[key]; +
11232 s.stream = stream; +
11233 return s; +
11234 }; +
11235} +
11236 +
11237function TransformStream() {} +
11238 +
11239TransformStream.prototype = { +
11240 constructor: TransformStream, +
11241 point: function(x, y) { this.stream.point(x, y); }, +
11242 sphere: function() { this.stream.sphere(); }, +
11243 lineStart: function() { this.stream.lineStart(); }, +
11244 lineEnd: function() { this.stream.lineEnd(); }, +
11245 polygonStart: function() { this.stream.polygonStart(); }, +
11246 polygonEnd: function() { this.stream.polygonEnd(); } +
11247}; +
11248 +
11249 +
11250/***/ }), +
11251 +
11252/***/ "./node_modules/d3-hierarchy/src/accessors.js": +
11253/*!****************************************************!*\ +
11254 !*** ./node_modules/d3-hierarchy/src/accessors.js ***! +
11255 \****************************************************/ +
11256/*! exports provided: optional, required */ +
11257/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11258 +
11259"use strict"; +
11260__webpack_require__.r(__webpack_exports__); +
11261/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "optional", function() { return optional; }); +
11262/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "required", function() { return required; }); +
11263function optional(f) { +
11264 return f == null ? null : required(f); +
11265} +
11266 +
11267function required(f) { +
11268 if (typeof f !== "function") throw new Error; +
11269 return f; +
11270} +
11271 +
11272 +
11273/***/ }), +
11274 +
11275/***/ "./node_modules/d3-hierarchy/src/array.js": +
11276/*!************************************************!*\ +
11277 !*** ./node_modules/d3-hierarchy/src/array.js ***! +
11278 \************************************************/ +
11279/*! exports provided: slice, shuffle */ +
11280/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11281 +
11282"use strict"; +
11283__webpack_require__.r(__webpack_exports__); +
11284/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +
11285/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shuffle", function() { return shuffle; }); +
11286var slice = Array.prototype.slice; +
11287 +
11288function shuffle(array) { +
11289 var m = array.length, +
11290 t, +
11291 i; +
11292 +
11293 while (m) { +
11294 i = Math.random() * m-- | 0; +
11295 t = array[m]; +
11296 array[m] = array[i]; +
11297 array[i] = t; +
11298 } +
11299 +
11300 return array; +
11301} +
11302 +
11303 +
11304/***/ }), +
11305 +
11306/***/ "./node_modules/d3-hierarchy/src/cluster.js": +
11307/*!**************************************************!*\ +
11308 !*** ./node_modules/d3-hierarchy/src/cluster.js ***! +
11309 \**************************************************/ +
11310/*! exports provided: default */ +
11311/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11312 +
11313"use strict"; +
11314__webpack_require__.r(__webpack_exports__); +
11315function defaultSeparation(a, b) { +
11316 return a.parent === b.parent ? 1 : 2; +
11317} +
11318 +
11319function meanX(children) { +
11320 return children.reduce(meanXReduce, 0) / children.length; +
11321} +
11322 +
11323function meanXReduce(x, c) { +
11324 return x + c.x; +
11325} +
11326 +
11327function maxY(children) { +
11328 return 1 + children.reduce(maxYReduce, 0); +
11329} +
11330 +
11331function maxYReduce(y, c) { +
11332 return Math.max(y, c.y); +
11333} +
11334 +
11335function leafLeft(node) { +
11336 var children; +
11337 while (children = node.children) node = children[0]; +
11338 return node; +
11339} +
11340 +
11341function leafRight(node) { +
11342 var children; +
11343 while (children = node.children) node = children[children.length - 1]; +
11344 return node; +
11345} +
11346 +
11347/* harmony default export */ __webpack_exports__["default"] = (function() { +
11348 var separation = defaultSeparation, +
11349 dx = 1, +
11350 dy = 1, +
11351 nodeSize = false; +
11352 +
11353 function cluster(root) { +
11354 var previousNode, +
11355 x = 0; +
11356 +
11357 // First walk, computing the initial x & y values. +
11358 root.eachAfter(function(node) { +
11359 var children = node.children; +
11360 if (children) { +
11361 node.x = meanX(children); +
11362 node.y = maxY(children); +
11363 } else { +
11364 node.x = previousNode ? x += separation(node, previousNode) : 0; +
11365 node.y = 0; +
11366 previousNode = node; +
11367 } +
11368 }); +
11369 +
11370 var left = leafLeft(root), +
11371 right = leafRight(root), +
11372 x0 = left.x - separation(left, right) / 2, +
11373 x1 = right.x + separation(right, left) / 2; +
11374 +
11375 // Second walk, normalizing x & y to the desired size. +
11376 return root.eachAfter(nodeSize ? function(node) { +
11377 node.x = (node.x - root.x) * dx; +
11378 node.y = (root.y - node.y) * dy; +
11379 } : function(node) { +
11380 node.x = (node.x - x0) / (x1 - x0) * dx; +
11381 node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; +
11382 }); +
11383 } +
11384 +
11385 cluster.separation = function(x) { +
11386 return arguments.length ? (separation = x, cluster) : separation; +
11387 }; +
11388 +
11389 cluster.size = function(x) { +
11390 return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); +
11391 }; +
11392 +
11393 cluster.nodeSize = function(x) { +
11394 return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); +
11395 }; +
11396 +
11397 return cluster; +
11398}); +
11399 +
11400 +
11401/***/ }), +
11402 +
11403/***/ "./node_modules/d3-hierarchy/src/constant.js": +
11404/*!***************************************************!*\ +
11405 !*** ./node_modules/d3-hierarchy/src/constant.js ***! +
11406 \***************************************************/ +
11407/*! exports provided: constantZero, default */ +
11408/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11409 +
11410"use strict"; +
11411__webpack_require__.r(__webpack_exports__); +
11412/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "constantZero", function() { return constantZero; }); +
11413function constantZero() { +
11414 return 0; +
11415} +
11416 +
11417/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
11418 return function() { +
11419 return x; +
11420 }; +
11421}); +
11422 +
11423 +
11424/***/ }), +
11425 +
11426/***/ "./node_modules/d3-hierarchy/src/hierarchy/ancestors.js": +
11427/*!**************************************************************!*\ +
11428 !*** ./node_modules/d3-hierarchy/src/hierarchy/ancestors.js ***! +
11429 \**************************************************************/ +
11430/*! exports provided: default */ +
11431/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11432 +
11433"use strict"; +
11434__webpack_require__.r(__webpack_exports__); +
11435/* harmony default export */ __webpack_exports__["default"] = (function() { +
11436 var node = this, nodes = [node]; +
11437 while (node = node.parent) { +
11438 nodes.push(node); +
11439 } +
11440 return nodes; +
11441}); +
11442 +
11443 +
11444/***/ }), +
11445 +
11446/***/ "./node_modules/d3-hierarchy/src/hierarchy/count.js": +
11447/*!**********************************************************!*\ +
11448 !*** ./node_modules/d3-hierarchy/src/hierarchy/count.js ***! +
11449 \**********************************************************/ +
11450/*! exports provided: default */ +
11451/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11452 +
11453"use strict"; +
11454__webpack_require__.r(__webpack_exports__); +
11455function count(node) { +
11456 var sum = 0, +
11457 children = node.children, +
11458 i = children && children.length; +
11459 if (!i) sum = 1; +
11460 else while (--i >= 0) sum += children[i].value; +
11461 node.value = sum; +
11462} +
11463 +
11464/* harmony default export */ __webpack_exports__["default"] = (function() { +
11465 return this.eachAfter(count); +
11466}); +
11467 +
11468 +
11469/***/ }), +
11470 +
11471/***/ "./node_modules/d3-hierarchy/src/hierarchy/descendants.js": +
11472/*!****************************************************************!*\ +
11473 !*** ./node_modules/d3-hierarchy/src/hierarchy/descendants.js ***! +
11474 \****************************************************************/ +
11475/*! exports provided: default */ +
11476/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11477 +
11478"use strict"; +
11479__webpack_require__.r(__webpack_exports__); +
11480/* harmony default export */ __webpack_exports__["default"] = (function() { +
11481 var nodes = []; +
11482 this.each(function(node) { +
11483 nodes.push(node); +
11484 }); +
11485 return nodes; +
11486}); +
11487 +
11488 +
11489/***/ }), +
11490 +
11491/***/ "./node_modules/d3-hierarchy/src/hierarchy/each.js": +
11492/*!*********************************************************!*\ +
11493 !*** ./node_modules/d3-hierarchy/src/hierarchy/each.js ***! +
11494 \*********************************************************/ +
11495/*! exports provided: default */ +
11496/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11497 +
11498"use strict"; +
11499__webpack_require__.r(__webpack_exports__); +
11500/* harmony default export */ __webpack_exports__["default"] = (function(callback) { +
11501 var node = this, current, next = [node], children, i, n; +
11502 do { +
11503 current = next.reverse(), next = []; +
11504 while (node = current.pop()) { +
11505 callback(node), children = node.children; +
11506 if (children) for (i = 0, n = children.length; i < n; ++i) { +
11507 next.push(children[i]); +
11508 } +
11509 } +
11510 } while (next.length); +
11511 return this; +
11512}); +
11513 +
11514 +
11515/***/ }), +
11516 +
11517/***/ "./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js": +
11518/*!**************************************************************!*\ +
11519 !*** ./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js ***! +
11520 \**************************************************************/ +
11521/*! exports provided: default */ +
11522/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11523 +
11524"use strict"; +
11525__webpack_require__.r(__webpack_exports__); +
11526/* harmony default export */ __webpack_exports__["default"] = (function(callback) { +
11527 var node = this, nodes = [node], next = [], children, i, n; +
11528 while (node = nodes.pop()) { +
11529 next.push(node), children = node.children; +
11530 if (children) for (i = 0, n = children.length; i < n; ++i) { +
11531 nodes.push(children[i]); +
11532 } +
11533 } +
11534 while (node = next.pop()) { +
11535 callback(node); +
11536 } +
11537 return this; +
11538}); +
11539 +
11540 +
11541/***/ }), +
11542 +
11543/***/ "./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js": +
11544/*!***************************************************************!*\ +
11545 !*** ./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js ***! +
11546 \***************************************************************/ +
11547/*! exports provided: default */ +
11548/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11549 +
11550"use strict"; +
11551__webpack_require__.r(__webpack_exports__); +
11552/* harmony default export */ __webpack_exports__["default"] = (function(callback) { +
11553 var node = this, nodes = [node], children, i; +
11554 while (node = nodes.pop()) { +
11555 callback(node), children = node.children; +
11556 if (children) for (i = children.length - 1; i >= 0; --i) { +
11557 nodes.push(children[i]); +
11558 } +
11559 } +
11560 return this; +
11561}); +
11562 +
11563 +
11564/***/ }), +
11565 +
11566/***/ "./node_modules/d3-hierarchy/src/hierarchy/index.js": +
11567/*!**********************************************************!*\ +
11568 !*** ./node_modules/d3-hierarchy/src/hierarchy/index.js ***! +
11569 \**********************************************************/ +
11570/*! exports provided: default, computeHeight, Node */ +
11571/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11572 +
11573"use strict"; +
11574__webpack_require__.r(__webpack_exports__); +
11575/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return hierarchy; }); +
11576/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeHeight", function() { return computeHeight; }); +
11577/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Node", function() { return Node; }); +
11578/* harmony import */ var _count__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./count */ "./node_modules/d3-hierarchy/src/hierarchy/count.js"); +
11579/* harmony import */ var _each__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./each */ "./node_modules/d3-hierarchy/src/hierarchy/each.js"); +
11580/* harmony import */ var _eachBefore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./eachBefore */ "./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js"); +
11581/* harmony import */ var _eachAfter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eachAfter */ "./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js"); +
11582/* harmony import */ var _sum__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sum */ "./node_modules/d3-hierarchy/src/hierarchy/sum.js"); +
11583/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sort */ "./node_modules/d3-hierarchy/src/hierarchy/sort.js"); +
11584/* harmony import */ var _path__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./path */ "./node_modules/d3-hierarchy/src/hierarchy/path.js"); +
11585/* harmony import */ var _ancestors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ancestors */ "./node_modules/d3-hierarchy/src/hierarchy/ancestors.js"); +
11586/* harmony import */ var _descendants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./descendants */ "./node_modules/d3-hierarchy/src/hierarchy/descendants.js"); +
11587/* harmony import */ var _leaves__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./leaves */ "./node_modules/d3-hierarchy/src/hierarchy/leaves.js"); +
11588/* harmony import */ var _links__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./links */ "./node_modules/d3-hierarchy/src/hierarchy/links.js"); +
11589 +
11590 +
11591 +
11592 +
11593 +
11594 +
11595 +
11596 +
11597 +
11598 +
11599 +
11600 +
11601function hierarchy(data, children) { +
11602 var root = new Node(data), +
11603 valued = +data.value && (root.value = data.value), +
11604 node, +
11605 nodes = [root], +
11606 child, +
11607 childs, +
11608 i, +
11609 n; +
11610 +
11611 if (children == null) children = defaultChildren; +
11612 +
11613 while (node = nodes.pop()) { +
11614 if (valued) node.value = +node.data.value; +
11615 if ((childs = children(node.data)) && (n = childs.length)) { +
11616 node.children = new Array(n); +
11617 for (i = n - 1; i >= 0; --i) { +
11618 nodes.push(child = node.children[i] = new Node(childs[i])); +
11619 child.parent = node; +
11620 child.depth = node.depth + 1; +
11621 } +
11622 } +
11623 } +
11624 +
11625 return root.eachBefore(computeHeight); +
11626} +
11627 +
11628function node_copy() { +
11629 return hierarchy(this).eachBefore(copyData); +
11630} +
11631 +
11632function defaultChildren(d) { +
11633 return d.children; +
11634} +
11635 +
11636function copyData(node) { +
11637 node.data = node.data.data; +
11638} +
11639 +
11640function computeHeight(node) { +
11641 var height = 0; +
11642 do node.height = height; +
11643 while ((node = node.parent) && (node.height < ++height)); +
11644} +
11645 +
11646function Node(data) { +
11647 this.data = data; +
11648 this.depth = +
11649 this.height = 0; +
11650 this.parent = null; +
11651} +
11652 +
11653Node.prototype = hierarchy.prototype = { +
11654 constructor: Node, +
11655 count: _count__WEBPACK_IMPORTED_MODULE_0__["default"], +
11656 each: _each__WEBPACK_IMPORTED_MODULE_1__["default"], +
11657 eachAfter: _eachAfter__WEBPACK_IMPORTED_MODULE_3__["default"], +
11658 eachBefore: _eachBefore__WEBPACK_IMPORTED_MODULE_2__["default"], +
11659 sum: _sum__WEBPACK_IMPORTED_MODULE_4__["default"], +
11660 sort: _sort__WEBPACK_IMPORTED_MODULE_5__["default"], +
11661 path: _path__WEBPACK_IMPORTED_MODULE_6__["default"], +
11662 ancestors: _ancestors__WEBPACK_IMPORTED_MODULE_7__["default"], +
11663 descendants: _descendants__WEBPACK_IMPORTED_MODULE_8__["default"], +
11664 leaves: _leaves__WEBPACK_IMPORTED_MODULE_9__["default"], +
11665 links: _links__WEBPACK_IMPORTED_MODULE_10__["default"], +
11666 copy: node_copy +
11667}; +
11668 +
11669 +
11670/***/ }), +
11671 +
11672/***/ "./node_modules/d3-hierarchy/src/hierarchy/leaves.js": +
11673/*!***********************************************************!*\ +
11674 !*** ./node_modules/d3-hierarchy/src/hierarchy/leaves.js ***! +
11675 \***********************************************************/ +
11676/*! exports provided: default */ +
11677/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11678 +
11679"use strict"; +
11680__webpack_require__.r(__webpack_exports__); +
11681/* harmony default export */ __webpack_exports__["default"] = (function() { +
11682 var leaves = []; +
11683 this.eachBefore(function(node) { +
11684 if (!node.children) { +
11685 leaves.push(node); +
11686 } +
11687 }); +
11688 return leaves; +
11689}); +
11690 +
11691 +
11692/***/ }), +
11693 +
11694/***/ "./node_modules/d3-hierarchy/src/hierarchy/links.js": +
11695/*!**********************************************************!*\ +
11696 !*** ./node_modules/d3-hierarchy/src/hierarchy/links.js ***! +
11697 \**********************************************************/ +
11698/*! exports provided: default */ +
11699/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11700 +
11701"use strict"; +
11702__webpack_require__.r(__webpack_exports__); +
11703/* harmony default export */ __webpack_exports__["default"] = (function() { +
11704 var root = this, links = []; +
11705 root.each(function(node) { +
11706 if (node !== root) { // Don’t include the root’s parent, if any. +
11707 links.push({source: node.parent, target: node}); +
11708 } +
11709 }); +
11710 return links; +
11711}); +
11712 +
11713 +
11714/***/ }), +
11715 +
11716/***/ "./node_modules/d3-hierarchy/src/hierarchy/path.js": +
11717/*!*********************************************************!*\ +
11718 !*** ./node_modules/d3-hierarchy/src/hierarchy/path.js ***! +
11719 \*********************************************************/ +
11720/*! exports provided: default */ +
11721/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11722 +
11723"use strict"; +
11724__webpack_require__.r(__webpack_exports__); +
11725/* harmony default export */ __webpack_exports__["default"] = (function(end) { +
11726 var start = this, +
11727 ancestor = leastCommonAncestor(start, end), +
11728 nodes = [start]; +
11729 while (start !== ancestor) { +
11730 start = start.parent; +
11731 nodes.push(start); +
11732 } +
11733 var k = nodes.length; +
11734 while (end !== ancestor) { +
11735 nodes.splice(k, 0, end); +
11736 end = end.parent; +
11737 } +
11738 return nodes; +
11739}); +
11740 +
11741function leastCommonAncestor(a, b) { +
11742 if (a === b) return a; +
11743 var aNodes = a.ancestors(), +
11744 bNodes = b.ancestors(), +
11745 c = null; +
11746 a = aNodes.pop(); +
11747 b = bNodes.pop(); +
11748 while (a === b) { +
11749 c = a; +
11750 a = aNodes.pop(); +
11751 b = bNodes.pop(); +
11752 } +
11753 return c; +
11754} +
11755 +
11756 +
11757/***/ }), +
11758 +
11759/***/ "./node_modules/d3-hierarchy/src/hierarchy/sort.js": +
11760/*!*********************************************************!*\ +
11761 !*** ./node_modules/d3-hierarchy/src/hierarchy/sort.js ***! +
11762 \*********************************************************/ +
11763/*! exports provided: default */ +
11764/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11765 +
11766"use strict"; +
11767__webpack_require__.r(__webpack_exports__); +
11768/* harmony default export */ __webpack_exports__["default"] = (function(compare) { +
11769 return this.eachBefore(function(node) { +
11770 if (node.children) { +
11771 node.children.sort(compare); +
11772 } +
11773 }); +
11774}); +
11775 +
11776 +
11777/***/ }), +
11778 +
11779/***/ "./node_modules/d3-hierarchy/src/hierarchy/sum.js": +
11780/*!********************************************************!*\ +
11781 !*** ./node_modules/d3-hierarchy/src/hierarchy/sum.js ***! +
11782 \********************************************************/ +
11783/*! exports provided: default */ +
11784/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11785 +
11786"use strict"; +
11787__webpack_require__.r(__webpack_exports__); +
11788/* harmony default export */ __webpack_exports__["default"] = (function(value) { +
11789 return this.eachAfter(function(node) { +
11790 var sum = +value(node.data) || 0, +
11791 children = node.children, +
11792 i = children && children.length; +
11793 while (--i >= 0) sum += children[i].value; +
11794 node.value = sum; +
11795 }); +
11796}); +
11797 +
11798 +
11799/***/ }), +
11800 +
11801/***/ "./node_modules/d3-hierarchy/src/index.js": +
11802/*!************************************************!*\ +
11803 !*** ./node_modules/d3-hierarchy/src/index.js ***! +
11804 \************************************************/ +
11805/*! exports provided: cluster, hierarchy, pack, packSiblings, packEnclose, partition, stratify, tree, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify */ +
11806/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11807 +
11808"use strict"; +
11809__webpack_require__.r(__webpack_exports__); +
11810/* harmony import */ var _cluster__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cluster */ "./node_modules/d3-hierarchy/src/cluster.js"); +
11811/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cluster", function() { return _cluster__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
11812 +
11813/* harmony import */ var _hierarchy_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hierarchy/index */ "./node_modules/d3-hierarchy/src/hierarchy/index.js"); +
11814/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hierarchy", function() { return _hierarchy_index__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
11815 +
11816/* harmony import */ var _pack_index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pack/index */ "./node_modules/d3-hierarchy/src/pack/index.js"); +
11817/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pack", function() { return _pack_index__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
11818 +
11819/* harmony import */ var _pack_siblings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pack/siblings */ "./node_modules/d3-hierarchy/src/pack/siblings.js"); +
11820/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "packSiblings", function() { return _pack_siblings__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
11821 +
11822/* harmony import */ var _pack_enclose__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pack/enclose */ "./node_modules/d3-hierarchy/src/pack/enclose.js"); +
11823/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "packEnclose", function() { return _pack_enclose__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
11824 +
11825/* harmony import */ var _partition__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./partition */ "./node_modules/d3-hierarchy/src/partition.js"); +
11826/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _partition__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
11827 +
11828/* harmony import */ var _stratify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stratify */ "./node_modules/d3-hierarchy/src/stratify.js"); +
11829/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stratify", function() { return _stratify__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
11830 +
11831/* harmony import */ var _tree__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tree */ "./node_modules/d3-hierarchy/src/tree.js"); +
11832/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tree", function() { return _tree__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +
11833 +
11834/* harmony import */ var _treemap_index__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./treemap/index */ "./node_modules/d3-hierarchy/src/treemap/index.js"); +
11835/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemap", function() { return _treemap_index__WEBPACK_IMPORTED_MODULE_8__["default"]; }); +
11836 +
11837/* harmony import */ var _treemap_binary__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./treemap/binary */ "./node_modules/d3-hierarchy/src/treemap/binary.js"); +
11838/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapBinary", function() { return _treemap_binary__WEBPACK_IMPORTED_MODULE_9__["default"]; }); +
11839 +
11840/* harmony import */ var _treemap_dice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./treemap/dice */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); +
11841/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapDice", function() { return _treemap_dice__WEBPACK_IMPORTED_MODULE_10__["default"]; }); +
11842 +
11843/* harmony import */ var _treemap_slice__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./treemap/slice */ "./node_modules/d3-hierarchy/src/treemap/slice.js"); +
11844/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSlice", function() { return _treemap_slice__WEBPACK_IMPORTED_MODULE_11__["default"]; }); +
11845 +
11846/* harmony import */ var _treemap_sliceDice__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./treemap/sliceDice */ "./node_modules/d3-hierarchy/src/treemap/sliceDice.js"); +
11847/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSliceDice", function() { return _treemap_sliceDice__WEBPACK_IMPORTED_MODULE_12__["default"]; }); +
11848 +
11849/* harmony import */ var _treemap_squarify__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./treemap/squarify */ "./node_modules/d3-hierarchy/src/treemap/squarify.js"); +
11850/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSquarify", function() { return _treemap_squarify__WEBPACK_IMPORTED_MODULE_13__["default"]; }); +
11851 +
11852/* harmony import */ var _treemap_resquarify__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./treemap/resquarify */ "./node_modules/d3-hierarchy/src/treemap/resquarify.js"); +
11853/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapResquarify", function() { return _treemap_resquarify__WEBPACK_IMPORTED_MODULE_14__["default"]; }); +
11854 +
11855 +
11856 +
11857 +
11858 +
11859 +
11860 +
11861 +
11862 +
11863 +
11864 +
11865 +
11866 +
11867 +
11868 +
11869 +
11870 +
11871 +
11872/***/ }), +
11873 +
11874/***/ "./node_modules/d3-hierarchy/src/pack/enclose.js": +
11875/*!*******************************************************!*\ +
11876 !*** ./node_modules/d3-hierarchy/src/pack/enclose.js ***! +
11877 \*******************************************************/ +
11878/*! exports provided: default */ +
11879/***/ (function(module, __webpack_exports__, __webpack_require__) { +
11880 +
11881"use strict"; +
11882__webpack_require__.r(__webpack_exports__); +
11883/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../array */ "./node_modules/d3-hierarchy/src/array.js"); +
11884 +
11885 +
11886/* harmony default export */ __webpack_exports__["default"] = (function(circles) { +
11887 var i = 0, n = (circles = Object(_array__WEBPACK_IMPORTED_MODULE_0__["shuffle"])(_array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(circles))).length, B = [], p, e; +
11888 +
11889 while (i < n) { +
11890 p = circles[i]; +
11891 if (e && enclosesWeak(e, p)) ++i; +
11892 else e = encloseBasis(B = extendBasis(B, p)), i = 0; +
11893 } +
11894 +
11895 return e; +
11896}); +
11897 +
11898function extendBasis(B, p) { +
11899 var i, j; +
11900 +
11901 if (enclosesWeakAll(p, B)) return [p]; +
11902 +
11903 // If we get here then B must have at least one element. +
11904 for (i = 0; i < B.length; ++i) { +
11905 if (enclosesNot(p, B[i]) +
11906 && enclosesWeakAll(encloseBasis2(B[i], p), B)) { +
11907 return [B[i], p]; +
11908 } +
11909 } +
11910 +
11911 // If we get here then B must have at least two elements. +
11912 for (i = 0; i < B.length - 1; ++i) { +
11913 for (j = i + 1; j < B.length; ++j) { +
11914 if (enclosesNot(encloseBasis2(B[i], B[j]), p) +
11915 && enclosesNot(encloseBasis2(B[i], p), B[j]) +
11916 && enclosesNot(encloseBasis2(B[j], p), B[i]) +
11917 && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { +
11918 return [B[i], B[j], p]; +
11919 } +
11920 } +
11921 } +
11922 +
11923 // If we get here then something is very wrong. +
11924 throw new Error; +
11925} +
11926 +
11927function enclosesNot(a, b) { +
11928 var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; +
11929 return dr < 0 || dr * dr < dx * dx + dy * dy; +
11930} +
11931 +
11932function enclosesWeak(a, b) { +
11933 var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; +
11934 return dr > 0 && dr * dr > dx * dx + dy * dy; +
11935} +
11936 +
11937function enclosesWeakAll(a, B) { +
11938 for (var i = 0; i < B.length; ++i) { +
11939 if (!enclosesWeak(a, B[i])) { +
11940 return false; +
11941 } +
11942 } +
11943 return true; +
11944} +
11945 +
11946function encloseBasis(B) { +
11947 switch (B.length) { +
11948 case 1: return encloseBasis1(B[0]); +
11949 case 2: return encloseBasis2(B[0], B[1]); +
11950 case 3: return encloseBasis3(B[0], B[1], B[2]); +
11951 } +
11952} +
11953 +
11954function encloseBasis1(a) { +
11955 return { +
11956 x: a.x, +
11957 y: a.y, +
11958 r: a.r +
11959 }; +
11960} +
11961 +
11962function encloseBasis2(a, b) { +
11963 var x1 = a.x, y1 = a.y, r1 = a.r, +
11964 x2 = b.x, y2 = b.y, r2 = b.r, +
11965 x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, +
11966 l = Math.sqrt(x21 * x21 + y21 * y21); +
11967 return { +
11968 x: (x1 + x2 + x21 / l * r21) / 2, +
11969 y: (y1 + y2 + y21 / l * r21) / 2, +
11970 r: (l + r1 + r2) / 2 +
11971 }; +
11972} +
11973 +
11974function encloseBasis3(a, b, c) { +
11975 var x1 = a.x, y1 = a.y, r1 = a.r, +
11976 x2 = b.x, y2 = b.y, r2 = b.r, +
11977 x3 = c.x, y3 = c.y, r3 = c.r, +
11978 a2 = x1 - x2, +
11979 a3 = x1 - x3, +
11980 b2 = y1 - y2, +
11981 b3 = y1 - y3, +
11982 c2 = r2 - r1, +
11983 c3 = r3 - r1, +
11984 d1 = x1 * x1 + y1 * y1 - r1 * r1, +
11985 d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, +
11986 d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, +
11987 ab = a3 * b2 - a2 * b3, +
11988 xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, +
11989 xb = (b3 * c2 - b2 * c3) / ab, +
11990 ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, +
11991 yb = (a2 * c3 - a3 * c2) / ab, +
11992 A = xb * xb + yb * yb - 1, +
11993 B = 2 * (r1 + xa * xb + ya * yb), +
11994 C = xa * xa + ya * ya - r1 * r1, +
11995 r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); +
11996 return { +
11997 x: x1 + xa + xb * r, +
11998 y: y1 + ya + yb * r, +
11999 r: r +
12000 }; +
12001} +
12002 +
12003 +
12004/***/ }), +
12005 +
12006/***/ "./node_modules/d3-hierarchy/src/pack/index.js": +
12007/*!*****************************************************!*\ +
12008 !*** ./node_modules/d3-hierarchy/src/pack/index.js ***! +
12009 \*****************************************************/ +
12010/*! exports provided: default */ +
12011/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12012 +
12013"use strict"; +
12014__webpack_require__.r(__webpack_exports__); +
12015/* harmony import */ var _siblings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./siblings */ "./node_modules/d3-hierarchy/src/pack/siblings.js"); +
12016/* harmony import */ var _accessors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../accessors */ "./node_modules/d3-hierarchy/src/accessors.js"); +
12017/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ "./node_modules/d3-hierarchy/src/constant.js"); +
12018 +
12019 +
12020 +
12021 +
12022function defaultRadius(d) { +
12023 return Math.sqrt(d.value); +
12024} +
12025 +
12026/* harmony default export */ __webpack_exports__["default"] = (function() { +
12027 var radius = null, +
12028 dx = 1, +
12029 dy = 1, +
12030 padding = _constant__WEBPACK_IMPORTED_MODULE_2__["constantZero"]; +
12031 +
12032 function pack(root) { +
12033 root.x = dx / 2, root.y = dy / 2; +
12034 if (radius) { +
12035 root.eachBefore(radiusLeaf(radius)) +
12036 .eachAfter(packChildren(padding, 0.5)) +
12037 .eachBefore(translateChild(1)); +
12038 } else { +
12039 root.eachBefore(radiusLeaf(defaultRadius)) +
12040 .eachAfter(packChildren(_constant__WEBPACK_IMPORTED_MODULE_2__["constantZero"], 1)) +
12041 .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) +
12042 .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); +
12043 } +
12044 return root; +
12045 } +
12046 +
12047 pack.radius = function(x) { +
12048 return arguments.length ? (radius = Object(_accessors__WEBPACK_IMPORTED_MODULE_1__["optional"])(x), pack) : radius; +
12049 }; +
12050 +
12051 pack.size = function(x) { +
12052 return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; +
12053 }; +
12054 +
12055 pack.padding = function(x) { +
12056 return arguments.length ? (padding = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(+x), pack) : padding; +
12057 }; +
12058 +
12059 return pack; +
12060}); +
12061 +
12062function radiusLeaf(radius) { +
12063 return function(node) { +
12064 if (!node.children) { +
12065 node.r = Math.max(0, +radius(node) || 0); +
12066 } +
12067 }; +
12068} +
12069 +
12070function packChildren(padding, k) { +
12071 return function(node) { +
12072 if (children = node.children) { +
12073 var children, +
12074 i, +
12075 n = children.length, +
12076 r = padding(node) * k || 0, +
12077 e; +
12078 +
12079 if (r) for (i = 0; i < n; ++i) children[i].r += r; +
12080 e = Object(_siblings__WEBPACK_IMPORTED_MODULE_0__["packEnclose"])(children); +
12081 if (r) for (i = 0; i < n; ++i) children[i].r -= r; +
12082 node.r = e + r; +
12083 } +
12084 }; +
12085} +
12086 +
12087function translateChild(k) { +
12088 return function(node) { +
12089 var parent = node.parent; +
12090 node.r *= k; +
12091 if (parent) { +
12092 node.x = parent.x + k * node.x; +
12093 node.y = parent.y + k * node.y; +
12094 } +
12095 }; +
12096} +
12097 +
12098 +
12099/***/ }), +
12100 +
12101/***/ "./node_modules/d3-hierarchy/src/pack/siblings.js": +
12102/*!********************************************************!*\ +
12103 !*** ./node_modules/d3-hierarchy/src/pack/siblings.js ***! +
12104 \********************************************************/ +
12105/*! exports provided: packEnclose, default */ +
12106/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12107 +
12108"use strict"; +
12109__webpack_require__.r(__webpack_exports__); +
12110/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "packEnclose", function() { return packEnclose; }); +
12111/* harmony import */ var _enclose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enclose */ "./node_modules/d3-hierarchy/src/pack/enclose.js"); +
12112 +
12113 +
12114function place(b, a, c) { +
12115 var dx = b.x - a.x, x, a2, +
12116 dy = b.y - a.y, y, b2, +
12117 d2 = dx * dx + dy * dy; +
12118 if (d2) { +
12119 a2 = a.r + c.r, a2 *= a2; +
12120 b2 = b.r + c.r, b2 *= b2; +
12121 if (a2 > b2) { +
12122 x = (d2 + b2 - a2) / (2 * d2); +
12123 y = Math.sqrt(Math.max(0, b2 / d2 - x * x)); +
12124 c.x = b.x - x * dx - y * dy; +
12125 c.y = b.y - x * dy + y * dx; +
12126 } else { +
12127 x = (d2 + a2 - b2) / (2 * d2); +
12128 y = Math.sqrt(Math.max(0, a2 / d2 - x * x)); +
12129 c.x = a.x + x * dx - y * dy; +
12130 c.y = a.y + x * dy + y * dx; +
12131 } +
12132 } else { +
12133 c.x = a.x + c.r; +
12134 c.y = a.y; +
12135 } +
12136} +
12137 +
12138function intersects(a, b) { +
12139 var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; +
12140 return dr > 0 && dr * dr > dx * dx + dy * dy; +
12141} +
12142 +
12143function score(node) { +
12144 var a = node._, +
12145 b = node.next._, +
12146 ab = a.r + b.r, +
12147 dx = (a.x * b.r + b.x * a.r) / ab, +
12148 dy = (a.y * b.r + b.y * a.r) / ab; +
12149 return dx * dx + dy * dy; +
12150} +
12151 +
12152function Node(circle) { +
12153 this._ = circle; +
12154 this.next = null; +
12155 this.previous = null; +
12156} +
12157 +
12158function packEnclose(circles) { +
12159 if (!(n = circles.length)) return 0; +
12160 +
12161 var a, b, c, n, aa, ca, i, j, k, sj, sk; +
12162 +
12163 // Place the first circle. +
12164 a = circles[0], a.x = 0, a.y = 0; +
12165 if (!(n > 1)) return a.r; +
12166 +
12167 // Place the second circle. +
12168 b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; +
12169 if (!(n > 2)) return a.r + b.r; +
12170 +
12171 // Place the third circle. +
12172 place(b, a, c = circles[2]); +
12173 +
12174 // Initialize the front-chain using the first three circles a, b and c. +
12175 a = new Node(a), b = new Node(b), c = new Node(c); +
12176 a.next = c.previous = b; +
12177 b.next = a.previous = c; +
12178 c.next = b.previous = a; +
12179 +
12180 // Attempt to place each remaining circle… +
12181 pack: for (i = 3; i < n; ++i) { +
12182 place(a._, b._, c = circles[i]), c = new Node(c); +
12183 +
12184 // Find the closest intersecting circle on the front-chain, if any. +
12185 // “Closeness” is determined by linear distance along the front-chain. +
12186 // “Ahead” or “behind” is likewise determined by linear distance. +
12187 j = b.next, k = a.previous, sj = b._.r, sk = a._.r; +
12188 do { +
12189 if (sj <= sk) { +
12190 if (intersects(j._, c._)) { +
12191 b = j, a.next = b, b.previous = a, --i; +
12192 continue pack; +
12193 } +
12194 sj += j._.r, j = j.next; +
12195 } else { +
12196 if (intersects(k._, c._)) { +
12197 a = k, a.next = b, b.previous = a, --i; +
12198 continue pack; +
12199 } +
12200 sk += k._.r, k = k.previous; +
12201 } +
12202 } while (j !== k.next); +
12203 +
12204 // Success! Insert the new circle c between a and b. +
12205 c.previous = a, c.next = b, a.next = b.previous = b = c; +
12206 +
12207 // Compute the new closest circle pair to the centroid. +
12208 aa = score(a); +
12209 while ((c = c.next) !== b) { +
12210 if ((ca = score(c)) < aa) { +
12211 a = c, aa = ca; +
12212 } +
12213 } +
12214 b = a.next; +
12215 } +
12216 +
12217 // Compute the enclosing circle of the front chain. +
12218 a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = Object(_enclose__WEBPACK_IMPORTED_MODULE_0__["default"])(a); +
12219 +
12220 // Translate the circles to put the enclosing circle around the origin. +
12221 for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; +
12222 +
12223 return c.r; +
12224} +
12225 +
12226/* harmony default export */ __webpack_exports__["default"] = (function(circles) { +
12227 packEnclose(circles); +
12228 return circles; +
12229}); +
12230 +
12231 +
12232/***/ }), +
12233 +
12234/***/ "./node_modules/d3-hierarchy/src/partition.js": +
12235/*!****************************************************!*\ +
12236 !*** ./node_modules/d3-hierarchy/src/partition.js ***! +
12237 \****************************************************/ +
12238/*! exports provided: default */ +
12239/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12240 +
12241"use strict"; +
12242__webpack_require__.r(__webpack_exports__); +
12243/* harmony import */ var _treemap_round__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./treemap/round */ "./node_modules/d3-hierarchy/src/treemap/round.js"); +
12244/* harmony import */ var _treemap_dice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./treemap/dice */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); +
12245 +
12246 +
12247 +
12248/* harmony default export */ __webpack_exports__["default"] = (function() { +
12249 var dx = 1, +
12250 dy = 1, +
12251 padding = 0, +
12252 round = false; +
12253 +
12254 function partition(root) { +
12255 var n = root.height + 1; +
12256 root.x0 = +
12257 root.y0 = padding; +
12258 root.x1 = dx; +
12259 root.y1 = dy / n; +
12260 root.eachBefore(positionNode(dy, n)); +
12261 if (round) root.eachBefore(_treemap_round__WEBPACK_IMPORTED_MODULE_0__["default"]); +
12262 return root; +
12263 } +
12264 +
12265 function positionNode(dy, n) { +
12266 return function(node) { +
12267 if (node.children) { +
12268 Object(_treemap_dice__WEBPACK_IMPORTED_MODULE_1__["default"])(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); +
12269 } +
12270 var x0 = node.x0, +
12271 y0 = node.y0, +
12272 x1 = node.x1 - padding, +
12273 y1 = node.y1 - padding; +
12274 if (x1 < x0) x0 = x1 = (x0 + x1) / 2; +
12275 if (y1 < y0) y0 = y1 = (y0 + y1) / 2; +
12276 node.x0 = x0; +
12277 node.y0 = y0; +
12278 node.x1 = x1; +
12279 node.y1 = y1; +
12280 }; +
12281 } +
12282 +
12283 partition.round = function(x) { +
12284 return arguments.length ? (round = !!x, partition) : round; +
12285 }; +
12286 +
12287 partition.size = function(x) { +
12288 return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; +
12289 }; +
12290 +
12291 partition.padding = function(x) { +
12292 return arguments.length ? (padding = +x, partition) : padding; +
12293 }; +
12294 +
12295 return partition; +
12296}); +
12297 +
12298 +
12299/***/ }), +
12300 +
12301/***/ "./node_modules/d3-hierarchy/src/stratify.js": +
12302/*!***************************************************!*\ +
12303 !*** ./node_modules/d3-hierarchy/src/stratify.js ***! +
12304 \***************************************************/ +
12305/*! exports provided: default */ +
12306/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12307 +
12308"use strict"; +
12309__webpack_require__.r(__webpack_exports__); +
12310/* harmony import */ var _accessors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accessors */ "./node_modules/d3-hierarchy/src/accessors.js"); +
12311/* harmony import */ var _hierarchy_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hierarchy/index */ "./node_modules/d3-hierarchy/src/hierarchy/index.js"); +
12312 +
12313 +
12314 +
12315var keyPrefix = "$", // Protect against keys like “__proto__”. +
12316 preroot = {depth: -1}, +
12317 ambiguous = {}; +
12318 +
12319function defaultId(d) { +
12320 return d.id; +
12321} +
12322 +
12323function defaultParentId(d) { +
12324 return d.parentId; +
12325} +
12326 +
12327/* harmony default export */ __webpack_exports__["default"] = (function() { +
12328 var id = defaultId, +
12329 parentId = defaultParentId; +
12330 +
12331 function stratify(data) { +
12332 var d, +
12333 i, +
12334 n = data.length, +
12335 root, +
12336 parent, +
12337 node, +
12338 nodes = new Array(n), +
12339 nodeId, +
12340 nodeKey, +
12341 nodeByKey = {}; +
12342 +
12343 for (i = 0; i < n; ++i) { +
12344 d = data[i], node = nodes[i] = new _hierarchy_index__WEBPACK_IMPORTED_MODULE_1__["Node"](d); +
12345 if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { +
12346 nodeKey = keyPrefix + (node.id = nodeId); +
12347 nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; +
12348 } +
12349 } +
12350 +
12351 for (i = 0; i < n; ++i) { +
12352 node = nodes[i], nodeId = parentId(data[i], i, data); +
12353 if (nodeId == null || !(nodeId += "")) { +
12354 if (root) throw new Error("multiple roots"); +
12355 root = node; +
12356 } else { +
12357 parent = nodeByKey[keyPrefix + nodeId]; +
12358 if (!parent) throw new Error("missing: " + nodeId); +
12359 if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); +
12360 if (parent.children) parent.children.push(node); +
12361 else parent.children = [node]; +
12362 node.parent = parent; +
12363 } +
12364 } +
12365 +
12366 if (!root) throw new Error("no root"); +
12367 root.parent = preroot; +
12368 root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(_hierarchy_index__WEBPACK_IMPORTED_MODULE_1__["computeHeight"]); +
12369 root.parent = null; +
12370 if (n > 0) throw new Error("cycle"); +
12371 +
12372 return root; +
12373 } +
12374 +
12375 stratify.id = function(x) { +
12376 return arguments.length ? (id = Object(_accessors__WEBPACK_IMPORTED_MODULE_0__["required"])(x), stratify) : id; +
12377 }; +
12378 +
12379 stratify.parentId = function(x) { +
12380 return arguments.length ? (parentId = Object(_accessors__WEBPACK_IMPORTED_MODULE_0__["required"])(x), stratify) : parentId; +
12381 }; +
12382 +
12383 return stratify; +
12384}); +
12385 +
12386 +
12387/***/ }), +
12388 +
12389/***/ "./node_modules/d3-hierarchy/src/tree.js": +
12390/*!***********************************************!*\ +
12391 !*** ./node_modules/d3-hierarchy/src/tree.js ***! +
12392 \***********************************************/ +
12393/*! exports provided: default */ +
12394/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12395 +
12396"use strict"; +
12397__webpack_require__.r(__webpack_exports__); +
12398/* harmony import */ var _hierarchy_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hierarchy/index */ "./node_modules/d3-hierarchy/src/hierarchy/index.js"); +
12399 +
12400 +
12401function defaultSeparation(a, b) { +
12402 return a.parent === b.parent ? 1 : 2; +
12403} +
12404 +
12405// function radialSeparation(a, b) { +
12406// return (a.parent === b.parent ? 1 : 2) / a.depth; +
12407// } +
12408 +
12409// This function is used to traverse the left contour of a subtree (or +
12410// subforest). It returns the successor of v on this contour. This successor is +
12411// either given by the leftmost child of v or by the thread of v. The function +
12412// returns null if and only if v is on the highest level of its subtree. +
12413function nextLeft(v) { +
12414 var children = v.children; +
12415 return children ? children[0] : v.t; +
12416} +
12417 +
12418// This function works analogously to nextLeft. +
12419function nextRight(v) { +
12420 var children = v.children; +
12421 return children ? children[children.length - 1] : v.t; +
12422} +
12423 +
12424// Shifts the current subtree rooted at w+. This is done by increasing +
12425// prelim(w+) and mod(w+) by shift. +
12426function moveSubtree(wm, wp, shift) { +
12427 var change = shift / (wp.i - wm.i); +
12428 wp.c -= change; +
12429 wp.s += shift; +
12430 wm.c += change; +
12431 wp.z += shift; +
12432 wp.m += shift; +
12433} +
12434 +
12435// All other shifts, applied to the smaller subtrees between w- and w+, are +
12436// performed by this function. To prepare the shifts, we have to adjust +
12437// change(w+), shift(w+), and change(w-). +
12438function executeShifts(v) { +
12439 var shift = 0, +
12440 change = 0, +
12441 children = v.children, +
12442 i = children.length, +
12443 w; +
12444 while (--i >= 0) { +
12445 w = children[i]; +
12446 w.z += shift; +
12447 w.m += shift; +
12448 shift += w.s + (change += w.c); +
12449 } +
12450} +
12451 +
12452// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, +
12453// returns the specified (default) ancestor. +
12454function nextAncestor(vim, v, ancestor) { +
12455 return vim.a.parent === v.parent ? vim.a : ancestor; +
12456} +
12457 +
12458function TreeNode(node, i) { +
12459 this._ = node; +
12460 this.parent = null; +
12461 this.children = null; +
12462 this.A = null; // default ancestor +
12463 this.a = this; // ancestor +
12464 this.z = 0; // prelim +
12465 this.m = 0; // mod +
12466 this.c = 0; // change +
12467 this.s = 0; // shift +
12468 this.t = null; // thread +
12469 this.i = i; // number +
12470} +
12471 +
12472TreeNode.prototype = Object.create(_hierarchy_index__WEBPACK_IMPORTED_MODULE_0__["Node"].prototype); +
12473 +
12474function treeRoot(root) { +
12475 var tree = new TreeNode(root, 0), +
12476 node, +
12477 nodes = [tree], +
12478 child, +
12479 children, +
12480 i, +
12481 n; +
12482 +
12483 while (node = nodes.pop()) { +
12484 if (children = node._.children) { +
12485 node.children = new Array(n = children.length); +
12486 for (i = n - 1; i >= 0; --i) { +
12487 nodes.push(child = node.children[i] = new TreeNode(children[i], i)); +
12488 child.parent = node; +
12489 } +
12490 } +
12491 } +
12492 +
12493 (tree.parent = new TreeNode(null, 0)).children = [tree]; +
12494 return tree; +
12495} +
12496 +
12497// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm +
12498/* harmony default export */ __webpack_exports__["default"] = (function() { +
12499 var separation = defaultSeparation, +
12500 dx = 1, +
12501 dy = 1, +
12502 nodeSize = null; +
12503 +
12504 function tree(root) { +
12505 var t = treeRoot(root); +
12506 +
12507 // Compute the layout using Buchheim et al.’s algorithm. +
12508 t.eachAfter(firstWalk), t.parent.m = -t.z; +
12509 t.eachBefore(secondWalk); +
12510 +
12511 // If a fixed node size is specified, scale x and y. +
12512 if (nodeSize) root.eachBefore(sizeNode); +
12513 +
12514 // If a fixed tree size is specified, scale x and y based on the extent. +
12515 // Compute the left-most, right-most, and depth-most nodes for extents. +
12516 else { +
12517 var left = root, +
12518 right = root, +
12519 bottom = root; +
12520 root.eachBefore(function(node) { +
12521 if (node.x < left.x) left = node; +
12522 if (node.x > right.x) right = node; +
12523 if (node.depth > bottom.depth) bottom = node; +
12524 }); +
12525 var s = left === right ? 1 : separation(left, right) / 2, +
12526 tx = s - left.x, +
12527 kx = dx / (right.x + s + tx), +
12528 ky = dy / (bottom.depth || 1); +
12529 root.eachBefore(function(node) { +
12530 node.x = (node.x + tx) * kx; +
12531 node.y = node.depth * ky; +
12532 }); +
12533 } +
12534 +
12535 return root; +
12536 } +
12537 +
12538 // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is +
12539 // applied recursively to the children of v, as well as the function +
12540 // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the +
12541 // node v is placed to the midpoint of its outermost children. +
12542 function firstWalk(v) { +
12543 var children = v.children, +
12544 siblings = v.parent.children, +
12545 w = v.i ? siblings[v.i - 1] : null; +
12546 if (children) { +
12547 executeShifts(v); +
12548 var midpoint = (children[0].z + children[children.length - 1].z) / 2; +
12549 if (w) { +
12550 v.z = w.z + separation(v._, w._); +
12551 v.m = v.z - midpoint; +
12552 } else { +
12553 v.z = midpoint; +
12554 } +
12555 } else if (w) { +
12556 v.z = w.z + separation(v._, w._); +
12557 } +
12558 v.parent.A = apportion(v, w, v.parent.A || siblings[0]); +
12559 } +
12560 +
12561 // Computes all real x-coordinates by summing up the modifiers recursively. +
12562 function secondWalk(v) { +
12563 v._.x = v.z + v.parent.m; +
12564 v.m += v.parent.m; +
12565 } +
12566 +
12567 // The core of the algorithm. Here, a new subtree is combined with the +
12568 // previous subtrees. Threads are used to traverse the inside and outside +
12569 // contours of the left and right subtree up to the highest common level. The +
12570 // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the +
12571 // superscript o means outside and i means inside, the subscript - means left +
12572 // subtree and + means right subtree. For summing up the modifiers along the +
12573 // contour, we use respective variables si+, si-, so-, and so+. Whenever two +
12574 // nodes of the inside contours conflict, we compute the left one of the +
12575 // greatest uncommon ancestors using the function ANCESTOR and call MOVE +
12576 // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. +
12577 // Finally, we add a new thread (if necessary). +
12578 function apportion(v, w, ancestor) { +
12579 if (w) { +
12580 var vip = v, +
12581 vop = v, +
12582 vim = w, +
12583 vom = vip.parent.children[0], +
12584 sip = vip.m, +
12585 sop = vop.m, +
12586 sim = vim.m, +
12587 som = vom.m, +
12588 shift; +
12589 while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { +
12590 vom = nextLeft(vom); +
12591 vop = nextRight(vop); +
12592 vop.a = v; +
12593 shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); +
12594 if (shift > 0) { +
12595 moveSubtree(nextAncestor(vim, v, ancestor), v, shift); +
12596 sip += shift; +
12597 sop += shift; +
12598 } +
12599 sim += vim.m; +
12600 sip += vip.m; +
12601 som += vom.m; +
12602 sop += vop.m; +
12603 } +
12604 if (vim && !nextRight(vop)) { +
12605 vop.t = vim; +
12606 vop.m += sim - sop; +
12607 } +
12608 if (vip && !nextLeft(vom)) { +
12609 vom.t = vip; +
12610 vom.m += sip - som; +
12611 ancestor = v; +
12612 } +
12613 } +
12614 return ancestor; +
12615 } +
12616 +
12617 function sizeNode(node) { +
12618 node.x *= dx; +
12619 node.y = node.depth * dy; +
12620 } +
12621 +
12622 tree.separation = function(x) { +
12623 return arguments.length ? (separation = x, tree) : separation; +
12624 }; +
12625 +
12626 tree.size = function(x) { +
12627 return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); +
12628 }; +
12629 +
12630 tree.nodeSize = function(x) { +
12631 return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); +
12632 }; +
12633 +
12634 return tree; +
12635}); +
12636 +
12637 +
12638/***/ }), +
12639 +
12640/***/ "./node_modules/d3-hierarchy/src/treemap/binary.js": +
12641/*!*********************************************************!*\ +
12642 !*** ./node_modules/d3-hierarchy/src/treemap/binary.js ***! +
12643 \*********************************************************/ +
12644/*! exports provided: default */ +
12645/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12646 +
12647"use strict"; +
12648__webpack_require__.r(__webpack_exports__); +
12649/* harmony default export */ __webpack_exports__["default"] = (function(parent, x0, y0, x1, y1) { +
12650 var nodes = parent.children, +
12651 i, n = nodes.length, +
12652 sum, sums = new Array(n + 1); +
12653 +
12654 for (sums[0] = sum = i = 0; i < n; ++i) { +
12655 sums[i + 1] = sum += nodes[i].value; +
12656 } +
12657 +
12658 partition(0, n, parent.value, x0, y0, x1, y1); +
12659 +
12660 function partition(i, j, value, x0, y0, x1, y1) { +
12661 if (i >= j - 1) { +
12662 var node = nodes[i]; +
12663 node.x0 = x0, node.y0 = y0; +
12664 node.x1 = x1, node.y1 = y1; +
12665 return; +
12666 } +
12667 +
12668 var valueOffset = sums[i], +
12669 valueTarget = (value / 2) + valueOffset, +
12670 k = i + 1, +
12671 hi = j - 1; +
12672 +
12673 while (k < hi) { +
12674 var mid = k + hi >>> 1; +
12675 if (sums[mid] < valueTarget) k = mid + 1; +
12676 else hi = mid; +
12677 } +
12678 +
12679 if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; +
12680 +
12681 var valueLeft = sums[k] - valueOffset, +
12682 valueRight = value - valueLeft; +
12683 +
12684 if ((x1 - x0) > (y1 - y0)) { +
12685 var xk = (x0 * valueRight + x1 * valueLeft) / value; +
12686 partition(i, k, valueLeft, x0, y0, xk, y1); +
12687 partition(k, j, valueRight, xk, y0, x1, y1); +
12688 } else { +
12689 var yk = (y0 * valueRight + y1 * valueLeft) / value; +
12690 partition(i, k, valueLeft, x0, y0, x1, yk); +
12691 partition(k, j, valueRight, x0, yk, x1, y1); +
12692 } +
12693 } +
12694}); +
12695 +
12696 +
12697/***/ }), +
12698 +
12699/***/ "./node_modules/d3-hierarchy/src/treemap/dice.js": +
12700/*!*******************************************************!*\ +
12701 !*** ./node_modules/d3-hierarchy/src/treemap/dice.js ***! +
12702 \*******************************************************/ +
12703/*! exports provided: default */ +
12704/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12705 +
12706"use strict"; +
12707__webpack_require__.r(__webpack_exports__); +
12708/* harmony default export */ __webpack_exports__["default"] = (function(parent, x0, y0, x1, y1) { +
12709 var nodes = parent.children, +
12710 node, +
12711 i = -1, +
12712 n = nodes.length, +
12713 k = parent.value && (x1 - x0) / parent.value; +
12714 +
12715 while (++i < n) { +
12716 node = nodes[i], node.y0 = y0, node.y1 = y1; +
12717 node.x0 = x0, node.x1 = x0 += node.value * k; +
12718 } +
12719}); +
12720 +
12721 +
12722/***/ }), +
12723 +
12724/***/ "./node_modules/d3-hierarchy/src/treemap/index.js": +
12725/*!********************************************************!*\ +
12726 !*** ./node_modules/d3-hierarchy/src/treemap/index.js ***! +
12727 \********************************************************/ +
12728/*! exports provided: default */ +
12729/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12730 +
12731"use strict"; +
12732__webpack_require__.r(__webpack_exports__); +
12733/* harmony import */ var _round__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./round */ "./node_modules/d3-hierarchy/src/treemap/round.js"); +
12734/* harmony import */ var _squarify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./squarify */ "./node_modules/d3-hierarchy/src/treemap/squarify.js"); +
12735/* harmony import */ var _accessors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../accessors */ "./node_modules/d3-hierarchy/src/accessors.js"); +
12736/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constant */ "./node_modules/d3-hierarchy/src/constant.js"); +
12737 +
12738 +
12739 +
12740 +
12741 +
12742/* harmony default export */ __webpack_exports__["default"] = (function() { +
12743 var tile = _squarify__WEBPACK_IMPORTED_MODULE_1__["default"], +
12744 round = false, +
12745 dx = 1, +
12746 dy = 1, +
12747 paddingStack = [0], +
12748 paddingInner = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"], +
12749 paddingTop = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"], +
12750 paddingRight = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"], +
12751 paddingBottom = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"], +
12752 paddingLeft = _constant__WEBPACK_IMPORTED_MODULE_3__["constantZero"]; +
12753 +
12754 function treemap(root) { +
12755 root.x0 = +
12756 root.y0 = 0; +
12757 root.x1 = dx; +
12758 root.y1 = dy; +
12759 root.eachBefore(positionNode); +
12760 paddingStack = [0]; +
12761 if (round) root.eachBefore(_round__WEBPACK_IMPORTED_MODULE_0__["default"]); +
12762 return root; +
12763 } +
12764 +
12765 function positionNode(node) { +
12766 var p = paddingStack[node.depth], +
12767 x0 = node.x0 + p, +
12768 y0 = node.y0 + p, +
12769 x1 = node.x1 - p, +
12770 y1 = node.y1 - p; +
12771 if (x1 < x0) x0 = x1 = (x0 + x1) / 2; +
12772 if (y1 < y0) y0 = y1 = (y0 + y1) / 2; +
12773 node.x0 = x0; +
12774 node.y0 = y0; +
12775 node.x1 = x1; +
12776 node.y1 = y1; +
12777 if (node.children) { +
12778 p = paddingStack[node.depth + 1] = paddingInner(node) / 2; +
12779 x0 += paddingLeft(node) - p; +
12780 y0 += paddingTop(node) - p; +
12781 x1 -= paddingRight(node) - p; +
12782 y1 -= paddingBottom(node) - p; +
12783 if (x1 < x0) x0 = x1 = (x0 + x1) / 2; +
12784 if (y1 < y0) y0 = y1 = (y0 + y1) / 2; +
12785 tile(node, x0, y0, x1, y1); +
12786 } +
12787 } +
12788 +
12789 treemap.round = function(x) { +
12790 return arguments.length ? (round = !!x, treemap) : round; +
12791 }; +
12792 +
12793 treemap.size = function(x) { +
12794 return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; +
12795 }; +
12796 +
12797 treemap.tile = function(x) { +
12798 return arguments.length ? (tile = Object(_accessors__WEBPACK_IMPORTED_MODULE_2__["required"])(x), treemap) : tile; +
12799 }; +
12800 +
12801 treemap.padding = function(x) { +
12802 return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); +
12803 }; +
12804 +
12805 treemap.paddingInner = function(x) { +
12806 return arguments.length ? (paddingInner = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingInner; +
12807 }; +
12808 +
12809 treemap.paddingOuter = function(x) { +
12810 return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); +
12811 }; +
12812 +
12813 treemap.paddingTop = function(x) { +
12814 return arguments.length ? (paddingTop = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingTop; +
12815 }; +
12816 +
12817 treemap.paddingRight = function(x) { +
12818 return arguments.length ? (paddingRight = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingRight; +
12819 }; +
12820 +
12821 treemap.paddingBottom = function(x) { +
12822 return arguments.length ? (paddingBottom = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingBottom; +
12823 }; +
12824 +
12825 treemap.paddingLeft = function(x) { +
12826 return arguments.length ? (paddingLeft = typeof x === "function" ? x : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(+x), treemap) : paddingLeft; +
12827 }; +
12828 +
12829 return treemap; +
12830}); +
12831 +
12832 +
12833/***/ }), +
12834 +
12835/***/ "./node_modules/d3-hierarchy/src/treemap/resquarify.js": +
12836/*!*************************************************************!*\ +
12837 !*** ./node_modules/d3-hierarchy/src/treemap/resquarify.js ***! +
12838 \*************************************************************/ +
12839/*! exports provided: default */ +
12840/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12841 +
12842"use strict"; +
12843__webpack_require__.r(__webpack_exports__); +
12844/* harmony import */ var _dice__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); +
12845/* harmony import */ var _slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice */ "./node_modules/d3-hierarchy/src/treemap/slice.js"); +
12846/* harmony import */ var _squarify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./squarify */ "./node_modules/d3-hierarchy/src/treemap/squarify.js"); +
12847 +
12848 +
12849 +
12850 +
12851/* harmony default export */ __webpack_exports__["default"] = ((function custom(ratio) { +
12852 +
12853 function resquarify(parent, x0, y0, x1, y1) { +
12854 if ((rows = parent._squarify) && (rows.ratio === ratio)) { +
12855 var rows, +
12856 row, +
12857 nodes, +
12858 i, +
12859 j = -1, +
12860 n, +
12861 m = rows.length, +
12862 value = parent.value; +
12863 +
12864 while (++j < m) { +
12865 row = rows[j], nodes = row.children; +
12866 for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; +
12867 if (row.dice) Object(_dice__WEBPACK_IMPORTED_MODULE_0__["default"])(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); +
12868 else Object(_slice__WEBPACK_IMPORTED_MODULE_1__["default"])(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); +
12869 value -= row.value; +
12870 } +
12871 } else { +
12872 parent._squarify = rows = Object(_squarify__WEBPACK_IMPORTED_MODULE_2__["squarifyRatio"])(ratio, parent, x0, y0, x1, y1); +
12873 rows.ratio = ratio; +
12874 } +
12875 } +
12876 +
12877 resquarify.ratio = function(x) { +
12878 return custom((x = +x) > 1 ? x : 1); +
12879 }; +
12880 +
12881 return resquarify; +
12882})(_squarify__WEBPACK_IMPORTED_MODULE_2__["phi"])); +
12883 +
12884 +
12885/***/ }), +
12886 +
12887/***/ "./node_modules/d3-hierarchy/src/treemap/round.js": +
12888/*!********************************************************!*\ +
12889 !*** ./node_modules/d3-hierarchy/src/treemap/round.js ***! +
12890 \********************************************************/ +
12891/*! exports provided: default */ +
12892/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12893 +
12894"use strict"; +
12895__webpack_require__.r(__webpack_exports__); +
12896/* harmony default export */ __webpack_exports__["default"] = (function(node) { +
12897 node.x0 = Math.round(node.x0); +
12898 node.y0 = Math.round(node.y0); +
12899 node.x1 = Math.round(node.x1); +
12900 node.y1 = Math.round(node.y1); +
12901}); +
12902 +
12903 +
12904/***/ }), +
12905 +
12906/***/ "./node_modules/d3-hierarchy/src/treemap/slice.js": +
12907/*!********************************************************!*\ +
12908 !*** ./node_modules/d3-hierarchy/src/treemap/slice.js ***! +
12909 \********************************************************/ +
12910/*! exports provided: default */ +
12911/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12912 +
12913"use strict"; +
12914__webpack_require__.r(__webpack_exports__); +
12915/* harmony default export */ __webpack_exports__["default"] = (function(parent, x0, y0, x1, y1) { +
12916 var nodes = parent.children, +
12917 node, +
12918 i = -1, +
12919 n = nodes.length, +
12920 k = parent.value && (y1 - y0) / parent.value; +
12921 +
12922 while (++i < n) { +
12923 node = nodes[i], node.x0 = x0, node.x1 = x1; +
12924 node.y0 = y0, node.y1 = y0 += node.value * k; +
12925 } +
12926}); +
12927 +
12928 +
12929/***/ }), +
12930 +
12931/***/ "./node_modules/d3-hierarchy/src/treemap/sliceDice.js": +
12932/*!************************************************************!*\ +
12933 !*** ./node_modules/d3-hierarchy/src/treemap/sliceDice.js ***! +
12934 \************************************************************/ +
12935/*! exports provided: default */ +
12936/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12937 +
12938"use strict"; +
12939__webpack_require__.r(__webpack_exports__); +
12940/* harmony import */ var _dice__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); +
12941/* harmony import */ var _slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice */ "./node_modules/d3-hierarchy/src/treemap/slice.js"); +
12942 +
12943 +
12944 +
12945/* harmony default export */ __webpack_exports__["default"] = (function(parent, x0, y0, x1, y1) { +
12946 (parent.depth & 1 ? _slice__WEBPACK_IMPORTED_MODULE_1__["default"] : _dice__WEBPACK_IMPORTED_MODULE_0__["default"])(parent, x0, y0, x1, y1); +
12947}); +
12948 +
12949 +
12950/***/ }), +
12951 +
12952/***/ "./node_modules/d3-hierarchy/src/treemap/squarify.js": +
12953/*!***********************************************************!*\ +
12954 !*** ./node_modules/d3-hierarchy/src/treemap/squarify.js ***! +
12955 \***********************************************************/ +
12956/*! exports provided: phi, squarifyRatio, default */ +
12957/***/ (function(module, __webpack_exports__, __webpack_require__) { +
12958 +
12959"use strict"; +
12960__webpack_require__.r(__webpack_exports__); +
12961/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "phi", function() { return phi; }); +
12962/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "squarifyRatio", function() { return squarifyRatio; }); +
12963/* harmony import */ var _dice__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dice */ "./node_modules/d3-hierarchy/src/treemap/dice.js"); +
12964/* harmony import */ var _slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slice */ "./node_modules/d3-hierarchy/src/treemap/slice.js"); +
12965 +
12966 +
12967 +
12968var phi = (1 + Math.sqrt(5)) / 2; +
12969 +
12970function squarifyRatio(ratio, parent, x0, y0, x1, y1) { +
12971 var rows = [], +
12972 nodes = parent.children, +
12973 row, +
12974 nodeValue, +
12975 i0 = 0, +
12976 i1 = 0, +
12977 n = nodes.length, +
12978 dx, dy, +
12979 value = parent.value, +
12980 sumValue, +
12981 minValue, +
12982 maxValue, +
12983 newRatio, +
12984 minRatio, +
12985 alpha, +
12986 beta; +
12987 +
12988 while (i0 < n) { +
12989 dx = x1 - x0, dy = y1 - y0; +
12990 +
12991 // Find the next non-empty node. +
12992 do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); +
12993 minValue = maxValue = sumValue; +
12994 alpha = Math.max(dy / dx, dx / dy) / (value * ratio); +
12995 beta = sumValue * sumValue * alpha; +
12996 minRatio = Math.max(maxValue / beta, beta / minValue); +
12997 +
12998 // Keep adding nodes while the aspect ratio maintains or improves. +
12999 for (; i1 < n; ++i1) { +
13000 sumValue += nodeValue = nodes[i1].value; +
13001 if (nodeValue < minValue) minValue = nodeValue; +
13002 if (nodeValue > maxValue) maxValue = nodeValue; +
13003 beta = sumValue * sumValue * alpha; +
13004 newRatio = Math.max(maxValue / beta, beta / minValue); +
13005 if (newRatio > minRatio) { sumValue -= nodeValue; break; } +
13006 minRatio = newRatio; +
13007 } +
13008 +
13009 // Position and record the row orientation. +
13010 rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); +
13011 if (row.dice) Object(_dice__WEBPACK_IMPORTED_MODULE_0__["default"])(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); +
13012 else Object(_slice__WEBPACK_IMPORTED_MODULE_1__["default"])(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); +
13013 value -= sumValue, i0 = i1; +
13014 } +
13015 +
13016 return rows; +
13017} +
13018 +
13019/* harmony default export */ __webpack_exports__["default"] = ((function custom(ratio) { +
13020 +
13021 function squarify(parent, x0, y0, x1, y1) { +
13022 squarifyRatio(ratio, parent, x0, y0, x1, y1); +
13023 } +
13024 +
13025 squarify.ratio = function(x) { +
13026 return custom((x = +x) > 1 ? x : 1); +
13027 }; +
13028 +
13029 return squarify; +
13030})(phi)); +
13031 +
13032 +
13033/***/ }), +
13034 +
13035/***/ "./node_modules/d3-interpolate/src/array.js": +
13036/*!**************************************************!*\ +
13037 !*** ./node_modules/d3-interpolate/src/array.js ***! +
13038 \**************************************************/ +
13039/*! exports provided: default */ +
13040/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13041 +
13042"use strict"; +
13043__webpack_require__.r(__webpack_exports__); +
13044/* harmony import */ var _value__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value */ "./node_modules/d3-interpolate/src/value.js"); +
13045 +
13046 +
13047/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
13048 var nb = b ? b.length : 0, +
13049 na = a ? Math.min(nb, a.length) : 0, +
13050 x = new Array(na), +
13051 c = new Array(nb), +
13052 i; +
13053 +
13054 for (i = 0; i < na; ++i) x[i] = Object(_value__WEBPACK_IMPORTED_MODULE_0__["default"])(a[i], b[i]); +
13055 for (; i < nb; ++i) c[i] = b[i]; +
13056 +
13057 return function(t) { +
13058 for (i = 0; i < na; ++i) c[i] = x[i](t); +
13059 return c; +
13060 }; +
13061}); +
13062 +
13063 +
13064/***/ }), +
13065 +
13066/***/ "./node_modules/d3-interpolate/src/basis.js": +
13067/*!**************************************************!*\ +
13068 !*** ./node_modules/d3-interpolate/src/basis.js ***! +
13069 \**************************************************/ +
13070/*! exports provided: basis, default */ +
13071/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13072 +
13073"use strict"; +
13074__webpack_require__.r(__webpack_exports__); +
13075/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "basis", function() { return basis; }); +
13076function basis(t1, v0, v1, v2, v3) { +
13077 var t2 = t1 * t1, t3 = t2 * t1; +
13078 return ((1 - 3 * t1 + 3 * t2 - t3) * v0 +
13079 + (4 - 6 * t2 + 3 * t3) * v1 +
13080 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 +
13081 + t3 * v3) / 6; +
13082} +
13083 +
13084/* harmony default export */ __webpack_exports__["default"] = (function(values) { +
13085 var n = values.length - 1; +
13086 return function(t) { +
13087 var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), +
13088 v1 = values[i], +
13089 v2 = values[i + 1], +
13090 v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, +
13091 v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; +
13092 return basis((t - i / n) * n, v0, v1, v2, v3); +
13093 }; +
13094}); +
13095 +
13096 +
13097/***/ }), +
13098 +
13099/***/ "./node_modules/d3-interpolate/src/basisClosed.js": +
13100/*!********************************************************!*\ +
13101 !*** ./node_modules/d3-interpolate/src/basisClosed.js ***! +
13102 \********************************************************/ +
13103/*! exports provided: default */ +
13104/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13105 +
13106"use strict"; +
13107__webpack_require__.r(__webpack_exports__); +
13108/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis */ "./node_modules/d3-interpolate/src/basis.js"); +
13109 +
13110 +
13111/* harmony default export */ __webpack_exports__["default"] = (function(values) { +
13112 var n = values.length; +
13113 return function(t) { +
13114 var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), +
13115 v0 = values[(i + n - 1) % n], +
13116 v1 = values[i % n], +
13117 v2 = values[(i + 1) % n], +
13118 v3 = values[(i + 2) % n]; +
13119 return Object(_basis__WEBPACK_IMPORTED_MODULE_0__["basis"])((t - i / n) * n, v0, v1, v2, v3); +
13120 }; +
13121}); +
13122 +
13123 +
13124/***/ }), +
13125 +
13126/***/ "./node_modules/d3-interpolate/src/color.js": +
13127/*!**************************************************!*\ +
13128 !*** ./node_modules/d3-interpolate/src/color.js ***! +
13129 \**************************************************/ +
13130/*! exports provided: hue, gamma, default */ +
13131/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13132 +
13133"use strict"; +
13134__webpack_require__.r(__webpack_exports__); +
13135/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hue", function() { return hue; }); +
13136/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gamma", function() { return gamma; }); +
13137/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return nogamma; }); +
13138/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-interpolate/src/constant.js"); +
13139 +
13140 +
13141function linear(a, d) { +
13142 return function(t) { +
13143 return a + t * d; +
13144 }; +
13145} +
13146 +
13147function exponential(a, b, y) { +
13148 return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { +
13149 return Math.pow(a + t * b, y); +
13150 }; +
13151} +
13152 +
13153function hue(a, b) { +
13154 var d = b - a; +
13155 return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(isNaN(a) ? b : a); +
13156} +
13157 +
13158function gamma(y) { +
13159 return (y = +y) === 1 ? nogamma : function(a, b) { +
13160 return b - a ? exponential(a, b, y) : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(isNaN(a) ? b : a); +
13161 }; +
13162} +
13163 +
13164function nogamma(a, b) { +
13165 var d = b - a; +
13166 return d ? linear(a, d) : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(isNaN(a) ? b : a); +
13167} +
13168 +
13169 +
13170/***/ }), +
13171 +
13172/***/ "./node_modules/d3-interpolate/src/constant.js": +
13173/*!*****************************************************!*\ +
13174 !*** ./node_modules/d3-interpolate/src/constant.js ***! +
13175 \*****************************************************/ +
13176/*! exports provided: default */ +
13177/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13178 +
13179"use strict"; +
13180__webpack_require__.r(__webpack_exports__); +
13181/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
13182 return function() { +
13183 return x; +
13184 }; +
13185}); +
13186 +
13187 +
13188/***/ }), +
13189 +
13190/***/ "./node_modules/d3-interpolate/src/cubehelix.js": +
13191/*!******************************************************!*\ +
13192 !*** ./node_modules/d3-interpolate/src/cubehelix.js ***! +
13193 \******************************************************/ +
13194/*! exports provided: default, cubehelixLong */ +
13195/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13196 +
13197"use strict"; +
13198__webpack_require__.r(__webpack_exports__); +
13199/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cubehelixLong", function() { return cubehelixLong; }); +
13200/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
13201/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "./node_modules/d3-interpolate/src/color.js"); +
13202 +
13203 +
13204 +
13205function cubehelix(hue) { +
13206 return (function cubehelixGamma(y) { +
13207 y = +y; +
13208 +
13209 function cubehelix(start, end) { +
13210 var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(end)).h), +
13211 s = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.s, end.s), +
13212 l = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.l, end.l), +
13213 opacity = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); +
13214 return function(t) { +
13215 start.h = h(t); +
13216 start.s = s(t); +
13217 start.l = l(Math.pow(t, y)); +
13218 start.opacity = opacity(t); +
13219 return start + ""; +
13220 }; +
13221 } +
13222 +
13223 cubehelix.gamma = cubehelixGamma; +
13224 +
13225 return cubehelix; +
13226 })(1); +
13227} +
13228 +
13229/* harmony default export */ __webpack_exports__["default"] = (cubehelix(_color__WEBPACK_IMPORTED_MODULE_1__["hue"])); +
13230var cubehelixLong = cubehelix(_color__WEBPACK_IMPORTED_MODULE_1__["default"]); +
13231 +
13232 +
13233/***/ }), +
13234 +
13235/***/ "./node_modules/d3-interpolate/src/date.js": +
13236/*!*************************************************!*\ +
13237 !*** ./node_modules/d3-interpolate/src/date.js ***! +
13238 \*************************************************/ +
13239/*! exports provided: default */ +
13240/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13241 +
13242"use strict"; +
13243__webpack_require__.r(__webpack_exports__); +
13244/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
13245 var d = new Date; +
13246 return a = +a, b -= a, function(t) { +
13247 return d.setTime(a + b * t), d; +
13248 }; +
13249}); +
13250 +
13251 +
13252/***/ }), +
13253 +
13254/***/ "./node_modules/d3-interpolate/src/discrete.js": +
13255/*!*****************************************************!*\ +
13256 !*** ./node_modules/d3-interpolate/src/discrete.js ***! +
13257 \*****************************************************/ +
13258/*! exports provided: default */ +
13259/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13260 +
13261"use strict"; +
13262__webpack_require__.r(__webpack_exports__); +
13263/* harmony default export */ __webpack_exports__["default"] = (function(range) { +
13264 var n = range.length; +
13265 return function(t) { +
13266 return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; +
13267 }; +
13268}); +
13269 +
13270 +
13271/***/ }), +
13272 +
13273/***/ "./node_modules/d3-interpolate/src/hcl.js": +
13274/*!************************************************!*\ +
13275 !*** ./node_modules/d3-interpolate/src/hcl.js ***! +
13276 \************************************************/ +
13277/*! exports provided: default, hclLong */ +
13278/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13279 +
13280"use strict"; +
13281__webpack_require__.r(__webpack_exports__); +
13282/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hclLong", function() { return hclLong; }); +
13283/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
13284/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "./node_modules/d3-interpolate/src/color.js"); +
13285 +
13286 +
13287 +
13288function hcl(hue) { +
13289 return function(start, end) { +
13290 var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["hcl"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["hcl"])(end)).h), +
13291 c = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.c, end.c), +
13292 l = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.l, end.l), +
13293 opacity = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); +
13294 return function(t) { +
13295 start.h = h(t); +
13296 start.c = c(t); +
13297 start.l = l(t); +
13298 start.opacity = opacity(t); +
13299 return start + ""; +
13300 }; +
13301 } +
13302} +
13303 +
13304/* harmony default export */ __webpack_exports__["default"] = (hcl(_color__WEBPACK_IMPORTED_MODULE_1__["hue"])); +
13305var hclLong = hcl(_color__WEBPACK_IMPORTED_MODULE_1__["default"]); +
13306 +
13307 +
13308/***/ }), +
13309 +
13310/***/ "./node_modules/d3-interpolate/src/hsl.js": +
13311/*!************************************************!*\ +
13312 !*** ./node_modules/d3-interpolate/src/hsl.js ***! +
13313 \************************************************/ +
13314/*! exports provided: default, hslLong */ +
13315/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13316 +
13317"use strict"; +
13318__webpack_require__.r(__webpack_exports__); +
13319/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hslLong", function() { return hslLong; }); +
13320/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
13321/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "./node_modules/d3-interpolate/src/color.js"); +
13322 +
13323 +
13324 +
13325function hsl(hue) { +
13326 return function(start, end) { +
13327 var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["hsl"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["hsl"])(end)).h), +
13328 s = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.s, end.s), +
13329 l = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.l, end.l), +
13330 opacity = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); +
13331 return function(t) { +
13332 start.h = h(t); +
13333 start.s = s(t); +
13334 start.l = l(t); +
13335 start.opacity = opacity(t); +
13336 return start + ""; +
13337 }; +
13338 } +
13339} +
13340 +
13341/* harmony default export */ __webpack_exports__["default"] = (hsl(_color__WEBPACK_IMPORTED_MODULE_1__["hue"])); +
13342var hslLong = hsl(_color__WEBPACK_IMPORTED_MODULE_1__["default"]); +
13343 +
13344 +
13345/***/ }), +
13346 +
13347/***/ "./node_modules/d3-interpolate/src/hue.js": +
13348/*!************************************************!*\ +
13349 !*** ./node_modules/d3-interpolate/src/hue.js ***! +
13350 \************************************************/ +
13351/*! exports provided: default */ +
13352/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13353 +
13354"use strict"; +
13355__webpack_require__.r(__webpack_exports__); +
13356/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color */ "./node_modules/d3-interpolate/src/color.js"); +
13357 +
13358 +
13359/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
13360 var i = Object(_color__WEBPACK_IMPORTED_MODULE_0__["hue"])(+a, +b); +
13361 return function(t) { +
13362 var x = i(t); +
13363 return x - 360 * Math.floor(x / 360); +
13364 }; +
13365}); +
13366 +
13367 +
13368/***/ }), +
13369 +
13370/***/ "./node_modules/d3-interpolate/src/index.js": +
13371/*!**************************************************!*\ +
13372 !*** ./node_modules/d3-interpolate/src/index.js ***! +
13373 \**************************************************/ +
13374/*! exports provided: interpolate, interpolateArray, interpolateBasis, interpolateBasisClosed, interpolateDate, interpolateDiscrete, interpolateHue, interpolateNumber, interpolateObject, interpolateRound, interpolateString, interpolateTransformCss, interpolateTransformSvg, interpolateZoom, interpolateRgb, interpolateRgbBasis, interpolateRgbBasisClosed, interpolateHsl, interpolateHslLong, interpolateLab, interpolateHcl, interpolateHclLong, interpolateCubehelix, interpolateCubehelixLong, piecewise, quantize */ +
13375/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13376 +
13377"use strict"; +
13378__webpack_require__.r(__webpack_exports__); +
13379/* harmony import */ var _value__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value */ "./node_modules/d3-interpolate/src/value.js"); +
13380/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolate", function() { return _value__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
13381 +
13382/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-interpolate/src/array.js"); +
13383/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateArray", function() { return _array__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
13384 +
13385/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basis */ "./node_modules/d3-interpolate/src/basis.js"); +
13386/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBasis", function() { return _basis__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
13387 +
13388/* harmony import */ var _basisClosed__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basisClosed */ "./node_modules/d3-interpolate/src/basisClosed.js"); +
13389/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBasisClosed", function() { return _basisClosed__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
13390 +
13391/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./date */ "./node_modules/d3-interpolate/src/date.js"); +
13392/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateDate", function() { return _date__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
13393 +
13394/* harmony import */ var _discrete__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./discrete */ "./node_modules/d3-interpolate/src/discrete.js"); +
13395/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateDiscrete", function() { return _discrete__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
13396 +
13397/* harmony import */ var _hue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hue */ "./node_modules/d3-interpolate/src/hue.js"); +
13398/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHue", function() { return _hue__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
13399 +
13400/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./number */ "./node_modules/d3-interpolate/src/number.js"); +
13401/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateNumber", function() { return _number__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +
13402 +
13403/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./object */ "./node_modules/d3-interpolate/src/object.js"); +
13404/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateObject", function() { return _object__WEBPACK_IMPORTED_MODULE_8__["default"]; }); +
13405 +
13406/* harmony import */ var _round__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./round */ "./node_modules/d3-interpolate/src/round.js"); +
13407/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRound", function() { return _round__WEBPACK_IMPORTED_MODULE_9__["default"]; }); +
13408 +
13409/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./string */ "./node_modules/d3-interpolate/src/string.js"); +
13410/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateString", function() { return _string__WEBPACK_IMPORTED_MODULE_10__["default"]; }); +
13411 +
13412/* harmony import */ var _transform_index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./transform/index */ "./node_modules/d3-interpolate/src/transform/index.js"); +
13413/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformCss", function() { return _transform_index__WEBPACK_IMPORTED_MODULE_11__["interpolateTransformCss"]; }); +
13414 +
13415/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformSvg", function() { return _transform_index__WEBPACK_IMPORTED_MODULE_11__["interpolateTransformSvg"]; }); +
13416 +
13417/* harmony import */ var _zoom__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./zoom */ "./node_modules/d3-interpolate/src/zoom.js"); +
13418/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateZoom", function() { return _zoom__WEBPACK_IMPORTED_MODULE_12__["default"]; }); +
13419 +
13420/* harmony import */ var _rgb__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./rgb */ "./node_modules/d3-interpolate/src/rgb.js"); +
13421/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgb", function() { return _rgb__WEBPACK_IMPORTED_MODULE_13__["default"]; }); +
13422 +
13423/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasis", function() { return _rgb__WEBPACK_IMPORTED_MODULE_13__["rgbBasis"]; }); +
13424 +
13425/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasisClosed", function() { return _rgb__WEBPACK_IMPORTED_MODULE_13__["rgbBasisClosed"]; }); +
13426 +
13427/* harmony import */ var _hsl__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./hsl */ "./node_modules/d3-interpolate/src/hsl.js"); +
13428/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHsl", function() { return _hsl__WEBPACK_IMPORTED_MODULE_14__["default"]; }); +
13429 +
13430/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHslLong", function() { return _hsl__WEBPACK_IMPORTED_MODULE_14__["hslLong"]; }); +
13431 +
13432/* harmony import */ var _lab__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./lab */ "./node_modules/d3-interpolate/src/lab.js"); +
13433/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateLab", function() { return _lab__WEBPACK_IMPORTED_MODULE_15__["default"]; }); +
13434 +
13435/* harmony import */ var _hcl__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./hcl */ "./node_modules/d3-interpolate/src/hcl.js"); +
13436/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHcl", function() { return _hcl__WEBPACK_IMPORTED_MODULE_16__["default"]; }); +
13437 +
13438/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHclLong", function() { return _hcl__WEBPACK_IMPORTED_MODULE_16__["hclLong"]; }); +
13439 +
13440/* harmony import */ var _cubehelix__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./cubehelix */ "./node_modules/d3-interpolate/src/cubehelix.js"); +
13441/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelix", function() { return _cubehelix__WEBPACK_IMPORTED_MODULE_17__["default"]; }); +
13442 +
13443/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixLong", function() { return _cubehelix__WEBPACK_IMPORTED_MODULE_17__["cubehelixLong"]; }); +
13444 +
13445/* harmony import */ var _piecewise__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./piecewise */ "./node_modules/d3-interpolate/src/piecewise.js"); +
13446/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "piecewise", function() { return _piecewise__WEBPACK_IMPORTED_MODULE_18__["default"]; }); +
13447 +
13448/* harmony import */ var _quantize__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./quantize */ "./node_modules/d3-interpolate/src/quantize.js"); +
13449/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quantize", function() { return _quantize__WEBPACK_IMPORTED_MODULE_19__["default"]; }); +
13450 +
13451 +
13452 +
13453 +
13454 +
13455 +
13456 +
13457 +
13458 +
13459 +
13460 +
13461 +
13462 +
13463 +
13464 +
13465 +
13466 +
13467 +
13468 +
13469 +
13470 +
13471 +
13472 +
13473/***/ }), +
13474 +
13475/***/ "./node_modules/d3-interpolate/src/lab.js": +
13476/*!************************************************!*\ +
13477 !*** ./node_modules/d3-interpolate/src/lab.js ***! +
13478 \************************************************/ +
13479/*! exports provided: default */ +
13480/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13481 +
13482"use strict"; +
13483__webpack_require__.r(__webpack_exports__); +
13484/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return lab; }); +
13485/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
13486/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color */ "./node_modules/d3-interpolate/src/color.js"); +
13487 +
13488 +
13489 +
13490function lab(start, end) { +
13491 var l = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["lab"])(start)).l, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["lab"])(end)).l), +
13492 a = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.a, end.a), +
13493 b = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.b, end.b), +
13494 opacity = Object(_color__WEBPACK_IMPORTED_MODULE_1__["default"])(start.opacity, end.opacity); +
13495 return function(t) { +
13496 start.l = l(t); +
13497 start.a = a(t); +
13498 start.b = b(t); +
13499 start.opacity = opacity(t); +
13500 return start + ""; +
13501 }; +
13502} +
13503 +
13504 +
13505/***/ }), +
13506 +
13507/***/ "./node_modules/d3-interpolate/src/number.js": +
13508/*!***************************************************!*\ +
13509 !*** ./node_modules/d3-interpolate/src/number.js ***! +
13510 \***************************************************/ +
13511/*! exports provided: default */ +
13512/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13513 +
13514"use strict"; +
13515__webpack_require__.r(__webpack_exports__); +
13516/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
13517 return a = +a, b -= a, function(t) { +
13518 return a + b * t; +
13519 }; +
13520}); +
13521 +
13522 +
13523/***/ }), +
13524 +
13525/***/ "./node_modules/d3-interpolate/src/object.js": +
13526/*!***************************************************!*\ +
13527 !*** ./node_modules/d3-interpolate/src/object.js ***! +
13528 \***************************************************/ +
13529/*! exports provided: default */ +
13530/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13531 +
13532"use strict"; +
13533__webpack_require__.r(__webpack_exports__); +
13534/* harmony import */ var _value__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value */ "./node_modules/d3-interpolate/src/value.js"); +
13535 +
13536 +
13537/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
13538 var i = {}, +
13539 c = {}, +
13540 k; +
13541 +
13542 if (a === null || typeof a !== "object") a = {}; +
13543 if (b === null || typeof b !== "object") b = {}; +
13544 +
13545 for (k in b) { +
13546 if (k in a) { +
13547 i[k] = Object(_value__WEBPACK_IMPORTED_MODULE_0__["default"])(a[k], b[k]); +
13548 } else { +
13549 c[k] = b[k]; +
13550 } +
13551 } +
13552 +
13553 return function(t) { +
13554 for (k in i) c[k] = i[k](t); +
13555 return c; +
13556 }; +
13557}); +
13558 +
13559 +
13560/***/ }), +
13561 +
13562/***/ "./node_modules/d3-interpolate/src/piecewise.js": +
13563/*!******************************************************!*\ +
13564 !*** ./node_modules/d3-interpolate/src/piecewise.js ***! +
13565 \******************************************************/ +
13566/*! exports provided: default */ +
13567/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13568 +
13569"use strict"; +
13570__webpack_require__.r(__webpack_exports__); +
13571/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return piecewise; }); +
13572function piecewise(interpolate, values) { +
13573 var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n); +
13574 while (i < n) I[i] = interpolate(v, v = values[++i]); +
13575 return function(t) { +
13576 var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n))); +
13577 return I[i](t - i); +
13578 }; +
13579} +
13580 +
13581 +
13582/***/ }), +
13583 +
13584/***/ "./node_modules/d3-interpolate/src/quantize.js": +
13585/*!*****************************************************!*\ +
13586 !*** ./node_modules/d3-interpolate/src/quantize.js ***! +
13587 \*****************************************************/ +
13588/*! exports provided: default */ +
13589/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13590 +
13591"use strict"; +
13592__webpack_require__.r(__webpack_exports__); +
13593/* harmony default export */ __webpack_exports__["default"] = (function(interpolator, n) { +
13594 var samples = new Array(n); +
13595 for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); +
13596 return samples; +
13597}); +
13598 +
13599 +
13600/***/ }), +
13601 +
13602/***/ "./node_modules/d3-interpolate/src/rgb.js": +
13603/*!************************************************!*\ +
13604 !*** ./node_modules/d3-interpolate/src/rgb.js ***! +
13605 \************************************************/ +
13606/*! exports provided: default, rgbBasis, rgbBasisClosed */ +
13607/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13608 +
13609"use strict"; +
13610__webpack_require__.r(__webpack_exports__); +
13611/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbBasis", function() { return rgbBasis; }); +
13612/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbBasisClosed", function() { return rgbBasisClosed; }); +
13613/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
13614/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./basis */ "./node_modules/d3-interpolate/src/basis.js"); +
13615/* harmony import */ var _basisClosed__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basisClosed */ "./node_modules/d3-interpolate/src/basisClosed.js"); +
13616/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./color */ "./node_modules/d3-interpolate/src/color.js"); +
13617 +
13618 +
13619 +
13620 +
13621 +
13622/* harmony default export */ __webpack_exports__["default"] = ((function rgbGamma(y) { +
13623 var color = Object(_color__WEBPACK_IMPORTED_MODULE_3__["gamma"])(y); +
13624 +
13625 function rgb(start, end) { +
13626 var r = color((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["rgb"])(start)).r, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["rgb"])(end)).r), +
13627 g = color(start.g, end.g), +
13628 b = color(start.b, end.b), +
13629 opacity = Object(_color__WEBPACK_IMPORTED_MODULE_3__["default"])(start.opacity, end.opacity); +
13630 return function(t) { +
13631 start.r = r(t); +
13632 start.g = g(t); +
13633 start.b = b(t); +
13634 start.opacity = opacity(t); +
13635 return start + ""; +
13636 }; +
13637 } +
13638 +
13639 rgb.gamma = rgbGamma; +
13640 +
13641 return rgb; +
13642})(1)); +
13643 +
13644function rgbSpline(spline) { +
13645 return function(colors) { +
13646 var n = colors.length, +
13647 r = new Array(n), +
13648 g = new Array(n), +
13649 b = new Array(n), +
13650 i, color; +
13651 for (i = 0; i < n; ++i) { +
13652 color = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["rgb"])(colors[i]); +
13653 r[i] = color.r || 0; +
13654 g[i] = color.g || 0; +
13655 b[i] = color.b || 0; +
13656 } +
13657 r = spline(r); +
13658 g = spline(g); +
13659 b = spline(b); +
13660 color.opacity = 1; +
13661 return function(t) { +
13662 color.r = r(t); +
13663 color.g = g(t); +
13664 color.b = b(t); +
13665 return color + ""; +
13666 }; +
13667 }; +
13668} +
13669 +
13670var rgbBasis = rgbSpline(_basis__WEBPACK_IMPORTED_MODULE_1__["default"]); +
13671var rgbBasisClosed = rgbSpline(_basisClosed__WEBPACK_IMPORTED_MODULE_2__["default"]); +
13672 +
13673 +
13674/***/ }), +
13675 +
13676/***/ "./node_modules/d3-interpolate/src/round.js": +
13677/*!**************************************************!*\ +
13678 !*** ./node_modules/d3-interpolate/src/round.js ***! +
13679 \**************************************************/ +
13680/*! exports provided: default */ +
13681/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13682 +
13683"use strict"; +
13684__webpack_require__.r(__webpack_exports__); +
13685/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
13686 return a = +a, b -= a, function(t) { +
13687 return Math.round(a + b * t); +
13688 }; +
13689}); +
13690 +
13691 +
13692/***/ }), +
13693 +
13694/***/ "./node_modules/d3-interpolate/src/string.js": +
13695/*!***************************************************!*\ +
13696 !*** ./node_modules/d3-interpolate/src/string.js ***! +
13697 \***************************************************/ +
13698/*! exports provided: default */ +
13699/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13700 +
13701"use strict"; +
13702__webpack_require__.r(__webpack_exports__); +
13703/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number */ "./node_modules/d3-interpolate/src/number.js"); +
13704 +
13705 +
13706var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, +
13707 reB = new RegExp(reA.source, "g"); +
13708 +
13709function zero(b) { +
13710 return function() { +
13711 return b; +
13712 }; +
13713} +
13714 +
13715function one(b) { +
13716 return function(t) { +
13717 return b(t) + ""; +
13718 }; +
13719} +
13720 +
13721/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
13722 var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b +
13723 am, // current match in a +
13724 bm, // current match in b +
13725 bs, // string preceding current number in b, if any +
13726 i = -1, // index in s +
13727 s = [], // string constants and placeholders +
13728 q = []; // number interpolators +
13729 +
13730 // Coerce inputs to strings. +
13731 a = a + "", b = b + ""; +
13732 +
13733 // Interpolate pairs of numbers in a & b. +
13734 while ((am = reA.exec(a)) +
13735 && (bm = reB.exec(b))) { +
13736 if ((bs = bm.index) > bi) { // a string precedes the next number in b +
13737 bs = b.slice(bi, bs); +
13738 if (s[i]) s[i] += bs; // coalesce with previous string +
13739 else s[++i] = bs; +
13740 } +
13741 if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match +
13742 if (s[i]) s[i] += bm; // coalesce with previous string +
13743 else s[++i] = bm; +
13744 } else { // interpolate non-matching numbers +
13745 s[++i] = null; +
13746 q.push({i: i, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(am, bm)}); +
13747 } +
13748 bi = reB.lastIndex; +
13749 } +
13750 +
13751 // Add remains of b. +
13752 if (bi < b.length) { +
13753 bs = b.slice(bi); +
13754 if (s[i]) s[i] += bs; // coalesce with previous string +
13755 else s[++i] = bs; +
13756 } +
13757 +
13758 // Special optimization for only a single match. +
13759 // Otherwise, interpolate each of the numbers and rejoin the string. +
13760 return s.length < 2 ? (q[0] +
13761 ? one(q[0].x) +
13762 : zero(b)) +
13763 : (b = q.length, function(t) { +
13764 for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); +
13765 return s.join(""); +
13766 }); +
13767}); +
13768 +
13769 +
13770/***/ }), +
13771 +
13772/***/ "./node_modules/d3-interpolate/src/transform/decompose.js": +
13773/*!****************************************************************!*\ +
13774 !*** ./node_modules/d3-interpolate/src/transform/decompose.js ***! +
13775 \****************************************************************/ +
13776/*! exports provided: identity, default */ +
13777/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13778 +
13779"use strict"; +
13780__webpack_require__.r(__webpack_exports__); +
13781/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; }); +
13782var degrees = 180 / Math.PI; +
13783 +
13784var identity = { +
13785 translateX: 0, +
13786 translateY: 0, +
13787 rotate: 0, +
13788 skewX: 0, +
13789 scaleX: 1, +
13790 scaleY: 1 +
13791}; +
13792 +
13793/* harmony default export */ __webpack_exports__["default"] = (function(a, b, c, d, e, f) { +
13794 var scaleX, scaleY, skewX; +
13795 if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; +
13796 if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; +
13797 if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; +
13798 if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; +
13799 return { +
13800 translateX: e, +
13801 translateY: f, +
13802 rotate: Math.atan2(b, a) * degrees, +
13803 skewX: Math.atan(skewX) * degrees, +
13804 scaleX: scaleX, +
13805 scaleY: scaleY +
13806 }; +
13807}); +
13808 +
13809 +
13810/***/ }), +
13811 +
13812/***/ "./node_modules/d3-interpolate/src/transform/index.js": +
13813/*!************************************************************!*\ +
13814 !*** ./node_modules/d3-interpolate/src/transform/index.js ***! +
13815 \************************************************************/ +
13816/*! exports provided: interpolateTransformCss, interpolateTransformSvg */ +
13817/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13818 +
13819"use strict"; +
13820__webpack_require__.r(__webpack_exports__); +
13821/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformCss", function() { return interpolateTransformCss; }); +
13822/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformSvg", function() { return interpolateTransformSvg; }); +
13823/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../number */ "./node_modules/d3-interpolate/src/number.js"); +
13824/* harmony import */ var _parse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parse */ "./node_modules/d3-interpolate/src/transform/parse.js"); +
13825 +
13826 +
13827 +
13828function interpolateTransform(parse, pxComma, pxParen, degParen) { +
13829 +
13830 function pop(s) { +
13831 return s.length ? s.pop() + " " : ""; +
13832 } +
13833 +
13834 function translate(xa, ya, xb, yb, s, q) { +
13835 if (xa !== xb || ya !== yb) { +
13836 var i = s.push("translate(", null, pxComma, null, pxParen); +
13837 q.push({i: i - 4, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(xa, xb)}, {i: i - 2, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(ya, yb)}); +
13838 } else if (xb || yb) { +
13839 s.push("translate(" + xb + pxComma + yb + pxParen); +
13840 } +
13841 } +
13842 +
13843 function rotate(a, b, s, q) { +
13844 if (a !== b) { +
13845 if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path +
13846 q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(a, b)}); +
13847 } else if (b) { +
13848 s.push(pop(s) + "rotate(" + b + degParen); +
13849 } +
13850 } +
13851 +
13852 function skewX(a, b, s, q) { +
13853 if (a !== b) { +
13854 q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(a, b)}); +
13855 } else if (b) { +
13856 s.push(pop(s) + "skewX(" + b + degParen); +
13857 } +
13858 } +
13859 +
13860 function scale(xa, ya, xb, yb, s, q) { +
13861 if (xa !== xb || ya !== yb) { +
13862 var i = s.push(pop(s) + "scale(", null, ",", null, ")"); +
13863 q.push({i: i - 4, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(xa, xb)}, {i: i - 2, x: Object(_number__WEBPACK_IMPORTED_MODULE_0__["default"])(ya, yb)}); +
13864 } else if (xb !== 1 || yb !== 1) { +
13865 s.push(pop(s) + "scale(" + xb + "," + yb + ")"); +
13866 } +
13867 } +
13868 +
13869 return function(a, b) { +
13870 var s = [], // string constants and placeholders +
13871 q = []; // number interpolators +
13872 a = parse(a), b = parse(b); +
13873 translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); +
13874 rotate(a.rotate, b.rotate, s, q); +
13875 skewX(a.skewX, b.skewX, s, q); +
13876 scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); +
13877 a = b = null; // gc +
13878 return function(t) { +
13879 var i = -1, n = q.length, o; +
13880 while (++i < n) s[(o = q[i]).i] = o.x(t); +
13881 return s.join(""); +
13882 }; +
13883 }; +
13884} +
13885 +
13886var interpolateTransformCss = interpolateTransform(_parse__WEBPACK_IMPORTED_MODULE_1__["parseCss"], "px, ", "px)", "deg)"); +
13887var interpolateTransformSvg = interpolateTransform(_parse__WEBPACK_IMPORTED_MODULE_1__["parseSvg"], ", ", ")", ")"); +
13888 +
13889 +
13890/***/ }), +
13891 +
13892/***/ "./node_modules/d3-interpolate/src/transform/parse.js": +
13893/*!************************************************************!*\ +
13894 !*** ./node_modules/d3-interpolate/src/transform/parse.js ***! +
13895 \************************************************************/ +
13896/*! exports provided: parseCss, parseSvg */ +
13897/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13898 +
13899"use strict"; +
13900__webpack_require__.r(__webpack_exports__); +
13901/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseCss", function() { return parseCss; }); +
13902/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseSvg", function() { return parseSvg; }); +
13903/* harmony import */ var _decompose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decompose */ "./node_modules/d3-interpolate/src/transform/decompose.js"); +
13904 +
13905 +
13906var cssNode, +
13907 cssRoot, +
13908 cssView, +
13909 svgNode; +
13910 +
13911function parseCss(value) { +
13912 if (value === "none") return _decompose__WEBPACK_IMPORTED_MODULE_0__["identity"]; +
13913 if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; +
13914 cssNode.style.transform = value; +
13915 value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); +
13916 cssRoot.removeChild(cssNode); +
13917 value = value.slice(7, -1).split(","); +
13918 return Object(_decompose__WEBPACK_IMPORTED_MODULE_0__["default"])(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); +
13919} +
13920 +
13921function parseSvg(value) { +
13922 if (value == null) return _decompose__WEBPACK_IMPORTED_MODULE_0__["identity"]; +
13923 if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); +
13924 svgNode.setAttribute("transform", value); +
13925 if (!(value = svgNode.transform.baseVal.consolidate())) return _decompose__WEBPACK_IMPORTED_MODULE_0__["identity"]; +
13926 value = value.matrix; +
13927 return Object(_decompose__WEBPACK_IMPORTED_MODULE_0__["default"])(value.a, value.b, value.c, value.d, value.e, value.f); +
13928} +
13929 +
13930 +
13931/***/ }), +
13932 +
13933/***/ "./node_modules/d3-interpolate/src/value.js": +
13934/*!**************************************************!*\ +
13935 !*** ./node_modules/d3-interpolate/src/value.js ***! +
13936 \**************************************************/ +
13937/*! exports provided: default */ +
13938/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13939 +
13940"use strict"; +
13941__webpack_require__.r(__webpack_exports__); +
13942/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
13943/* harmony import */ var _rgb__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rgb */ "./node_modules/d3-interpolate/src/rgb.js"); +
13944/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./array */ "./node_modules/d3-interpolate/src/array.js"); +
13945/* harmony import */ var _date__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./date */ "./node_modules/d3-interpolate/src/date.js"); +
13946/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./number */ "./node_modules/d3-interpolate/src/number.js"); +
13947/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./object */ "./node_modules/d3-interpolate/src/object.js"); +
13948/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./string */ "./node_modules/d3-interpolate/src/string.js"); +
13949/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-interpolate/src/constant.js"); +
13950 +
13951 +
13952 +
13953 +
13954 +
13955 +
13956 +
13957 +
13958 +
13959/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
13960 var t = typeof b, c; +
13961 return b == null || t === "boolean" ? Object(_constant__WEBPACK_IMPORTED_MODULE_7__["default"])(b) +
13962 : (t === "number" ? _number__WEBPACK_IMPORTED_MODULE_4__["default"] +
13963 : t === "string" ? ((c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["color"])(b)) ? (b = c, _rgb__WEBPACK_IMPORTED_MODULE_1__["default"]) : _string__WEBPACK_IMPORTED_MODULE_6__["default"]) +
13964 : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_0__["color"] ? _rgb__WEBPACK_IMPORTED_MODULE_1__["default"] +
13965 : b instanceof Date ? _date__WEBPACK_IMPORTED_MODULE_3__["default"] +
13966 : Array.isArray(b) ? _array__WEBPACK_IMPORTED_MODULE_2__["default"] +
13967 : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? _object__WEBPACK_IMPORTED_MODULE_5__["default"] +
13968 : _number__WEBPACK_IMPORTED_MODULE_4__["default"])(a, b); +
13969}); +
13970 +
13971 +
13972/***/ }), +
13973 +
13974/***/ "./node_modules/d3-interpolate/src/zoom.js": +
13975/*!*************************************************!*\ +
13976 !*** ./node_modules/d3-interpolate/src/zoom.js ***! +
13977 \*************************************************/ +
13978/*! exports provided: default */ +
13979/***/ (function(module, __webpack_exports__, __webpack_require__) { +
13980 +
13981"use strict"; +
13982__webpack_require__.r(__webpack_exports__); +
13983var rho = Math.SQRT2, +
13984 rho2 = 2, +
13985 rho4 = 4, +
13986 epsilon2 = 1e-12; +
13987 +
13988function cosh(x) { +
13989 return ((x = Math.exp(x)) + 1 / x) / 2; +
13990} +
13991 +
13992function sinh(x) { +
13993 return ((x = Math.exp(x)) - 1 / x) / 2; +
13994} +
13995 +
13996function tanh(x) { +
13997 return ((x = Math.exp(2 * x)) - 1) / (x + 1); +
13998} +
13999 +
14000// p0 = [ux0, uy0, w0] +
14001// p1 = [ux1, uy1, w1] +
14002/* harmony default export */ __webpack_exports__["default"] = (function(p0, p1) { +
14003 var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], +
14004 ux1 = p1[0], uy1 = p1[1], w1 = p1[2], +
14005 dx = ux1 - ux0, +
14006 dy = uy1 - uy0, +
14007 d2 = dx * dx + dy * dy, +
14008 i, +
14009 S; +
14010 +
14011 // Special case for u0 ≅ u1. +
14012 if (d2 < epsilon2) { +
14013 S = Math.log(w1 / w0) / rho; +
14014 i = function(t) { +
14015 return [ +
14016 ux0 + t * dx, +
14017 uy0 + t * dy, +
14018 w0 * Math.exp(rho * t * S) +
14019 ]; +
14020 } +
14021 } +
14022 +
14023 // General case. +
14024 else { +
14025 var d1 = Math.sqrt(d2), +
14026 b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), +
14027 b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), +
14028 r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), +
14029 r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); +
14030 S = (r1 - r0) / rho; +
14031 i = function(t) { +
14032 var s = t * S, +
14033 coshr0 = cosh(r0), +
14034 u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); +
14035 return [ +
14036 ux0 + u * dx, +
14037 uy0 + u * dy, +
14038 w0 * coshr0 / cosh(rho * s + r0) +
14039 ]; +
14040 } +
14041 } +
14042 +
14043 i.duration = S * 1000; +
14044 +
14045 return i; +
14046}); +
14047 +
14048 +
14049/***/ }), +
14050 +
14051/***/ "./node_modules/d3-path/src/index.js": +
14052/*!*******************************************!*\ +
14053 !*** ./node_modules/d3-path/src/index.js ***! +
14054 \*******************************************/ +
14055/*! exports provided: path */ +
14056/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14057 +
14058"use strict"; +
14059__webpack_require__.r(__webpack_exports__); +
14060/* harmony import */ var _path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./path */ "./node_modules/d3-path/src/path.js"); +
14061/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "path", function() { return _path__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
14062 +
14063 +
14064 +
14065 +
14066/***/ }), +
14067 +
14068/***/ "./node_modules/d3-path/src/path.js": +
14069/*!******************************************!*\ +
14070 !*** ./node_modules/d3-path/src/path.js ***! +
14071 \******************************************/ +
14072/*! exports provided: default */ +
14073/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14074 +
14075"use strict"; +
14076__webpack_require__.r(__webpack_exports__); +
14077var pi = Math.PI, +
14078 tau = 2 * pi, +
14079 epsilon = 1e-6, +
14080 tauEpsilon = tau - epsilon; +
14081 +
14082function Path() { +
14083 this._x0 = this._y0 = // start of current subpath +
14084 this._x1 = this._y1 = null; // end of current subpath +
14085 this._ = ""; +
14086} +
14087 +
14088function path() { +
14089 return new Path; +
14090} +
14091 +
14092Path.prototype = path.prototype = { +
14093 constructor: Path, +
14094 moveTo: function(x, y) { +
14095 this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); +
14096 }, +
14097 closePath: function() { +
14098 if (this._x1 !== null) { +
14099 this._x1 = this._x0, this._y1 = this._y0; +
14100 this._ += "Z"; +
14101 } +
14102 }, +
14103 lineTo: function(x, y) { +
14104 this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); +
14105 }, +
14106 quadraticCurveTo: function(x1, y1, x, y) { +
14107 this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); +
14108 }, +
14109 bezierCurveTo: function(x1, y1, x2, y2, x, y) { +
14110 this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); +
14111 }, +
14112 arcTo: function(x1, y1, x2, y2, r) { +
14113 x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; +
14114 var x0 = this._x1, +
14115 y0 = this._y1, +
14116 x21 = x2 - x1, +
14117 y21 = y2 - y1, +
14118 x01 = x0 - x1, +
14119 y01 = y0 - y1, +
14120 l01_2 = x01 * x01 + y01 * y01; +
14121 +
14122 // Is the radius negative? Error. +
14123 if (r < 0) throw new Error("negative radius: " + r); +
14124 +
14125 // Is this path empty? Move to (x1,y1). +
14126 if (this._x1 === null) { +
14127 this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); +
14128 } +
14129 +
14130 // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. +
14131 else if (!(l01_2 > epsilon)); +
14132 +
14133 // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? +
14134 // Equivalently, is (x1,y1) coincident with (x2,y2)? +
14135 // Or, is the radius zero? Line to (x1,y1). +
14136 else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { +
14137 this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); +
14138 } +
14139 +
14140 // Otherwise, draw an arc! +
14141 else { +
14142 var x20 = x2 - x0, +
14143 y20 = y2 - y0, +
14144 l21_2 = x21 * x21 + y21 * y21, +
14145 l20_2 = x20 * x20 + y20 * y20, +
14146 l21 = Math.sqrt(l21_2), +
14147 l01 = Math.sqrt(l01_2), +
14148 l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), +
14149 t01 = l / l01, +
14150 t21 = l / l21; +
14151 +
14152 // If the start tangent is not coincident with (x0,y0), line to. +
14153 if (Math.abs(t01 - 1) > epsilon) { +
14154 this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); +
14155 } +
14156 +
14157 this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); +
14158 } +
14159 }, +
14160 arc: function(x, y, r, a0, a1, ccw) { +
14161 x = +x, y = +y, r = +r; +
14162 var dx = r * Math.cos(a0), +
14163 dy = r * Math.sin(a0), +
14164 x0 = x + dx, +
14165 y0 = y + dy, +
14166 cw = 1 ^ ccw, +
14167 da = ccw ? a0 - a1 : a1 - a0; +
14168 +
14169 // Is the radius negative? Error. +
14170 if (r < 0) throw new Error("negative radius: " + r); +
14171 +
14172 // Is this path empty? Move to (x0,y0). +
14173 if (this._x1 === null) { +
14174 this._ += "M" + x0 + "," + y0; +
14175 } +
14176 +
14177 // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). +
14178 else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { +
14179 this._ += "L" + x0 + "," + y0; +
14180 } +
14181 +
14182 // Is this arc empty? We’re done. +
14183 if (!r) return; +
14184 +
14185 // Does the angle go the wrong way? Flip the direction. +
14186 if (da < 0) da = da % tau + tau; +
14187 +
14188 // Is this a complete circle? Draw two arcs to complete the circle. +
14189 if (da > tauEpsilon) { +
14190 this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); +
14191 } +
14192 +
14193 // Is this arc non-empty? Draw an arc! +
14194 else if (da > epsilon) { +
14195 this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); +
14196 } +
14197 }, +
14198 rect: function(x, y, w, h) { +
14199 this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; +
14200 }, +
14201 toString: function() { +
14202 return this._; +
14203 } +
14204}; +
14205 +
14206/* harmony default export */ __webpack_exports__["default"] = (path); +
14207 +
14208 +
14209/***/ }), +
14210 +
14211/***/ "./node_modules/d3-polygon/src/area.js": +
14212/*!*********************************************!*\ +
14213 !*** ./node_modules/d3-polygon/src/area.js ***! +
14214 \*********************************************/ +
14215/*! exports provided: default */ +
14216/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14217 +
14218"use strict"; +
14219__webpack_require__.r(__webpack_exports__); +
14220/* harmony default export */ __webpack_exports__["default"] = (function(polygon) { +
14221 var i = -1, +
14222 n = polygon.length, +
14223 a, +
14224 b = polygon[n - 1], +
14225 area = 0; +
14226 +
14227 while (++i < n) { +
14228 a = b; +
14229 b = polygon[i]; +
14230 area += a[1] * b[0] - a[0] * b[1]; +
14231 } +
14232 +
14233 return area / 2; +
14234}); +
14235 +
14236 +
14237/***/ }), +
14238 +
14239/***/ "./node_modules/d3-polygon/src/centroid.js": +
14240/*!*************************************************!*\ +
14241 !*** ./node_modules/d3-polygon/src/centroid.js ***! +
14242 \*************************************************/ +
14243/*! exports provided: default */ +
14244/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14245 +
14246"use strict"; +
14247__webpack_require__.r(__webpack_exports__); +
14248/* harmony default export */ __webpack_exports__["default"] = (function(polygon) { +
14249 var i = -1, +
14250 n = polygon.length, +
14251 x = 0, +
14252 y = 0, +
14253 a, +
14254 b = polygon[n - 1], +
14255 c, +
14256 k = 0; +
14257 +
14258 while (++i < n) { +
14259 a = b; +
14260 b = polygon[i]; +
14261 k += c = a[0] * b[1] - b[0] * a[1]; +
14262 x += (a[0] + b[0]) * c; +
14263 y += (a[1] + b[1]) * c; +
14264 } +
14265 +
14266 return k *= 3, [x / k, y / k]; +
14267}); +
14268 +
14269 +
14270/***/ }), +
14271 +
14272/***/ "./node_modules/d3-polygon/src/contains.js": +
14273/*!*************************************************!*\ +
14274 !*** ./node_modules/d3-polygon/src/contains.js ***! +
14275 \*************************************************/ +
14276/*! exports provided: default */ +
14277/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14278 +
14279"use strict"; +
14280__webpack_require__.r(__webpack_exports__); +
14281/* harmony default export */ __webpack_exports__["default"] = (function(polygon, point) { +
14282 var n = polygon.length, +
14283 p = polygon[n - 1], +
14284 x = point[0], y = point[1], +
14285 x0 = p[0], y0 = p[1], +
14286 x1, y1, +
14287 inside = false; +
14288 +
14289 for (var i = 0; i < n; ++i) { +
14290 p = polygon[i], x1 = p[0], y1 = p[1]; +
14291 if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside; +
14292 x0 = x1, y0 = y1; +
14293 } +
14294 +
14295 return inside; +
14296}); +
14297 +
14298 +
14299/***/ }), +
14300 +
14301/***/ "./node_modules/d3-polygon/src/cross.js": +
14302/*!**********************************************!*\ +
14303 !*** ./node_modules/d3-polygon/src/cross.js ***! +
14304 \**********************************************/ +
14305/*! exports provided: default */ +
14306/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14307 +
14308"use strict"; +
14309__webpack_require__.r(__webpack_exports__); +
14310// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of +
14311// the 3D cross product in a quadrant I Cartesian coordinate system (+x is +
14312// right, +y is up). Returns a positive value if ABC is counter-clockwise, +
14313// negative if clockwise, and zero if the points are collinear. +
14314/* harmony default export */ __webpack_exports__["default"] = (function(a, b, c) { +
14315 return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); +
14316}); +
14317 +
14318 +
14319/***/ }), +
14320 +
14321/***/ "./node_modules/d3-polygon/src/hull.js": +
14322/*!*********************************************!*\ +
14323 !*** ./node_modules/d3-polygon/src/hull.js ***! +
14324 \*********************************************/ +
14325/*! exports provided: default */ +
14326/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14327 +
14328"use strict"; +
14329__webpack_require__.r(__webpack_exports__); +
14330/* harmony import */ var _cross__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cross */ "./node_modules/d3-polygon/src/cross.js"); +
14331 +
14332 +
14333function lexicographicOrder(a, b) { +
14334 return a[0] - b[0] || a[1] - b[1]; +
14335} +
14336 +
14337// Computes the upper convex hull per the monotone chain algorithm. +
14338// Assumes points.length >= 3, is sorted by x, unique in y. +
14339// Returns an array of indices into points in left-to-right order. +
14340function computeUpperHullIndexes(points) { +
14341 var n = points.length, +
14342 indexes = [0, 1], +
14343 size = 2; +
14344 +
14345 for (var i = 2; i < n; ++i) { +
14346 while (size > 1 && Object(_cross__WEBPACK_IMPORTED_MODULE_0__["default"])(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size; +
14347 indexes[size++] = i; +
14348 } +
14349 +
14350 return indexes.slice(0, size); // remove popped points +
14351} +
14352 +
14353/* harmony default export */ __webpack_exports__["default"] = (function(points) { +
14354 if ((n = points.length) < 3) return null; +
14355 +
14356 var i, +
14357 n, +
14358 sortedPoints = new Array(n), +
14359 flippedPoints = new Array(n); +
14360 +
14361 for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i]; +
14362 sortedPoints.sort(lexicographicOrder); +
14363 for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; +
14364 +
14365 var upperIndexes = computeUpperHullIndexes(sortedPoints), +
14366 lowerIndexes = computeUpperHullIndexes(flippedPoints); +
14367 +
14368 // Construct the hull polygon, removing possible duplicate endpoints. +
14369 var skipLeft = lowerIndexes[0] === upperIndexes[0], +
14370 skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], +
14371 hull = []; +
14372 +
14373 // Add upper hull in right-to-l order. +
14374 // Then add lower hull in left-to-right order. +
14375 for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]); +
14376 for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]); +
14377 +
14378 return hull; +
14379}); +
14380 +
14381 +
14382/***/ }), +
14383 +
14384/***/ "./node_modules/d3-polygon/src/index.js": +
14385/*!**********************************************!*\ +
14386 !*** ./node_modules/d3-polygon/src/index.js ***! +
14387 \**********************************************/ +
14388/*! exports provided: polygonArea, polygonCentroid, polygonHull, polygonContains, polygonLength */ +
14389/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14390 +
14391"use strict"; +
14392__webpack_require__.r(__webpack_exports__); +
14393/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./area */ "./node_modules/d3-polygon/src/area.js"); +
14394/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonArea", function() { return _area__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
14395 +
14396/* harmony import */ var _centroid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./centroid */ "./node_modules/d3-polygon/src/centroid.js"); +
14397/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonCentroid", function() { return _centroid__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
14398 +
14399/* harmony import */ var _hull__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hull */ "./node_modules/d3-polygon/src/hull.js"); +
14400/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonHull", function() { return _hull__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
14401 +
14402/* harmony import */ var _contains__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contains */ "./node_modules/d3-polygon/src/contains.js"); +
14403/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonContains", function() { return _contains__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
14404 +
14405/* harmony import */ var _length__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./length */ "./node_modules/d3-polygon/src/length.js"); +
14406/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonLength", function() { return _length__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
14407 +
14408 +
14409 +
14410 +
14411 +
14412 +
14413 +
14414 +
14415/***/ }), +
14416 +
14417/***/ "./node_modules/d3-polygon/src/length.js": +
14418/*!***********************************************!*\ +
14419 !*** ./node_modules/d3-polygon/src/length.js ***! +
14420 \***********************************************/ +
14421/*! exports provided: default */ +
14422/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14423 +
14424"use strict"; +
14425__webpack_require__.r(__webpack_exports__); +
14426/* harmony default export */ __webpack_exports__["default"] = (function(polygon) { +
14427 var i = -1, +
14428 n = polygon.length, +
14429 b = polygon[n - 1], +
14430 xa, +
14431 ya, +
14432 xb = b[0], +
14433 yb = b[1], +
14434 perimeter = 0; +
14435 +
14436 while (++i < n) { +
14437 xa = xb; +
14438 ya = yb; +
14439 b = polygon[i]; +
14440 xb = b[0]; +
14441 yb = b[1]; +
14442 xa -= xb; +
14443 ya -= yb; +
14444 perimeter += Math.sqrt(xa * xa + ya * ya); +
14445 } +
14446 +
14447 return perimeter; +
14448}); +
14449 +
14450 +
14451/***/ }), +
14452 +
14453/***/ "./node_modules/d3-quadtree/src/add.js": +
14454/*!*********************************************!*\ +
14455 !*** ./node_modules/d3-quadtree/src/add.js ***! +
14456 \*********************************************/ +
14457/*! exports provided: default, addAll */ +
14458/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14459 +
14460"use strict"; +
14461__webpack_require__.r(__webpack_exports__); +
14462/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addAll", function() { return addAll; }); +
14463/* harmony default export */ __webpack_exports__["default"] = (function(d) { +
14464 var x = +this._x.call(null, d), +
14465 y = +this._y.call(null, d); +
14466 return add(this.cover(x, y), x, y, d); +
14467}); +
14468 +
14469function add(tree, x, y, d) { +
14470 if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points +
14471 +
14472 var parent, +
14473 node = tree._root, +
14474 leaf = {data: d}, +
14475 x0 = tree._x0, +
14476 y0 = tree._y0, +
14477 x1 = tree._x1, +
14478 y1 = tree._y1, +
14479 xm, +
14480 ym, +
14481 xp, +
14482 yp, +
14483 right, +
14484 bottom, +
14485 i, +
14486 j; +
14487 +
14488 // If the tree is empty, initialize the root as a leaf. +
14489 if (!node) return tree._root = leaf, tree; +
14490 +
14491 // Find the existing leaf for the new point, or add it. +
14492 while (node.length) { +
14493 if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; +
14494 if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; +
14495 if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; +
14496 } +
14497 +
14498 // Is the new point is exactly coincident with the existing point? +
14499 xp = +tree._x.call(null, node.data); +
14500 yp = +tree._y.call(null, node.data); +
14501 if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; +
14502 +
14503 // Otherwise, split the leaf node until the old and new point are separated. +
14504 do { +
14505 parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); +
14506 if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; +
14507 if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; +
14508 } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); +
14509 return parent[j] = node, parent[i] = leaf, tree; +
14510} +
14511 +
14512function addAll(data) { +
14513 var d, i, n = data.length, +
14514 x, +
14515 y, +
14516 xz = new Array(n), +
14517 yz = new Array(n), +
14518 x0 = Infinity, +
14519 y0 = Infinity, +
14520 x1 = -Infinity, +
14521 y1 = -Infinity; +
14522 +
14523 // Compute the points and their extent. +
14524 for (i = 0; i < n; ++i) { +
14525 if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; +
14526 xz[i] = x; +
14527 yz[i] = y; +
14528 if (x < x0) x0 = x; +
14529 if (x > x1) x1 = x; +
14530 if (y < y0) y0 = y; +
14531 if (y > y1) y1 = y; +
14532 } +
14533 +
14534 // If there were no (valid) points, inherit the existing extent. +
14535 if (x1 < x0) x0 = this._x0, x1 = this._x1; +
14536 if (y1 < y0) y0 = this._y0, y1 = this._y1; +
14537 +
14538 // Expand the tree to cover the new points. +
14539 this.cover(x0, y0).cover(x1, y1); +
14540 +
14541 // Add the new points. +
14542 for (i = 0; i < n; ++i) { +
14543 add(this, xz[i], yz[i], data[i]); +
14544 } +
14545 +
14546 return this; +
14547} +
14548 +
14549 +
14550/***/ }), +
14551 +
14552/***/ "./node_modules/d3-quadtree/src/cover.js": +
14553/*!***********************************************!*\ +
14554 !*** ./node_modules/d3-quadtree/src/cover.js ***! +
14555 \***********************************************/ +
14556/*! exports provided: default */ +
14557/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14558 +
14559"use strict"; +
14560__webpack_require__.r(__webpack_exports__); +
14561/* harmony default export */ __webpack_exports__["default"] = (function(x, y) { +
14562 if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points +
14563 +
14564 var x0 = this._x0, +
14565 y0 = this._y0, +
14566 x1 = this._x1, +
14567 y1 = this._y1; +
14568 +
14569 // If the quadtree has no extent, initialize them. +
14570 // Integer extent are necessary so that if we later double the extent, +
14571 // the existing quadrant boundaries don’t change due to floating point error! +
14572 if (isNaN(x0)) { +
14573 x1 = (x0 = Math.floor(x)) + 1; +
14574 y1 = (y0 = Math.floor(y)) + 1; +
14575 } +
14576 +
14577 // Otherwise, double repeatedly to cover. +
14578 else if (x0 > x || x > x1 || y0 > y || y > y1) { +
14579 var z = x1 - x0, +
14580 node = this._root, +
14581 parent, +
14582 i; +
14583 +
14584 switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) { +
14585 case 0: { +
14586 do parent = new Array(4), parent[i] = node, node = parent; +
14587 while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1); +
14588 break; +
14589 } +
14590 case 1: { +
14591 do parent = new Array(4), parent[i] = node, node = parent; +
14592 while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1); +
14593 break; +
14594 } +
14595 case 2: { +
14596 do parent = new Array(4), parent[i] = node, node = parent; +
14597 while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y); +
14598 break; +
14599 } +
14600 case 3: { +
14601 do parent = new Array(4), parent[i] = node, node = parent; +
14602 while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y); +
14603 break; +
14604 } +
14605 } +
14606 +
14607 if (this._root && this._root.length) this._root = node; +
14608 } +
14609 +
14610 // If the quadtree covers the point already, just return. +
14611 else return this; +
14612 +
14613 this._x0 = x0; +
14614 this._y0 = y0; +
14615 this._x1 = x1; +
14616 this._y1 = y1; +
14617 return this; +
14618}); +
14619 +
14620 +
14621/***/ }), +
14622 +
14623/***/ "./node_modules/d3-quadtree/src/data.js": +
14624/*!**********************************************!*\ +
14625 !*** ./node_modules/d3-quadtree/src/data.js ***! +
14626 \**********************************************/ +
14627/*! exports provided: default */ +
14628/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14629 +
14630"use strict"; +
14631__webpack_require__.r(__webpack_exports__); +
14632/* harmony default export */ __webpack_exports__["default"] = (function() { +
14633 var data = []; +
14634 this.visit(function(node) { +
14635 if (!node.length) do data.push(node.data); while (node = node.next) +
14636 }); +
14637 return data; +
14638}); +
14639 +
14640 +
14641/***/ }), +
14642 +
14643/***/ "./node_modules/d3-quadtree/src/extent.js": +
14644/*!************************************************!*\ +
14645 !*** ./node_modules/d3-quadtree/src/extent.js ***! +
14646 \************************************************/ +
14647/*! exports provided: default */ +
14648/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14649 +
14650"use strict"; +
14651__webpack_require__.r(__webpack_exports__); +
14652/* harmony default export */ __webpack_exports__["default"] = (function(_) { +
14653 return arguments.length +
14654 ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) +
14655 : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; +
14656}); +
14657 +
14658 +
14659/***/ }), +
14660 +
14661/***/ "./node_modules/d3-quadtree/src/find.js": +
14662/*!**********************************************!*\ +
14663 !*** ./node_modules/d3-quadtree/src/find.js ***! +
14664 \**********************************************/ +
14665/*! exports provided: default */ +
14666/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14667 +
14668"use strict"; +
14669__webpack_require__.r(__webpack_exports__); +
14670/* harmony import */ var _quad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad */ "./node_modules/d3-quadtree/src/quad.js"); +
14671 +
14672 +
14673/* harmony default export */ __webpack_exports__["default"] = (function(x, y, radius) { +
14674 var data, +
14675 x0 = this._x0, +
14676 y0 = this._y0, +
14677 x1, +
14678 y1, +
14679 x2, +
14680 y2, +
14681 x3 = this._x1, +
14682 y3 = this._y1, +
14683 quads = [], +
14684 node = this._root, +
14685 q, +
14686 i; +
14687 +
14688 if (node) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node, x0, y0, x3, y3)); +
14689 if (radius == null) radius = Infinity; +
14690 else { +
14691 x0 = x - radius, y0 = y - radius; +
14692 x3 = x + radius, y3 = y + radius; +
14693 radius *= radius; +
14694 } +
14695 +
14696 while (q = quads.pop()) { +
14697 +
14698 // Stop searching if this quadrant can’t contain a closer node. +
14699 if (!(node = q.node) +
14700 || (x1 = q.x0) > x3 +
14701 || (y1 = q.y0) > y3 +
14702 || (x2 = q.x1) < x0 +
14703 || (y2 = q.y1) < y0) continue; +
14704 +
14705 // Bisect the current quadrant. +
14706 if (node.length) { +
14707 var xm = (x1 + x2) / 2, +
14708 ym = (y1 + y2) / 2; +
14709 +
14710 quads.push( +
14711 new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node[3], xm, ym, x2, y2), +
14712 new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node[2], x1, ym, xm, y2), +
14713 new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node[1], xm, y1, x2, ym), +
14714 new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node[0], x1, y1, xm, ym) +
14715 ); +
14716 +
14717 // Visit the closest quadrant first. +
14718 if (i = (y >= ym) << 1 | (x >= xm)) { +
14719 q = quads[quads.length - 1]; +
14720 quads[quads.length - 1] = quads[quads.length - 1 - i]; +
14721 quads[quads.length - 1 - i] = q; +
14722 } +
14723 } +
14724 +
14725 // Visit this point. (Visiting coincident points isn’t necessary!) +
14726 else { +
14727 var dx = x - +this._x.call(null, node.data), +
14728 dy = y - +this._y.call(null, node.data), +
14729 d2 = dx * dx + dy * dy; +
14730 if (d2 < radius) { +
14731 var d = Math.sqrt(radius = d2); +
14732 x0 = x - d, y0 = y - d; +
14733 x3 = x + d, y3 = y + d; +
14734 data = node.data; +
14735 } +
14736 } +
14737 } +
14738 +
14739 return data; +
14740}); +
14741 +
14742 +
14743/***/ }), +
14744 +
14745/***/ "./node_modules/d3-quadtree/src/index.js": +
14746/*!***********************************************!*\ +
14747 !*** ./node_modules/d3-quadtree/src/index.js ***! +
14748 \***********************************************/ +
14749/*! exports provided: quadtree */ +
14750/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14751 +
14752"use strict"; +
14753__webpack_require__.r(__webpack_exports__); +
14754/* harmony import */ var _quadtree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quadtree */ "./node_modules/d3-quadtree/src/quadtree.js"); +
14755/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quadtree", function() { return _quadtree__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
14756 +
14757 +
14758 +
14759 +
14760/***/ }), +
14761 +
14762/***/ "./node_modules/d3-quadtree/src/quad.js": +
14763/*!**********************************************!*\ +
14764 !*** ./node_modules/d3-quadtree/src/quad.js ***! +
14765 \**********************************************/ +
14766/*! exports provided: default */ +
14767/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14768 +
14769"use strict"; +
14770__webpack_require__.r(__webpack_exports__); +
14771/* harmony default export */ __webpack_exports__["default"] = (function(node, x0, y0, x1, y1) { +
14772 this.node = node; +
14773 this.x0 = x0; +
14774 this.y0 = y0; +
14775 this.x1 = x1; +
14776 this.y1 = y1; +
14777}); +
14778 +
14779 +
14780/***/ }), +
14781 +
14782/***/ "./node_modules/d3-quadtree/src/quadtree.js": +
14783/*!**************************************************!*\ +
14784 !*** ./node_modules/d3-quadtree/src/quadtree.js ***! +
14785 \**************************************************/ +
14786/*! exports provided: default */ +
14787/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14788 +
14789"use strict"; +
14790__webpack_require__.r(__webpack_exports__); +
14791/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return quadtree; }); +
14792/* harmony import */ var _add__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add */ "./node_modules/d3-quadtree/src/add.js"); +
14793/* harmony import */ var _cover__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cover */ "./node_modules/d3-quadtree/src/cover.js"); +
14794/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data */ "./node_modules/d3-quadtree/src/data.js"); +
14795/* harmony import */ var _extent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./extent */ "./node_modules/d3-quadtree/src/extent.js"); +
14796/* harmony import */ var _find__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./find */ "./node_modules/d3-quadtree/src/find.js"); +
14797/* harmony import */ var _remove__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./remove */ "./node_modules/d3-quadtree/src/remove.js"); +
14798/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./root */ "./node_modules/d3-quadtree/src/root.js"); +
14799/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./size */ "./node_modules/d3-quadtree/src/size.js"); +
14800/* harmony import */ var _visit__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./visit */ "./node_modules/d3-quadtree/src/visit.js"); +
14801/* harmony import */ var _visitAfter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./visitAfter */ "./node_modules/d3-quadtree/src/visitAfter.js"); +
14802/* harmony import */ var _x__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./x */ "./node_modules/d3-quadtree/src/x.js"); +
14803/* harmony import */ var _y__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./y */ "./node_modules/d3-quadtree/src/y.js"); +
14804 +
14805 +
14806 +
14807 +
14808 +
14809 +
14810 +
14811 +
14812 +
14813 +
14814 +
14815 +
14816 +
14817function quadtree(nodes, x, y) { +
14818 var tree = new Quadtree(x == null ? _x__WEBPACK_IMPORTED_MODULE_10__["defaultX"] : x, y == null ? _y__WEBPACK_IMPORTED_MODULE_11__["defaultY"] : y, NaN, NaN, NaN, NaN); +
14819 return nodes == null ? tree : tree.addAll(nodes); +
14820} +
14821 +
14822function Quadtree(x, y, x0, y0, x1, y1) { +
14823 this._x = x; +
14824 this._y = y; +
14825 this._x0 = x0; +
14826 this._y0 = y0; +
14827 this._x1 = x1; +
14828 this._y1 = y1; +
14829 this._root = undefined; +
14830} +
14831 +
14832function leaf_copy(leaf) { +
14833 var copy = {data: leaf.data}, next = copy; +
14834 while (leaf = leaf.next) next = next.next = {data: leaf.data}; +
14835 return copy; +
14836} +
14837 +
14838var treeProto = quadtree.prototype = Quadtree.prototype; +
14839 +
14840treeProto.copy = function() { +
14841 var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), +
14842 node = this._root, +
14843 nodes, +
14844 child; +
14845 +
14846 if (!node) return copy; +
14847 +
14848 if (!node.length) return copy._root = leaf_copy(node), copy; +
14849 +
14850 nodes = [{source: node, target: copy._root = new Array(4)}]; +
14851 while (node = nodes.pop()) { +
14852 for (var i = 0; i < 4; ++i) { +
14853 if (child = node.source[i]) { +
14854 if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); +
14855 else node.target[i] = leaf_copy(child); +
14856 } +
14857 } +
14858 } +
14859 +
14860 return copy; +
14861}; +
14862 +
14863treeProto.add = _add__WEBPACK_IMPORTED_MODULE_0__["default"]; +
14864treeProto.addAll = _add__WEBPACK_IMPORTED_MODULE_0__["addAll"]; +
14865treeProto.cover = _cover__WEBPACK_IMPORTED_MODULE_1__["default"]; +
14866treeProto.data = _data__WEBPACK_IMPORTED_MODULE_2__["default"]; +
14867treeProto.extent = _extent__WEBPACK_IMPORTED_MODULE_3__["default"]; +
14868treeProto.find = _find__WEBPACK_IMPORTED_MODULE_4__["default"]; +
14869treeProto.remove = _remove__WEBPACK_IMPORTED_MODULE_5__["default"]; +
14870treeProto.removeAll = _remove__WEBPACK_IMPORTED_MODULE_5__["removeAll"]; +
14871treeProto.root = _root__WEBPACK_IMPORTED_MODULE_6__["default"]; +
14872treeProto.size = _size__WEBPACK_IMPORTED_MODULE_7__["default"]; +
14873treeProto.visit = _visit__WEBPACK_IMPORTED_MODULE_8__["default"]; +
14874treeProto.visitAfter = _visitAfter__WEBPACK_IMPORTED_MODULE_9__["default"]; +
14875treeProto.x = _x__WEBPACK_IMPORTED_MODULE_10__["default"]; +
14876treeProto.y = _y__WEBPACK_IMPORTED_MODULE_11__["default"]; +
14877 +
14878 +
14879/***/ }), +
14880 +
14881/***/ "./node_modules/d3-quadtree/src/remove.js": +
14882/*!************************************************!*\ +
14883 !*** ./node_modules/d3-quadtree/src/remove.js ***! +
14884 \************************************************/ +
14885/*! exports provided: default, removeAll */ +
14886/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14887 +
14888"use strict"; +
14889__webpack_require__.r(__webpack_exports__); +
14890/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeAll", function() { return removeAll; }); +
14891/* harmony default export */ __webpack_exports__["default"] = (function(d) { +
14892 if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points +
14893 +
14894 var parent, +
14895 node = this._root, +
14896 retainer, +
14897 previous, +
14898 next, +
14899 x0 = this._x0, +
14900 y0 = this._y0, +
14901 x1 = this._x1, +
14902 y1 = this._y1, +
14903 x, +
14904 y, +
14905 xm, +
14906 ym, +
14907 right, +
14908 bottom, +
14909 i, +
14910 j; +
14911 +
14912 // If the tree is empty, initialize the root as a leaf. +
14913 if (!node) return this; +
14914 +
14915 // Find the leaf node for the point. +
14916 // While descending, also retain the deepest parent with a non-removed sibling. +
14917 if (node.length) while (true) { +
14918 if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; +
14919 if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; +
14920 if (!(parent = node, node = node[i = bottom << 1 | right])) return this; +
14921 if (!node.length) break; +
14922 if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; +
14923 } +
14924 +
14925 // Find the point to remove. +
14926 while (node.data !== d) if (!(previous = node, node = node.next)) return this; +
14927 if (next = node.next) delete node.next; +
14928 +
14929 // If there are multiple coincident points, remove just the point. +
14930 if (previous) return (next ? previous.next = next : delete previous.next), this; +
14931 +
14932 // If this is the root point, remove it. +
14933 if (!parent) return this._root = next, this; +
14934 +
14935 // Remove this leaf. +
14936 next ? parent[i] = next : delete parent[i]; +
14937 +
14938 // If the parent now contains exactly one leaf, collapse superfluous parents. +
14939 if ((node = parent[0] || parent[1] || parent[2] || parent[3]) +
14940 && node === (parent[3] || parent[2] || parent[1] || parent[0]) +
14941 && !node.length) { +
14942 if (retainer) retainer[j] = node; +
14943 else this._root = node; +
14944 } +
14945 +
14946 return this; +
14947}); +
14948 +
14949function removeAll(data) { +
14950 for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); +
14951 return this; +
14952} +
14953 +
14954 +
14955/***/ }), +
14956 +
14957/***/ "./node_modules/d3-quadtree/src/root.js": +
14958/*!**********************************************!*\ +
14959 !*** ./node_modules/d3-quadtree/src/root.js ***! +
14960 \**********************************************/ +
14961/*! exports provided: default */ +
14962/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14963 +
14964"use strict"; +
14965__webpack_require__.r(__webpack_exports__); +
14966/* harmony default export */ __webpack_exports__["default"] = (function() { +
14967 return this._root; +
14968}); +
14969 +
14970 +
14971/***/ }), +
14972 +
14973/***/ "./node_modules/d3-quadtree/src/size.js": +
14974/*!**********************************************!*\ +
14975 !*** ./node_modules/d3-quadtree/src/size.js ***! +
14976 \**********************************************/ +
14977/*! exports provided: default */ +
14978/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14979 +
14980"use strict"; +
14981__webpack_require__.r(__webpack_exports__); +
14982/* harmony default export */ __webpack_exports__["default"] = (function() { +
14983 var size = 0; +
14984 this.visit(function(node) { +
14985 if (!node.length) do ++size; while (node = node.next) +
14986 }); +
14987 return size; +
14988}); +
14989 +
14990 +
14991/***/ }), +
14992 +
14993/***/ "./node_modules/d3-quadtree/src/visit.js": +
14994/*!***********************************************!*\ +
14995 !*** ./node_modules/d3-quadtree/src/visit.js ***! +
14996 \***********************************************/ +
14997/*! exports provided: default */ +
14998/***/ (function(module, __webpack_exports__, __webpack_require__) { +
14999 +
15000"use strict"; +
15001__webpack_require__.r(__webpack_exports__); +
15002/* harmony import */ var _quad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad */ "./node_modules/d3-quadtree/src/quad.js"); +
15003 +
15004 +
15005/* harmony default export */ __webpack_exports__["default"] = (function(callback) { +
15006 var quads = [], q, node = this._root, child, x0, y0, x1, y1; +
15007 if (node) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](node, this._x0, this._y0, this._x1, this._y1)); +
15008 while (q = quads.pop()) { +
15009 if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { +
15010 var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; +
15011 if (child = node[3]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, ym, x1, y1)); +
15012 if (child = node[2]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, ym, xm, y1)); +
15013 if (child = node[1]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, y0, x1, ym)); +
15014 if (child = node[0]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, y0, xm, ym)); +
15015 } +
15016 } +
15017 return this; +
15018}); +
15019 +
15020 +
15021/***/ }), +
15022 +
15023/***/ "./node_modules/d3-quadtree/src/visitAfter.js": +
15024/*!****************************************************!*\ +
15025 !*** ./node_modules/d3-quadtree/src/visitAfter.js ***! +
15026 \****************************************************/ +
15027/*! exports provided: default */ +
15028/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15029 +
15030"use strict"; +
15031__webpack_require__.r(__webpack_exports__); +
15032/* harmony import */ var _quad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad */ "./node_modules/d3-quadtree/src/quad.js"); +
15033 +
15034 +
15035/* harmony default export */ __webpack_exports__["default"] = (function(callback) { +
15036 var quads = [], next = [], q; +
15037 if (this._root) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](this._root, this._x0, this._y0, this._x1, this._y1)); +
15038 while (q = quads.pop()) { +
15039 var node = q.node; +
15040 if (node.length) { +
15041 var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; +
15042 if (child = node[0]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, y0, xm, ym)); +
15043 if (child = node[1]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, y0, x1, ym)); +
15044 if (child = node[2]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, ym, xm, y1)); +
15045 if (child = node[3]) quads.push(new _quad__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, ym, x1, y1)); +
15046 } +
15047 next.push(q); +
15048 } +
15049 while (q = next.pop()) { +
15050 callback(q.node, q.x0, q.y0, q.x1, q.y1); +
15051 } +
15052 return this; +
15053}); +
15054 +
15055 +
15056/***/ }), +
15057 +
15058/***/ "./node_modules/d3-quadtree/src/x.js": +
15059/*!*******************************************!*\ +
15060 !*** ./node_modules/d3-quadtree/src/x.js ***! +
15061 \*******************************************/ +
15062/*! exports provided: defaultX, default */ +
15063/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15064 +
15065"use strict"; +
15066__webpack_require__.r(__webpack_exports__); +
15067/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultX", function() { return defaultX; }); +
15068function defaultX(d) { +
15069 return d[0]; +
15070} +
15071 +
15072/* harmony default export */ __webpack_exports__["default"] = (function(_) { +
15073 return arguments.length ? (this._x = _, this) : this._x; +
15074}); +
15075 +
15076 +
15077/***/ }), +
15078 +
15079/***/ "./node_modules/d3-quadtree/src/y.js": +
15080/*!*******************************************!*\ +
15081 !*** ./node_modules/d3-quadtree/src/y.js ***! +
15082 \*******************************************/ +
15083/*! exports provided: defaultY, default */ +
15084/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15085 +
15086"use strict"; +
15087__webpack_require__.r(__webpack_exports__); +
15088/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultY", function() { return defaultY; }); +
15089function defaultY(d) { +
15090 return d[1]; +
15091} +
15092 +
15093/* harmony default export */ __webpack_exports__["default"] = (function(_) { +
15094 return arguments.length ? (this._y = _, this) : this._y; +
15095}); +
15096 +
15097 +
15098/***/ }), +
15099 +
15100/***/ "./node_modules/d3-random/src/bates.js": +
15101/*!*********************************************!*\ +
15102 !*** ./node_modules/d3-random/src/bates.js ***! +
15103 \*********************************************/ +
15104/*! exports provided: default */ +
15105/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15106 +
15107"use strict"; +
15108__webpack_require__.r(__webpack_exports__); +
15109/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); +
15110/* harmony import */ var _irwinHall__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./irwinHall */ "./node_modules/d3-random/src/irwinHall.js"); +
15111 +
15112 +
15113 +
15114/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomBates(source) { +
15115 function randomBates(n) { +
15116 var randomIrwinHall = _irwinHall__WEBPACK_IMPORTED_MODULE_1__["default"].source(source)(n); +
15117 return function() { +
15118 return randomIrwinHall() / n; +
15119 }; +
15120 } +
15121 +
15122 randomBates.source = sourceRandomBates; +
15123 +
15124 return randomBates; +
15125})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); +
15126 +
15127 +
15128/***/ }), +
15129 +
15130/***/ "./node_modules/d3-random/src/defaultSource.js": +
15131/*!*****************************************************!*\ +
15132 !*** ./node_modules/d3-random/src/defaultSource.js ***! +
15133 \*****************************************************/ +
15134/*! exports provided: default */ +
15135/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15136 +
15137"use strict"; +
15138__webpack_require__.r(__webpack_exports__); +
15139/* harmony default export */ __webpack_exports__["default"] = (function() { +
15140 return Math.random(); +
15141}); +
15142 +
15143 +
15144/***/ }), +
15145 +
15146/***/ "./node_modules/d3-random/src/exponential.js": +
15147/*!***************************************************!*\ +
15148 !*** ./node_modules/d3-random/src/exponential.js ***! +
15149 \***************************************************/ +
15150/*! exports provided: default */ +
15151/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15152 +
15153"use strict"; +
15154__webpack_require__.r(__webpack_exports__); +
15155/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); +
15156 +
15157 +
15158/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomExponential(source) { +
15159 function randomExponential(lambda) { +
15160 return function() { +
15161 return -Math.log(1 - source()) / lambda; +
15162 }; +
15163 } +
15164 +
15165 randomExponential.source = sourceRandomExponential; +
15166 +
15167 return randomExponential; +
15168})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); +
15169 +
15170 +
15171/***/ }), +
15172 +
15173/***/ "./node_modules/d3-random/src/index.js": +
15174/*!*********************************************!*\ +
15175 !*** ./node_modules/d3-random/src/index.js ***! +
15176 \*********************************************/ +
15177/*! exports provided: randomUniform, randomNormal, randomLogNormal, randomBates, randomIrwinHall, randomExponential */ +
15178/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15179 +
15180"use strict"; +
15181__webpack_require__.r(__webpack_exports__); +
15182/* harmony import */ var _uniform__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./uniform */ "./node_modules/d3-random/src/uniform.js"); +
15183/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomUniform", function() { return _uniform__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
15184 +
15185/* harmony import */ var _normal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./normal */ "./node_modules/d3-random/src/normal.js"); +
15186/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomNormal", function() { return _normal__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
15187 +
15188/* harmony import */ var _logNormal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./logNormal */ "./node_modules/d3-random/src/logNormal.js"); +
15189/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomLogNormal", function() { return _logNormal__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
15190 +
15191/* harmony import */ var _bates__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bates */ "./node_modules/d3-random/src/bates.js"); +
15192/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomBates", function() { return _bates__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
15193 +
15194/* harmony import */ var _irwinHall__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./irwinHall */ "./node_modules/d3-random/src/irwinHall.js"); +
15195/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomIrwinHall", function() { return _irwinHall__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
15196 +
15197/* harmony import */ var _exponential__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exponential */ "./node_modules/d3-random/src/exponential.js"); +
15198/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomExponential", function() { return _exponential__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
15199 +
15200 +
15201 +
15202 +
15203 +
15204 +
15205 +
15206 +
15207 +
15208/***/ }), +
15209 +
15210/***/ "./node_modules/d3-random/src/irwinHall.js": +
15211/*!*************************************************!*\ +
15212 !*** ./node_modules/d3-random/src/irwinHall.js ***! +
15213 \*************************************************/ +
15214/*! exports provided: default */ +
15215/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15216 +
15217"use strict"; +
15218__webpack_require__.r(__webpack_exports__); +
15219/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); +
15220 +
15221 +
15222/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomIrwinHall(source) { +
15223 function randomIrwinHall(n) { +
15224 return function() { +
15225 for (var sum = 0, i = 0; i < n; ++i) sum += source(); +
15226 return sum; +
15227 }; +
15228 } +
15229 +
15230 randomIrwinHall.source = sourceRandomIrwinHall; +
15231 +
15232 return randomIrwinHall; +
15233})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); +
15234 +
15235 +
15236/***/ }), +
15237 +
15238/***/ "./node_modules/d3-random/src/logNormal.js": +
15239/*!*************************************************!*\ +
15240 !*** ./node_modules/d3-random/src/logNormal.js ***! +
15241 \*************************************************/ +
15242/*! exports provided: default */ +
15243/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15244 +
15245"use strict"; +
15246__webpack_require__.r(__webpack_exports__); +
15247/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); +
15248/* harmony import */ var _normal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./normal */ "./node_modules/d3-random/src/normal.js"); +
15249 +
15250 +
15251 +
15252/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomLogNormal(source) { +
15253 function randomLogNormal() { +
15254 var randomNormal = _normal__WEBPACK_IMPORTED_MODULE_1__["default"].source(source).apply(this, arguments); +
15255 return function() { +
15256 return Math.exp(randomNormal()); +
15257 }; +
15258 } +
15259 +
15260 randomLogNormal.source = sourceRandomLogNormal; +
15261 +
15262 return randomLogNormal; +
15263})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); +
15264 +
15265 +
15266/***/ }), +
15267 +
15268/***/ "./node_modules/d3-random/src/normal.js": +
15269/*!**********************************************!*\ +
15270 !*** ./node_modules/d3-random/src/normal.js ***! +
15271 \**********************************************/ +
15272/*! exports provided: default */ +
15273/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15274 +
15275"use strict"; +
15276__webpack_require__.r(__webpack_exports__); +
15277/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); +
15278 +
15279 +
15280/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomNormal(source) { +
15281 function randomNormal(mu, sigma) { +
15282 var x, r; +
15283 mu = mu == null ? 0 : +mu; +
15284 sigma = sigma == null ? 1 : +sigma; +
15285 return function() { +
15286 var y; +
15287 +
15288 // If available, use the second previously-generated uniform random. +
15289 if (x != null) y = x, x = null; +
15290 +
15291 // Otherwise, generate a new x and y. +
15292 else do { +
15293 x = source() * 2 - 1; +
15294 y = source() * 2 - 1; +
15295 r = x * x + y * y; +
15296 } while (!r || r > 1); +
15297 +
15298 return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r); +
15299 }; +
15300 } +
15301 +
15302 randomNormal.source = sourceRandomNormal; +
15303 +
15304 return randomNormal; +
15305})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); +
15306 +
15307 +
15308/***/ }), +
15309 +
15310/***/ "./node_modules/d3-random/src/uniform.js": +
15311/*!***********************************************!*\ +
15312 !*** ./node_modules/d3-random/src/uniform.js ***! +
15313 \***********************************************/ +
15314/*! exports provided: default */ +
15315/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15316 +
15317"use strict"; +
15318__webpack_require__.r(__webpack_exports__); +
15319/* harmony import */ var _defaultSource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultSource */ "./node_modules/d3-random/src/defaultSource.js"); +
15320 +
15321 +
15322/* harmony default export */ __webpack_exports__["default"] = ((function sourceRandomUniform(source) { +
15323 function randomUniform(min, max) { +
15324 min = min == null ? 0 : +min; +
15325 max = max == null ? 1 : +max; +
15326 if (arguments.length === 1) max = min, min = 0; +
15327 else max -= min; +
15328 return function() { +
15329 return source() * max + min; +
15330 }; +
15331 } +
15332 +
15333 randomUniform.source = sourceRandomUniform; +
15334 +
15335 return randomUniform; +
15336})(_defaultSource__WEBPACK_IMPORTED_MODULE_0__["default"])); +
15337 +
15338 +
15339/***/ }), +
15340 +
15341/***/ "./node_modules/d3-scale-chromatic/src/categorical/Accent.js": +
15342/*!*******************************************************************!*\ +
15343 !*** ./node_modules/d3-scale-chromatic/src/categorical/Accent.js ***! +
15344 \*******************************************************************/ +
15345/*! exports provided: default */ +
15346/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15347 +
15348"use strict"; +
15349__webpack_require__.r(__webpack_exports__); +
15350/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15351 +
15352 +
15353/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666")); +
15354 +
15355 +
15356/***/ }), +
15357 +
15358/***/ "./node_modules/d3-scale-chromatic/src/categorical/Dark2.js": +
15359/*!******************************************************************!*\ +
15360 !*** ./node_modules/d3-scale-chromatic/src/categorical/Dark2.js ***! +
15361 \******************************************************************/ +
15362/*! exports provided: default */ +
15363/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15364 +
15365"use strict"; +
15366__webpack_require__.r(__webpack_exports__); +
15367/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15368 +
15369 +
15370/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666")); +
15371 +
15372 +
15373/***/ }), +
15374 +
15375/***/ "./node_modules/d3-scale-chromatic/src/categorical/Paired.js": +
15376/*!*******************************************************************!*\ +
15377 !*** ./node_modules/d3-scale-chromatic/src/categorical/Paired.js ***! +
15378 \*******************************************************************/ +
15379/*! exports provided: default */ +
15380/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15381 +
15382"use strict"; +
15383__webpack_require__.r(__webpack_exports__); +
15384/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15385 +
15386 +
15387/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928")); +
15388 +
15389 +
15390/***/ }), +
15391 +
15392/***/ "./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js": +
15393/*!********************************************************************!*\ +
15394 !*** ./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js ***! +
15395 \********************************************************************/ +
15396/*! exports provided: default */ +
15397/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15398 +
15399"use strict"; +
15400__webpack_require__.r(__webpack_exports__); +
15401/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15402 +
15403 +
15404/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2")); +
15405 +
15406 +
15407/***/ }), +
15408 +
15409/***/ "./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js": +
15410/*!********************************************************************!*\ +
15411 !*** ./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js ***! +
15412 \********************************************************************/ +
15413/*! exports provided: default */ +
15414/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15415 +
15416"use strict"; +
15417__webpack_require__.r(__webpack_exports__); +
15418/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15419 +
15420 +
15421/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc")); +
15422 +
15423 +
15424/***/ }), +
15425 +
15426/***/ "./node_modules/d3-scale-chromatic/src/categorical/Set1.js": +
15427/*!*****************************************************************!*\ +
15428 !*** ./node_modules/d3-scale-chromatic/src/categorical/Set1.js ***! +
15429 \*****************************************************************/ +
15430/*! exports provided: default */ +
15431/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15432 +
15433"use strict"; +
15434__webpack_require__.r(__webpack_exports__); +
15435/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15436 +
15437 +
15438/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999")); +
15439 +
15440 +
15441/***/ }), +
15442 +
15443/***/ "./node_modules/d3-scale-chromatic/src/categorical/Set2.js": +
15444/*!*****************************************************************!*\ +
15445 !*** ./node_modules/d3-scale-chromatic/src/categorical/Set2.js ***! +
15446 \*****************************************************************/ +
15447/*! exports provided: default */ +
15448/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15449 +
15450"use strict"; +
15451__webpack_require__.r(__webpack_exports__); +
15452/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15453 +
15454 +
15455/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3")); +
15456 +
15457 +
15458/***/ }), +
15459 +
15460/***/ "./node_modules/d3-scale-chromatic/src/categorical/Set3.js": +
15461/*!*****************************************************************!*\ +
15462 !*** ./node_modules/d3-scale-chromatic/src/categorical/Set3.js ***! +
15463 \*****************************************************************/ +
15464/*! exports provided: default */ +
15465/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15466 +
15467"use strict"; +
15468__webpack_require__.r(__webpack_exports__); +
15469/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15470 +
15471 +
15472/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f")); +
15473 +
15474 +
15475/***/ }), +
15476 +
15477/***/ "./node_modules/d3-scale-chromatic/src/categorical/category10.js": +
15478/*!***********************************************************************!*\ +
15479 !*** ./node_modules/d3-scale-chromatic/src/categorical/category10.js ***! +
15480 \***********************************************************************/ +
15481/*! exports provided: default */ +
15482/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15483 +
15484"use strict"; +
15485__webpack_require__.r(__webpack_exports__); +
15486/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15487 +
15488 +
15489/* harmony default export */ __webpack_exports__["default"] = (Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf")); +
15490 +
15491 +
15492/***/ }), +
15493 +
15494/***/ "./node_modules/d3-scale-chromatic/src/colors.js": +
15495/*!*******************************************************!*\ +
15496 !*** ./node_modules/d3-scale-chromatic/src/colors.js ***! +
15497 \*******************************************************/ +
15498/*! exports provided: default */ +
15499/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15500 +
15501"use strict"; +
15502__webpack_require__.r(__webpack_exports__); +
15503/* harmony default export */ __webpack_exports__["default"] = (function(specifier) { +
15504 var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; +
15505 while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); +
15506 return colors; +
15507}); +
15508 +
15509 +
15510/***/ }), +
15511 +
15512/***/ "./node_modules/d3-scale-chromatic/src/diverging/BrBG.js": +
15513/*!***************************************************************!*\ +
15514 !*** ./node_modules/d3-scale-chromatic/src/diverging/BrBG.js ***! +
15515 \***************************************************************/ +
15516/*! exports provided: scheme, default */ +
15517/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15518 +
15519"use strict"; +
15520__webpack_require__.r(__webpack_exports__); +
15521/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
15522/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15523/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
15524 +
15525 +
15526 +
15527var scheme = new Array(3).concat( +
15528 "d8b365f5f5f55ab4ac", +
15529 "a6611adfc27d80cdc1018571", +
15530 "a6611adfc27df5f5f580cdc1018571", +
15531 "8c510ad8b365f6e8c3c7eae55ab4ac01665e", +
15532 "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", +
15533 "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", +
15534 "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", +
15535 "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", +
15536 "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30" +
15537).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
15538 +
15539/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
15540 +
15541 +
15542/***/ }), +
15543 +
15544/***/ "./node_modules/d3-scale-chromatic/src/diverging/PRGn.js": +
15545/*!***************************************************************!*\ +
15546 !*** ./node_modules/d3-scale-chromatic/src/diverging/PRGn.js ***! +
15547 \***************************************************************/ +
15548/*! exports provided: scheme, default */ +
15549/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15550 +
15551"use strict"; +
15552__webpack_require__.r(__webpack_exports__); +
15553/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
15554/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15555/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
15556 +
15557 +
15558 +
15559var scheme = new Array(3).concat( +
15560 "af8dc3f7f7f77fbf7b", +
15561 "7b3294c2a5cfa6dba0008837", +
15562 "7b3294c2a5cff7f7f7a6dba0008837", +
15563 "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", +
15564 "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", +
15565 "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", +
15566 "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", +
15567 "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", +
15568 "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b" +
15569).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
15570 +
15571/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
15572 +
15573 +
15574/***/ }), +
15575 +
15576/***/ "./node_modules/d3-scale-chromatic/src/diverging/PiYG.js": +
15577/*!***************************************************************!*\ +
15578 !*** ./node_modules/d3-scale-chromatic/src/diverging/PiYG.js ***! +
15579 \***************************************************************/ +
15580/*! exports provided: scheme, default */ +
15581/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15582 +
15583"use strict"; +
15584__webpack_require__.r(__webpack_exports__); +
15585/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
15586/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15587/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
15588 +
15589 +
15590 +
15591var scheme = new Array(3).concat( +
15592 "e9a3c9f7f7f7a1d76a", +
15593 "d01c8bf1b6dab8e1864dac26", +
15594 "d01c8bf1b6daf7f7f7b8e1864dac26", +
15595 "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", +
15596 "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", +
15597 "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", +
15598 "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", +
15599 "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", +
15600 "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419" +
15601).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
15602 +
15603/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
15604 +
15605 +
15606/***/ }), +
15607 +
15608/***/ "./node_modules/d3-scale-chromatic/src/diverging/PuOr.js": +
15609/*!***************************************************************!*\ +
15610 !*** ./node_modules/d3-scale-chromatic/src/diverging/PuOr.js ***! +
15611 \***************************************************************/ +
15612/*! exports provided: scheme, default */ +
15613/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15614 +
15615"use strict"; +
15616__webpack_require__.r(__webpack_exports__); +
15617/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
15618/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15619/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
15620 +
15621 +
15622 +
15623var scheme = new Array(3).concat( +
15624 "998ec3f7f7f7f1a340", +
15625 "5e3c99b2abd2fdb863e66101", +
15626 "5e3c99b2abd2f7f7f7fdb863e66101", +
15627 "542788998ec3d8daebfee0b6f1a340b35806", +
15628 "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", +
15629 "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", +
15630 "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", +
15631 "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", +
15632 "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08" +
15633).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
15634 +
15635/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
15636 +
15637 +
15638/***/ }), +
15639 +
15640/***/ "./node_modules/d3-scale-chromatic/src/diverging/RdBu.js": +
15641/*!***************************************************************!*\ +
15642 !*** ./node_modules/d3-scale-chromatic/src/diverging/RdBu.js ***! +
15643 \***************************************************************/ +
15644/*! exports provided: scheme, default */ +
15645/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15646 +
15647"use strict"; +
15648__webpack_require__.r(__webpack_exports__); +
15649/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
15650/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15651/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
15652 +
15653 +
15654 +
15655var scheme = new Array(3).concat( +
15656 "ef8a62f7f7f767a9cf", +
15657 "ca0020f4a58292c5de0571b0", +
15658 "ca0020f4a582f7f7f792c5de0571b0", +
15659 "b2182bef8a62fddbc7d1e5f067a9cf2166ac", +
15660 "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", +
15661 "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", +
15662 "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", +
15663 "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", +
15664 "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061" +
15665).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
15666 +
15667/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
15668 +
15669 +
15670/***/ }), +
15671 +
15672/***/ "./node_modules/d3-scale-chromatic/src/diverging/RdGy.js": +
15673/*!***************************************************************!*\ +
15674 !*** ./node_modules/d3-scale-chromatic/src/diverging/RdGy.js ***! +
15675 \***************************************************************/ +
15676/*! exports provided: scheme, default */ +
15677/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15678 +
15679"use strict"; +
15680__webpack_require__.r(__webpack_exports__); +
15681/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
15682/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15683/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
15684 +
15685 +
15686 +
15687var scheme = new Array(3).concat( +
15688 "ef8a62ffffff999999", +
15689 "ca0020f4a582bababa404040", +
15690 "ca0020f4a582ffffffbababa404040", +
15691 "b2182bef8a62fddbc7e0e0e09999994d4d4d", +
15692 "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", +
15693 "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", +
15694 "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", +
15695 "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", +
15696 "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a" +
15697).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
15698 +
15699/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
15700 +
15701 +
15702/***/ }), +
15703 +
15704/***/ "./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js": +
15705/*!*****************************************************************!*\ +
15706 !*** ./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js ***! +
15707 \*****************************************************************/ +
15708/*! exports provided: scheme, default */ +
15709/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15710 +
15711"use strict"; +
15712__webpack_require__.r(__webpack_exports__); +
15713/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
15714/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15715/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
15716 +
15717 +
15718 +
15719var scheme = new Array(3).concat( +
15720 "fc8d59ffffbf91bfdb", +
15721 "d7191cfdae61abd9e92c7bb6", +
15722 "d7191cfdae61ffffbfabd9e92c7bb6", +
15723 "d73027fc8d59fee090e0f3f891bfdb4575b4", +
15724 "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", +
15725 "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", +
15726 "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", +
15727 "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", +
15728 "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695" +
15729).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
15730 +
15731/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
15732 +
15733 +
15734/***/ }), +
15735 +
15736/***/ "./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js": +
15737/*!*****************************************************************!*\ +
15738 !*** ./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js ***! +
15739 \*****************************************************************/ +
15740/*! exports provided: scheme, default */ +
15741/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15742 +
15743"use strict"; +
15744__webpack_require__.r(__webpack_exports__); +
15745/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
15746/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15747/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
15748 +
15749 +
15750 +
15751var scheme = new Array(3).concat( +
15752 "fc8d59ffffbf91cf60", +
15753 "d7191cfdae61a6d96a1a9641", +
15754 "d7191cfdae61ffffbfa6d96a1a9641", +
15755 "d73027fc8d59fee08bd9ef8b91cf601a9850", +
15756 "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", +
15757 "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", +
15758 "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", +
15759 "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", +
15760 "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837" +
15761).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
15762 +
15763/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
15764 +
15765 +
15766/***/ }), +
15767 +
15768/***/ "./node_modules/d3-scale-chromatic/src/diverging/Spectral.js": +
15769/*!*******************************************************************!*\ +
15770 !*** ./node_modules/d3-scale-chromatic/src/diverging/Spectral.js ***! +
15771 \*******************************************************************/ +
15772/*! exports provided: scheme, default */ +
15773/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15774 +
15775"use strict"; +
15776__webpack_require__.r(__webpack_exports__); +
15777/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
15778/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
15779/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
15780 +
15781 +
15782 +
15783var scheme = new Array(3).concat( +
15784 "fc8d59ffffbf99d594", +
15785 "d7191cfdae61abdda42b83ba", +
15786 "d7191cfdae61ffffbfabdda42b83ba", +
15787 "d53e4ffc8d59fee08be6f59899d5943288bd", +
15788 "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", +
15789 "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", +
15790 "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", +
15791 "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", +
15792 "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2" +
15793).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
15794 +
15795/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
15796 +
15797 +
15798/***/ }), +
15799 +
15800/***/ "./node_modules/d3-scale-chromatic/src/index.js": +
15801/*!******************************************************!*\ +
15802 !*** ./node_modules/d3-scale-chromatic/src/index.js ***! +
15803 \******************************************************/ +
15804/*! exports provided: schemeCategory10, schemeAccent, schemeDark2, schemePaired, schemePastel1, schemePastel2, schemeSet1, schemeSet2, schemeSet3, interpolateBrBG, schemeBrBG, interpolatePRGn, schemePRGn, interpolatePiYG, schemePiYG, interpolatePuOr, schemePuOr, interpolateRdBu, schemeRdBu, interpolateRdGy, schemeRdGy, interpolateRdYlBu, schemeRdYlBu, interpolateRdYlGn, schemeRdYlGn, interpolateSpectral, schemeSpectral, interpolateBuGn, schemeBuGn, interpolateBuPu, schemeBuPu, interpolateGnBu, schemeGnBu, interpolateOrRd, schemeOrRd, interpolatePuBuGn, schemePuBuGn, interpolatePuBu, schemePuBu, interpolatePuRd, schemePuRd, interpolateRdPu, schemeRdPu, interpolateYlGnBu, schemeYlGnBu, interpolateYlGn, schemeYlGn, interpolateYlOrBr, schemeYlOrBr, interpolateYlOrRd, schemeYlOrRd, interpolateBlues, schemeBlues, interpolateGreens, schemeGreens, interpolateGreys, schemeGreys, interpolatePurples, schemePurples, interpolateReds, schemeReds, interpolateOranges, schemeOranges, interpolateCubehelixDefault, interpolateRainbow, interpolateWarm, interpolateCool, interpolateSinebow, interpolateViridis, interpolateMagma, interpolateInferno, interpolatePlasma */ +
15805/***/ (function(module, __webpack_exports__, __webpack_require__) { +
15806 +
15807"use strict"; +
15808__webpack_require__.r(__webpack_exports__); +
15809/* harmony import */ var _categorical_category10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./categorical/category10 */ "./node_modules/d3-scale-chromatic/src/categorical/category10.js"); +
15810/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeCategory10", function() { return _categorical_category10__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
15811 +
15812/* harmony import */ var _categorical_Accent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./categorical/Accent */ "./node_modules/d3-scale-chromatic/src/categorical/Accent.js"); +
15813/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeAccent", function() { return _categorical_Accent__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
15814 +
15815/* harmony import */ var _categorical_Dark2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./categorical/Dark2 */ "./node_modules/d3-scale-chromatic/src/categorical/Dark2.js"); +
15816/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeDark2", function() { return _categorical_Dark2__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
15817 +
15818/* harmony import */ var _categorical_Paired__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./categorical/Paired */ "./node_modules/d3-scale-chromatic/src/categorical/Paired.js"); +
15819/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePaired", function() { return _categorical_Paired__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
15820 +
15821/* harmony import */ var _categorical_Pastel1__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./categorical/Pastel1 */ "./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js"); +
15822/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePastel1", function() { return _categorical_Pastel1__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
15823 +
15824/* harmony import */ var _categorical_Pastel2__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./categorical/Pastel2 */ "./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js"); +
15825/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePastel2", function() { return _categorical_Pastel2__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
15826 +
15827/* harmony import */ var _categorical_Set1__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./categorical/Set1 */ "./node_modules/d3-scale-chromatic/src/categorical/Set1.js"); +
15828/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet1", function() { return _categorical_Set1__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
15829 +
15830/* harmony import */ var _categorical_Set2__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./categorical/Set2 */ "./node_modules/d3-scale-chromatic/src/categorical/Set2.js"); +
15831/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet2", function() { return _categorical_Set2__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +
15832 +
15833/* harmony import */ var _categorical_Set3__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./categorical/Set3 */ "./node_modules/d3-scale-chromatic/src/categorical/Set3.js"); +
15834/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet3", function() { return _categorical_Set3__WEBPACK_IMPORTED_MODULE_8__["default"]; }); +
15835 +
15836/* harmony import */ var _diverging_BrBG__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./diverging/BrBG */ "./node_modules/d3-scale-chromatic/src/diverging/BrBG.js"); +
15837/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBrBG", function() { return _diverging_BrBG__WEBPACK_IMPORTED_MODULE_9__["default"]; }); +
15838 +
15839/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBrBG", function() { return _diverging_BrBG__WEBPACK_IMPORTED_MODULE_9__["scheme"]; }); +
15840 +
15841/* harmony import */ var _diverging_PRGn__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./diverging/PRGn */ "./node_modules/d3-scale-chromatic/src/diverging/PRGn.js"); +
15842/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePRGn", function() { return _diverging_PRGn__WEBPACK_IMPORTED_MODULE_10__["default"]; }); +
15843 +
15844/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePRGn", function() { return _diverging_PRGn__WEBPACK_IMPORTED_MODULE_10__["scheme"]; }); +
15845 +
15846/* harmony import */ var _diverging_PiYG__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./diverging/PiYG */ "./node_modules/d3-scale-chromatic/src/diverging/PiYG.js"); +
15847/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePiYG", function() { return _diverging_PiYG__WEBPACK_IMPORTED_MODULE_11__["default"]; }); +
15848 +
15849/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePiYG", function() { return _diverging_PiYG__WEBPACK_IMPORTED_MODULE_11__["scheme"]; }); +
15850 +
15851/* harmony import */ var _diverging_PuOr__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./diverging/PuOr */ "./node_modules/d3-scale-chromatic/src/diverging/PuOr.js"); +
15852/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuOr", function() { return _diverging_PuOr__WEBPACK_IMPORTED_MODULE_12__["default"]; }); +
15853 +
15854/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuOr", function() { return _diverging_PuOr__WEBPACK_IMPORTED_MODULE_12__["scheme"]; }); +
15855 +
15856/* harmony import */ var _diverging_RdBu__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./diverging/RdBu */ "./node_modules/d3-scale-chromatic/src/diverging/RdBu.js"); +
15857/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdBu", function() { return _diverging_RdBu__WEBPACK_IMPORTED_MODULE_13__["default"]; }); +
15858 +
15859/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdBu", function() { return _diverging_RdBu__WEBPACK_IMPORTED_MODULE_13__["scheme"]; }); +
15860 +
15861/* harmony import */ var _diverging_RdGy__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./diverging/RdGy */ "./node_modules/d3-scale-chromatic/src/diverging/RdGy.js"); +
15862/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdGy", function() { return _diverging_RdGy__WEBPACK_IMPORTED_MODULE_14__["default"]; }); +
15863 +
15864/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdGy", function() { return _diverging_RdGy__WEBPACK_IMPORTED_MODULE_14__["scheme"]; }); +
15865 +
15866/* harmony import */ var _diverging_RdYlBu__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./diverging/RdYlBu */ "./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js"); +
15867/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdYlBu", function() { return _diverging_RdYlBu__WEBPACK_IMPORTED_MODULE_15__["default"]; }); +
15868 +
15869/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdYlBu", function() { return _diverging_RdYlBu__WEBPACK_IMPORTED_MODULE_15__["scheme"]; }); +
15870 +
15871/* harmony import */ var _diverging_RdYlGn__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./diverging/RdYlGn */ "./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js"); +
15872/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdYlGn", function() { return _diverging_RdYlGn__WEBPACK_IMPORTED_MODULE_16__["default"]; }); +
15873 +
15874/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdYlGn", function() { return _diverging_RdYlGn__WEBPACK_IMPORTED_MODULE_16__["scheme"]; }); +
15875 +
15876/* harmony import */ var _diverging_Spectral__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./diverging/Spectral */ "./node_modules/d3-scale-chromatic/src/diverging/Spectral.js"); +
15877/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateSpectral", function() { return _diverging_Spectral__WEBPACK_IMPORTED_MODULE_17__["default"]; }); +
15878 +
15879/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSpectral", function() { return _diverging_Spectral__WEBPACK_IMPORTED_MODULE_17__["scheme"]; }); +
15880 +
15881/* harmony import */ var _sequential_multi_BuGn__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./sequential-multi/BuGn */ "./node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js"); +
15882/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBuGn", function() { return _sequential_multi_BuGn__WEBPACK_IMPORTED_MODULE_18__["default"]; }); +
15883 +
15884/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBuGn", function() { return _sequential_multi_BuGn__WEBPACK_IMPORTED_MODULE_18__["scheme"]; }); +
15885 +
15886/* harmony import */ var _sequential_multi_BuPu__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./sequential-multi/BuPu */ "./node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js"); +
15887/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBuPu", function() { return _sequential_multi_BuPu__WEBPACK_IMPORTED_MODULE_19__["default"]; }); +
15888 +
15889/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBuPu", function() { return _sequential_multi_BuPu__WEBPACK_IMPORTED_MODULE_19__["scheme"]; }); +
15890 +
15891/* harmony import */ var _sequential_multi_GnBu__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./sequential-multi/GnBu */ "./node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js"); +
15892/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGnBu", function() { return _sequential_multi_GnBu__WEBPACK_IMPORTED_MODULE_20__["default"]; }); +
15893 +
15894/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGnBu", function() { return _sequential_multi_GnBu__WEBPACK_IMPORTED_MODULE_20__["scheme"]; }); +
15895 +
15896/* harmony import */ var _sequential_multi_OrRd__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./sequential-multi/OrRd */ "./node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js"); +
15897/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateOrRd", function() { return _sequential_multi_OrRd__WEBPACK_IMPORTED_MODULE_21__["default"]; }); +
15898 +
15899/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeOrRd", function() { return _sequential_multi_OrRd__WEBPACK_IMPORTED_MODULE_21__["scheme"]; }); +
15900 +
15901/* harmony import */ var _sequential_multi_PuBuGn__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sequential-multi/PuBuGn */ "./node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js"); +
15902/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuBuGn", function() { return _sequential_multi_PuBuGn__WEBPACK_IMPORTED_MODULE_22__["default"]; }); +
15903 +
15904/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuBuGn", function() { return _sequential_multi_PuBuGn__WEBPACK_IMPORTED_MODULE_22__["scheme"]; }); +
15905 +
15906/* harmony import */ var _sequential_multi_PuBu__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./sequential-multi/PuBu */ "./node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js"); +
15907/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuBu", function() { return _sequential_multi_PuBu__WEBPACK_IMPORTED_MODULE_23__["default"]; }); +
15908 +
15909/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuBu", function() { return _sequential_multi_PuBu__WEBPACK_IMPORTED_MODULE_23__["scheme"]; }); +
15910 +
15911/* harmony import */ var _sequential_multi_PuRd__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./sequential-multi/PuRd */ "./node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js"); +
15912/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuRd", function() { return _sequential_multi_PuRd__WEBPACK_IMPORTED_MODULE_24__["default"]; }); +
15913 +
15914/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuRd", function() { return _sequential_multi_PuRd__WEBPACK_IMPORTED_MODULE_24__["scheme"]; }); +
15915 +
15916/* harmony import */ var _sequential_multi_RdPu__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./sequential-multi/RdPu */ "./node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js"); +
15917/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdPu", function() { return _sequential_multi_RdPu__WEBPACK_IMPORTED_MODULE_25__["default"]; }); +
15918 +
15919/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdPu", function() { return _sequential_multi_RdPu__WEBPACK_IMPORTED_MODULE_25__["scheme"]; }); +
15920 +
15921/* harmony import */ var _sequential_multi_YlGnBu__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./sequential-multi/YlGnBu */ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js"); +
15922/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlGnBu", function() { return _sequential_multi_YlGnBu__WEBPACK_IMPORTED_MODULE_26__["default"]; }); +
15923 +
15924/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlGnBu", function() { return _sequential_multi_YlGnBu__WEBPACK_IMPORTED_MODULE_26__["scheme"]; }); +
15925 +
15926/* harmony import */ var _sequential_multi_YlGn__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./sequential-multi/YlGn */ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js"); +
15927/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlGn", function() { return _sequential_multi_YlGn__WEBPACK_IMPORTED_MODULE_27__["default"]; }); +
15928 +
15929/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlGn", function() { return _sequential_multi_YlGn__WEBPACK_IMPORTED_MODULE_27__["scheme"]; }); +
15930 +
15931/* harmony import */ var _sequential_multi_YlOrBr__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./sequential-multi/YlOrBr */ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js"); +
15932/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlOrBr", function() { return _sequential_multi_YlOrBr__WEBPACK_IMPORTED_MODULE_28__["default"]; }); +
15933 +
15934/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlOrBr", function() { return _sequential_multi_YlOrBr__WEBPACK_IMPORTED_MODULE_28__["scheme"]; }); +
15935 +
15936/* harmony import */ var _sequential_multi_YlOrRd__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./sequential-multi/YlOrRd */ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js"); +
15937/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlOrRd", function() { return _sequential_multi_YlOrRd__WEBPACK_IMPORTED_MODULE_29__["default"]; }); +
15938 +
15939/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlOrRd", function() { return _sequential_multi_YlOrRd__WEBPACK_IMPORTED_MODULE_29__["scheme"]; }); +
15940 +
15941/* harmony import */ var _sequential_single_Blues__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./sequential-single/Blues */ "./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js"); +
15942/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBlues", function() { return _sequential_single_Blues__WEBPACK_IMPORTED_MODULE_30__["default"]; }); +
15943 +
15944/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBlues", function() { return _sequential_single_Blues__WEBPACK_IMPORTED_MODULE_30__["scheme"]; }); +
15945 +
15946/* harmony import */ var _sequential_single_Greens__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./sequential-single/Greens */ "./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js"); +
15947/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGreens", function() { return _sequential_single_Greens__WEBPACK_IMPORTED_MODULE_31__["default"]; }); +
15948 +
15949/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGreens", function() { return _sequential_single_Greens__WEBPACK_IMPORTED_MODULE_31__["scheme"]; }); +
15950 +
15951/* harmony import */ var _sequential_single_Greys__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./sequential-single/Greys */ "./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js"); +
15952/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGreys", function() { return _sequential_single_Greys__WEBPACK_IMPORTED_MODULE_32__["default"]; }); +
15953 +
15954/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGreys", function() { return _sequential_single_Greys__WEBPACK_IMPORTED_MODULE_32__["scheme"]; }); +
15955 +
15956/* harmony import */ var _sequential_single_Purples__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./sequential-single/Purples */ "./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js"); +
15957/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePurples", function() { return _sequential_single_Purples__WEBPACK_IMPORTED_MODULE_33__["default"]; }); +
15958 +
15959/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePurples", function() { return _sequential_single_Purples__WEBPACK_IMPORTED_MODULE_33__["scheme"]; }); +
15960 +
15961/* harmony import */ var _sequential_single_Reds__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./sequential-single/Reds */ "./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js"); +
15962/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateReds", function() { return _sequential_single_Reds__WEBPACK_IMPORTED_MODULE_34__["default"]; }); +
15963 +
15964/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeReds", function() { return _sequential_single_Reds__WEBPACK_IMPORTED_MODULE_34__["scheme"]; }); +
15965 +
15966/* harmony import */ var _sequential_single_Oranges__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./sequential-single/Oranges */ "./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js"); +
15967/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateOranges", function() { return _sequential_single_Oranges__WEBPACK_IMPORTED_MODULE_35__["default"]; }); +
15968 +
15969/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeOranges", function() { return _sequential_single_Oranges__WEBPACK_IMPORTED_MODULE_35__["scheme"]; }); +
15970 +
15971/* harmony import */ var _sequential_multi_cubehelix__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./sequential-multi/cubehelix */ "./node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js"); +
15972/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixDefault", function() { return _sequential_multi_cubehelix__WEBPACK_IMPORTED_MODULE_36__["default"]; }); +
15973 +
15974/* harmony import */ var _sequential_multi_rainbow__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./sequential-multi/rainbow */ "./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js"); +
15975/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRainbow", function() { return _sequential_multi_rainbow__WEBPACK_IMPORTED_MODULE_37__["default"]; }); +
15976 +
15977/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateWarm", function() { return _sequential_multi_rainbow__WEBPACK_IMPORTED_MODULE_37__["warm"]; }); +
15978 +
15979/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCool", function() { return _sequential_multi_rainbow__WEBPACK_IMPORTED_MODULE_37__["cool"]; }); +
15980 +
15981/* harmony import */ var _sequential_multi_sinebow__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./sequential-multi/sinebow */ "./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js"); +
15982/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateSinebow", function() { return _sequential_multi_sinebow__WEBPACK_IMPORTED_MODULE_38__["default"]; }); +
15983 +
15984/* harmony import */ var _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./sequential-multi/viridis */ "./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js"); +
15985/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateViridis", function() { return _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__["default"]; }); +
15986 +
15987/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateMagma", function() { return _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__["magma"]; }); +
15988 +
15989/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateInferno", function() { return _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__["inferno"]; }); +
15990 +
15991/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePlasma", function() { return _sequential_multi_viridis__WEBPACK_IMPORTED_MODULE_39__["plasma"]; }); +
15992 +
15993 +
15994 +
15995 +
15996 +
15997 +
15998 +
15999 +
16000 +
16001 +
16002 +
16003 +
16004 +
16005 +
16006 +
16007 +
16008 +
16009 +
16010 +
16011 +
16012 +
16013 +
16014 +
16015 +
16016 +
16017 +
16018 +
16019 +
16020 +
16021 +
16022 +
16023 +
16024 +
16025 +
16026 +
16027 +
16028 +
16029 +
16030 +
16031 +
16032 +
16033 +
16034 +
16035/***/ }), +
16036 +
16037/***/ "./node_modules/d3-scale-chromatic/src/ramp.js": +
16038/*!*****************************************************!*\ +
16039 !*** ./node_modules/d3-scale-chromatic/src/ramp.js ***! +
16040 \*****************************************************/ +
16041/*! exports provided: default */ +
16042/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16043 +
16044"use strict"; +
16045__webpack_require__.r(__webpack_exports__); +
16046/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
16047 +
16048 +
16049/* harmony default export */ __webpack_exports__["default"] = (function(scheme) { +
16050 return Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_0__["interpolateRgbBasis"])(scheme[scheme.length - 1]); +
16051}); +
16052 +
16053 +
16054/***/ }), +
16055 +
16056/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js": +
16057/*!**********************************************************************!*\ +
16058 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js ***! +
16059 \**********************************************************************/ +
16060/*! exports provided: scheme, default */ +
16061/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16062 +
16063"use strict"; +
16064__webpack_require__.r(__webpack_exports__); +
16065/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16066/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16067/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16068 +
16069 +
16070 +
16071var scheme = new Array(3).concat( +
16072 "e5f5f999d8c92ca25f", +
16073 "edf8fbb2e2e266c2a4238b45", +
16074 "edf8fbb2e2e266c2a42ca25f006d2c", +
16075 "edf8fbccece699d8c966c2a42ca25f006d2c", +
16076 "edf8fbccece699d8c966c2a441ae76238b45005824", +
16077 "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", +
16078 "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b" +
16079).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16080 +
16081/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16082 +
16083 +
16084/***/ }), +
16085 +
16086/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js": +
16087/*!**********************************************************************!*\ +
16088 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js ***! +
16089 \**********************************************************************/ +
16090/*! exports provided: scheme, default */ +
16091/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16092 +
16093"use strict"; +
16094__webpack_require__.r(__webpack_exports__); +
16095/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16096/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16097/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16098 +
16099 +
16100 +
16101var scheme = new Array(3).concat( +
16102 "e0ecf49ebcda8856a7", +
16103 "edf8fbb3cde38c96c688419d", +
16104 "edf8fbb3cde38c96c68856a7810f7c", +
16105 "edf8fbbfd3e69ebcda8c96c68856a7810f7c", +
16106 "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", +
16107 "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", +
16108 "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b" +
16109).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16110 +
16111/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16112 +
16113 +
16114/***/ }), +
16115 +
16116/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js": +
16117/*!**********************************************************************!*\ +
16118 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js ***! +
16119 \**********************************************************************/ +
16120/*! exports provided: scheme, default */ +
16121/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16122 +
16123"use strict"; +
16124__webpack_require__.r(__webpack_exports__); +
16125/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16126/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16127/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16128 +
16129 +
16130 +
16131var scheme = new Array(3).concat( +
16132 "e0f3dba8ddb543a2ca", +
16133 "f0f9e8bae4bc7bccc42b8cbe", +
16134 "f0f9e8bae4bc7bccc443a2ca0868ac", +
16135 "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", +
16136 "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", +
16137 "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", +
16138 "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081" +
16139).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16140 +
16141/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16142 +
16143 +
16144/***/ }), +
16145 +
16146/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js": +
16147/*!**********************************************************************!*\ +
16148 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js ***! +
16149 \**********************************************************************/ +
16150/*! exports provided: scheme, default */ +
16151/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16152 +
16153"use strict"; +
16154__webpack_require__.r(__webpack_exports__); +
16155/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16156/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16157/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16158 +
16159 +
16160 +
16161var scheme = new Array(3).concat( +
16162 "fee8c8fdbb84e34a33", +
16163 "fef0d9fdcc8afc8d59d7301f", +
16164 "fef0d9fdcc8afc8d59e34a33b30000", +
16165 "fef0d9fdd49efdbb84fc8d59e34a33b30000", +
16166 "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", +
16167 "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", +
16168 "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000" +
16169).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16170 +
16171/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16172 +
16173 +
16174/***/ }), +
16175 +
16176/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js": +
16177/*!**********************************************************************!*\ +
16178 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js ***! +
16179 \**********************************************************************/ +
16180/*! exports provided: scheme, default */ +
16181/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16182 +
16183"use strict"; +
16184__webpack_require__.r(__webpack_exports__); +
16185/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16186/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16187/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16188 +
16189 +
16190 +
16191var scheme = new Array(3).concat( +
16192 "ece7f2a6bddb2b8cbe", +
16193 "f1eef6bdc9e174a9cf0570b0", +
16194 "f1eef6bdc9e174a9cf2b8cbe045a8d", +
16195 "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", +
16196 "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", +
16197 "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", +
16198 "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858" +
16199).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16200 +
16201/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16202 +
16203 +
16204/***/ }), +
16205 +
16206/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js": +
16207/*!************************************************************************!*\ +
16208 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js ***! +
16209 \************************************************************************/ +
16210/*! exports provided: scheme, default */ +
16211/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16212 +
16213"use strict"; +
16214__webpack_require__.r(__webpack_exports__); +
16215/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16216/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16217/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16218 +
16219 +
16220 +
16221var scheme = new Array(3).concat( +
16222 "ece2f0a6bddb1c9099", +
16223 "f6eff7bdc9e167a9cf02818a", +
16224 "f6eff7bdc9e167a9cf1c9099016c59", +
16225 "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", +
16226 "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", +
16227 "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", +
16228 "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636" +
16229).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16230 +
16231/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16232 +
16233 +
16234/***/ }), +
16235 +
16236/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js": +
16237/*!**********************************************************************!*\ +
16238 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js ***! +
16239 \**********************************************************************/ +
16240/*! exports provided: scheme, default */ +
16241/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16242 +
16243"use strict"; +
16244__webpack_require__.r(__webpack_exports__); +
16245/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16246/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16247/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16248 +
16249 +
16250 +
16251var scheme = new Array(3).concat( +
16252 "e7e1efc994c7dd1c77", +
16253 "f1eef6d7b5d8df65b0ce1256", +
16254 "f1eef6d7b5d8df65b0dd1c77980043", +
16255 "f1eef6d4b9dac994c7df65b0dd1c77980043", +
16256 "f1eef6d4b9dac994c7df65b0e7298ace125691003f", +
16257 "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", +
16258 "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f" +
16259).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16260 +
16261/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16262 +
16263 +
16264/***/ }), +
16265 +
16266/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js": +
16267/*!**********************************************************************!*\ +
16268 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js ***! +
16269 \**********************************************************************/ +
16270/*! exports provided: scheme, default */ +
16271/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16272 +
16273"use strict"; +
16274__webpack_require__.r(__webpack_exports__); +
16275/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16276/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16277/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16278 +
16279 +
16280 +
16281var scheme = new Array(3).concat( +
16282 "fde0ddfa9fb5c51b8a", +
16283 "feebe2fbb4b9f768a1ae017e", +
16284 "feebe2fbb4b9f768a1c51b8a7a0177", +
16285 "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", +
16286 "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", +
16287 "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", +
16288 "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a" +
16289).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16290 +
16291/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16292 +
16293 +
16294/***/ }), +
16295 +
16296/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js": +
16297/*!**********************************************************************!*\ +
16298 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js ***! +
16299 \**********************************************************************/ +
16300/*! exports provided: scheme, default */ +
16301/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16302 +
16303"use strict"; +
16304__webpack_require__.r(__webpack_exports__); +
16305/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16306/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16307/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16308 +
16309 +
16310 +
16311var scheme = new Array(3).concat( +
16312 "f7fcb9addd8e31a354", +
16313 "ffffccc2e69978c679238443", +
16314 "ffffccc2e69978c67931a354006837", +
16315 "ffffccd9f0a3addd8e78c67931a354006837", +
16316 "ffffccd9f0a3addd8e78c67941ab5d238443005a32", +
16317 "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", +
16318 "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529" +
16319).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16320 +
16321/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16322 +
16323 +
16324/***/ }), +
16325 +
16326/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js": +
16327/*!************************************************************************!*\ +
16328 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js ***! +
16329 \************************************************************************/ +
16330/*! exports provided: scheme, default */ +
16331/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16332 +
16333"use strict"; +
16334__webpack_require__.r(__webpack_exports__); +
16335/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16336/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16337/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16338 +
16339 +
16340 +
16341var scheme = new Array(3).concat( +
16342 "edf8b17fcdbb2c7fb8", +
16343 "ffffcca1dab441b6c4225ea8", +
16344 "ffffcca1dab441b6c42c7fb8253494", +
16345 "ffffccc7e9b47fcdbb41b6c42c7fb8253494", +
16346 "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", +
16347 "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", +
16348 "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58" +
16349).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16350 +
16351/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16352 +
16353 +
16354/***/ }), +
16355 +
16356/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js": +
16357/*!************************************************************************!*\ +
16358 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js ***! +
16359 \************************************************************************/ +
16360/*! exports provided: scheme, default */ +
16361/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16362 +
16363"use strict"; +
16364__webpack_require__.r(__webpack_exports__); +
16365/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16366/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16367/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16368 +
16369 +
16370 +
16371var scheme = new Array(3).concat( +
16372 "fff7bcfec44fd95f0e", +
16373 "ffffd4fed98efe9929cc4c02", +
16374 "ffffd4fed98efe9929d95f0e993404", +
16375 "ffffd4fee391fec44ffe9929d95f0e993404", +
16376 "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", +
16377 "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", +
16378 "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506" +
16379).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16380 +
16381/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16382 +
16383 +
16384/***/ }), +
16385 +
16386/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js": +
16387/*!************************************************************************!*\ +
16388 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js ***! +
16389 \************************************************************************/ +
16390/*! exports provided: scheme, default */ +
16391/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16392 +
16393"use strict"; +
16394__webpack_require__.r(__webpack_exports__); +
16395/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16396/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16397/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16398 +
16399 +
16400 +
16401var scheme = new Array(3).concat( +
16402 "ffeda0feb24cf03b20", +
16403 "ffffb2fecc5cfd8d3ce31a1c", +
16404 "ffffb2fecc5cfd8d3cf03b20bd0026", +
16405 "ffffb2fed976feb24cfd8d3cf03b20bd0026", +
16406 "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", +
16407 "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", +
16408 "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026" +
16409).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16410 +
16411/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16412 +
16413 +
16414/***/ }), +
16415 +
16416/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js": +
16417/*!***************************************************************************!*\ +
16418 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js ***! +
16419 \***************************************************************************/ +
16420/*! exports provided: default */ +
16421/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16422 +
16423"use strict"; +
16424__webpack_require__.r(__webpack_exports__); +
16425/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
16426/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
16427 +
16428 +
16429 +
16430/* harmony default export */ __webpack_exports__["default"] = (Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateCubehelixLong"])(Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(300, 0.5, 0.0), Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(-240, 0.5, 1.0))); +
16431 +
16432 +
16433/***/ }), +
16434 +
16435/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js": +
16436/*!*************************************************************************!*\ +
16437 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js ***! +
16438 \*************************************************************************/ +
16439/*! exports provided: warm, cool, default */ +
16440/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16441 +
16442"use strict"; +
16443__webpack_require__.r(__webpack_exports__); +
16444/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "warm", function() { return warm; }); +
16445/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cool", function() { return cool; }); +
16446/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
16447/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
16448 +
16449 +
16450 +
16451var warm = Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateCubehelixLong"])(Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(-100, 0.75, 0.35), Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(80, 1.50, 0.8)); +
16452 +
16453var cool = Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateCubehelixLong"])(Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(260, 0.75, 0.35), Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(80, 1.50, 0.8)); +
16454 +
16455var c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["cubehelix"])(); +
16456 +
16457/* harmony default export */ __webpack_exports__["default"] = (function(t) { +
16458 if (t < 0 || t > 1) t -= Math.floor(t); +
16459 var ts = Math.abs(t - 0.5); +
16460 c.h = 360 * t - 100; +
16461 c.s = 1.5 - 1.5 * ts; +
16462 c.l = 0.8 - 0.9 * ts; +
16463 return c + ""; +
16464}); +
16465 +
16466 +
16467/***/ }), +
16468 +
16469/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js": +
16470/*!*************************************************************************!*\ +
16471 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js ***! +
16472 \*************************************************************************/ +
16473/*! exports provided: default */ +
16474/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16475 +
16476"use strict"; +
16477__webpack_require__.r(__webpack_exports__); +
16478/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
16479 +
16480 +
16481var c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["rgb"])(), +
16482 pi_1_3 = Math.PI / 3, +
16483 pi_2_3 = Math.PI * 2 / 3; +
16484 +
16485/* harmony default export */ __webpack_exports__["default"] = (function(t) { +
16486 var x; +
16487 t = (0.5 - t) * Math.PI; +
16488 c.r = 255 * (x = Math.sin(t)) * x; +
16489 c.g = 255 * (x = Math.sin(t + pi_1_3)) * x; +
16490 c.b = 255 * (x = Math.sin(t + pi_2_3)) * x; +
16491 return c + ""; +
16492}); +
16493 +
16494 +
16495/***/ }), +
16496 +
16497/***/ "./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js": +
16498/*!*************************************************************************!*\ +
16499 !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js ***! +
16500 \*************************************************************************/ +
16501/*! exports provided: default, magma, inferno, plasma */ +
16502/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16503 +
16504"use strict"; +
16505__webpack_require__.r(__webpack_exports__); +
16506/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "magma", function() { return magma; }); +
16507/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inferno", function() { return inferno; }); +
16508/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "plasma", function() { return plasma; }); +
16509/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16510 +
16511 +
16512function ramp(range) { +
16513 var n = range.length; +
16514 return function(t) { +
16515 return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; +
16516 }; +
16517} +
16518 +
16519/* harmony default export */ __webpack_exports__["default"] = (ramp(Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"))); +
16520 +
16521var magma = ramp(Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); +
16522 +
16523var inferno = ramp(Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); +
16524 +
16525var plasma = ramp(Object(_colors__WEBPACK_IMPORTED_MODULE_0__["default"])("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); +
16526 +
16527 +
16528/***/ }), +
16529 +
16530/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js": +
16531/*!************************************************************************!*\ +
16532 !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js ***! +
16533 \************************************************************************/ +
16534/*! exports provided: scheme, default */ +
16535/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16536 +
16537"use strict"; +
16538__webpack_require__.r(__webpack_exports__); +
16539/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16540/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16541/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16542 +
16543 +
16544 +
16545var scheme = new Array(3).concat( +
16546 "deebf79ecae13182bd", +
16547 "eff3ffbdd7e76baed62171b5", +
16548 "eff3ffbdd7e76baed63182bd08519c", +
16549 "eff3ffc6dbef9ecae16baed63182bd08519c", +
16550 "eff3ffc6dbef9ecae16baed64292c62171b5084594", +
16551 "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", +
16552 "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b" +
16553).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16554 +
16555/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16556 +
16557 +
16558/***/ }), +
16559 +
16560/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js": +
16561/*!*************************************************************************!*\ +
16562 !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js ***! +
16563 \*************************************************************************/ +
16564/*! exports provided: scheme, default */ +
16565/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16566 +
16567"use strict"; +
16568__webpack_require__.r(__webpack_exports__); +
16569/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16570/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16571/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16572 +
16573 +
16574 +
16575var scheme = new Array(3).concat( +
16576 "e5f5e0a1d99b31a354", +
16577 "edf8e9bae4b374c476238b45", +
16578 "edf8e9bae4b374c47631a354006d2c", +
16579 "edf8e9c7e9c0a1d99b74c47631a354006d2c", +
16580 "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", +
16581 "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", +
16582 "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b" +
16583).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16584 +
16585/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16586 +
16587 +
16588/***/ }), +
16589 +
16590/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js": +
16591/*!************************************************************************!*\ +
16592 !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js ***! +
16593 \************************************************************************/ +
16594/*! exports provided: scheme, default */ +
16595/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16596 +
16597"use strict"; +
16598__webpack_require__.r(__webpack_exports__); +
16599/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16600/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16601/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16602 +
16603 +
16604 +
16605var scheme = new Array(3).concat( +
16606 "f0f0f0bdbdbd636363", +
16607 "f7f7f7cccccc969696525252", +
16608 "f7f7f7cccccc969696636363252525", +
16609 "f7f7f7d9d9d9bdbdbd969696636363252525", +
16610 "f7f7f7d9d9d9bdbdbd969696737373525252252525", +
16611 "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", +
16612 "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000" +
16613).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16614 +
16615/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16616 +
16617 +
16618/***/ }), +
16619 +
16620/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js": +
16621/*!**************************************************************************!*\ +
16622 !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js ***! +
16623 \**************************************************************************/ +
16624/*! exports provided: scheme, default */ +
16625/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16626 +
16627"use strict"; +
16628__webpack_require__.r(__webpack_exports__); +
16629/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16630/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16631/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16632 +
16633 +
16634 +
16635var scheme = new Array(3).concat( +
16636 "fee6cefdae6be6550d", +
16637 "feeddefdbe85fd8d3cd94701", +
16638 "feeddefdbe85fd8d3ce6550da63603", +
16639 "feeddefdd0a2fdae6bfd8d3ce6550da63603", +
16640 "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", +
16641 "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", +
16642 "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704" +
16643).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16644 +
16645/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16646 +
16647 +
16648/***/ }), +
16649 +
16650/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js": +
16651/*!**************************************************************************!*\ +
16652 !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js ***! +
16653 \**************************************************************************/ +
16654/*! exports provided: scheme, default */ +
16655/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16656 +
16657"use strict"; +
16658__webpack_require__.r(__webpack_exports__); +
16659/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16660/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16661/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16662 +
16663 +
16664 +
16665var scheme = new Array(3).concat( +
16666 "efedf5bcbddc756bb1", +
16667 "f2f0f7cbc9e29e9ac86a51a3", +
16668 "f2f0f7cbc9e29e9ac8756bb154278f", +
16669 "f2f0f7dadaebbcbddc9e9ac8756bb154278f", +
16670 "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", +
16671 "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", +
16672 "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d" +
16673).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16674 +
16675/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16676 +
16677 +
16678/***/ }), +
16679 +
16680/***/ "./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js": +
16681/*!***********************************************************************!*\ +
16682 !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js ***! +
16683 \***********************************************************************/ +
16684/*! exports provided: scheme, default */ +
16685/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16686 +
16687"use strict"; +
16688__webpack_require__.r(__webpack_exports__); +
16689/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheme", function() { return scheme; }); +
16690/* harmony import */ var _colors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors */ "./node_modules/d3-scale-chromatic/src/colors.js"); +
16691/* harmony import */ var _ramp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ramp */ "./node_modules/d3-scale-chromatic/src/ramp.js"); +
16692 +
16693 +
16694 +
16695var scheme = new Array(3).concat( +
16696 "fee0d2fc9272de2d26", +
16697 "fee5d9fcae91fb6a4acb181d", +
16698 "fee5d9fcae91fb6a4ade2d26a50f15", +
16699 "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", +
16700 "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", +
16701 "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", +
16702 "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d" +
16703).map(_colors__WEBPACK_IMPORTED_MODULE_0__["default"]); +
16704 +
16705/* harmony default export */ __webpack_exports__["default"] = (Object(_ramp__WEBPACK_IMPORTED_MODULE_1__["default"])(scheme)); +
16706 +
16707 +
16708/***/ }), +
16709 +
16710/***/ "./node_modules/d3-scale/src/array.js": +
16711/*!********************************************!*\ +
16712 !*** ./node_modules/d3-scale/src/array.js ***! +
16713 \********************************************/ +
16714/*! exports provided: map, slice */ +
16715/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16716 +
16717"use strict"; +
16718__webpack_require__.r(__webpack_exports__); +
16719/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; }); +
16720/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +
16721var array = Array.prototype; +
16722 +
16723var map = array.map; +
16724var slice = array.slice; +
16725 +
16726 +
16727/***/ }), +
16728 +
16729/***/ "./node_modules/d3-scale/src/band.js": +
16730/*!*******************************************!*\ +
16731 !*** ./node_modules/d3-scale/src/band.js ***! +
16732 \*******************************************/ +
16733/*! exports provided: default, point */ +
16734/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16735 +
16736"use strict"; +
16737__webpack_require__.r(__webpack_exports__); +
16738/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return band; }); +
16739/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "point", function() { return point; }); +
16740/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
16741/* harmony import */ var _ordinal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ordinal */ "./node_modules/d3-scale/src/ordinal.js"); +
16742 +
16743 +
16744 +
16745function band() { +
16746 var scale = Object(_ordinal__WEBPACK_IMPORTED_MODULE_1__["default"])().unknown(undefined), +
16747 domain = scale.domain, +
16748 ordinalRange = scale.range, +
16749 range = [0, 1], +
16750 step, +
16751 bandwidth, +
16752 round = false, +
16753 paddingInner = 0, +
16754 paddingOuter = 0, +
16755 align = 0.5; +
16756 +
16757 delete scale.unknown; +
16758 +
16759 function rescale() { +
16760 var n = domain().length, +
16761 reverse = range[1] < range[0], +
16762 start = range[reverse - 0], +
16763 stop = range[1 - reverse]; +
16764 step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); +
16765 if (round) step = Math.floor(step); +
16766 start += (stop - start - step * (n - paddingInner)) * align; +
16767 bandwidth = step * (1 - paddingInner); +
16768 if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); +
16769 var values = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["range"])(n).map(function(i) { return start + step * i; }); +
16770 return ordinalRange(reverse ? values.reverse() : values); +
16771 } +
16772 +
16773 scale.domain = function(_) { +
16774 return arguments.length ? (domain(_), rescale()) : domain(); +
16775 }; +
16776 +
16777 scale.range = function(_) { +
16778 return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice(); +
16779 }; +
16780 +
16781 scale.rangeRound = function(_) { +
16782 return range = [+_[0], +_[1]], round = true, rescale(); +
16783 }; +
16784 +
16785 scale.bandwidth = function() { +
16786 return bandwidth; +
16787 }; +
16788 +
16789 scale.step = function() { +
16790 return step; +
16791 }; +
16792 +
16793 scale.round = function(_) { +
16794 return arguments.length ? (round = !!_, rescale()) : round; +
16795 }; +
16796 +
16797 scale.padding = function(_) { +
16798 return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; +
16799 }; +
16800 +
16801 scale.paddingInner = function(_) { +
16802 return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; +
16803 }; +
16804 +
16805 scale.paddingOuter = function(_) { +
16806 return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter; +
16807 }; +
16808 +
16809 scale.align = function(_) { +
16810 return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; +
16811 }; +
16812 +
16813 scale.copy = function() { +
16814 return band() +
16815 .domain(domain()) +
16816 .range(range) +
16817 .round(round) +
16818 .paddingInner(paddingInner) +
16819 .paddingOuter(paddingOuter) +
16820 .align(align); +
16821 }; +
16822 +
16823 return rescale(); +
16824} +
16825 +
16826function pointish(scale) { +
16827 var copy = scale.copy; +
16828 +
16829 scale.padding = scale.paddingOuter; +
16830 delete scale.paddingInner; +
16831 delete scale.paddingOuter; +
16832 +
16833 scale.copy = function() { +
16834 return pointish(copy()); +
16835 }; +
16836 +
16837 return scale; +
16838} +
16839 +
16840function point() { +
16841 return pointish(band().paddingInner(1)); +
16842} +
16843 +
16844 +
16845/***/ }), +
16846 +
16847/***/ "./node_modules/d3-scale/src/constant.js": +
16848/*!***********************************************!*\ +
16849 !*** ./node_modules/d3-scale/src/constant.js ***! +
16850 \***********************************************/ +
16851/*! exports provided: default */ +
16852/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16853 +
16854"use strict"; +
16855__webpack_require__.r(__webpack_exports__); +
16856/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
16857 return function() { +
16858 return x; +
16859 }; +
16860}); +
16861 +
16862 +
16863/***/ }), +
16864 +
16865/***/ "./node_modules/d3-scale/src/continuous.js": +
16866/*!*************************************************!*\ +
16867 !*** ./node_modules/d3-scale/src/continuous.js ***! +
16868 \*************************************************/ +
16869/*! exports provided: deinterpolateLinear, copy, default */ +
16870/***/ (function(module, __webpack_exports__, __webpack_require__) { +
16871 +
16872"use strict"; +
16873__webpack_require__.r(__webpack_exports__); +
16874/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deinterpolateLinear", function() { return deinterpolateLinear; }); +
16875/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "copy", function() { return copy; }); +
16876/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return continuous; }); +
16877/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
16878/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
16879/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); +
16880/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-scale/src/constant.js"); +
16881/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./number */ "./node_modules/d3-scale/src/number.js"); +
16882 +
16883 +
16884 +
16885 +
16886 +
16887 +
16888var unit = [0, 1]; +
16889 +
16890function deinterpolateLinear(a, b) { +
16891 return (b -= (a = +a)) +
16892 ? function(x) { return (x - a) / b; } +
16893 : Object(_constant__WEBPACK_IMPORTED_MODULE_3__["default"])(b); +
16894} +
16895 +
16896function deinterpolateClamp(deinterpolate) { +
16897 return function(a, b) { +
16898 var d = deinterpolate(a = +a, b = +b); +
16899 return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); }; +
16900 }; +
16901} +
16902 +
16903function reinterpolateClamp(reinterpolate) { +
16904 return function(a, b) { +
16905 var r = reinterpolate(a = +a, b = +b); +
16906 return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); }; +
16907 }; +
16908} +
16909 +
16910function bimap(domain, range, deinterpolate, reinterpolate) { +
16911 var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; +
16912 if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0); +
16913 else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1); +
16914 return function(x) { return r0(d0(x)); }; +
16915} +
16916 +
16917function polymap(domain, range, deinterpolate, reinterpolate) { +
16918 var j = Math.min(domain.length, range.length) - 1, +
16919 d = new Array(j), +
16920 r = new Array(j), +
16921 i = -1; +
16922 +
16923 // Reverse descending domains. +
16924 if (domain[j] < domain[0]) { +
16925 domain = domain.slice().reverse(); +
16926 range = range.slice().reverse(); +
16927 } +
16928 +
16929 while (++i < j) { +
16930 d[i] = deinterpolate(domain[i], domain[i + 1]); +
16931 r[i] = reinterpolate(range[i], range[i + 1]); +
16932 } +
16933 +
16934 return function(x) { +
16935 var i = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisect"])(domain, x, 1, j) - 1; +
16936 return r[i](d[i](x)); +
16937 }; +
16938} +
16939 +
16940function copy(source, target) { +
16941 return target +
16942 .domain(source.domain()) +
16943 .range(source.range()) +
16944 .interpolate(source.interpolate()) +
16945 .clamp(source.clamp()); +
16946} +
16947 +
16948// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. +
16949// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b]. +
16950function continuous(deinterpolate, reinterpolate) { +
16951 var domain = unit, +
16952 range = unit, +
16953 interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolate"], +
16954 clamp = false, +
16955 piecewise, +
16956 output, +
16957 input; +
16958 +
16959 function rescale() { +
16960 piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap; +
16961 output = input = null; +
16962 return scale; +
16963 } +
16964 +
16965 function scale(x) { +
16966 return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x); +
16967 } +
16968 +
16969 scale.invert = function(y) { +
16970 return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y); +
16971 }; +
16972 +
16973 scale.domain = function(_) { +
16974 return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_2__["map"].call(_, _number__WEBPACK_IMPORTED_MODULE_4__["default"]), rescale()) : domain.slice(); +
16975 }; +
16976 +
16977 scale.range = function(_) { +
16978 return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_2__["slice"].call(_), rescale()) : range.slice(); +
16979 }; +
16980 +
16981 scale.rangeRound = function(_) { +
16982 return range = _array__WEBPACK_IMPORTED_MODULE_2__["slice"].call(_), interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateRound"], rescale(); +
16983 }; +
16984 +
16985 scale.clamp = function(_) { +
16986 return arguments.length ? (clamp = !!_, rescale()) : clamp; +
16987 }; +
16988 +
16989 scale.interpolate = function(_) { +
16990 return arguments.length ? (interpolate = _, rescale()) : interpolate; +
16991 }; +
16992 +
16993 return rescale(); +
16994} +
16995 +
16996 +
16997/***/ }), +
16998 +
16999/***/ "./node_modules/d3-scale/src/diverging.js": +
17000/*!************************************************!*\ +
17001 !*** ./node_modules/d3-scale/src/diverging.js ***! +
17002 \************************************************/ +
17003/*! exports provided: default */ +
17004/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17005 +
17006"use strict"; +
17007__webpack_require__.r(__webpack_exports__); +
17008/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return diverging; }); +
17009/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); +
17010 +
17011 +
17012function diverging(interpolator) { +
17013 var x0 = 0, +
17014 x1 = 0.5, +
17015 x2 = 1, +
17016 k10 = 1, +
17017 k21 = 1, +
17018 clamp = false; +
17019 +
17020 function scale(x) { +
17021 var t = 0.5 + ((x = +x) - x1) * (x < x1 ? k10 : k21); +
17022 return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t); +
17023 } +
17024 +
17025 scale.domain = function(_) { +
17026 return arguments.length ? (x0 = +_[0], x1 = +_[1], x2 = +_[2], k10 = x0 === x1 ? 0 : 0.5 / (x1 - x0), k21 = x1 === x2 ? 0 : 0.5 / (x2 - x1), scale) : [x0, x1, x2]; +
17027 }; +
17028 +
17029 scale.clamp = function(_) { +
17030 return arguments.length ? (clamp = !!_, scale) : clamp; +
17031 }; +
17032 +
17033 scale.interpolator = function(_) { +
17034 return arguments.length ? (interpolator = _, scale) : interpolator; +
17035 }; +
17036 +
17037 scale.copy = function() { +
17038 return diverging(interpolator).domain([x0, x1, x2]).clamp(clamp); +
17039 }; +
17040 +
17041 return Object(_linear__WEBPACK_IMPORTED_MODULE_0__["linearish"])(scale); +
17042} +
17043 +
17044 +
17045/***/ }), +
17046 +
17047/***/ "./node_modules/d3-scale/src/identity.js": +
17048/*!***********************************************!*\ +
17049 !*** ./node_modules/d3-scale/src/identity.js ***! +
17050 \***********************************************/ +
17051/*! exports provided: default */ +
17052/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17053 +
17054"use strict"; +
17055__webpack_require__.r(__webpack_exports__); +
17056/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return identity; }); +
17057/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); +
17058/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); +
17059/* harmony import */ var _number__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./number */ "./node_modules/d3-scale/src/number.js"); +
17060 +
17061 +
17062 +
17063 +
17064function identity() { +
17065 var domain = [0, 1]; +
17066 +
17067 function scale(x) { +
17068 return +x; +
17069 } +
17070 +
17071 scale.invert = scale; +
17072 +
17073 scale.domain = scale.range = function(_) { +
17074 return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_0__["map"].call(_, _number__WEBPACK_IMPORTED_MODULE_2__["default"]), scale) : domain.slice(); +
17075 }; +
17076 +
17077 scale.copy = function() { +
17078 return identity().domain(domain); +
17079 }; +
17080 +
17081 return Object(_linear__WEBPACK_IMPORTED_MODULE_1__["linearish"])(scale); +
17082} +
17083 +
17084 +
17085/***/ }), +
17086 +
17087/***/ "./node_modules/d3-scale/src/index.js": +
17088/*!********************************************!*\ +
17089 !*** ./node_modules/d3-scale/src/index.js ***! +
17090 \********************************************/ +
17091/*! exports provided: scaleBand, scalePoint, scaleIdentity, scaleLinear, scaleLog, scaleOrdinal, scaleImplicit, scalePow, scaleSqrt, scaleQuantile, scaleQuantize, scaleThreshold, scaleTime, scaleUtc, scaleSequential, scaleDiverging */ +
17092/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17093 +
17094"use strict"; +
17095__webpack_require__.r(__webpack_exports__); +
17096/* harmony import */ var _band__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./band */ "./node_modules/d3-scale/src/band.js"); +
17097/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleBand", function() { return _band__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
17098 +
17099/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scalePoint", function() { return _band__WEBPACK_IMPORTED_MODULE_0__["point"]; }); +
17100 +
17101/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./identity */ "./node_modules/d3-scale/src/identity.js"); +
17102/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleIdentity", function() { return _identity__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
17103 +
17104/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); +
17105/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleLinear", function() { return _linear__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
17106 +
17107/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./log */ "./node_modules/d3-scale/src/log.js"); +
17108/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleLog", function() { return _log__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
17109 +
17110/* harmony import */ var _ordinal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ordinal */ "./node_modules/d3-scale/src/ordinal.js"); +
17111/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleOrdinal", function() { return _ordinal__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
17112 +
17113/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleImplicit", function() { return _ordinal__WEBPACK_IMPORTED_MODULE_4__["implicit"]; }); +
17114 +
17115/* harmony import */ var _pow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pow */ "./node_modules/d3-scale/src/pow.js"); +
17116/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scalePow", function() { return _pow__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
17117 +
17118/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSqrt", function() { return _pow__WEBPACK_IMPORTED_MODULE_5__["sqrt"]; }); +
17119 +
17120/* harmony import */ var _quantile__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./quantile */ "./node_modules/d3-scale/src/quantile.js"); +
17121/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleQuantile", function() { return _quantile__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
17122 +
17123/* harmony import */ var _quantize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./quantize */ "./node_modules/d3-scale/src/quantize.js"); +
17124/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleQuantize", function() { return _quantize__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +
17125 +
17126/* harmony import */ var _threshold__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./threshold */ "./node_modules/d3-scale/src/threshold.js"); +
17127/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleThreshold", function() { return _threshold__WEBPACK_IMPORTED_MODULE_8__["default"]; }); +
17128 +
17129/* harmony import */ var _time__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./time */ "./node_modules/d3-scale/src/time.js"); +
17130/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleTime", function() { return _time__WEBPACK_IMPORTED_MODULE_9__["default"]; }); +
17131 +
17132/* harmony import */ var _utcTime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utcTime */ "./node_modules/d3-scale/src/utcTime.js"); +
17133/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleUtc", function() { return _utcTime__WEBPACK_IMPORTED_MODULE_10__["default"]; }); +
17134 +
17135/* harmony import */ var _sequential__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./sequential */ "./node_modules/d3-scale/src/sequential.js"); +
17136/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequential", function() { return _sequential__WEBPACK_IMPORTED_MODULE_11__["default"]; }); +
17137 +
17138/* harmony import */ var _diverging__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./diverging */ "./node_modules/d3-scale/src/diverging.js"); +
17139/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDiverging", function() { return _diverging__WEBPACK_IMPORTED_MODULE_12__["default"]; }); +
17140 +
17141 +
17142 +
17143 +
17144 +
17145 +
17146 +
17147 +
17148 +
17149 +
17150 +
17151 +
17152 +
17153 +
17154 +
17155 +
17156 +
17157 +
17158 +
17159 +
17160 +
17161 +
17162 +
17163 +
17164 +
17165 +
17166 +
17167 +
17168/***/ }), +
17169 +
17170/***/ "./node_modules/d3-scale/src/linear.js": +
17171/*!*********************************************!*\ +
17172 !*** ./node_modules/d3-scale/src/linear.js ***! +
17173 \*********************************************/ +
17174/*! exports provided: linearish, default */ +
17175/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17176 +
17177"use strict"; +
17178__webpack_require__.r(__webpack_exports__); +
17179/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linearish", function() { return linearish; }); +
17180/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return linear; }); +
17181/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
17182/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
17183/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); +
17184/* harmony import */ var _tickFormat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickFormat */ "./node_modules/d3-scale/src/tickFormat.js"); +
17185 +
17186 +
17187 +
17188 +
17189 +
17190function linearish(scale) { +
17191 var domain = scale.domain; +
17192 +
17193 scale.ticks = function(count) { +
17194 var d = domain(); +
17195 return Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["ticks"])(d[0], d[d.length - 1], count == null ? 10 : count); +
17196 }; +
17197 +
17198 scale.tickFormat = function(count, specifier) { +
17199 return Object(_tickFormat__WEBPACK_IMPORTED_MODULE_3__["default"])(domain(), count, specifier); +
17200 }; +
17201 +
17202 scale.nice = function(count) { +
17203 if (count == null) count = 10; +
17204 +
17205 var d = domain(), +
17206 i0 = 0, +
17207 i1 = d.length - 1, +
17208 start = d[i0], +
17209 stop = d[i1], +
17210 step; +
17211 +
17212 if (stop < start) { +
17213 step = start, start = stop, stop = step; +
17214 step = i0, i0 = i1, i1 = step; +
17215 } +
17216 +
17217 step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickIncrement"])(start, stop, count); +
17218 +
17219 if (step > 0) { +
17220 start = Math.floor(start / step) * step; +
17221 stop = Math.ceil(stop / step) * step; +
17222 step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickIncrement"])(start, stop, count); +
17223 } else if (step < 0) { +
17224 start = Math.ceil(start * step) / step; +
17225 stop = Math.floor(stop * step) / step; +
17226 step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickIncrement"])(start, stop, count); +
17227 } +
17228 +
17229 if (step > 0) { +
17230 d[i0] = Math.floor(start / step) * step; +
17231 d[i1] = Math.ceil(stop / step) * step; +
17232 domain(d); +
17233 } else if (step < 0) { +
17234 d[i0] = Math.ceil(start * step) / step; +
17235 d[i1] = Math.floor(stop * step) / step; +
17236 domain(d); +
17237 } +
17238 +
17239 return scale; +
17240 }; +
17241 +
17242 return scale; +
17243} +
17244 +
17245function linear() { +
17246 var scale = Object(_continuous__WEBPACK_IMPORTED_MODULE_2__["default"])(_continuous__WEBPACK_IMPORTED_MODULE_2__["deinterpolateLinear"], d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateNumber"]); +
17247 +
17248 scale.copy = function() { +
17249 return Object(_continuous__WEBPACK_IMPORTED_MODULE_2__["copy"])(scale, linear()); +
17250 }; +
17251 +
17252 return linearish(scale); +
17253} +
17254 +
17255 +
17256/***/ }), +
17257 +
17258/***/ "./node_modules/d3-scale/src/log.js": +
17259/*!******************************************!*\ +
17260 !*** ./node_modules/d3-scale/src/log.js ***! +
17261 \******************************************/ +
17262/*! exports provided: default */ +
17263/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17264 +
17265"use strict"; +
17266__webpack_require__.r(__webpack_exports__); +
17267/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return log; }); +
17268/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
17269/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/index.js"); +
17270/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-scale/src/constant.js"); +
17271/* harmony import */ var _nice__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nice */ "./node_modules/d3-scale/src/nice.js"); +
17272/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); +
17273 +
17274 +
17275 +
17276 +
17277 +
17278 +
17279function deinterpolate(a, b) { +
17280 return (b = Math.log(b / a)) +
17281 ? function(x) { return Math.log(x / a) / b; } +
17282 : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(b); +
17283} +
17284 +
17285function reinterpolate(a, b) { +
17286 return a < 0 +
17287 ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); } +
17288 : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); }; +
17289} +
17290 +
17291function pow10(x) { +
17292 return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; +
17293} +
17294 +
17295function powp(base) { +
17296 return base === 10 ? pow10 +
17297 : base === Math.E ? Math.exp +
17298 : function(x) { return Math.pow(base, x); }; +
17299} +
17300 +
17301function logp(base) { +
17302 return base === Math.E ? Math.log +
17303 : base === 10 && Math.log10 +
17304 || base === 2 && Math.log2 +
17305 || (base = Math.log(base), function(x) { return Math.log(x) / base; }); +
17306} +
17307 +
17308function reflect(f) { +
17309 return function(x) { +
17310 return -f(-x); +
17311 }; +
17312} +
17313 +
17314function log() { +
17315 var scale = Object(_continuous__WEBPACK_IMPORTED_MODULE_4__["default"])(deinterpolate, reinterpolate).domain([1, 10]), +
17316 domain = scale.domain, +
17317 base = 10, +
17318 logs = logp(10), +
17319 pows = powp(10); +
17320 +
17321 function rescale() { +
17322 logs = logp(base), pows = powp(base); +
17323 if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows); +
17324 return scale; +
17325 } +
17326 +
17327 scale.base = function(_) { +
17328 return arguments.length ? (base = +_, rescale()) : base; +
17329 }; +
17330 +
17331 scale.domain = function(_) { +
17332 return arguments.length ? (domain(_), rescale()) : domain(); +
17333 }; +
17334 +
17335 scale.ticks = function(count) { +
17336 var d = domain(), +
17337 u = d[0], +
17338 v = d[d.length - 1], +
17339 r; +
17340 +
17341 if (r = v < u) i = u, u = v, v = i; +
17342 +
17343 var i = logs(u), +
17344 j = logs(v), +
17345 p, +
17346 k, +
17347 t, +
17348 n = count == null ? 10 : +count, +
17349 z = []; +
17350 +
17351 if (!(base % 1) && j - i < n) { +
17352 i = Math.round(i) - 1, j = Math.round(j) + 1; +
17353 if (u > 0) for (; i < j; ++i) { +
17354 for (k = 1, p = pows(i); k < base; ++k) { +
17355 t = p * k; +
17356 if (t < u) continue; +
17357 if (t > v) break; +
17358 z.push(t); +
17359 } +
17360 } else for (; i < j; ++i) { +
17361 for (k = base - 1, p = pows(i); k >= 1; --k) { +
17362 t = p * k; +
17363 if (t < u) continue; +
17364 if (t > v) break; +
17365 z.push(t); +
17366 } +
17367 } +
17368 } else { +
17369 z = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["ticks"])(i, j, Math.min(j - i, n)).map(pows); +
17370 } +
17371 +
17372 return r ? z.reverse() : z; +
17373 }; +
17374 +
17375 scale.tickFormat = function(count, specifier) { +
17376 if (specifier == null) specifier = base === 10 ? ".0e" : ","; +
17377 if (typeof specifier !== "function") specifier = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["format"])(specifier); +
17378 if (count === Infinity) return specifier; +
17379 if (count == null) count = 10; +
17380 var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? +
17381 return function(d) { +
17382 var i = d / pows(Math.round(logs(d))); +
17383 if (i * base < base - 0.5) i *= base; +
17384 return i <= k ? specifier(d) : ""; +
17385 }; +
17386 }; +
17387 +
17388 scale.nice = function() { +
17389 return domain(Object(_nice__WEBPACK_IMPORTED_MODULE_3__["default"])(domain(), { +
17390 floor: function(x) { return pows(Math.floor(logs(x))); }, +
17391 ceil: function(x) { return pows(Math.ceil(logs(x))); } +
17392 })); +
17393 }; +
17394 +
17395 scale.copy = function() { +
17396 return Object(_continuous__WEBPACK_IMPORTED_MODULE_4__["copy"])(scale, log().base(base)); +
17397 }; +
17398 +
17399 return scale; +
17400} +
17401 +
17402 +
17403/***/ }), +
17404 +
17405/***/ "./node_modules/d3-scale/src/nice.js": +
17406/*!*******************************************!*\ +
17407 !*** ./node_modules/d3-scale/src/nice.js ***! +
17408 \*******************************************/ +
17409/*! exports provided: default */ +
17410/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17411 +
17412"use strict"; +
17413__webpack_require__.r(__webpack_exports__); +
17414/* harmony default export */ __webpack_exports__["default"] = (function(domain, interval) { +
17415 domain = domain.slice(); +
17416 +
17417 var i0 = 0, +
17418 i1 = domain.length - 1, +
17419 x0 = domain[i0], +
17420 x1 = domain[i1], +
17421 t; +
17422 +
17423 if (x1 < x0) { +
17424 t = i0, i0 = i1, i1 = t; +
17425 t = x0, x0 = x1, x1 = t; +
17426 } +
17427 +
17428 domain[i0] = interval.floor(x0); +
17429 domain[i1] = interval.ceil(x1); +
17430 return domain; +
17431}); +
17432 +
17433 +
17434/***/ }), +
17435 +
17436/***/ "./node_modules/d3-scale/src/number.js": +
17437/*!*********************************************!*\ +
17438 !*** ./node_modules/d3-scale/src/number.js ***! +
17439 \*********************************************/ +
17440/*! exports provided: default */ +
17441/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17442 +
17443"use strict"; +
17444__webpack_require__.r(__webpack_exports__); +
17445/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
17446 return +x; +
17447}); +
17448 +
17449 +
17450/***/ }), +
17451 +
17452/***/ "./node_modules/d3-scale/src/ordinal.js": +
17453/*!**********************************************!*\ +
17454 !*** ./node_modules/d3-scale/src/ordinal.js ***! +
17455 \**********************************************/ +
17456/*! exports provided: implicit, default */ +
17457/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17458 +
17459"use strict"; +
17460__webpack_require__.r(__webpack_exports__); +
17461/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "implicit", function() { return implicit; }); +
17462/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ordinal; }); +
17463/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-collection */ "./node_modules/d3-collection/src/index.js"); +
17464/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); +
17465 +
17466 +
17467 +
17468var implicit = {name: "implicit"}; +
17469 +
17470function ordinal(range) { +
17471 var index = Object(d3_collection__WEBPACK_IMPORTED_MODULE_0__["map"])(), +
17472 domain = [], +
17473 unknown = implicit; +
17474 +
17475 range = range == null ? [] : _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(range); +
17476 +
17477 function scale(d) { +
17478 var key = d + "", i = index.get(key); +
17479 if (!i) { +
17480 if (unknown !== implicit) return unknown; +
17481 index.set(key, i = domain.push(d)); +
17482 } +
17483 return range[(i - 1) % range.length]; +
17484 } +
17485 +
17486 scale.domain = function(_) { +
17487 if (!arguments.length) return domain.slice(); +
17488 domain = [], index = Object(d3_collection__WEBPACK_IMPORTED_MODULE_0__["map"])(); +
17489 var i = -1, n = _.length, d, key; +
17490 while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d)); +
17491 return scale; +
17492 }; +
17493 +
17494 scale.range = function(_) { +
17495 return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_), scale) : range.slice(); +
17496 }; +
17497 +
17498 scale.unknown = function(_) { +
17499 return arguments.length ? (unknown = _, scale) : unknown; +
17500 }; +
17501 +
17502 scale.copy = function() { +
17503 return ordinal() +
17504 .domain(domain) +
17505 .range(range) +
17506 .unknown(unknown); +
17507 }; +
17508 +
17509 return scale; +
17510} +
17511 +
17512 +
17513/***/ }), +
17514 +
17515/***/ "./node_modules/d3-scale/src/pow.js": +
17516/*!******************************************!*\ +
17517 !*** ./node_modules/d3-scale/src/pow.js ***! +
17518 \******************************************/ +
17519/*! exports provided: default, sqrt */ +
17520/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17521 +
17522"use strict"; +
17523__webpack_require__.r(__webpack_exports__); +
17524/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return pow; }); +
17525/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sqrt", function() { return sqrt; }); +
17526/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-scale/src/constant.js"); +
17527/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); +
17528/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); +
17529 +
17530 +
17531 +
17532 +
17533function raise(x, exponent) { +
17534 return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); +
17535} +
17536 +
17537function pow() { +
17538 var exponent = 1, +
17539 scale = Object(_continuous__WEBPACK_IMPORTED_MODULE_2__["default"])(deinterpolate, reinterpolate), +
17540 domain = scale.domain; +
17541 +
17542 function deinterpolate(a, b) { +
17543 return (b = raise(b, exponent) - (a = raise(a, exponent))) +
17544 ? function(x) { return (raise(x, exponent) - a) / b; } +
17545 : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(b); +
17546 } +
17547 +
17548 function reinterpolate(a, b) { +
17549 b = raise(b, exponent) - (a = raise(a, exponent)); +
17550 return function(t) { return raise(a + b * t, 1 / exponent); }; +
17551 } +
17552 +
17553 scale.exponent = function(_) { +
17554 return arguments.length ? (exponent = +_, domain(domain())) : exponent; +
17555 }; +
17556 +
17557 scale.copy = function() { +
17558 return Object(_continuous__WEBPACK_IMPORTED_MODULE_2__["copy"])(scale, pow().exponent(exponent)); +
17559 }; +
17560 +
17561 return Object(_linear__WEBPACK_IMPORTED_MODULE_1__["linearish"])(scale); +
17562} +
17563 +
17564function sqrt() { +
17565 return pow().exponent(0.5); +
17566} +
17567 +
17568 +
17569/***/ }), +
17570 +
17571/***/ "./node_modules/d3-scale/src/quantile.js": +
17572/*!***********************************************!*\ +
17573 !*** ./node_modules/d3-scale/src/quantile.js ***! +
17574 \***********************************************/ +
17575/*! exports provided: default */ +
17576/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17577 +
17578"use strict"; +
17579__webpack_require__.r(__webpack_exports__); +
17580/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return quantile; }); +
17581/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
17582/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); +
17583 +
17584 +
17585 +
17586function quantile() { +
17587 var domain = [], +
17588 range = [], +
17589 thresholds = []; +
17590 +
17591 function rescale() { +
17592 var i = 0, n = Math.max(1, range.length); +
17593 thresholds = new Array(n - 1); +
17594 while (++i < n) thresholds[i - 1] = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["quantile"])(domain, i / n); +
17595 return scale; +
17596 } +
17597 +
17598 function scale(x) { +
17599 if (!isNaN(x = +x)) return range[Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisect"])(thresholds, x)]; +
17600 } +
17601 +
17602 scale.invertExtent = function(y) { +
17603 var i = range.indexOf(y); +
17604 return i < 0 ? [NaN, NaN] : [ +
17605 i > 0 ? thresholds[i - 1] : domain[0], +
17606 i < thresholds.length ? thresholds[i] : domain[domain.length - 1] +
17607 ]; +
17608 }; +
17609 +
17610 scale.domain = function(_) { +
17611 if (!arguments.length) return domain.slice(); +
17612 domain = []; +
17613 for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); +
17614 domain.sort(d3_array__WEBPACK_IMPORTED_MODULE_0__["ascending"]); +
17615 return rescale(); +
17616 }; +
17617 +
17618 scale.range = function(_) { +
17619 return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_), rescale()) : range.slice(); +
17620 }; +
17621 +
17622 scale.quantiles = function() { +
17623 return thresholds.slice(); +
17624 }; +
17625 +
17626 scale.copy = function() { +
17627 return quantile() +
17628 .domain(domain) +
17629 .range(range); +
17630 }; +
17631 +
17632 return scale; +
17633} +
17634 +
17635 +
17636/***/ }), +
17637 +
17638/***/ "./node_modules/d3-scale/src/quantize.js": +
17639/*!***********************************************!*\ +
17640 !*** ./node_modules/d3-scale/src/quantize.js ***! +
17641 \***********************************************/ +
17642/*! exports provided: default */ +
17643/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17644 +
17645"use strict"; +
17646__webpack_require__.r(__webpack_exports__); +
17647/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return quantize; }); +
17648/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
17649/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); +
17650/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); +
17651 +
17652 +
17653 +
17654 +
17655function quantize() { +
17656 var x0 = 0, +
17657 x1 = 1, +
17658 n = 1, +
17659 domain = [0.5], +
17660 range = [0, 1]; +
17661 +
17662 function scale(x) { +
17663 if (x <= x) return range[Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisect"])(domain, x, 0, n)]; +
17664 } +
17665 +
17666 function rescale() { +
17667 var i = -1; +
17668 domain = new Array(n); +
17669 while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); +
17670 return scale; +
17671 } +
17672 +
17673 scale.domain = function(_) { +
17674 return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1]; +
17675 }; +
17676 +
17677 scale.range = function(_) { +
17678 return arguments.length ? (n = (range = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_)).length - 1, rescale()) : range.slice(); +
17679 }; +
17680 +
17681 scale.invertExtent = function(y) { +
17682 var i = range.indexOf(y); +
17683 return i < 0 ? [NaN, NaN] +
17684 : i < 1 ? [x0, domain[0]] +
17685 : i >= n ? [domain[n - 1], x1] +
17686 : [domain[i - 1], domain[i]]; +
17687 }; +
17688 +
17689 scale.copy = function() { +
17690 return quantize() +
17691 .domain([x0, x1]) +
17692 .range(range); +
17693 }; +
17694 +
17695 return Object(_linear__WEBPACK_IMPORTED_MODULE_2__["linearish"])(scale); +
17696} +
17697 +
17698 +
17699/***/ }), +
17700 +
17701/***/ "./node_modules/d3-scale/src/sequential.js": +
17702/*!*************************************************!*\ +
17703 !*** ./node_modules/d3-scale/src/sequential.js ***! +
17704 \*************************************************/ +
17705/*! exports provided: default */ +
17706/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17707 +
17708"use strict"; +
17709__webpack_require__.r(__webpack_exports__); +
17710/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return sequential; }); +
17711/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-scale/src/linear.js"); +
17712 +
17713 +
17714function sequential(interpolator) { +
17715 var x0 = 0, +
17716 x1 = 1, +
17717 k10 = 1, +
17718 clamp = false; +
17719 +
17720 function scale(x) { +
17721 var t = (x - x0) * k10; +
17722 return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t); +
17723 } +
17724 +
17725 scale.domain = function(_) { +
17726 return arguments.length ? (x0 = +_[0], x1 = +_[1], k10 = x0 === x1 ? 0 : 1 / (x1 - x0), scale) : [x0, x1]; +
17727 }; +
17728 +
17729 scale.clamp = function(_) { +
17730 return arguments.length ? (clamp = !!_, scale) : clamp; +
17731 }; +
17732 +
17733 scale.interpolator = function(_) { +
17734 return arguments.length ? (interpolator = _, scale) : interpolator; +
17735 }; +
17736 +
17737 scale.copy = function() { +
17738 return sequential(interpolator).domain([x0, x1]).clamp(clamp); +
17739 }; +
17740 +
17741 return Object(_linear__WEBPACK_IMPORTED_MODULE_0__["linearish"])(scale); +
17742} +
17743 +
17744 +
17745/***/ }), +
17746 +
17747/***/ "./node_modules/d3-scale/src/threshold.js": +
17748/*!************************************************!*\ +
17749 !*** ./node_modules/d3-scale/src/threshold.js ***! +
17750 \************************************************/ +
17751/*! exports provided: default */ +
17752/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17753 +
17754"use strict"; +
17755__webpack_require__.r(__webpack_exports__); +
17756/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return threshold; }); +
17757/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
17758/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); +
17759 +
17760 +
17761 +
17762function threshold() { +
17763 var domain = [0.5], +
17764 range = [0, 1], +
17765 n = 1; +
17766 +
17767 function scale(x) { +
17768 if (x <= x) return range[Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisect"])(domain, x, 0, n)]; +
17769 } +
17770 +
17771 scale.domain = function(_) { +
17772 return arguments.length ? (domain = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); +
17773 }; +
17774 +
17775 scale.range = function(_) { +
17776 return arguments.length ? (range = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); +
17777 }; +
17778 +
17779 scale.invertExtent = function(y) { +
17780 var i = range.indexOf(y); +
17781 return [domain[i - 1], domain[i]]; +
17782 }; +
17783 +
17784 scale.copy = function() { +
17785 return threshold() +
17786 .domain(domain) +
17787 .range(range); +
17788 }; +
17789 +
17790 return scale; +
17791} +
17792 +
17793 +
17794/***/ }), +
17795 +
17796/***/ "./node_modules/d3-scale/src/tickFormat.js": +
17797/*!*************************************************!*\ +
17798 !*** ./node_modules/d3-scale/src/tickFormat.js ***! +
17799 \*************************************************/ +
17800/*! exports provided: default */ +
17801/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17802 +
17803"use strict"; +
17804__webpack_require__.r(__webpack_exports__); +
17805/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
17806/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/index.js"); +
17807 +
17808 +
17809 +
17810/* harmony default export */ __webpack_exports__["default"] = (function(domain, count, specifier) { +
17811 var start = domain[0], +
17812 stop = domain[domain.length - 1], +
17813 step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(start, stop, count == null ? 10 : count), +
17814 precision; +
17815 specifier = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["formatSpecifier"])(specifier == null ? ",f" : specifier); +
17816 switch (specifier.type) { +
17817 case "s": { +
17818 var value = Math.max(Math.abs(start), Math.abs(stop)); +
17819 if (specifier.precision == null && !isNaN(precision = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["precisionPrefix"])(step, value))) specifier.precision = precision; +
17820 return Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["formatPrefix"])(specifier, value); +
17821 } +
17822 case "": +
17823 case "e": +
17824 case "g": +
17825 case "p": +
17826 case "r": { +
17827 if (specifier.precision == null && !isNaN(precision = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["precisionRound"])(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); +
17828 break; +
17829 } +
17830 case "f": +
17831 case "%": { +
17832 if (specifier.precision == null && !isNaN(precision = Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["precisionFixed"])(step))) specifier.precision = precision - (specifier.type === "%") * 2; +
17833 break; +
17834 } +
17835 } +
17836 return Object(d3_format__WEBPACK_IMPORTED_MODULE_1__["format"])(specifier); +
17837}); +
17838 +
17839 +
17840/***/ }), +
17841 +
17842/***/ "./node_modules/d3-scale/src/time.js": +
17843/*!*******************************************!*\ +
17844 !*** ./node_modules/d3-scale/src/time.js ***! +
17845 \*******************************************/ +
17846/*! exports provided: calendar, default */ +
17847/***/ (function(module, __webpack_exports__, __webpack_require__) { +
17848 +
17849"use strict"; +
17850__webpack_require__.r(__webpack_exports__); +
17851/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "calendar", function() { return calendar; }); +
17852/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
17853/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
17854/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/index.js"); +
17855/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-time-format */ "./node_modules/d3-time-format/src/index.js"); +
17856/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./array */ "./node_modules/d3-scale/src/array.js"); +
17857/* harmony import */ var _continuous__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./continuous */ "./node_modules/d3-scale/src/continuous.js"); +
17858/* harmony import */ var _nice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./nice */ "./node_modules/d3-scale/src/nice.js"); +
17859 +
17860 +
17861 +
17862 +
17863 +
17864 +
17865 +
17866 +
17867var durationSecond = 1000, +
17868 durationMinute = durationSecond * 60, +
17869 durationHour = durationMinute * 60, +
17870 durationDay = durationHour * 24, +
17871 durationWeek = durationDay * 7, +
17872 durationMonth = durationDay * 30, +
17873 durationYear = durationDay * 365; +
17874 +
17875function date(t) { +
17876 return new Date(t); +
17877} +
17878 +
17879function number(t) { +
17880 return t instanceof Date ? +t : +new Date(+t); +
17881} +
17882 +
17883function calendar(year, month, week, day, hour, minute, second, millisecond, format) { +
17884 var scale = Object(_continuous__WEBPACK_IMPORTED_MODULE_5__["default"])(_continuous__WEBPACK_IMPORTED_MODULE_5__["deinterpolateLinear"], d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateNumber"]), +
17885 invert = scale.invert, +
17886 domain = scale.domain; +
17887 +
17888 var formatMillisecond = format(".%L"), +
17889 formatSecond = format(":%S"), +
17890 formatMinute = format("%I:%M"), +
17891 formatHour = format("%I %p"), +
17892 formatDay = format("%a %d"), +
17893 formatWeek = format("%b %d"), +
17894 formatMonth = format("%B"), +
17895 formatYear = format("%Y"); +
17896 +
17897 var tickIntervals = [ +
17898 [second, 1, durationSecond], +
17899 [second, 5, 5 * durationSecond], +
17900 [second, 15, 15 * durationSecond], +
17901 [second, 30, 30 * durationSecond], +
17902 [minute, 1, durationMinute], +
17903 [minute, 5, 5 * durationMinute], +
17904 [minute, 15, 15 * durationMinute], +
17905 [minute, 30, 30 * durationMinute], +
17906 [ hour, 1, durationHour ], +
17907 [ hour, 3, 3 * durationHour ], +
17908 [ hour, 6, 6 * durationHour ], +
17909 [ hour, 12, 12 * durationHour ], +
17910 [ day, 1, durationDay ], +
17911 [ day, 2, 2 * durationDay ], +
17912 [ week, 1, durationWeek ], +
17913 [ month, 1, durationMonth ], +
17914 [ month, 3, 3 * durationMonth ], +
17915 [ year, 1, durationYear ] +
17916 ]; +
17917 +
17918 function tickFormat(date) { +
17919 return (second(date) < date ? formatMillisecond +
17920 : minute(date) < date ? formatSecond +
17921 : hour(date) < date ? formatMinute +
17922 : day(date) < date ? formatHour +
17923 : month(date) < date ? (week(date) < date ? formatDay : formatWeek) +
17924 : year(date) < date ? formatMonth +
17925 : formatYear)(date); +
17926 } +
17927 +
17928 function tickInterval(interval, start, stop, step) { +
17929 if (interval == null) interval = 10; +
17930 +
17931 // If a desired tick count is specified, pick a reasonable tick interval +
17932 // based on the extent of the domain and a rough estimate of tick size. +
17933 // Otherwise, assume interval is already a time interval and use it. +
17934 if (typeof interval === "number") { +
17935 var target = Math.abs(stop - start) / interval, +
17936 i = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["bisector"])(function(i) { return i[2]; }).right(tickIntervals, target); +
17937 if (i === tickIntervals.length) { +
17938 step = Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(start / durationYear, stop / durationYear, interval); +
17939 interval = year; +
17940 } else if (i) { +
17941 i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; +
17942 step = i[1]; +
17943 interval = i[0]; +
17944 } else { +
17945 step = Math.max(Object(d3_array__WEBPACK_IMPORTED_MODULE_0__["tickStep"])(start, stop, interval), 1); +
17946 interval = millisecond; +
17947 } +
17948 } +
17949 +
17950 return step == null ? interval : interval.every(step); +
17951 } +
17952 +
17953 scale.invert = function(y) { +
17954 return new Date(invert(y)); +
17955 }; +
17956 +
17957 scale.domain = function(_) { +
17958 return arguments.length ? domain(_array__WEBPACK_IMPORTED_MODULE_4__["map"].call(_, number)) : domain().map(date); +
17959 }; +
17960 +
17961 scale.ticks = function(interval, step) { +
17962 var d = domain(), +
17963 t0 = d[0], +
17964 t1 = d[d.length - 1], +
17965 r = t1 < t0, +
17966 t; +
17967 if (r) t = t0, t0 = t1, t1 = t; +
17968 t = tickInterval(interval, t0, t1, step); +
17969 t = t ? t.range(t0, t1 + 1) : []; // inclusive stop +
17970 return r ? t.reverse() : t; +
17971 }; +
17972 +
17973 scale.tickFormat = function(count, specifier) { +
17974 return specifier == null ? tickFormat : format(specifier); +
17975 }; +
17976 +
17977 scale.nice = function(interval, step) { +
17978 var d = domain(); +
17979 return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) +
17980 ? domain(Object(_nice__WEBPACK_IMPORTED_MODULE_6__["default"])(d, interval)) +
17981 : scale; +
17982 }; +
17983 +
17984 scale.copy = function() { +
17985 return Object(_continuous__WEBPACK_IMPORTED_MODULE_5__["copy"])(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format)); +
17986 }; +
17987 +
17988 return scale; +
17989} +
17990 +
17991/* harmony default export */ __webpack_exports__["default"] = (function() { +
17992 return calendar(d3_time__WEBPACK_IMPORTED_MODULE_2__["timeYear"], d3_time__WEBPACK_IMPORTED_MODULE_2__["timeMonth"], d3_time__WEBPACK_IMPORTED_MODULE_2__["timeWeek"], d3_time__WEBPACK_IMPORTED_MODULE_2__["timeDay"], d3_time__WEBPACK_IMPORTED_MODULE_2__["timeHour"], d3_time__WEBPACK_IMPORTED_MODULE_2__["timeMinute"], d3_time__WEBPACK_IMPORTED_MODULE_2__["timeSecond"], d3_time__WEBPACK_IMPORTED_MODULE_2__["timeMillisecond"], d3_time_format__WEBPACK_IMPORTED_MODULE_3__["timeFormat"]).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]); +
17993}); +
17994 +
17995 +
17996/***/ }), +
17997 +
17998/***/ "./node_modules/d3-scale/src/utcTime.js": +
17999/*!**********************************************!*\ +
18000 !*** ./node_modules/d3-scale/src/utcTime.js ***! +
18001 \**********************************************/ +
18002/*! exports provided: default */ +
18003/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18004 +
18005"use strict"; +
18006__webpack_require__.r(__webpack_exports__); +
18007/* harmony import */ var _time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./time */ "./node_modules/d3-scale/src/time.js"); +
18008/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-time-format */ "./node_modules/d3-time-format/src/index.js"); +
18009/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/index.js"); +
18010 +
18011 +
18012 +
18013 +
18014/* harmony default export */ __webpack_exports__["default"] = (function() { +
18015 return Object(_time__WEBPACK_IMPORTED_MODULE_0__["calendar"])(d3_time__WEBPACK_IMPORTED_MODULE_2__["utcYear"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcMonth"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcWeek"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcDay"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcHour"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcMinute"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcSecond"], d3_time__WEBPACK_IMPORTED_MODULE_2__["utcMillisecond"], d3_time_format__WEBPACK_IMPORTED_MODULE_1__["utcFormat"]).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]); +
18016}); +
18017 +
18018 +
18019/***/ }), +
18020 +
18021/***/ "./node_modules/d3-selection/src/constant.js": +
18022/*!***************************************************!*\ +
18023 !*** ./node_modules/d3-selection/src/constant.js ***! +
18024 \***************************************************/ +
18025/*! exports provided: default */ +
18026/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18027 +
18028"use strict"; +
18029__webpack_require__.r(__webpack_exports__); +
18030/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
18031 return function() { +
18032 return x; +
18033 }; +
18034}); +
18035 +
18036 +
18037/***/ }), +
18038 +
18039/***/ "./node_modules/d3-selection/src/create.js": +
18040/*!*************************************************!*\ +
18041 !*** ./node_modules/d3-selection/src/create.js ***! +
18042 \*************************************************/ +
18043/*! exports provided: default */ +
18044/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18045 +
18046"use strict"; +
18047__webpack_require__.r(__webpack_exports__); +
18048/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./creator */ "./node_modules/d3-selection/src/creator.js"); +
18049/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./select */ "./node_modules/d3-selection/src/select.js"); +
18050 +
18051 +
18052 +
18053/* harmony default export */ __webpack_exports__["default"] = (function(name) { +
18054 return Object(_select__WEBPACK_IMPORTED_MODULE_1__["default"])(Object(_creator__WEBPACK_IMPORTED_MODULE_0__["default"])(name).call(document.documentElement)); +
18055}); +
18056 +
18057 +
18058/***/ }), +
18059 +
18060/***/ "./node_modules/d3-selection/src/creator.js": +
18061/*!**************************************************!*\ +
18062 !*** ./node_modules/d3-selection/src/creator.js ***! +
18063 \**************************************************/ +
18064/*! exports provided: default */ +
18065/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18066 +
18067"use strict"; +
18068__webpack_require__.r(__webpack_exports__); +
18069/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespace */ "./node_modules/d3-selection/src/namespace.js"); +
18070/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./namespaces */ "./node_modules/d3-selection/src/namespaces.js"); +
18071 +
18072 +
18073 +
18074function creatorInherit(name) { +
18075 return function() { +
18076 var document = this.ownerDocument, +
18077 uri = this.namespaceURI; +
18078 return uri === _namespaces__WEBPACK_IMPORTED_MODULE_1__["xhtml"] && document.documentElement.namespaceURI === _namespaces__WEBPACK_IMPORTED_MODULE_1__["xhtml"] +
18079 ? document.createElement(name) +
18080 : document.createElementNS(uri, name); +
18081 }; +
18082} +
18083 +
18084function creatorFixed(fullname) { +
18085 return function() { +
18086 return this.ownerDocument.createElementNS(fullname.space, fullname.local); +
18087 }; +
18088} +
18089 +
18090/* harmony default export */ __webpack_exports__["default"] = (function(name) { +
18091 var fullname = Object(_namespace__WEBPACK_IMPORTED_MODULE_0__["default"])(name); +
18092 return (fullname.local +
18093 ? creatorFixed +
18094 : creatorInherit)(fullname); +
18095}); +
18096 +
18097 +
18098/***/ }), +
18099 +
18100/***/ "./node_modules/d3-selection/src/index.js": +
18101/*!************************************************!*\ +
18102 !*** ./node_modules/d3-selection/src/index.js ***! +
18103 \************************************************/ +
18104/*! exports provided: create, creator, local, matcher, mouse, namespace, namespaces, clientPoint, select, selectAll, selection, selector, selectorAll, style, touch, touches, window, event, customEvent */ +
18105/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18106 +
18107"use strict"; +
18108__webpack_require__.r(__webpack_exports__); +
18109/* harmony import */ var _create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./create */ "./node_modules/d3-selection/src/create.js"); +
18110/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "create", function() { return _create__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
18111 +
18112/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./creator */ "./node_modules/d3-selection/src/creator.js"); +
18113/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "creator", function() { return _creator__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
18114 +
18115/* harmony import */ var _local__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./local */ "./node_modules/d3-selection/src/local.js"); +
18116/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "local", function() { return _local__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
18117 +
18118/* harmony import */ var _matcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./matcher */ "./node_modules/d3-selection/src/matcher.js"); +
18119/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "matcher", function() { return _matcher__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
18120 +
18121/* harmony import */ var _mouse__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mouse */ "./node_modules/d3-selection/src/mouse.js"); +
18122/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouse", function() { return _mouse__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
18123 +
18124/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./namespace */ "./node_modules/d3-selection/src/namespace.js"); +
18125/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "namespace", function() { return _namespace__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
18126 +
18127/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./namespaces */ "./node_modules/d3-selection/src/namespaces.js"); +
18128/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "namespaces", function() { return _namespaces__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
18129 +
18130/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./point */ "./node_modules/d3-selection/src/point.js"); +
18131/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "clientPoint", function() { return _point__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +
18132 +
18133/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./select */ "./node_modules/d3-selection/src/select.js"); +
18134/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "select", function() { return _select__WEBPACK_IMPORTED_MODULE_8__["default"]; }); +
18135 +
18136/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./selectAll */ "./node_modules/d3-selection/src/selectAll.js"); +
18137/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectAll", function() { return _selectAll__WEBPACK_IMPORTED_MODULE_9__["default"]; }); +
18138 +
18139/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./selection/index */ "./node_modules/d3-selection/src/selection/index.js"); +
18140/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selection", function() { return _selection_index__WEBPACK_IMPORTED_MODULE_10__["default"]; }); +
18141 +
18142/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./selector */ "./node_modules/d3-selection/src/selector.js"); +
18143/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selector", function() { return _selector__WEBPACK_IMPORTED_MODULE_11__["default"]; }); +
18144 +
18145/* harmony import */ var _selectorAll__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./selectorAll */ "./node_modules/d3-selection/src/selectorAll.js"); +
18146/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectorAll", function() { return _selectorAll__WEBPACK_IMPORTED_MODULE_12__["default"]; }); +
18147 +
18148/* harmony import */ var _selection_style__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./selection/style */ "./node_modules/d3-selection/src/selection/style.js"); +
18149/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "style", function() { return _selection_style__WEBPACK_IMPORTED_MODULE_13__["styleValue"]; }); +
18150 +
18151/* harmony import */ var _touch__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./touch */ "./node_modules/d3-selection/src/touch.js"); +
18152/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touch", function() { return _touch__WEBPACK_IMPORTED_MODULE_14__["default"]; }); +
18153 +
18154/* harmony import */ var _touches__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./touches */ "./node_modules/d3-selection/src/touches.js"); +
18155/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touches", function() { return _touches__WEBPACK_IMPORTED_MODULE_15__["default"]; }); +
18156 +
18157/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./window */ "./node_modules/d3-selection/src/window.js"); +
18158/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return _window__WEBPACK_IMPORTED_MODULE_16__["default"]; }); +
18159 +
18160/* harmony import */ var _selection_on__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./selection/on */ "./node_modules/d3-selection/src/selection/on.js"); +
18161/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "event", function() { return _selection_on__WEBPACK_IMPORTED_MODULE_17__["event"]; }); +
18162 +
18163/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "customEvent", function() { return _selection_on__WEBPACK_IMPORTED_MODULE_17__["customEvent"]; }); +
18164 +
18165 +
18166 +
18167 +
18168 +
18169 +
18170 +
18171 +
18172 +
18173 +
18174 +
18175 +
18176 +
18177 +
18178 +
18179 +
18180 +
18181 +
18182 +
18183 +
18184 +
18185/***/ }), +
18186 +
18187/***/ "./node_modules/d3-selection/src/local.js": +
18188/*!************************************************!*\ +
18189 !*** ./node_modules/d3-selection/src/local.js ***! +
18190 \************************************************/ +
18191/*! exports provided: default */ +
18192/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18193 +
18194"use strict"; +
18195__webpack_require__.r(__webpack_exports__); +
18196/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return local; }); +
18197var nextId = 0; +
18198 +
18199function local() { +
18200 return new Local; +
18201} +
18202 +
18203function Local() { +
18204 this._ = "@" + (++nextId).toString(36); +
18205} +
18206 +
18207Local.prototype = local.prototype = { +
18208 constructor: Local, +
18209 get: function(node) { +
18210 var id = this._; +
18211 while (!(id in node)) if (!(node = node.parentNode)) return; +
18212 return node[id]; +
18213 }, +
18214 set: function(node, value) { +
18215 return node[this._] = value; +
18216 }, +
18217 remove: function(node) { +
18218 return this._ in node && delete node[this._]; +
18219 }, +
18220 toString: function() { +
18221 return this._; +
18222 } +
18223}; +
18224 +
18225 +
18226/***/ }), +
18227 +
18228/***/ "./node_modules/d3-selection/src/matcher.js": +
18229/*!**************************************************!*\ +
18230 !*** ./node_modules/d3-selection/src/matcher.js ***! +
18231 \**************************************************/ +
18232/*! exports provided: default */ +
18233/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18234 +
18235"use strict"; +
18236__webpack_require__.r(__webpack_exports__); +
18237var matcher = function(selector) { +
18238 return function() { +
18239 return this.matches(selector); +
18240 }; +
18241}; +
18242 +
18243if (typeof document !== "undefined") { +
18244 var element = document.documentElement; +
18245 if (!element.matches) { +
18246 var vendorMatches = element.webkitMatchesSelector +
18247 || element.msMatchesSelector +
18248 || element.mozMatchesSelector +
18249 || element.oMatchesSelector; +
18250 matcher = function(selector) { +
18251 return function() { +
18252 return vendorMatches.call(this, selector); +
18253 }; +
18254 }; +
18255 } +
18256} +
18257 +
18258/* harmony default export */ __webpack_exports__["default"] = (matcher); +
18259 +
18260 +
18261/***/ }), +
18262 +
18263/***/ "./node_modules/d3-selection/src/mouse.js": +
18264/*!************************************************!*\ +
18265 !*** ./node_modules/d3-selection/src/mouse.js ***! +
18266 \************************************************/ +
18267/*! exports provided: default */ +
18268/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18269 +
18270"use strict"; +
18271__webpack_require__.r(__webpack_exports__); +
18272/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ "./node_modules/d3-selection/src/sourceEvent.js"); +
18273/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "./node_modules/d3-selection/src/point.js"); +
18274 +
18275 +
18276 +
18277/* harmony default export */ __webpack_exports__["default"] = (function(node) { +
18278 var event = Object(_sourceEvent__WEBPACK_IMPORTED_MODULE_0__["default"])(); +
18279 if (event.changedTouches) event = event.changedTouches[0]; +
18280 return Object(_point__WEBPACK_IMPORTED_MODULE_1__["default"])(node, event); +
18281}); +
18282 +
18283 +
18284/***/ }), +
18285 +
18286/***/ "./node_modules/d3-selection/src/namespace.js": +
18287/*!****************************************************!*\ +
18288 !*** ./node_modules/d3-selection/src/namespace.js ***! +
18289 \****************************************************/ +
18290/*! exports provided: default */ +
18291/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18292 +
18293"use strict"; +
18294__webpack_require__.r(__webpack_exports__); +
18295/* harmony import */ var _namespaces__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./namespaces */ "./node_modules/d3-selection/src/namespaces.js"); +
18296 +
18297 +
18298/* harmony default export */ __webpack_exports__["default"] = (function(name) { +
18299 var prefix = name += "", i = prefix.indexOf(":"); +
18300 if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); +
18301 return _namespaces__WEBPACK_IMPORTED_MODULE_0__["default"].hasOwnProperty(prefix) ? {space: _namespaces__WEBPACK_IMPORTED_MODULE_0__["default"][prefix], local: name} : name; +
18302}); +
18303 +
18304 +
18305/***/ }), +
18306 +
18307/***/ "./node_modules/d3-selection/src/namespaces.js": +
18308/*!*****************************************************!*\ +
18309 !*** ./node_modules/d3-selection/src/namespaces.js ***! +
18310 \*****************************************************/ +
18311/*! exports provided: xhtml, default */ +
18312/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18313 +
18314"use strict"; +
18315__webpack_require__.r(__webpack_exports__); +
18316/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "xhtml", function() { return xhtml; }); +
18317var xhtml = "http://www.w3.org/1999/xhtml"; +
18318 +
18319/* harmony default export */ __webpack_exports__["default"] = ({ +
18320 svg: "http://www.w3.org/2000/svg", +
18321 xhtml: xhtml, +
18322 xlink: "http://www.w3.org/1999/xlink", +
18323 xml: "http://www.w3.org/XML/1998/namespace", +
18324 xmlns: "http://www.w3.org/2000/xmlns/" +
18325}); +
18326 +
18327 +
18328/***/ }), +
18329 +
18330/***/ "./node_modules/d3-selection/src/point.js": +
18331/*!************************************************!*\ +
18332 !*** ./node_modules/d3-selection/src/point.js ***! +
18333 \************************************************/ +
18334/*! exports provided: default */ +
18335/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18336 +
18337"use strict"; +
18338__webpack_require__.r(__webpack_exports__); +
18339/* harmony default export */ __webpack_exports__["default"] = (function(node, event) { +
18340 var svg = node.ownerSVGElement || node; +
18341 +
18342 if (svg.createSVGPoint) { +
18343 var point = svg.createSVGPoint(); +
18344 point.x = event.clientX, point.y = event.clientY; +
18345 point = point.matrixTransform(node.getScreenCTM().inverse()); +
18346 return [point.x, point.y]; +
18347 } +
18348 +
18349 var rect = node.getBoundingClientRect(); +
18350 return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; +
18351}); +
18352 +
18353 +
18354/***/ }), +
18355 +
18356/***/ "./node_modules/d3-selection/src/select.js": +
18357/*!*************************************************!*\ +
18358 !*** ./node_modules/d3-selection/src/select.js ***! +
18359 \*************************************************/ +
18360/*! exports provided: default */ +
18361/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18362 +
18363"use strict"; +
18364__webpack_require__.r(__webpack_exports__); +
18365/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ "./node_modules/d3-selection/src/selection/index.js"); +
18366 +
18367 +
18368/* harmony default export */ __webpack_exports__["default"] = (function(selector) { +
18369 return typeof selector === "string" +
18370 ? new _selection_index__WEBPACK_IMPORTED_MODULE_0__["Selection"]([[document.querySelector(selector)]], [document.documentElement]) +
18371 : new _selection_index__WEBPACK_IMPORTED_MODULE_0__["Selection"]([[selector]], _selection_index__WEBPACK_IMPORTED_MODULE_0__["root"]); +
18372}); +
18373 +
18374 +
18375/***/ }), +
18376 +
18377/***/ "./node_modules/d3-selection/src/selectAll.js": +
18378/*!****************************************************!*\ +
18379 !*** ./node_modules/d3-selection/src/selectAll.js ***! +
18380 \****************************************************/ +
18381/*! exports provided: default */ +
18382/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18383 +
18384"use strict"; +
18385__webpack_require__.r(__webpack_exports__); +
18386/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ "./node_modules/d3-selection/src/selection/index.js"); +
18387 +
18388 +
18389/* harmony default export */ __webpack_exports__["default"] = (function(selector) { +
18390 return typeof selector === "string" +
18391 ? new _selection_index__WEBPACK_IMPORTED_MODULE_0__["Selection"]([document.querySelectorAll(selector)], [document.documentElement]) +
18392 : new _selection_index__WEBPACK_IMPORTED_MODULE_0__["Selection"]([selector == null ? [] : selector], _selection_index__WEBPACK_IMPORTED_MODULE_0__["root"]); +
18393}); +
18394 +
18395 +
18396/***/ }), +
18397 +
18398/***/ "./node_modules/d3-selection/src/selection/append.js": +
18399/*!***********************************************************!*\ +
18400 !*** ./node_modules/d3-selection/src/selection/append.js ***! +
18401 \***********************************************************/ +
18402/*! exports provided: default */ +
18403/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18404 +
18405"use strict"; +
18406__webpack_require__.r(__webpack_exports__); +
18407/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator */ "./node_modules/d3-selection/src/creator.js"); +
18408 +
18409 +
18410/* harmony default export */ __webpack_exports__["default"] = (function(name) { +
18411 var create = typeof name === "function" ? name : Object(_creator__WEBPACK_IMPORTED_MODULE_0__["default"])(name); +
18412 return this.select(function() { +
18413 return this.appendChild(create.apply(this, arguments)); +
18414 }); +
18415}); +
18416 +
18417 +
18418/***/ }), +
18419 +
18420/***/ "./node_modules/d3-selection/src/selection/attr.js": +
18421/*!*********************************************************!*\ +
18422 !*** ./node_modules/d3-selection/src/selection/attr.js ***! +
18423 \*********************************************************/ +
18424/*! exports provided: default */ +
18425/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18426 +
18427"use strict"; +
18428__webpack_require__.r(__webpack_exports__); +
18429/* harmony import */ var _namespace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../namespace */ "./node_modules/d3-selection/src/namespace.js"); +
18430 +
18431 +
18432function attrRemove(name) { +
18433 return function() { +
18434 this.removeAttribute(name); +
18435 }; +
18436} +
18437 +
18438function attrRemoveNS(fullname) { +
18439 return function() { +
18440 this.removeAttributeNS(fullname.space, fullname.local); +
18441 }; +
18442} +
18443 +
18444function attrConstant(name, value) { +
18445 return function() { +
18446 this.setAttribute(name, value); +
18447 }; +
18448} +
18449 +
18450function attrConstantNS(fullname, value) { +
18451 return function() { +
18452 this.setAttributeNS(fullname.space, fullname.local, value); +
18453 }; +
18454} +
18455 +
18456function attrFunction(name, value) { +
18457 return function() { +
18458 var v = value.apply(this, arguments); +
18459 if (v == null) this.removeAttribute(name); +
18460 else this.setAttribute(name, v); +
18461 }; +
18462} +
18463 +
18464function attrFunctionNS(fullname, value) { +
18465 return function() { +
18466 var v = value.apply(this, arguments); +
18467 if (v == null) this.removeAttributeNS(fullname.space, fullname.local); +
18468 else this.setAttributeNS(fullname.space, fullname.local, v); +
18469 }; +
18470} +
18471 +
18472/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { +
18473 var fullname = Object(_namespace__WEBPACK_IMPORTED_MODULE_0__["default"])(name); +
18474 +
18475 if (arguments.length < 2) { +
18476 var node = this.node(); +
18477 return fullname.local +
18478 ? node.getAttributeNS(fullname.space, fullname.local) +
18479 : node.getAttribute(fullname); +
18480 } +
18481 +
18482 return this.each((value == null +
18483 ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" +
18484 ? (fullname.local ? attrFunctionNS : attrFunction) +
18485 : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); +
18486}); +
18487 +
18488 +
18489/***/ }), +
18490 +
18491/***/ "./node_modules/d3-selection/src/selection/call.js": +
18492/*!*********************************************************!*\ +
18493 !*** ./node_modules/d3-selection/src/selection/call.js ***! +
18494 \*********************************************************/ +
18495/*! exports provided: default */ +
18496/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18497 +
18498"use strict"; +
18499__webpack_require__.r(__webpack_exports__); +
18500/* harmony default export */ __webpack_exports__["default"] = (function() { +
18501 var callback = arguments[0]; +
18502 arguments[0] = this; +
18503 callback.apply(null, arguments); +
18504 return this; +
18505}); +
18506 +
18507 +
18508/***/ }), +
18509 +
18510/***/ "./node_modules/d3-selection/src/selection/classed.js": +
18511/*!************************************************************!*\ +
18512 !*** ./node_modules/d3-selection/src/selection/classed.js ***! +
18513 \************************************************************/ +
18514/*! exports provided: default */ +
18515/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18516 +
18517"use strict"; +
18518__webpack_require__.r(__webpack_exports__); +
18519function classArray(string) { +
18520 return string.trim().split(/^|\s+/); +
18521} +
18522 +
18523function classList(node) { +
18524 return node.classList || new ClassList(node); +
18525} +
18526 +
18527function ClassList(node) { +
18528 this._node = node; +
18529 this._names = classArray(node.getAttribute("class") || ""); +
18530} +
18531 +
18532ClassList.prototype = { +
18533 add: function(name) { +
18534 var i = this._names.indexOf(name); +
18535 if (i < 0) { +
18536 this._names.push(name); +
18537 this._node.setAttribute("class", this._names.join(" ")); +
18538 } +
18539 }, +
18540 remove: function(name) { +
18541 var i = this._names.indexOf(name); +
18542 if (i >= 0) { +
18543 this._names.splice(i, 1); +
18544 this._node.setAttribute("class", this._names.join(" ")); +
18545 } +
18546 }, +
18547 contains: function(name) { +
18548 return this._names.indexOf(name) >= 0; +
18549 } +
18550}; +
18551 +
18552function classedAdd(node, names) { +
18553 var list = classList(node), i = -1, n = names.length; +
18554 while (++i < n) list.add(names[i]); +
18555} +
18556 +
18557function classedRemove(node, names) { +
18558 var list = classList(node), i = -1, n = names.length; +
18559 while (++i < n) list.remove(names[i]); +
18560} +
18561 +
18562function classedTrue(names) { +
18563 return function() { +
18564 classedAdd(this, names); +
18565 }; +
18566} +
18567 +
18568function classedFalse(names) { +
18569 return function() { +
18570 classedRemove(this, names); +
18571 }; +
18572} +
18573 +
18574function classedFunction(names, value) { +
18575 return function() { +
18576 (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); +
18577 }; +
18578} +
18579 +
18580/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { +
18581 var names = classArray(name + ""); +
18582 +
18583 if (arguments.length < 2) { +
18584 var list = classList(this.node()), i = -1, n = names.length; +
18585 while (++i < n) if (!list.contains(names[i])) return false; +
18586 return true; +
18587 } +
18588 +
18589 return this.each((typeof value === "function" +
18590 ? classedFunction : value +
18591 ? classedTrue +
18592 : classedFalse)(names, value)); +
18593}); +
18594 +
18595 +
18596/***/ }), +
18597 +
18598/***/ "./node_modules/d3-selection/src/selection/clone.js": +
18599/*!**********************************************************!*\ +
18600 !*** ./node_modules/d3-selection/src/selection/clone.js ***! +
18601 \**********************************************************/ +
18602/*! exports provided: default */ +
18603/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18604 +
18605"use strict"; +
18606__webpack_require__.r(__webpack_exports__); +
18607function selection_cloneShallow() { +
18608 return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling); +
18609} +
18610 +
18611function selection_cloneDeep() { +
18612 return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling); +
18613} +
18614 +
18615/* harmony default export */ __webpack_exports__["default"] = (function(deep) { +
18616 return this.select(deep ? selection_cloneDeep : selection_cloneShallow); +
18617}); +
18618 +
18619 +
18620/***/ }), +
18621 +
18622/***/ "./node_modules/d3-selection/src/selection/data.js": +
18623/*!*********************************************************!*\ +
18624 !*** ./node_modules/d3-selection/src/selection/data.js ***! +
18625 \*********************************************************/ +
18626/*! exports provided: default */ +
18627/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18628 +
18629"use strict"; +
18630__webpack_require__.r(__webpack_exports__); +
18631/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); +
18632/* harmony import */ var _enter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enter */ "./node_modules/d3-selection/src/selection/enter.js"); +
18633/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ "./node_modules/d3-selection/src/constant.js"); +
18634 +
18635 +
18636 +
18637 +
18638var keyPrefix = "$"; // Protect against keys like “__proto__”. +
18639 +
18640function bindIndex(parent, group, enter, update, exit, data) { +
18641 var i = 0, +
18642 node, +
18643 groupLength = group.length, +
18644 dataLength = data.length; +
18645 +
18646 // Put any non-null nodes that fit into update. +
18647 // Put any null nodes into enter. +
18648 // Put any remaining data into enter. +
18649 for (; i < dataLength; ++i) { +
18650 if (node = group[i]) { +
18651 node.__data__ = data[i]; +
18652 update[i] = node; +
18653 } else { +
18654 enter[i] = new _enter__WEBPACK_IMPORTED_MODULE_1__["EnterNode"](parent, data[i]); +
18655 } +
18656 } +
18657 +
18658 // Put any non-null nodes that don’t fit into exit. +
18659 for (; i < groupLength; ++i) { +
18660 if (node = group[i]) { +
18661 exit[i] = node; +
18662 } +
18663 } +
18664} +
18665 +
18666function bindKey(parent, group, enter, update, exit, data, key) { +
18667 var i, +
18668 node, +
18669 nodeByKeyValue = {}, +
18670 groupLength = group.length, +
18671 dataLength = data.length, +
18672 keyValues = new Array(groupLength), +
18673 keyValue; +
18674 +
18675 // Compute the key for each node. +
18676 // If multiple nodes have the same key, the duplicates are added to exit. +
18677 for (i = 0; i < groupLength; ++i) { +
18678 if (node = group[i]) { +
18679 keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); +
18680 if (keyValue in nodeByKeyValue) { +
18681 exit[i] = node; +
18682 } else { +
18683 nodeByKeyValue[keyValue] = node; +
18684 } +
18685 } +
18686 } +
18687 +
18688 // Compute the key for each datum. +
18689 // If there a node associated with this key, join and add it to update. +
18690 // If there is not (or the key is a duplicate), add it to enter. +
18691 for (i = 0; i < dataLength; ++i) { +
18692 keyValue = keyPrefix + key.call(parent, data[i], i, data); +
18693 if (node = nodeByKeyValue[keyValue]) { +
18694 update[i] = node; +
18695 node.__data__ = data[i]; +
18696 nodeByKeyValue[keyValue] = null; +
18697 } else { +
18698 enter[i] = new _enter__WEBPACK_IMPORTED_MODULE_1__["EnterNode"](parent, data[i]); +
18699 } +
18700 } +
18701 +
18702 // Add any remaining nodes that were not bound to data to exit. +
18703 for (i = 0; i < groupLength; ++i) { +
18704 if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { +
18705 exit[i] = node; +
18706 } +
18707 } +
18708} +
18709 +
18710/* harmony default export */ __webpack_exports__["default"] = (function(value, key) { +
18711 if (!value) { +
18712 data = new Array(this.size()), j = -1; +
18713 this.each(function(d) { data[++j] = d; }); +
18714 return data; +
18715 } +
18716 +
18717 var bind = key ? bindKey : bindIndex, +
18718 parents = this._parents, +
18719 groups = this._groups; +
18720 +
18721 if (typeof value !== "function") value = Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(value); +
18722 +
18723 for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { +
18724 var parent = parents[j], +
18725 group = groups[j], +
18726 groupLength = group.length, +
18727 data = value.call(parent, parent && parent.__data__, j, parents), +
18728 dataLength = data.length, +
18729 enterGroup = enter[j] = new Array(dataLength), +
18730 updateGroup = update[j] = new Array(dataLength), +
18731 exitGroup = exit[j] = new Array(groupLength); +
18732 +
18733 bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); +
18734 +
18735 // Now connect the enter nodes to their following update node, such that +
18736 // appendChild can insert the materialized enter node before this node, +
18737 // rather than at the end of the parent node. +
18738 for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { +
18739 if (previous = enterGroup[i0]) { +
18740 if (i0 >= i1) i1 = i0 + 1; +
18741 while (!(next = updateGroup[i1]) && ++i1 < dataLength); +
18742 previous._next = next || null; +
18743 } +
18744 } +
18745 } +
18746 +
18747 update = new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](update, parents); +
18748 update._enter = enter; +
18749 update._exit = exit; +
18750 return update; +
18751}); +
18752 +
18753 +
18754/***/ }), +
18755 +
18756/***/ "./node_modules/d3-selection/src/selection/datum.js": +
18757/*!**********************************************************!*\ +
18758 !*** ./node_modules/d3-selection/src/selection/datum.js ***! +
18759 \**********************************************************/ +
18760/*! exports provided: default */ +
18761/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18762 +
18763"use strict"; +
18764__webpack_require__.r(__webpack_exports__); +
18765/* harmony default export */ __webpack_exports__["default"] = (function(value) { +
18766 return arguments.length +
18767 ? this.property("__data__", value) +
18768 : this.node().__data__; +
18769}); +
18770 +
18771 +
18772/***/ }), +
18773 +
18774/***/ "./node_modules/d3-selection/src/selection/dispatch.js": +
18775/*!*************************************************************!*\ +
18776 !*** ./node_modules/d3-selection/src/selection/dispatch.js ***! +
18777 \*************************************************************/ +
18778/*! exports provided: default */ +
18779/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18780 +
18781"use strict"; +
18782__webpack_require__.r(__webpack_exports__); +
18783/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window */ "./node_modules/d3-selection/src/window.js"); +
18784 +
18785 +
18786function dispatchEvent(node, type, params) { +
18787 var window = Object(_window__WEBPACK_IMPORTED_MODULE_0__["default"])(node), +
18788 event = window.CustomEvent; +
18789 +
18790 if (typeof event === "function") { +
18791 event = new event(type, params); +
18792 } else { +
18793 event = window.document.createEvent("Event"); +
18794 if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; +
18795 else event.initEvent(type, false, false); +
18796 } +
18797 +
18798 node.dispatchEvent(event); +
18799} +
18800 +
18801function dispatchConstant(type, params) { +
18802 return function() { +
18803 return dispatchEvent(this, type, params); +
18804 }; +
18805} +
18806 +
18807function dispatchFunction(type, params) { +
18808 return function() { +
18809 return dispatchEvent(this, type, params.apply(this, arguments)); +
18810 }; +
18811} +
18812 +
18813/* harmony default export */ __webpack_exports__["default"] = (function(type, params) { +
18814 return this.each((typeof params === "function" +
18815 ? dispatchFunction +
18816 : dispatchConstant)(type, params)); +
18817}); +
18818 +
18819 +
18820/***/ }), +
18821 +
18822/***/ "./node_modules/d3-selection/src/selection/each.js": +
18823/*!*********************************************************!*\ +
18824 !*** ./node_modules/d3-selection/src/selection/each.js ***! +
18825 \*********************************************************/ +
18826/*! exports provided: default */ +
18827/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18828 +
18829"use strict"; +
18830__webpack_require__.r(__webpack_exports__); +
18831/* harmony default export */ __webpack_exports__["default"] = (function(callback) { +
18832 +
18833 for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { +
18834 for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { +
18835 if (node = group[i]) callback.call(node, node.__data__, i, group); +
18836 } +
18837 } +
18838 +
18839 return this; +
18840}); +
18841 +
18842 +
18843/***/ }), +
18844 +
18845/***/ "./node_modules/d3-selection/src/selection/empty.js": +
18846/*!**********************************************************!*\ +
18847 !*** ./node_modules/d3-selection/src/selection/empty.js ***! +
18848 \**********************************************************/ +
18849/*! exports provided: default */ +
18850/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18851 +
18852"use strict"; +
18853__webpack_require__.r(__webpack_exports__); +
18854/* harmony default export */ __webpack_exports__["default"] = (function() { +
18855 return !this.node(); +
18856}); +
18857 +
18858 +
18859/***/ }), +
18860 +
18861/***/ "./node_modules/d3-selection/src/selection/enter.js": +
18862/*!**********************************************************!*\ +
18863 !*** ./node_modules/d3-selection/src/selection/enter.js ***! +
18864 \**********************************************************/ +
18865/*! exports provided: default, EnterNode */ +
18866/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18867 +
18868"use strict"; +
18869__webpack_require__.r(__webpack_exports__); +
18870/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EnterNode", function() { return EnterNode; }); +
18871/* harmony import */ var _sparse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sparse */ "./node_modules/d3-selection/src/selection/sparse.js"); +
18872/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); +
18873 +
18874 +
18875 +
18876/* harmony default export */ __webpack_exports__["default"] = (function() { +
18877 return new _index__WEBPACK_IMPORTED_MODULE_1__["Selection"](this._enter || this._groups.map(_sparse__WEBPACK_IMPORTED_MODULE_0__["default"]), this._parents); +
18878}); +
18879 +
18880function EnterNode(parent, datum) { +
18881 this.ownerDocument = parent.ownerDocument; +
18882 this.namespaceURI = parent.namespaceURI; +
18883 this._next = null; +
18884 this._parent = parent; +
18885 this.__data__ = datum; +
18886} +
18887 +
18888EnterNode.prototype = { +
18889 constructor: EnterNode, +
18890 appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, +
18891 insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, +
18892 querySelector: function(selector) { return this._parent.querySelector(selector); }, +
18893 querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } +
18894}; +
18895 +
18896 +
18897/***/ }), +
18898 +
18899/***/ "./node_modules/d3-selection/src/selection/exit.js": +
18900/*!*********************************************************!*\ +
18901 !*** ./node_modules/d3-selection/src/selection/exit.js ***! +
18902 \*********************************************************/ +
18903/*! exports provided: default */ +
18904/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18905 +
18906"use strict"; +
18907__webpack_require__.r(__webpack_exports__); +
18908/* harmony import */ var _sparse__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sparse */ "./node_modules/d3-selection/src/selection/sparse.js"); +
18909/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); +
18910 +
18911 +
18912 +
18913/* harmony default export */ __webpack_exports__["default"] = (function() { +
18914 return new _index__WEBPACK_IMPORTED_MODULE_1__["Selection"](this._exit || this._groups.map(_sparse__WEBPACK_IMPORTED_MODULE_0__["default"]), this._parents); +
18915}); +
18916 +
18917 +
18918/***/ }), +
18919 +
18920/***/ "./node_modules/d3-selection/src/selection/filter.js": +
18921/*!***********************************************************!*\ +
18922 !*** ./node_modules/d3-selection/src/selection/filter.js ***! +
18923 \***********************************************************/ +
18924/*! exports provided: default */ +
18925/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18926 +
18927"use strict"; +
18928__webpack_require__.r(__webpack_exports__); +
18929/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); +
18930/* harmony import */ var _matcher__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../matcher */ "./node_modules/d3-selection/src/matcher.js"); +
18931 +
18932 +
18933 +
18934/* harmony default export */ __webpack_exports__["default"] = (function(match) { +
18935 if (typeof match !== "function") match = Object(_matcher__WEBPACK_IMPORTED_MODULE_1__["default"])(match); +
18936 +
18937 for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { +
18938 for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { +
18939 if ((node = group[i]) && match.call(node, node.__data__, i, group)) { +
18940 subgroup.push(node); +
18941 } +
18942 } +
18943 } +
18944 +
18945 return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](subgroups, this._parents); +
18946}); +
18947 +
18948 +
18949/***/ }), +
18950 +
18951/***/ "./node_modules/d3-selection/src/selection/html.js": +
18952/*!*********************************************************!*\ +
18953 !*** ./node_modules/d3-selection/src/selection/html.js ***! +
18954 \*********************************************************/ +
18955/*! exports provided: default */ +
18956/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18957 +
18958"use strict"; +
18959__webpack_require__.r(__webpack_exports__); +
18960function htmlRemove() { +
18961 this.innerHTML = ""; +
18962} +
18963 +
18964function htmlConstant(value) { +
18965 return function() { +
18966 this.innerHTML = value; +
18967 }; +
18968} +
18969 +
18970function htmlFunction(value) { +
18971 return function() { +
18972 var v = value.apply(this, arguments); +
18973 this.innerHTML = v == null ? "" : v; +
18974 }; +
18975} +
18976 +
18977/* harmony default export */ __webpack_exports__["default"] = (function(value) { +
18978 return arguments.length +
18979 ? this.each(value == null +
18980 ? htmlRemove : (typeof value === "function" +
18981 ? htmlFunction +
18982 : htmlConstant)(value)) +
18983 : this.node().innerHTML; +
18984}); +
18985 +
18986 +
18987/***/ }), +
18988 +
18989/***/ "./node_modules/d3-selection/src/selection/index.js": +
18990/*!**********************************************************!*\ +
18991 !*** ./node_modules/d3-selection/src/selection/index.js ***! +
18992 \**********************************************************/ +
18993/*! exports provided: root, Selection, default */ +
18994/***/ (function(module, __webpack_exports__, __webpack_require__) { +
18995 +
18996"use strict"; +
18997__webpack_require__.r(__webpack_exports__); +
18998/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "root", function() { return root; }); +
18999/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Selection", function() { return Selection; }); +
19000/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./select */ "./node_modules/d3-selection/src/selection/select.js"); +
19001/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./selectAll */ "./node_modules/d3-selection/src/selection/selectAll.js"); +
19002/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./filter */ "./node_modules/d3-selection/src/selection/filter.js"); +
19003/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./data */ "./node_modules/d3-selection/src/selection/data.js"); +
19004/* harmony import */ var _enter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./enter */ "./node_modules/d3-selection/src/selection/enter.js"); +
19005/* harmony import */ var _exit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./exit */ "./node_modules/d3-selection/src/selection/exit.js"); +
19006/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./merge */ "./node_modules/d3-selection/src/selection/merge.js"); +
19007/* harmony import */ var _order__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./order */ "./node_modules/d3-selection/src/selection/order.js"); +
19008/* harmony import */ var _sort__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./sort */ "./node_modules/d3-selection/src/selection/sort.js"); +
19009/* harmony import */ var _call__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./call */ "./node_modules/d3-selection/src/selection/call.js"); +
19010/* harmony import */ var _nodes__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./nodes */ "./node_modules/d3-selection/src/selection/nodes.js"); +
19011/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./node */ "./node_modules/d3-selection/src/selection/node.js"); +
19012/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./size */ "./node_modules/d3-selection/src/selection/size.js"); +
19013/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./empty */ "./node_modules/d3-selection/src/selection/empty.js"); +
19014/* harmony import */ var _each__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./each */ "./node_modules/d3-selection/src/selection/each.js"); +
19015/* harmony import */ var _attr__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./attr */ "./node_modules/d3-selection/src/selection/attr.js"); +
19016/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./style */ "./node_modules/d3-selection/src/selection/style.js"); +
19017/* harmony import */ var _property__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./property */ "./node_modules/d3-selection/src/selection/property.js"); +
19018/* harmony import */ var _classed__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./classed */ "./node_modules/d3-selection/src/selection/classed.js"); +
19019/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./text */ "./node_modules/d3-selection/src/selection/text.js"); +
19020/* harmony import */ var _html__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./html */ "./node_modules/d3-selection/src/selection/html.js"); +
19021/* harmony import */ var _raise__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./raise */ "./node_modules/d3-selection/src/selection/raise.js"); +
19022/* harmony import */ var _lower__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./lower */ "./node_modules/d3-selection/src/selection/lower.js"); +
19023/* harmony import */ var _append__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./append */ "./node_modules/d3-selection/src/selection/append.js"); +
19024/* harmony import */ var _insert__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./insert */ "./node_modules/d3-selection/src/selection/insert.js"); +
19025/* harmony import */ var _remove__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./remove */ "./node_modules/d3-selection/src/selection/remove.js"); +
19026/* harmony import */ var _clone__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./clone */ "./node_modules/d3-selection/src/selection/clone.js"); +
19027/* harmony import */ var _datum__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./datum */ "./node_modules/d3-selection/src/selection/datum.js"); +
19028/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./on */ "./node_modules/d3-selection/src/selection/on.js"); +
19029/* harmony import */ var _dispatch__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./dispatch */ "./node_modules/d3-selection/src/selection/dispatch.js"); +
19030 +
19031 +
19032 +
19033 +
19034 +
19035 +
19036 +
19037 +
19038 +
19039 +
19040 +
19041 +
19042 +
19043 +
19044 +
19045 +
19046 +
19047 +
19048 +
19049 +
19050 +
19051 +
19052 +
19053 +
19054 +
19055 +
19056 +
19057 +
19058 +
19059 +
19060 +
19061var root = [null]; +
19062 +
19063function Selection(groups, parents) { +
19064 this._groups = groups; +
19065 this._parents = parents; +
19066} +
19067 +
19068function selection() { +
19069 return new Selection([[document.documentElement]], root); +
19070} +
19071 +
19072Selection.prototype = selection.prototype = { +
19073 constructor: Selection, +
19074 select: _select__WEBPACK_IMPORTED_MODULE_0__["default"], +
19075 selectAll: _selectAll__WEBPACK_IMPORTED_MODULE_1__["default"], +
19076 filter: _filter__WEBPACK_IMPORTED_MODULE_2__["default"], +
19077 data: _data__WEBPACK_IMPORTED_MODULE_3__["default"], +
19078 enter: _enter__WEBPACK_IMPORTED_MODULE_4__["default"], +
19079 exit: _exit__WEBPACK_IMPORTED_MODULE_5__["default"], +
19080 merge: _merge__WEBPACK_IMPORTED_MODULE_6__["default"], +
19081 order: _order__WEBPACK_IMPORTED_MODULE_7__["default"], +
19082 sort: _sort__WEBPACK_IMPORTED_MODULE_8__["default"], +
19083 call: _call__WEBPACK_IMPORTED_MODULE_9__["default"], +
19084 nodes: _nodes__WEBPACK_IMPORTED_MODULE_10__["default"], +
19085 node: _node__WEBPACK_IMPORTED_MODULE_11__["default"], +
19086 size: _size__WEBPACK_IMPORTED_MODULE_12__["default"], +
19087 empty: _empty__WEBPACK_IMPORTED_MODULE_13__["default"], +
19088 each: _each__WEBPACK_IMPORTED_MODULE_14__["default"], +
19089 attr: _attr__WEBPACK_IMPORTED_MODULE_15__["default"], +
19090 style: _style__WEBPACK_IMPORTED_MODULE_16__["default"], +
19091 property: _property__WEBPACK_IMPORTED_MODULE_17__["default"], +
19092 classed: _classed__WEBPACK_IMPORTED_MODULE_18__["default"], +
19093 text: _text__WEBPACK_IMPORTED_MODULE_19__["default"], +
19094 html: _html__WEBPACK_IMPORTED_MODULE_20__["default"], +
19095 raise: _raise__WEBPACK_IMPORTED_MODULE_21__["default"], +
19096 lower: _lower__WEBPACK_IMPORTED_MODULE_22__["default"], +
19097 append: _append__WEBPACK_IMPORTED_MODULE_23__["default"], +
19098 insert: _insert__WEBPACK_IMPORTED_MODULE_24__["default"], +
19099 remove: _remove__WEBPACK_IMPORTED_MODULE_25__["default"], +
19100 clone: _clone__WEBPACK_IMPORTED_MODULE_26__["default"], +
19101 datum: _datum__WEBPACK_IMPORTED_MODULE_27__["default"], +
19102 on: _on__WEBPACK_IMPORTED_MODULE_28__["default"], +
19103 dispatch: _dispatch__WEBPACK_IMPORTED_MODULE_29__["default"] +
19104}; +
19105 +
19106/* harmony default export */ __webpack_exports__["default"] = (selection); +
19107 +
19108 +
19109/***/ }), +
19110 +
19111/***/ "./node_modules/d3-selection/src/selection/insert.js": +
19112/*!***********************************************************!*\ +
19113 !*** ./node_modules/d3-selection/src/selection/insert.js ***! +
19114 \***********************************************************/ +
19115/*! exports provided: default */ +
19116/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19117 +
19118"use strict"; +
19119__webpack_require__.r(__webpack_exports__); +
19120/* harmony import */ var _creator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../creator */ "./node_modules/d3-selection/src/creator.js"); +
19121/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selector */ "./node_modules/d3-selection/src/selector.js"); +
19122 +
19123 +
19124 +
19125function constantNull() { +
19126 return null; +
19127} +
19128 +
19129/* harmony default export */ __webpack_exports__["default"] = (function(name, before) { +
19130 var create = typeof name === "function" ? name : Object(_creator__WEBPACK_IMPORTED_MODULE_0__["default"])(name), +
19131 select = before == null ? constantNull : typeof before === "function" ? before : Object(_selector__WEBPACK_IMPORTED_MODULE_1__["default"])(before); +
19132 return this.select(function() { +
19133 return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); +
19134 }); +
19135}); +
19136 +
19137 +
19138/***/ }), +
19139 +
19140/***/ "./node_modules/d3-selection/src/selection/lower.js": +
19141/*!**********************************************************!*\ +
19142 !*** ./node_modules/d3-selection/src/selection/lower.js ***! +
19143 \**********************************************************/ +
19144/*! exports provided: default */ +
19145/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19146 +
19147"use strict"; +
19148__webpack_require__.r(__webpack_exports__); +
19149function lower() { +
19150 if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); +
19151} +
19152 +
19153/* harmony default export */ __webpack_exports__["default"] = (function() { +
19154 return this.each(lower); +
19155}); +
19156 +
19157 +
19158/***/ }), +
19159 +
19160/***/ "./node_modules/d3-selection/src/selection/merge.js": +
19161/*!**********************************************************!*\ +
19162 !*** ./node_modules/d3-selection/src/selection/merge.js ***! +
19163 \**********************************************************/ +
19164/*! exports provided: default */ +
19165/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19166 +
19167"use strict"; +
19168__webpack_require__.r(__webpack_exports__); +
19169/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); +
19170 +
19171 +
19172/* harmony default export */ __webpack_exports__["default"] = (function(selection) { +
19173 +
19174 for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { +
19175 for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { +
19176 if (node = group0[i] || group1[i]) { +
19177 merge[i] = node; +
19178 } +
19179 } +
19180 } +
19181 +
19182 for (; j < m0; ++j) { +
19183 merges[j] = groups0[j]; +
19184 } +
19185 +
19186 return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](merges, this._parents); +
19187}); +
19188 +
19189 +
19190/***/ }), +
19191 +
19192/***/ "./node_modules/d3-selection/src/selection/node.js": +
19193/*!*********************************************************!*\ +
19194 !*** ./node_modules/d3-selection/src/selection/node.js ***! +
19195 \*********************************************************/ +
19196/*! exports provided: default */ +
19197/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19198 +
19199"use strict"; +
19200__webpack_require__.r(__webpack_exports__); +
19201/* harmony default export */ __webpack_exports__["default"] = (function() { +
19202 +
19203 for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { +
19204 for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { +
19205 var node = group[i]; +
19206 if (node) return node; +
19207 } +
19208 } +
19209 +
19210 return null; +
19211}); +
19212 +
19213 +
19214/***/ }), +
19215 +
19216/***/ "./node_modules/d3-selection/src/selection/nodes.js": +
19217/*!**********************************************************!*\ +
19218 !*** ./node_modules/d3-selection/src/selection/nodes.js ***! +
19219 \**********************************************************/ +
19220/*! exports provided: default */ +
19221/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19222 +
19223"use strict"; +
19224__webpack_require__.r(__webpack_exports__); +
19225/* harmony default export */ __webpack_exports__["default"] = (function() { +
19226 var nodes = new Array(this.size()), i = -1; +
19227 this.each(function() { nodes[++i] = this; }); +
19228 return nodes; +
19229}); +
19230 +
19231 +
19232/***/ }), +
19233 +
19234/***/ "./node_modules/d3-selection/src/selection/on.js": +
19235/*!*******************************************************!*\ +
19236 !*** ./node_modules/d3-selection/src/selection/on.js ***! +
19237 \*******************************************************/ +
19238/*! exports provided: event, default, customEvent */ +
19239/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19240 +
19241"use strict"; +
19242__webpack_require__.r(__webpack_exports__); +
19243/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "event", function() { return event; }); +
19244/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "customEvent", function() { return customEvent; }); +
19245var filterEvents = {}; +
19246 +
19247var event = null; +
19248 +
19249if (typeof document !== "undefined") { +
19250 var element = document.documentElement; +
19251 if (!("onmouseenter" in element)) { +
19252 filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; +
19253 } +
19254} +
19255 +
19256function filterContextListener(listener, index, group) { +
19257 listener = contextListener(listener, index, group); +
19258 return function(event) { +
19259 var related = event.relatedTarget; +
19260 if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { +
19261 listener.call(this, event); +
19262 } +
19263 }; +
19264} +
19265 +
19266function contextListener(listener, index, group) { +
19267 return function(event1) { +
19268 var event0 = event; // Events can be reentrant (e.g., focus). +
19269 event = event1; +
19270 try { +
19271 listener.call(this, this.__data__, index, group); +
19272 } finally { +
19273 event = event0; +
19274 } +
19275 }; +
19276} +
19277 +
19278function parseTypenames(typenames) { +
19279 return typenames.trim().split(/^|\s+/).map(function(t) { +
19280 var name = "", i = t.indexOf("."); +
19281 if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); +
19282 return {type: t, name: name}; +
19283 }); +
19284} +
19285 +
19286function onRemove(typename) { +
19287 return function() { +
19288 var on = this.__on; +
19289 if (!on) return; +
19290 for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { +
19291 if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { +
19292 this.removeEventListener(o.type, o.listener, o.capture); +
19293 } else { +
19294 on[++i] = o; +
19295 } +
19296 } +
19297 if (++i) on.length = i; +
19298 else delete this.__on; +
19299 }; +
19300} +
19301 +
19302function onAdd(typename, value, capture) { +
19303 var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; +
19304 return function(d, i, group) { +
19305 var on = this.__on, o, listener = wrap(value, i, group); +
19306 if (on) for (var j = 0, m = on.length; j < m; ++j) { +
19307 if ((o = on[j]).type === typename.type && o.name === typename.name) { +
19308 this.removeEventListener(o.type, o.listener, o.capture); +
19309 this.addEventListener(o.type, o.listener = listener, o.capture = capture); +
19310 o.value = value; +
19311 return; +
19312 } +
19313 } +
19314 this.addEventListener(typename.type, listener, capture); +
19315 o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; +
19316 if (!on) this.__on = [o]; +
19317 else on.push(o); +
19318 }; +
19319} +
19320 +
19321/* harmony default export */ __webpack_exports__["default"] = (function(typename, value, capture) { +
19322 var typenames = parseTypenames(typename + ""), i, n = typenames.length, t; +
19323 +
19324 if (arguments.length < 2) { +
19325 var on = this.node().__on; +
19326 if (on) for (var j = 0, m = on.length, o; j < m; ++j) { +
19327 for (i = 0, o = on[j]; i < n; ++i) { +
19328 if ((t = typenames[i]).type === o.type && t.name === o.name) { +
19329 return o.value; +
19330 } +
19331 } +
19332 } +
19333 return; +
19334 } +
19335 +
19336 on = value ? onAdd : onRemove; +
19337 if (capture == null) capture = false; +
19338 for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); +
19339 return this; +
19340}); +
19341 +
19342function customEvent(event1, listener, that, args) { +
19343 var event0 = event; +
19344 event1.sourceEvent = event; +
19345 event = event1; +
19346 try { +
19347 return listener.apply(that, args); +
19348 } finally { +
19349 event = event0; +
19350 } +
19351} +
19352 +
19353 +
19354/***/ }), +
19355 +
19356/***/ "./node_modules/d3-selection/src/selection/order.js": +
19357/*!**********************************************************!*\ +
19358 !*** ./node_modules/d3-selection/src/selection/order.js ***! +
19359 \**********************************************************/ +
19360/*! exports provided: default */ +
19361/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19362 +
19363"use strict"; +
19364__webpack_require__.r(__webpack_exports__); +
19365/* harmony default export */ __webpack_exports__["default"] = (function() { +
19366 +
19367 for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { +
19368 for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { +
19369 if (node = group[i]) { +
19370 if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); +
19371 next = node; +
19372 } +
19373 } +
19374 } +
19375 +
19376 return this; +
19377}); +
19378 +
19379 +
19380/***/ }), +
19381 +
19382/***/ "./node_modules/d3-selection/src/selection/property.js": +
19383/*!*************************************************************!*\ +
19384 !*** ./node_modules/d3-selection/src/selection/property.js ***! +
19385 \*************************************************************/ +
19386/*! exports provided: default */ +
19387/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19388 +
19389"use strict"; +
19390__webpack_require__.r(__webpack_exports__); +
19391function propertyRemove(name) { +
19392 return function() { +
19393 delete this[name]; +
19394 }; +
19395} +
19396 +
19397function propertyConstant(name, value) { +
19398 return function() { +
19399 this[name] = value; +
19400 }; +
19401} +
19402 +
19403function propertyFunction(name, value) { +
19404 return function() { +
19405 var v = value.apply(this, arguments); +
19406 if (v == null) delete this[name]; +
19407 else this[name] = v; +
19408 }; +
19409} +
19410 +
19411/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { +
19412 return arguments.length > 1 +
19413 ? this.each((value == null +
19414 ? propertyRemove : typeof value === "function" +
19415 ? propertyFunction +
19416 : propertyConstant)(name, value)) +
19417 : this.node()[name]; +
19418}); +
19419 +
19420 +
19421/***/ }), +
19422 +
19423/***/ "./node_modules/d3-selection/src/selection/raise.js": +
19424/*!**********************************************************!*\ +
19425 !*** ./node_modules/d3-selection/src/selection/raise.js ***! +
19426 \**********************************************************/ +
19427/*! exports provided: default */ +
19428/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19429 +
19430"use strict"; +
19431__webpack_require__.r(__webpack_exports__); +
19432function raise() { +
19433 if (this.nextSibling) this.parentNode.appendChild(this); +
19434} +
19435 +
19436/* harmony default export */ __webpack_exports__["default"] = (function() { +
19437 return this.each(raise); +
19438}); +
19439 +
19440 +
19441/***/ }), +
19442 +
19443/***/ "./node_modules/d3-selection/src/selection/remove.js": +
19444/*!***********************************************************!*\ +
19445 !*** ./node_modules/d3-selection/src/selection/remove.js ***! +
19446 \***********************************************************/ +
19447/*! exports provided: default */ +
19448/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19449 +
19450"use strict"; +
19451__webpack_require__.r(__webpack_exports__); +
19452function remove() { +
19453 var parent = this.parentNode; +
19454 if (parent) parent.removeChild(this); +
19455} +
19456 +
19457/* harmony default export */ __webpack_exports__["default"] = (function() { +
19458 return this.each(remove); +
19459}); +
19460 +
19461 +
19462/***/ }), +
19463 +
19464/***/ "./node_modules/d3-selection/src/selection/select.js": +
19465/*!***********************************************************!*\ +
19466 !*** ./node_modules/d3-selection/src/selection/select.js ***! +
19467 \***********************************************************/ +
19468/*! exports provided: default */ +
19469/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19470 +
19471"use strict"; +
19472__webpack_require__.r(__webpack_exports__); +
19473/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); +
19474/* harmony import */ var _selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selector */ "./node_modules/d3-selection/src/selector.js"); +
19475 +
19476 +
19477 +
19478/* harmony default export */ __webpack_exports__["default"] = (function(select) { +
19479 if (typeof select !== "function") select = Object(_selector__WEBPACK_IMPORTED_MODULE_1__["default"])(select); +
19480 +
19481 for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { +
19482 for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { +
19483 if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { +
19484 if ("__data__" in node) subnode.__data__ = node.__data__; +
19485 subgroup[i] = subnode; +
19486 } +
19487 } +
19488 } +
19489 +
19490 return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](subgroups, this._parents); +
19491}); +
19492 +
19493 +
19494/***/ }), +
19495 +
19496/***/ "./node_modules/d3-selection/src/selection/selectAll.js": +
19497/*!**************************************************************!*\ +
19498 !*** ./node_modules/d3-selection/src/selection/selectAll.js ***! +
19499 \**************************************************************/ +
19500/*! exports provided: default */ +
19501/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19502 +
19503"use strict"; +
19504__webpack_require__.r(__webpack_exports__); +
19505/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); +
19506/* harmony import */ var _selectorAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../selectorAll */ "./node_modules/d3-selection/src/selectorAll.js"); +
19507 +
19508 +
19509 +
19510/* harmony default export */ __webpack_exports__["default"] = (function(select) { +
19511 if (typeof select !== "function") select = Object(_selectorAll__WEBPACK_IMPORTED_MODULE_1__["default"])(select); +
19512 +
19513 for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { +
19514 for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { +
19515 if (node = group[i]) { +
19516 subgroups.push(select.call(node, node.__data__, i, group)); +
19517 parents.push(node); +
19518 } +
19519 } +
19520 } +
19521 +
19522 return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](subgroups, parents); +
19523}); +
19524 +
19525 +
19526/***/ }), +
19527 +
19528/***/ "./node_modules/d3-selection/src/selection/size.js": +
19529/*!*********************************************************!*\ +
19530 !*** ./node_modules/d3-selection/src/selection/size.js ***! +
19531 \*********************************************************/ +
19532/*! exports provided: default */ +
19533/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19534 +
19535"use strict"; +
19536__webpack_require__.r(__webpack_exports__); +
19537/* harmony default export */ __webpack_exports__["default"] = (function() { +
19538 var size = 0; +
19539 this.each(function() { ++size; }); +
19540 return size; +
19541}); +
19542 +
19543 +
19544/***/ }), +
19545 +
19546/***/ "./node_modules/d3-selection/src/selection/sort.js": +
19547/*!*********************************************************!*\ +
19548 !*** ./node_modules/d3-selection/src/selection/sort.js ***! +
19549 \*********************************************************/ +
19550/*! exports provided: default */ +
19551/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19552 +
19553"use strict"; +
19554__webpack_require__.r(__webpack_exports__); +
19555/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-selection/src/selection/index.js"); +
19556 +
19557 +
19558/* harmony default export */ __webpack_exports__["default"] = (function(compare) { +
19559 if (!compare) compare = ascending; +
19560 +
19561 function compareNode(a, b) { +
19562 return a && b ? compare(a.__data__, b.__data__) : !a - !b; +
19563 } +
19564 +
19565 for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { +
19566 for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { +
19567 if (node = group[i]) { +
19568 sortgroup[i] = node; +
19569 } +
19570 } +
19571 sortgroup.sort(compareNode); +
19572 } +
19573 +
19574 return new _index__WEBPACK_IMPORTED_MODULE_0__["Selection"](sortgroups, this._parents).order(); +
19575}); +
19576 +
19577function ascending(a, b) { +
19578 return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +
19579} +
19580 +
19581 +
19582/***/ }), +
19583 +
19584/***/ "./node_modules/d3-selection/src/selection/sparse.js": +
19585/*!***********************************************************!*\ +
19586 !*** ./node_modules/d3-selection/src/selection/sparse.js ***! +
19587 \***********************************************************/ +
19588/*! exports provided: default */ +
19589/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19590 +
19591"use strict"; +
19592__webpack_require__.r(__webpack_exports__); +
19593/* harmony default export */ __webpack_exports__["default"] = (function(update) { +
19594 return new Array(update.length); +
19595}); +
19596 +
19597 +
19598/***/ }), +
19599 +
19600/***/ "./node_modules/d3-selection/src/selection/style.js": +
19601/*!**********************************************************!*\ +
19602 !*** ./node_modules/d3-selection/src/selection/style.js ***! +
19603 \**********************************************************/ +
19604/*! exports provided: default, styleValue */ +
19605/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19606 +
19607"use strict"; +
19608__webpack_require__.r(__webpack_exports__); +
19609/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "styleValue", function() { return styleValue; }); +
19610/* harmony import */ var _window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../window */ "./node_modules/d3-selection/src/window.js"); +
19611 +
19612 +
19613function styleRemove(name) { +
19614 return function() { +
19615 this.style.removeProperty(name); +
19616 }; +
19617} +
19618 +
19619function styleConstant(name, value, priority) { +
19620 return function() { +
19621 this.style.setProperty(name, value, priority); +
19622 }; +
19623} +
19624 +
19625function styleFunction(name, value, priority) { +
19626 return function() { +
19627 var v = value.apply(this, arguments); +
19628 if (v == null) this.style.removeProperty(name); +
19629 else this.style.setProperty(name, v, priority); +
19630 }; +
19631} +
19632 +
19633/* harmony default export */ __webpack_exports__["default"] = (function(name, value, priority) { +
19634 return arguments.length > 1 +
19635 ? this.each((value == null +
19636 ? styleRemove : typeof value === "function" +
19637 ? styleFunction +
19638 : styleConstant)(name, value, priority == null ? "" : priority)) +
19639 : styleValue(this.node(), name); +
19640}); +
19641 +
19642function styleValue(node, name) { +
19643 return node.style.getPropertyValue(name) +
19644 || Object(_window__WEBPACK_IMPORTED_MODULE_0__["default"])(node).getComputedStyle(node, null).getPropertyValue(name); +
19645} +
19646 +
19647 +
19648/***/ }), +
19649 +
19650/***/ "./node_modules/d3-selection/src/selection/text.js": +
19651/*!*********************************************************!*\ +
19652 !*** ./node_modules/d3-selection/src/selection/text.js ***! +
19653 \*********************************************************/ +
19654/*! exports provided: default */ +
19655/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19656 +
19657"use strict"; +
19658__webpack_require__.r(__webpack_exports__); +
19659function textRemove() { +
19660 this.textContent = ""; +
19661} +
19662 +
19663function textConstant(value) { +
19664 return function() { +
19665 this.textContent = value; +
19666 }; +
19667} +
19668 +
19669function textFunction(value) { +
19670 return function() { +
19671 var v = value.apply(this, arguments); +
19672 this.textContent = v == null ? "" : v; +
19673 }; +
19674} +
19675 +
19676/* harmony default export */ __webpack_exports__["default"] = (function(value) { +
19677 return arguments.length +
19678 ? this.each(value == null +
19679 ? textRemove : (typeof value === "function" +
19680 ? textFunction +
19681 : textConstant)(value)) +
19682 : this.node().textContent; +
19683}); +
19684 +
19685 +
19686/***/ }), +
19687 +
19688/***/ "./node_modules/d3-selection/src/selector.js": +
19689/*!***************************************************!*\ +
19690 !*** ./node_modules/d3-selection/src/selector.js ***! +
19691 \***************************************************/ +
19692/*! exports provided: default */ +
19693/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19694 +
19695"use strict"; +
19696__webpack_require__.r(__webpack_exports__); +
19697function none() {} +
19698 +
19699/* harmony default export */ __webpack_exports__["default"] = (function(selector) { +
19700 return selector == null ? none : function() { +
19701 return this.querySelector(selector); +
19702 }; +
19703}); +
19704 +
19705 +
19706/***/ }), +
19707 +
19708/***/ "./node_modules/d3-selection/src/selectorAll.js": +
19709/*!******************************************************!*\ +
19710 !*** ./node_modules/d3-selection/src/selectorAll.js ***! +
19711 \******************************************************/ +
19712/*! exports provided: default */ +
19713/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19714 +
19715"use strict"; +
19716__webpack_require__.r(__webpack_exports__); +
19717function empty() { +
19718 return []; +
19719} +
19720 +
19721/* harmony default export */ __webpack_exports__["default"] = (function(selector) { +
19722 return selector == null ? empty : function() { +
19723 return this.querySelectorAll(selector); +
19724 }; +
19725}); +
19726 +
19727 +
19728/***/ }), +
19729 +
19730/***/ "./node_modules/d3-selection/src/sourceEvent.js": +
19731/*!******************************************************!*\ +
19732 !*** ./node_modules/d3-selection/src/sourceEvent.js ***! +
19733 \******************************************************/ +
19734/*! exports provided: default */ +
19735/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19736 +
19737"use strict"; +
19738__webpack_require__.r(__webpack_exports__); +
19739/* harmony import */ var _selection_on__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/on */ "./node_modules/d3-selection/src/selection/on.js"); +
19740 +
19741 +
19742/* harmony default export */ __webpack_exports__["default"] = (function() { +
19743 var current = _selection_on__WEBPACK_IMPORTED_MODULE_0__["event"], source; +
19744 while (source = current.sourceEvent) current = source; +
19745 return current; +
19746}); +
19747 +
19748 +
19749/***/ }), +
19750 +
19751/***/ "./node_modules/d3-selection/src/touch.js": +
19752/*!************************************************!*\ +
19753 !*** ./node_modules/d3-selection/src/touch.js ***! +
19754 \************************************************/ +
19755/*! exports provided: default */ +
19756/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19757 +
19758"use strict"; +
19759__webpack_require__.r(__webpack_exports__); +
19760/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ "./node_modules/d3-selection/src/sourceEvent.js"); +
19761/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "./node_modules/d3-selection/src/point.js"); +
19762 +
19763 +
19764 +
19765/* harmony default export */ __webpack_exports__["default"] = (function(node, touches, identifier) { +
19766 if (arguments.length < 3) identifier = touches, touches = Object(_sourceEvent__WEBPACK_IMPORTED_MODULE_0__["default"])().changedTouches; +
19767 +
19768 for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { +
19769 if ((touch = touches[i]).identifier === identifier) { +
19770 return Object(_point__WEBPACK_IMPORTED_MODULE_1__["default"])(node, touch); +
19771 } +
19772 } +
19773 +
19774 return null; +
19775}); +
19776 +
19777 +
19778/***/ }), +
19779 +
19780/***/ "./node_modules/d3-selection/src/touches.js": +
19781/*!**************************************************!*\ +
19782 !*** ./node_modules/d3-selection/src/touches.js ***! +
19783 \**************************************************/ +
19784/*! exports provided: default */ +
19785/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19786 +
19787"use strict"; +
19788__webpack_require__.r(__webpack_exports__); +
19789/* harmony import */ var _sourceEvent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sourceEvent */ "./node_modules/d3-selection/src/sourceEvent.js"); +
19790/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "./node_modules/d3-selection/src/point.js"); +
19791 +
19792 +
19793 +
19794/* harmony default export */ __webpack_exports__["default"] = (function(node, touches) { +
19795 if (touches == null) touches = Object(_sourceEvent__WEBPACK_IMPORTED_MODULE_0__["default"])().touches; +
19796 +
19797 for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { +
19798 points[i] = Object(_point__WEBPACK_IMPORTED_MODULE_1__["default"])(node, touches[i]); +
19799 } +
19800 +
19801 return points; +
19802}); +
19803 +
19804 +
19805/***/ }), +
19806 +
19807/***/ "./node_modules/d3-selection/src/window.js": +
19808/*!*************************************************!*\ +
19809 !*** ./node_modules/d3-selection/src/window.js ***! +
19810 \*************************************************/ +
19811/*! exports provided: default */ +
19812/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19813 +
19814"use strict"; +
19815__webpack_require__.r(__webpack_exports__); +
19816/* harmony default export */ __webpack_exports__["default"] = (function(node) { +
19817 return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node +
19818 || (node.document && node) // node is a Window +
19819 || node.defaultView; // node is a Document +
19820}); +
19821 +
19822 +
19823/***/ }), +
19824 +
19825/***/ "./node_modules/d3-shape/src/arc.js": +
19826/*!******************************************!*\ +
19827 !*** ./node_modules/d3-shape/src/arc.js ***! +
19828 \******************************************/ +
19829/*! exports provided: default */ +
19830/***/ (function(module, __webpack_exports__, __webpack_require__) { +
19831 +
19832"use strict"; +
19833__webpack_require__.r(__webpack_exports__); +
19834/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/index.js"); +
19835/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-shape/src/constant.js"); +
19836/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./math */ "./node_modules/d3-shape/src/math.js"); +
19837 +
19838 +
19839 +
19840 +
19841function arcInnerRadius(d) { +
19842 return d.innerRadius; +
19843} +
19844 +
19845function arcOuterRadius(d) { +
19846 return d.outerRadius; +
19847} +
19848 +
19849function arcStartAngle(d) { +
19850 return d.startAngle; +
19851} +
19852 +
19853function arcEndAngle(d) { +
19854 return d.endAngle; +
19855} +
19856 +
19857function arcPadAngle(d) { +
19858 return d && d.padAngle; // Note: optional! +
19859} +
19860 +
19861function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { +
19862 var x10 = x1 - x0, y10 = y1 - y0, +
19863 x32 = x3 - x2, y32 = y3 - y2, +
19864 t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10); +
19865 return [x0 + t * x10, y0 + t * y10]; +
19866} +
19867 +
19868// Compute perpendicular offset line of length rc. +
19869// http://mathworld.wolfram.com/Circle-LineIntersection.html +
19870function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { +
19871 var x01 = x0 - x1, +
19872 y01 = y0 - y1, +
19873 lo = (cw ? rc : -rc) / Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(x01 * x01 + y01 * y01), +
19874 ox = lo * y01, +
19875 oy = -lo * x01, +
19876 x11 = x0 + ox, +
19877 y11 = y0 + oy, +
19878 x10 = x1 + ox, +
19879 y10 = y1 + oy, +
19880 x00 = (x11 + x10) / 2, +
19881 y00 = (y11 + y10) / 2, +
19882 dx = x10 - x11, +
19883 dy = y10 - y11, +
19884 d2 = dx * dx + dy * dy, +
19885 r = r1 - rc, +
19886 D = x11 * y10 - x10 * y11, +
19887 d = (dy < 0 ? -1 : 1) * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(Object(_math__WEBPACK_IMPORTED_MODULE_2__["max"])(0, r * r * d2 - D * D)), +
19888 cx0 = (D * dy - dx * d) / d2, +
19889 cy0 = (-D * dx - dy * d) / d2, +
19890 cx1 = (D * dy + dx * d) / d2, +
19891 cy1 = (-D * dx + dy * d) / d2, +
19892 dx0 = cx0 - x00, +
19893 dy0 = cy0 - y00, +
19894 dx1 = cx1 - x00, +
19895 dy1 = cy1 - y00; +
19896 +
19897 // Pick the closer of the two intersection points. +
19898 // TODO Is there a faster way to determine which intersection to use? +
19899 if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; +
19900 +
19901 return { +
19902 cx: cx0, +
19903 cy: cy0, +
19904 x01: -ox, +
19905 y01: -oy, +
19906 x11: cx0 * (r1 / r - 1), +
19907 y11: cy0 * (r1 / r - 1) +
19908 }; +
19909} +
19910 +
19911/* harmony default export */ __webpack_exports__["default"] = (function() { +
19912 var innerRadius = arcInnerRadius, +
19913 outerRadius = arcOuterRadius, +
19914 cornerRadius = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(0), +
19915 padRadius = null, +
19916 startAngle = arcStartAngle, +
19917 endAngle = arcEndAngle, +
19918 padAngle = arcPadAngle, +
19919 context = null; +
19920 +
19921 function arc() { +
19922 var buffer, +
19923 r, +
19924 r0 = +innerRadius.apply(this, arguments), +
19925 r1 = +outerRadius.apply(this, arguments), +
19926 a0 = startAngle.apply(this, arguments) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], +
19927 a1 = endAngle.apply(this, arguments) - _math__WEBPACK_IMPORTED_MODULE_2__["halfPi"], +
19928 da = Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(a1 - a0), +
19929 cw = a1 > a0; +
19930 +
19931 if (!context) context = buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])(); +
19932 +
19933 // Ensure that the outer radius is always larger than the inner radius. +
19934 if (r1 < r0) r = r1, r1 = r0, r0 = r; +
19935 +
19936 // Is it a point? +
19937 if (!(r1 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"])) context.moveTo(0, 0); +
19938 +
19939 // Or is it a circle or annulus? +
19940 else if (da > _math__WEBPACK_IMPORTED_MODULE_2__["tau"] - _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { +
19941 context.moveTo(r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a0), r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a0)); +
19942 context.arc(0, 0, r1, a0, a1, !cw); +
19943 if (r0 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { +
19944 context.moveTo(r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a1), r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a1)); +
19945 context.arc(0, 0, r0, a1, a0, cw); +
19946 } +
19947 } +
19948 +
19949 // Or is it a circular or annular sector? +
19950 else { +
19951 var a01 = a0, +
19952 a11 = a1, +
19953 a00 = a0, +
19954 a10 = a1, +
19955 da0 = da, +
19956 da1 = da, +
19957 ap = padAngle.apply(this, arguments) / 2, +
19958 rp = (ap > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) && (padRadius ? +padRadius.apply(this, arguments) : Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(r0 * r0 + r1 * r1)), +
19959 rc = Object(_math__WEBPACK_IMPORTED_MODULE_2__["min"])(Object(_math__WEBPACK_IMPORTED_MODULE_2__["abs"])(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), +
19960 rc0 = rc, +
19961 rc1 = rc, +
19962 t0, +
19963 t1; +
19964 +
19965 // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. +
19966 if (rp > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { +
19967 var p0 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["asin"])(rp / r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(ap)), +
19968 p1 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["asin"])(rp / r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(ap)); +
19969 if ((da0 -= p0 * 2) > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; +
19970 else da0 = 0, a00 = a10 = (a0 + a1) / 2; +
19971 if ((da1 -= p1 * 2) > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; +
19972 else da1 = 0, a01 = a11 = (a0 + a1) / 2; +
19973 } +
19974 +
19975 var x01 = r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a01), +
19976 y01 = r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a01), +
19977 x10 = r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a10), +
19978 y10 = r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a10); +
19979 +
19980 // Apply rounded corners? +
19981 if (rc > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { +
19982 var x11 = r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a11), +
19983 y11 = r1 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a11), +
19984 x00 = r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a00), +
19985 y00 = r0 * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a00); +
19986 +
19987 // Restrict the corner radius according to the sector angle. +
19988 if (da < _math__WEBPACK_IMPORTED_MODULE_2__["pi"]) { +
19989 var oc = da0 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"] ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10], +
19990 ax = x01 - oc[0], +
19991 ay = y01 - oc[1], +
19992 bx = x11 - oc[0], +
19993 by = y11 - oc[1], +
19994 kc = 1 / Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(Object(_math__WEBPACK_IMPORTED_MODULE_2__["acos"])((ax * bx + ay * by) / (Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(ax * ax + ay * ay) * Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(bx * bx + by * by))) / 2), +
19995 lc = Object(_math__WEBPACK_IMPORTED_MODULE_2__["sqrt"])(oc[0] * oc[0] + oc[1] * oc[1]); +
19996 rc0 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["min"])(rc, (r0 - lc) / (kc - 1)); +
19997 rc1 = Object(_math__WEBPACK_IMPORTED_MODULE_2__["min"])(rc, (r1 - lc) / (kc + 1)); +
19998 } +
19999 } +
20000 +
20001 // Is the sector collapsed to a line? +
20002 if (!(da1 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"])) context.moveTo(x01, y01); +
20003 +
20004 // Does the sector’s outer ring have rounded corners? +
20005 else if (rc1 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { +
20006 t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); +
20007 t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); +
20008 +
20009 context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); +
20010 +
20011 // Have the corners merged? +
20012 if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y01, t0.x01), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y01, t1.x01), !cw); +
20013 +
20014 // Otherwise, draw the two corners and the ring. +
20015 else { +
20016 context.arc(t0.cx, t0.cy, rc1, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y01, t0.x01), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y11, t0.x11), !cw); +
20017 context.arc(0, 0, r1, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.cy + t0.y11, t0.cx + t0.x11), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.cy + t1.y11, t1.cx + t1.x11), !cw); +
20018 context.arc(t1.cx, t1.cy, rc1, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y11, t1.x11), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y01, t1.x01), !cw); +
20019 } +
20020 } +
20021 +
20022 // Or is the outer ring just a circular arc? +
20023 else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); +
20024 +
20025 // Is there no inner ring, and it’s a circular sector? +
20026 // Or perhaps it’s an annular sector collapsed due to padding? +
20027 if (!(r0 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) || !(da0 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"])) context.lineTo(x10, y10); +
20028 +
20029 // Does the sector’s inner ring (or point) have rounded corners? +
20030 else if (rc0 > _math__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) { +
20031 t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); +
20032 t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); +
20033 +
20034 context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); +
20035 +
20036 // Have the corners merged? +
20037 if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y01, t0.x01), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y01, t1.x01), !cw); +
20038 +
20039 // Otherwise, draw the two corners and the ring. +
20040 else { +
20041 context.arc(t0.cx, t0.cy, rc0, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y01, t0.x01), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.y11, t0.x11), !cw); +
20042 context.arc(0, 0, r0, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t0.cy + t0.y11, t0.cx + t0.x11), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.cy + t1.y11, t1.cx + t1.x11), cw); +
20043 context.arc(t1.cx, t1.cy, rc0, Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y11, t1.x11), Object(_math__WEBPACK_IMPORTED_MODULE_2__["atan2"])(t1.y01, t1.x01), !cw); +
20044 } +
20045 } +
20046 +
20047 // Or is the inner ring just a circular arc? +
20048 else context.arc(0, 0, r0, a10, a00, cw); +
20049 } +
20050 +
20051 context.closePath(); +
20052 +
20053 if (buffer) return context = null, buffer + "" || null; +
20054 } +
20055 +
20056 arc.centroid = function() { +
20057 var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, +
20058 a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - _math__WEBPACK_IMPORTED_MODULE_2__["pi"] / 2; +
20059 return [Object(_math__WEBPACK_IMPORTED_MODULE_2__["cos"])(a) * r, Object(_math__WEBPACK_IMPORTED_MODULE_2__["sin"])(a) * r]; +
20060 }; +
20061 +
20062 arc.innerRadius = function(_) { +
20063 return arguments.length ? (innerRadius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : innerRadius; +
20064 }; +
20065 +
20066 arc.outerRadius = function(_) { +
20067 return arguments.length ? (outerRadius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : outerRadius; +
20068 }; +
20069 +
20070 arc.cornerRadius = function(_) { +
20071 return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : cornerRadius; +
20072 }; +
20073 +
20074 arc.padRadius = function(_) { +
20075 return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : padRadius; +
20076 }; +
20077 +
20078 arc.startAngle = function(_) { +
20079 return arguments.length ? (startAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : startAngle; +
20080 }; +
20081 +
20082 arc.endAngle = function(_) { +
20083 return arguments.length ? (endAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : endAngle; +
20084 }; +
20085 +
20086 arc.padAngle = function(_) { +
20087 return arguments.length ? (padAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), arc) : padAngle; +
20088 }; +
20089 +
20090 arc.context = function(_) { +
20091 return arguments.length ? ((context = _ == null ? null : _), arc) : context; +
20092 }; +
20093 +
20094 return arc; +
20095}); +
20096 +
20097 +
20098/***/ }), +
20099 +
20100/***/ "./node_modules/d3-shape/src/area.js": +
20101/*!*******************************************!*\ +
20102 !*** ./node_modules/d3-shape/src/area.js ***! +
20103 \*******************************************/ +
20104/*! exports provided: default */ +
20105/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20106 +
20107"use strict"; +
20108__webpack_require__.r(__webpack_exports__); +
20109/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/index.js"); +
20110/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-shape/src/constant.js"); +
20111/* harmony import */ var _curve_linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./curve/linear */ "./node_modules/d3-shape/src/curve/linear.js"); +
20112/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./line */ "./node_modules/d3-shape/src/line.js"); +
20113/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./point */ "./node_modules/d3-shape/src/point.js"); +
20114 +
20115 +
20116 +
20117 +
20118 +
20119 +
20120/* harmony default export */ __webpack_exports__["default"] = (function() { +
20121 var x0 = _point__WEBPACK_IMPORTED_MODULE_4__["x"], +
20122 x1 = null, +
20123 y0 = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(0), +
20124 y1 = _point__WEBPACK_IMPORTED_MODULE_4__["y"], +
20125 defined = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(true), +
20126 context = null, +
20127 curve = _curve_linear__WEBPACK_IMPORTED_MODULE_2__["default"], +
20128 output = null; +
20129 +
20130 function area(data) { +
20131 var i, +
20132 j, +
20133 k, +
20134 n = data.length, +
20135 d, +
20136 defined0 = false, +
20137 buffer, +
20138 x0z = new Array(n), +
20139 y0z = new Array(n); +
20140 +
20141 if (context == null) output = curve(buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])()); +
20142 +
20143 for (i = 0; i <= n; ++i) { +
20144 if (!(i < n && defined(d = data[i], i, data)) === defined0) { +
20145 if (defined0 = !defined0) { +
20146 j = i; +
20147 output.areaStart(); +
20148 output.lineStart(); +
20149 } else { +
20150 output.lineEnd(); +
20151 output.lineStart(); +
20152 for (k = i - 1; k >= j; --k) { +
20153 output.point(x0z[k], y0z[k]); +
20154 } +
20155 output.lineEnd(); +
20156 output.areaEnd(); +
20157 } +
20158 } +
20159 if (defined0) { +
20160 x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); +
20161 output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); +
20162 } +
20163 } +
20164 +
20165 if (buffer) return output = null, buffer + "" || null; +
20166 } +
20167 +
20168 function arealine() { +
20169 return Object(_line__WEBPACK_IMPORTED_MODULE_3__["default"])().defined(defined).curve(curve).context(context); +
20170 } +
20171 +
20172 area.x = function(_) { +
20173 return arguments.length ? (x0 = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), x1 = null, area) : x0; +
20174 }; +
20175 +
20176 area.x0 = function(_) { +
20177 return arguments.length ? (x0 = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : x0; +
20178 }; +
20179 +
20180 area.x1 = function(_) { +
20181 return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : x1; +
20182 }; +
20183 +
20184 area.y = function(_) { +
20185 return arguments.length ? (y0 = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), y1 = null, area) : y0; +
20186 }; +
20187 +
20188 area.y0 = function(_) { +
20189 return arguments.length ? (y0 = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : y0; +
20190 }; +
20191 +
20192 area.y1 = function(_) { +
20193 return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), area) : y1; +
20194 }; +
20195 +
20196 area.lineX0 = +
20197 area.lineY0 = function() { +
20198 return arealine().x(x0).y(y0); +
20199 }; +
20200 +
20201 area.lineY1 = function() { +
20202 return arealine().x(x0).y(y1); +
20203 }; +
20204 +
20205 area.lineX1 = function() { +
20206 return arealine().x(x1).y(y0); +
20207 }; +
20208 +
20209 area.defined = function(_) { +
20210 return arguments.length ? (defined = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), area) : defined; +
20211 }; +
20212 +
20213 area.curve = function(_) { +
20214 return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; +
20215 }; +
20216 +
20217 area.context = function(_) { +
20218 return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; +
20219 }; +
20220 +
20221 return area; +
20222}); +
20223 +
20224 +
20225/***/ }), +
20226 +
20227/***/ "./node_modules/d3-shape/src/areaRadial.js": +
20228/*!*************************************************!*\ +
20229 !*** ./node_modules/d3-shape/src/areaRadial.js ***! +
20230 \*************************************************/ +
20231/*! exports provided: default */ +
20232/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20233 +
20234"use strict"; +
20235__webpack_require__.r(__webpack_exports__); +
20236/* harmony import */ var _curve_radial__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./curve/radial */ "./node_modules/d3-shape/src/curve/radial.js"); +
20237/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area */ "./node_modules/d3-shape/src/area.js"); +
20238/* harmony import */ var _lineRadial__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lineRadial */ "./node_modules/d3-shape/src/lineRadial.js"); +
20239 +
20240 +
20241 +
20242 +
20243/* harmony default export */ __webpack_exports__["default"] = (function() { +
20244 var a = Object(_area__WEBPACK_IMPORTED_MODULE_1__["default"])().curve(_curve_radial__WEBPACK_IMPORTED_MODULE_0__["curveRadialLinear"]), +
20245 c = a.curve, +
20246 x0 = a.lineX0, +
20247 x1 = a.lineX1, +
20248 y0 = a.lineY0, +
20249 y1 = a.lineY1; +
20250 +
20251 a.angle = a.x, delete a.x; +
20252 a.startAngle = a.x0, delete a.x0; +
20253 a.endAngle = a.x1, delete a.x1; +
20254 a.radius = a.y, delete a.y; +
20255 a.innerRadius = a.y0, delete a.y0; +
20256 a.outerRadius = a.y1, delete a.y1; +
20257 a.lineStartAngle = function() { return Object(_lineRadial__WEBPACK_IMPORTED_MODULE_2__["lineRadial"])(x0()); }, delete a.lineX0; +
20258 a.lineEndAngle = function() { return Object(_lineRadial__WEBPACK_IMPORTED_MODULE_2__["lineRadial"])(x1()); }, delete a.lineX1; +
20259 a.lineInnerRadius = function() { return Object(_lineRadial__WEBPACK_IMPORTED_MODULE_2__["lineRadial"])(y0()); }, delete a.lineY0; +
20260 a.lineOuterRadius = function() { return Object(_lineRadial__WEBPACK_IMPORTED_MODULE_2__["lineRadial"])(y1()); }, delete a.lineY1; +
20261 +
20262 a.curve = function(_) { +
20263 return arguments.length ? c(Object(_curve_radial__WEBPACK_IMPORTED_MODULE_0__["default"])(_)) : c()._curve; +
20264 }; +
20265 +
20266 return a; +
20267}); +
20268 +
20269 +
20270/***/ }), +
20271 +
20272/***/ "./node_modules/d3-shape/src/array.js": +
20273/*!********************************************!*\ +
20274 !*** ./node_modules/d3-shape/src/array.js ***! +
20275 \********************************************/ +
20276/*! exports provided: slice */ +
20277/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20278 +
20279"use strict"; +
20280__webpack_require__.r(__webpack_exports__); +
20281/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "slice", function() { return slice; }); +
20282var slice = Array.prototype.slice; +
20283 +
20284 +
20285/***/ }), +
20286 +
20287/***/ "./node_modules/d3-shape/src/constant.js": +
20288/*!***********************************************!*\ +
20289 !*** ./node_modules/d3-shape/src/constant.js ***! +
20290 \***********************************************/ +
20291/*! exports provided: default */ +
20292/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20293 +
20294"use strict"; +
20295__webpack_require__.r(__webpack_exports__); +
20296/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
20297 return function constant() { +
20298 return x; +
20299 }; +
20300}); +
20301 +
20302 +
20303/***/ }), +
20304 +
20305/***/ "./node_modules/d3-shape/src/curve/basis.js": +
20306/*!**************************************************!*\ +
20307 !*** ./node_modules/d3-shape/src/curve/basis.js ***! +
20308 \**************************************************/ +
20309/*! exports provided: point, Basis, default */ +
20310/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20311 +
20312"use strict"; +
20313__webpack_require__.r(__webpack_exports__); +
20314/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "point", function() { return point; }); +
20315/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Basis", function() { return Basis; }); +
20316function point(that, x, y) { +
20317 that._context.bezierCurveTo( +
20318 (2 * that._x0 + that._x1) / 3, +
20319 (2 * that._y0 + that._y1) / 3, +
20320 (that._x0 + 2 * that._x1) / 3, +
20321 (that._y0 + 2 * that._y1) / 3, +
20322 (that._x0 + 4 * that._x1 + x) / 6, +
20323 (that._y0 + 4 * that._y1 + y) / 6 +
20324 ); +
20325} +
20326 +
20327function Basis(context) { +
20328 this._context = context; +
20329} +
20330 +
20331Basis.prototype = { +
20332 areaStart: function() { +
20333 this._line = 0; +
20334 }, +
20335 areaEnd: function() { +
20336 this._line = NaN; +
20337 }, +
20338 lineStart: function() { +
20339 this._x0 = this._x1 = +
20340 this._y0 = this._y1 = NaN; +
20341 this._point = 0; +
20342 }, +
20343 lineEnd: function() { +
20344 switch (this._point) { +
20345 case 3: point(this, this._x1, this._y1); // proceed +
20346 case 2: this._context.lineTo(this._x1, this._y1); break; +
20347 } +
20348 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); +
20349 this._line = 1 - this._line; +
20350 }, +
20351 point: function(x, y) { +
20352 x = +x, y = +y; +
20353 switch (this._point) { +
20354 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; +
20355 case 1: this._point = 2; break; +
20356 case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed +
20357 default: point(this, x, y); break; +
20358 } +
20359 this._x0 = this._x1, this._x1 = x; +
20360 this._y0 = this._y1, this._y1 = y; +
20361 } +
20362}; +
20363 +
20364/* harmony default export */ __webpack_exports__["default"] = (function(context) { +
20365 return new Basis(context); +
20366}); +
20367 +
20368 +
20369/***/ }), +
20370 +
20371/***/ "./node_modules/d3-shape/src/curve/basisClosed.js": +
20372/*!********************************************************!*\ +
20373 !*** ./node_modules/d3-shape/src/curve/basisClosed.js ***! +
20374 \********************************************************/ +
20375/*! exports provided: default */ +
20376/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20377 +
20378"use strict"; +
20379__webpack_require__.r(__webpack_exports__); +
20380/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "./node_modules/d3-shape/src/noop.js"); +
20381/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./basis */ "./node_modules/d3-shape/src/curve/basis.js"); +
20382 +
20383 +
20384 +
20385function BasisClosed(context) { +
20386 this._context = context; +
20387} +
20388 +
20389BasisClosed.prototype = { +
20390 areaStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
20391 areaEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
20392 lineStart: function() { +
20393 this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = +
20394 this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; +
20395 this._point = 0; +
20396 }, +
20397 lineEnd: function() { +
20398 switch (this._point) { +
20399 case 1: { +
20400 this._context.moveTo(this._x2, this._y2); +
20401 this._context.closePath(); +
20402 break; +
20403 } +
20404 case 2: { +
20405 this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); +
20406 this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); +
20407 this._context.closePath(); +
20408 break; +
20409 } +
20410 case 3: { +
20411 this.point(this._x2, this._y2); +
20412 this.point(this._x3, this._y3); +
20413 this.point(this._x4, this._y4); +
20414 break; +
20415 } +
20416 } +
20417 }, +
20418 point: function(x, y) { +
20419 x = +x, y = +y; +
20420 switch (this._point) { +
20421 case 0: this._point = 1; this._x2 = x, this._y2 = y; break; +
20422 case 1: this._point = 2; this._x3 = x, this._y3 = y; break; +
20423 case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; +
20424 default: Object(_basis__WEBPACK_IMPORTED_MODULE_1__["point"])(this, x, y); break; +
20425 } +
20426 this._x0 = this._x1, this._x1 = x; +
20427 this._y0 = this._y1, this._y1 = y; +
20428 } +
20429}; +
20430 +
20431/* harmony default export */ __webpack_exports__["default"] = (function(context) { +
20432 return new BasisClosed(context); +
20433}); +
20434 +
20435 +
20436/***/ }), +
20437 +
20438/***/ "./node_modules/d3-shape/src/curve/basisOpen.js": +
20439/*!******************************************************!*\ +
20440 !*** ./node_modules/d3-shape/src/curve/basisOpen.js ***! +
20441 \******************************************************/ +
20442/*! exports provided: default */ +
20443/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20444 +
20445"use strict"; +
20446__webpack_require__.r(__webpack_exports__); +
20447/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis */ "./node_modules/d3-shape/src/curve/basis.js"); +
20448 +
20449 +
20450function BasisOpen(context) { +
20451 this._context = context; +
20452} +
20453 +
20454BasisOpen.prototype = { +
20455 areaStart: function() { +
20456 this._line = 0; +
20457 }, +
20458 areaEnd: function() { +
20459 this._line = NaN; +
20460 }, +
20461 lineStart: function() { +
20462 this._x0 = this._x1 = +
20463 this._y0 = this._y1 = NaN; +
20464 this._point = 0; +
20465 }, +
20466 lineEnd: function() { +
20467 if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); +
20468 this._line = 1 - this._line; +
20469 }, +
20470 point: function(x, y) { +
20471 x = +x, y = +y; +
20472 switch (this._point) { +
20473 case 0: this._point = 1; break; +
20474 case 1: this._point = 2; break; +
20475 case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; +
20476 case 3: this._point = 4; // proceed +
20477 default: Object(_basis__WEBPACK_IMPORTED_MODULE_0__["point"])(this, x, y); break; +
20478 } +
20479 this._x0 = this._x1, this._x1 = x; +
20480 this._y0 = this._y1, this._y1 = y; +
20481 } +
20482}; +
20483 +
20484/* harmony default export */ __webpack_exports__["default"] = (function(context) { +
20485 return new BasisOpen(context); +
20486}); +
20487 +
20488 +
20489/***/ }), +
20490 +
20491/***/ "./node_modules/d3-shape/src/curve/bundle.js": +
20492/*!***************************************************!*\ +
20493 !*** ./node_modules/d3-shape/src/curve/bundle.js ***! +
20494 \***************************************************/ +
20495/*! exports provided: default */ +
20496/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20497 +
20498"use strict"; +
20499__webpack_require__.r(__webpack_exports__); +
20500/* harmony import */ var _basis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis */ "./node_modules/d3-shape/src/curve/basis.js"); +
20501 +
20502 +
20503function Bundle(context, beta) { +
20504 this._basis = new _basis__WEBPACK_IMPORTED_MODULE_0__["Basis"](context); +
20505 this._beta = beta; +
20506} +
20507 +
20508Bundle.prototype = { +
20509 lineStart: function() { +
20510 this._x = []; +
20511 this._y = []; +
20512 this._basis.lineStart(); +
20513 }, +
20514 lineEnd: function() { +
20515 var x = this._x, +
20516 y = this._y, +
20517 j = x.length - 1; +
20518 +
20519 if (j > 0) { +
20520 var x0 = x[0], +
20521 y0 = y[0], +
20522 dx = x[j] - x0, +
20523 dy = y[j] - y0, +
20524 i = -1, +
20525 t; +
20526 +
20527 while (++i <= j) { +
20528 t = i / j; +
20529 this._basis.point( +
20530 this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), +
20531 this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) +
20532 ); +
20533 } +
20534 } +
20535 +
20536 this._x = this._y = null; +
20537 this._basis.lineEnd(); +
20538 }, +
20539 point: function(x, y) { +
20540 this._x.push(+x); +
20541 this._y.push(+y); +
20542 } +
20543}; +
20544 +
20545/* harmony default export */ __webpack_exports__["default"] = ((function custom(beta) { +
20546 +
20547 function bundle(context) { +
20548 return beta === 1 ? new _basis__WEBPACK_IMPORTED_MODULE_0__["Basis"](context) : new Bundle(context, beta); +
20549 } +
20550 +
20551 bundle.beta = function(beta) { +
20552 return custom(+beta); +
20553 }; +
20554 +
20555 return bundle; +
20556})(0.85)); +
20557 +
20558 +
20559/***/ }), +
20560 +
20561/***/ "./node_modules/d3-shape/src/curve/cardinal.js": +
20562/*!*****************************************************!*\ +
20563 !*** ./node_modules/d3-shape/src/curve/cardinal.js ***! +
20564 \*****************************************************/ +
20565/*! exports provided: point, Cardinal, default */ +
20566/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20567 +
20568"use strict"; +
20569__webpack_require__.r(__webpack_exports__); +
20570/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "point", function() { return point; }); +
20571/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Cardinal", function() { return Cardinal; }); +
20572function point(that, x, y) { +
20573 that._context.bezierCurveTo( +
20574 that._x1 + that._k * (that._x2 - that._x0), +
20575 that._y1 + that._k * (that._y2 - that._y0), +
20576 that._x2 + that._k * (that._x1 - x), +
20577 that._y2 + that._k * (that._y1 - y), +
20578 that._x2, +
20579 that._y2 +
20580 ); +
20581} +
20582 +
20583function Cardinal(context, tension) { +
20584 this._context = context; +
20585 this._k = (1 - tension) / 6; +
20586} +
20587 +
20588Cardinal.prototype = { +
20589 areaStart: function() { +
20590 this._line = 0; +
20591 }, +
20592 areaEnd: function() { +
20593 this._line = NaN; +
20594 }, +
20595 lineStart: function() { +
20596 this._x0 = this._x1 = this._x2 = +
20597 this._y0 = this._y1 = this._y2 = NaN; +
20598 this._point = 0; +
20599 }, +
20600 lineEnd: function() { +
20601 switch (this._point) { +
20602 case 2: this._context.lineTo(this._x2, this._y2); break; +
20603 case 3: point(this, this._x1, this._y1); break; +
20604 } +
20605 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); +
20606 this._line = 1 - this._line; +
20607 }, +
20608 point: function(x, y) { +
20609 x = +x, y = +y; +
20610 switch (this._point) { +
20611 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; +
20612 case 1: this._point = 2; this._x1 = x, this._y1 = y; break; +
20613 case 2: this._point = 3; // proceed +
20614 default: point(this, x, y); break; +
20615 } +
20616 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; +
20617 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; +
20618 } +
20619}; +
20620 +
20621/* harmony default export */ __webpack_exports__["default"] = ((function custom(tension) { +
20622 +
20623 function cardinal(context) { +
20624 return new Cardinal(context, tension); +
20625 } +
20626 +
20627 cardinal.tension = function(tension) { +
20628 return custom(+tension); +
20629 }; +
20630 +
20631 return cardinal; +
20632})(0)); +
20633 +
20634 +
20635/***/ }), +
20636 +
20637/***/ "./node_modules/d3-shape/src/curve/cardinalClosed.js": +
20638/*!***********************************************************!*\ +
20639 !*** ./node_modules/d3-shape/src/curve/cardinalClosed.js ***! +
20640 \***********************************************************/ +
20641/*! exports provided: CardinalClosed, default */ +
20642/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20643 +
20644"use strict"; +
20645__webpack_require__.r(__webpack_exports__); +
20646/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CardinalClosed", function() { return CardinalClosed; }); +
20647/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "./node_modules/d3-shape/src/noop.js"); +
20648/* harmony import */ var _cardinal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinal */ "./node_modules/d3-shape/src/curve/cardinal.js"); +
20649 +
20650 +
20651 +
20652function CardinalClosed(context, tension) { +
20653 this._context = context; +
20654 this._k = (1 - tension) / 6; +
20655} +
20656 +
20657CardinalClosed.prototype = { +
20658 areaStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
20659 areaEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
20660 lineStart: function() { +
20661 this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = +
20662 this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; +
20663 this._point = 0; +
20664 }, +
20665 lineEnd: function() { +
20666 switch (this._point) { +
20667 case 1: { +
20668 this._context.moveTo(this._x3, this._y3); +
20669 this._context.closePath(); +
20670 break; +
20671 } +
20672 case 2: { +
20673 this._context.lineTo(this._x3, this._y3); +
20674 this._context.closePath(); +
20675 break; +
20676 } +
20677 case 3: { +
20678 this.point(this._x3, this._y3); +
20679 this.point(this._x4, this._y4); +
20680 this.point(this._x5, this._y5); +
20681 break; +
20682 } +
20683 } +
20684 }, +
20685 point: function(x, y) { +
20686 x = +x, y = +y; +
20687 switch (this._point) { +
20688 case 0: this._point = 1; this._x3 = x, this._y3 = y; break; +
20689 case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; +
20690 case 2: this._point = 3; this._x5 = x, this._y5 = y; break; +
20691 default: Object(_cardinal__WEBPACK_IMPORTED_MODULE_1__["point"])(this, x, y); break; +
20692 } +
20693 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; +
20694 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; +
20695 } +
20696}; +
20697 +
20698/* harmony default export */ __webpack_exports__["default"] = ((function custom(tension) { +
20699 +
20700 function cardinal(context) { +
20701 return new CardinalClosed(context, tension); +
20702 } +
20703 +
20704 cardinal.tension = function(tension) { +
20705 return custom(+tension); +
20706 }; +
20707 +
20708 return cardinal; +
20709})(0)); +
20710 +
20711 +
20712/***/ }), +
20713 +
20714/***/ "./node_modules/d3-shape/src/curve/cardinalOpen.js": +
20715/*!*********************************************************!*\ +
20716 !*** ./node_modules/d3-shape/src/curve/cardinalOpen.js ***! +
20717 \*********************************************************/ +
20718/*! exports provided: CardinalOpen, default */ +
20719/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20720 +
20721"use strict"; +
20722__webpack_require__.r(__webpack_exports__); +
20723/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CardinalOpen", function() { return CardinalOpen; }); +
20724/* harmony import */ var _cardinal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cardinal */ "./node_modules/d3-shape/src/curve/cardinal.js"); +
20725 +
20726 +
20727function CardinalOpen(context, tension) { +
20728 this._context = context; +
20729 this._k = (1 - tension) / 6; +
20730} +
20731 +
20732CardinalOpen.prototype = { +
20733 areaStart: function() { +
20734 this._line = 0; +
20735 }, +
20736 areaEnd: function() { +
20737 this._line = NaN; +
20738 }, +
20739 lineStart: function() { +
20740 this._x0 = this._x1 = this._x2 = +
20741 this._y0 = this._y1 = this._y2 = NaN; +
20742 this._point = 0; +
20743 }, +
20744 lineEnd: function() { +
20745 if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); +
20746 this._line = 1 - this._line; +
20747 }, +
20748 point: function(x, y) { +
20749 x = +x, y = +y; +
20750 switch (this._point) { +
20751 case 0: this._point = 1; break; +
20752 case 1: this._point = 2; break; +
20753 case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; +
20754 case 3: this._point = 4; // proceed +
20755 default: Object(_cardinal__WEBPACK_IMPORTED_MODULE_0__["point"])(this, x, y); break; +
20756 } +
20757 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; +
20758 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; +
20759 } +
20760}; +
20761 +
20762/* harmony default export */ __webpack_exports__["default"] = ((function custom(tension) { +
20763 +
20764 function cardinal(context) { +
20765 return new CardinalOpen(context, tension); +
20766 } +
20767 +
20768 cardinal.tension = function(tension) { +
20769 return custom(+tension); +
20770 }; +
20771 +
20772 return cardinal; +
20773})(0)); +
20774 +
20775 +
20776/***/ }), +
20777 +
20778/***/ "./node_modules/d3-shape/src/curve/catmullRom.js": +
20779/*!*******************************************************!*\ +
20780 !*** ./node_modules/d3-shape/src/curve/catmullRom.js ***! +
20781 \*******************************************************/ +
20782/*! exports provided: point, default */ +
20783/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20784 +
20785"use strict"; +
20786__webpack_require__.r(__webpack_exports__); +
20787/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "point", function() { return point; }); +
20788/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-shape/src/math.js"); +
20789/* harmony import */ var _cardinal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cardinal */ "./node_modules/d3-shape/src/curve/cardinal.js"); +
20790 +
20791 +
20792 +
20793function point(that, x, y) { +
20794 var x1 = that._x1, +
20795 y1 = that._y1, +
20796 x2 = that._x2, +
20797 y2 = that._y2; +
20798 +
20799 if (that._l01_a > _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) { +
20800 var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, +
20801 n = 3 * that._l01_a * (that._l01_a + that._l12_a); +
20802 x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; +
20803 y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; +
20804 } +
20805 +
20806 if (that._l23_a > _math__WEBPACK_IMPORTED_MODULE_0__["epsilon"]) { +
20807 var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, +
20808 m = 3 * that._l23_a * (that._l23_a + that._l12_a); +
20809 x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; +
20810 y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; +
20811 } +
20812 +
20813 that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); +
20814} +
20815 +
20816function CatmullRom(context, alpha) { +
20817 this._context = context; +
20818 this._alpha = alpha; +
20819} +
20820 +
20821CatmullRom.prototype = { +
20822 areaStart: function() { +
20823 this._line = 0; +
20824 }, +
20825 areaEnd: function() { +
20826 this._line = NaN; +
20827 }, +
20828 lineStart: function() { +
20829 this._x0 = this._x1 = this._x2 = +
20830 this._y0 = this._y1 = this._y2 = NaN; +
20831 this._l01_a = this._l12_a = this._l23_a = +
20832 this._l01_2a = this._l12_2a = this._l23_2a = +
20833 this._point = 0; +
20834 }, +
20835 lineEnd: function() { +
20836 switch (this._point) { +
20837 case 2: this._context.lineTo(this._x2, this._y2); break; +
20838 case 3: this.point(this._x2, this._y2); break; +
20839 } +
20840 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); +
20841 this._line = 1 - this._line; +
20842 }, +
20843 point: function(x, y) { +
20844 x = +x, y = +y; +
20845 +
20846 if (this._point) { +
20847 var x23 = this._x2 - x, +
20848 y23 = this._y2 - y; +
20849 this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); +
20850 } +
20851 +
20852 switch (this._point) { +
20853 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; +
20854 case 1: this._point = 2; break; +
20855 case 2: this._point = 3; // proceed +
20856 default: point(this, x, y); break; +
20857 } +
20858 +
20859 this._l01_a = this._l12_a, this._l12_a = this._l23_a; +
20860 this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; +
20861 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; +
20862 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; +
20863 } +
20864}; +
20865 +
20866/* harmony default export */ __webpack_exports__["default"] = ((function custom(alpha) { +
20867 +
20868 function catmullRom(context) { +
20869 return alpha ? new CatmullRom(context, alpha) : new _cardinal__WEBPACK_IMPORTED_MODULE_1__["Cardinal"](context, 0); +
20870 } +
20871 +
20872 catmullRom.alpha = function(alpha) { +
20873 return custom(+alpha); +
20874 }; +
20875 +
20876 return catmullRom; +
20877})(0.5)); +
20878 +
20879 +
20880/***/ }), +
20881 +
20882/***/ "./node_modules/d3-shape/src/curve/catmullRomClosed.js": +
20883/*!*************************************************************!*\ +
20884 !*** ./node_modules/d3-shape/src/curve/catmullRomClosed.js ***! +
20885 \*************************************************************/ +
20886/*! exports provided: default */ +
20887/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20888 +
20889"use strict"; +
20890__webpack_require__.r(__webpack_exports__); +
20891/* harmony import */ var _cardinalClosed__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cardinalClosed */ "./node_modules/d3-shape/src/curve/cardinalClosed.js"); +
20892/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop */ "./node_modules/d3-shape/src/noop.js"); +
20893/* harmony import */ var _catmullRom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./catmullRom */ "./node_modules/d3-shape/src/curve/catmullRom.js"); +
20894 +
20895 +
20896 +
20897 +
20898function CatmullRomClosed(context, alpha) { +
20899 this._context = context; +
20900 this._alpha = alpha; +
20901} +
20902 +
20903CatmullRomClosed.prototype = { +
20904 areaStart: _noop__WEBPACK_IMPORTED_MODULE_1__["default"], +
20905 areaEnd: _noop__WEBPACK_IMPORTED_MODULE_1__["default"], +
20906 lineStart: function() { +
20907 this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = +
20908 this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; +
20909 this._l01_a = this._l12_a = this._l23_a = +
20910 this._l01_2a = this._l12_2a = this._l23_2a = +
20911 this._point = 0; +
20912 }, +
20913 lineEnd: function() { +
20914 switch (this._point) { +
20915 case 1: { +
20916 this._context.moveTo(this._x3, this._y3); +
20917 this._context.closePath(); +
20918 break; +
20919 } +
20920 case 2: { +
20921 this._context.lineTo(this._x3, this._y3); +
20922 this._context.closePath(); +
20923 break; +
20924 } +
20925 case 3: { +
20926 this.point(this._x3, this._y3); +
20927 this.point(this._x4, this._y4); +
20928 this.point(this._x5, this._y5); +
20929 break; +
20930 } +
20931 } +
20932 }, +
20933 point: function(x, y) { +
20934 x = +x, y = +y; +
20935 +
20936 if (this._point) { +
20937 var x23 = this._x2 - x, +
20938 y23 = this._y2 - y; +
20939 this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); +
20940 } +
20941 +
20942 switch (this._point) { +
20943 case 0: this._point = 1; this._x3 = x, this._y3 = y; break; +
20944 case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; +
20945 case 2: this._point = 3; this._x5 = x, this._y5 = y; break; +
20946 default: Object(_catmullRom__WEBPACK_IMPORTED_MODULE_2__["point"])(this, x, y); break; +
20947 } +
20948 +
20949 this._l01_a = this._l12_a, this._l12_a = this._l23_a; +
20950 this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; +
20951 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; +
20952 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; +
20953 } +
20954}; +
20955 +
20956/* harmony default export */ __webpack_exports__["default"] = ((function custom(alpha) { +
20957 +
20958 function catmullRom(context) { +
20959 return alpha ? new CatmullRomClosed(context, alpha) : new _cardinalClosed__WEBPACK_IMPORTED_MODULE_0__["CardinalClosed"](context, 0); +
20960 } +
20961 +
20962 catmullRom.alpha = function(alpha) { +
20963 return custom(+alpha); +
20964 }; +
20965 +
20966 return catmullRom; +
20967})(0.5)); +
20968 +
20969 +
20970/***/ }), +
20971 +
20972/***/ "./node_modules/d3-shape/src/curve/catmullRomOpen.js": +
20973/*!***********************************************************!*\ +
20974 !*** ./node_modules/d3-shape/src/curve/catmullRomOpen.js ***! +
20975 \***********************************************************/ +
20976/*! exports provided: default */ +
20977/***/ (function(module, __webpack_exports__, __webpack_require__) { +
20978 +
20979"use strict"; +
20980__webpack_require__.r(__webpack_exports__); +
20981/* harmony import */ var _cardinalOpen__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cardinalOpen */ "./node_modules/d3-shape/src/curve/cardinalOpen.js"); +
20982/* harmony import */ var _catmullRom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./catmullRom */ "./node_modules/d3-shape/src/curve/catmullRom.js"); +
20983 +
20984 +
20985 +
20986function CatmullRomOpen(context, alpha) { +
20987 this._context = context; +
20988 this._alpha = alpha; +
20989} +
20990 +
20991CatmullRomOpen.prototype = { +
20992 areaStart: function() { +
20993 this._line = 0; +
20994 }, +
20995 areaEnd: function() { +
20996 this._line = NaN; +
20997 }, +
20998 lineStart: function() { +
20999 this._x0 = this._x1 = this._x2 = +
21000 this._y0 = this._y1 = this._y2 = NaN; +
21001 this._l01_a = this._l12_a = this._l23_a = +
21002 this._l01_2a = this._l12_2a = this._l23_2a = +
21003 this._point = 0; +
21004 }, +
21005 lineEnd: function() { +
21006 if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); +
21007 this._line = 1 - this._line; +
21008 }, +
21009 point: function(x, y) { +
21010 x = +x, y = +y; +
21011 +
21012 if (this._point) { +
21013 var x23 = this._x2 - x, +
21014 y23 = this._y2 - y; +
21015 this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); +
21016 } +
21017 +
21018 switch (this._point) { +
21019 case 0: this._point = 1; break; +
21020 case 1: this._point = 2; break; +
21021 case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; +
21022 case 3: this._point = 4; // proceed +
21023 default: Object(_catmullRom__WEBPACK_IMPORTED_MODULE_1__["point"])(this, x, y); break; +
21024 } +
21025 +
21026 this._l01_a = this._l12_a, this._l12_a = this._l23_a; +
21027 this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; +
21028 this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; +
21029 this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; +
21030 } +
21031}; +
21032 +
21033/* harmony default export */ __webpack_exports__["default"] = ((function custom(alpha) { +
21034 +
21035 function catmullRom(context) { +
21036 return alpha ? new CatmullRomOpen(context, alpha) : new _cardinalOpen__WEBPACK_IMPORTED_MODULE_0__["CardinalOpen"](context, 0); +
21037 } +
21038 +
21039 catmullRom.alpha = function(alpha) { +
21040 return custom(+alpha); +
21041 }; +
21042 +
21043 return catmullRom; +
21044})(0.5)); +
21045 +
21046 +
21047/***/ }), +
21048 +
21049/***/ "./node_modules/d3-shape/src/curve/linear.js": +
21050/*!***************************************************!*\ +
21051 !*** ./node_modules/d3-shape/src/curve/linear.js ***! +
21052 \***************************************************/ +
21053/*! exports provided: default */ +
21054/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21055 +
21056"use strict"; +
21057__webpack_require__.r(__webpack_exports__); +
21058function Linear(context) { +
21059 this._context = context; +
21060} +
21061 +
21062Linear.prototype = { +
21063 areaStart: function() { +
21064 this._line = 0; +
21065 }, +
21066 areaEnd: function() { +
21067 this._line = NaN; +
21068 }, +
21069 lineStart: function() { +
21070 this._point = 0; +
21071 }, +
21072 lineEnd: function() { +
21073 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); +
21074 this._line = 1 - this._line; +
21075 }, +
21076 point: function(x, y) { +
21077 x = +x, y = +y; +
21078 switch (this._point) { +
21079 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; +
21080 case 1: this._point = 2; // proceed +
21081 default: this._context.lineTo(x, y); break; +
21082 } +
21083 } +
21084}; +
21085 +
21086/* harmony default export */ __webpack_exports__["default"] = (function(context) { +
21087 return new Linear(context); +
21088}); +
21089 +
21090 +
21091/***/ }), +
21092 +
21093/***/ "./node_modules/d3-shape/src/curve/linearClosed.js": +
21094/*!*********************************************************!*\ +
21095 !*** ./node_modules/d3-shape/src/curve/linearClosed.js ***! +
21096 \*********************************************************/ +
21097/*! exports provided: default */ +
21098/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21099 +
21100"use strict"; +
21101__webpack_require__.r(__webpack_exports__); +
21102/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../noop */ "./node_modules/d3-shape/src/noop.js"); +
21103 +
21104 +
21105function LinearClosed(context) { +
21106 this._context = context; +
21107} +
21108 +
21109LinearClosed.prototype = { +
21110 areaStart: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
21111 areaEnd: _noop__WEBPACK_IMPORTED_MODULE_0__["default"], +
21112 lineStart: function() { +
21113 this._point = 0; +
21114 }, +
21115 lineEnd: function() { +
21116 if (this._point) this._context.closePath(); +
21117 }, +
21118 point: function(x, y) { +
21119 x = +x, y = +y; +
21120 if (this._point) this._context.lineTo(x, y); +
21121 else this._point = 1, this._context.moveTo(x, y); +
21122 } +
21123}; +
21124 +
21125/* harmony default export */ __webpack_exports__["default"] = (function(context) { +
21126 return new LinearClosed(context); +
21127}); +
21128 +
21129 +
21130/***/ }), +
21131 +
21132/***/ "./node_modules/d3-shape/src/curve/monotone.js": +
21133/*!*****************************************************!*\ +
21134 !*** ./node_modules/d3-shape/src/curve/monotone.js ***! +
21135 \*****************************************************/ +
21136/*! exports provided: monotoneX, monotoneY */ +
21137/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21138 +
21139"use strict"; +
21140__webpack_require__.r(__webpack_exports__); +
21141/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "monotoneX", function() { return monotoneX; }); +
21142/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "monotoneY", function() { return monotoneY; }); +
21143function sign(x) { +
21144 return x < 0 ? -1 : 1; +
21145} +
21146 +
21147// Calculate the slopes of the tangents (Hermite-type interpolation) based on +
21148// the following paper: Steffen, M. 1990. A Simple Method for Monotonic +
21149// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. +
21150// NOV(II), P. 443, 1990. +
21151function slope3(that, x2, y2) { +
21152 var h0 = that._x1 - that._x0, +
21153 h1 = x2 - that._x1, +
21154 s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), +
21155 s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), +
21156 p = (s0 * h1 + s1 * h0) / (h0 + h1); +
21157 return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; +
21158} +
21159 +
21160// Calculate a one-sided slope. +
21161function slope2(that, t) { +
21162 var h = that._x1 - that._x0; +
21163 return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; +
21164} +
21165 +
21166// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations +
21167// "you can express cubic Hermite interpolation in terms of cubic Bézier curves +
21168// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". +
21169function point(that, t0, t1) { +
21170 var x0 = that._x0, +
21171 y0 = that._y0, +
21172 x1 = that._x1, +
21173 y1 = that._y1, +
21174 dx = (x1 - x0) / 3; +
21175 that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); +
21176} +
21177 +
21178function MonotoneX(context) { +
21179 this._context = context; +
21180} +
21181 +
21182MonotoneX.prototype = { +
21183 areaStart: function() { +
21184 this._line = 0; +
21185 }, +
21186 areaEnd: function() { +
21187 this._line = NaN; +
21188 }, +
21189 lineStart: function() { +
21190 this._x0 = this._x1 = +
21191 this._y0 = this._y1 = +
21192 this._t0 = NaN; +
21193 this._point = 0; +
21194 }, +
21195 lineEnd: function() { +
21196 switch (this._point) { +
21197 case 2: this._context.lineTo(this._x1, this._y1); break; +
21198 case 3: point(this, this._t0, slope2(this, this._t0)); break; +
21199 } +
21200 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); +
21201 this._line = 1 - this._line; +
21202 }, +
21203 point: function(x, y) { +
21204 var t1 = NaN; +
21205 +
21206 x = +x, y = +y; +
21207 if (x === this._x1 && y === this._y1) return; // Ignore coincident points. +
21208 switch (this._point) { +
21209 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; +
21210 case 1: this._point = 2; break; +
21211 case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break; +
21212 default: point(this, this._t0, t1 = slope3(this, x, y)); break; +
21213 } +
21214 +
21215 this._x0 = this._x1, this._x1 = x; +
21216 this._y0 = this._y1, this._y1 = y; +
21217 this._t0 = t1; +
21218 } +
21219} +
21220 +
21221function MonotoneY(context) { +
21222 this._context = new ReflectContext(context); +
21223} +
21224 +
21225(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { +
21226 MonotoneX.prototype.point.call(this, y, x); +
21227}; +
21228 +
21229function ReflectContext(context) { +
21230 this._context = context; +
21231} +
21232 +
21233ReflectContext.prototype = { +
21234 moveTo: function(x, y) { this._context.moveTo(y, x); }, +
21235 closePath: function() { this._context.closePath(); }, +
21236 lineTo: function(x, y) { this._context.lineTo(y, x); }, +
21237 bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } +
21238}; +
21239 +
21240function monotoneX(context) { +
21241 return new MonotoneX(context); +
21242} +
21243 +
21244function monotoneY(context) { +
21245 return new MonotoneY(context); +
21246} +
21247 +
21248 +
21249/***/ }), +
21250 +
21251/***/ "./node_modules/d3-shape/src/curve/natural.js": +
21252/*!****************************************************!*\ +
21253 !*** ./node_modules/d3-shape/src/curve/natural.js ***! +
21254 \****************************************************/ +
21255/*! exports provided: default */ +
21256/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21257 +
21258"use strict"; +
21259__webpack_require__.r(__webpack_exports__); +
21260function Natural(context) { +
21261 this._context = context; +
21262} +
21263 +
21264Natural.prototype = { +
21265 areaStart: function() { +
21266 this._line = 0; +
21267 }, +
21268 areaEnd: function() { +
21269 this._line = NaN; +
21270 }, +
21271 lineStart: function() { +
21272 this._x = []; +
21273 this._y = []; +
21274 }, +
21275 lineEnd: function() { +
21276 var x = this._x, +
21277 y = this._y, +
21278 n = x.length; +
21279 +
21280 if (n) { +
21281 this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); +
21282 if (n === 2) { +
21283 this._context.lineTo(x[1], y[1]); +
21284 } else { +
21285 var px = controlPoints(x), +
21286 py = controlPoints(y); +
21287 for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { +
21288 this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); +
21289 } +
21290 } +
21291 } +
21292 +
21293 if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); +
21294 this._line = 1 - this._line; +
21295 this._x = this._y = null; +
21296 }, +
21297 point: function(x, y) { +
21298 this._x.push(+x); +
21299 this._y.push(+y); +
21300 } +
21301}; +
21302 +
21303// See https://www.particleincell.com/2012/bezier-splines/ for derivation. +
21304function controlPoints(x) { +
21305 var i, +
21306 n = x.length - 1, +
21307 m, +
21308 a = new Array(n), +
21309 b = new Array(n), +
21310 r = new Array(n); +
21311 a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; +
21312 for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; +
21313 a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; +
21314 for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; +
21315 a[n - 1] = r[n - 1] / b[n - 1]; +
21316 for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; +
21317 b[n - 1] = (x[n] + a[n - 1]) / 2; +
21318 for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; +
21319 return [a, b]; +
21320} +
21321 +
21322/* harmony default export */ __webpack_exports__["default"] = (function(context) { +
21323 return new Natural(context); +
21324}); +
21325 +
21326 +
21327/***/ }), +
21328 +
21329/***/ "./node_modules/d3-shape/src/curve/radial.js": +
21330/*!***************************************************!*\ +
21331 !*** ./node_modules/d3-shape/src/curve/radial.js ***! +
21332 \***************************************************/ +
21333/*! exports provided: curveRadialLinear, default */ +
21334/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21335 +
21336"use strict"; +
21337__webpack_require__.r(__webpack_exports__); +
21338/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "curveRadialLinear", function() { return curveRadialLinear; }); +
21339/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return curveRadial; }); +
21340/* harmony import */ var _linear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linear */ "./node_modules/d3-shape/src/curve/linear.js"); +
21341 +
21342 +
21343var curveRadialLinear = curveRadial(_linear__WEBPACK_IMPORTED_MODULE_0__["default"]); +
21344 +
21345function Radial(curve) { +
21346 this._curve = curve; +
21347} +
21348 +
21349Radial.prototype = { +
21350 areaStart: function() { +
21351 this._curve.areaStart(); +
21352 }, +
21353 areaEnd: function() { +
21354 this._curve.areaEnd(); +
21355 }, +
21356 lineStart: function() { +
21357 this._curve.lineStart(); +
21358 }, +
21359 lineEnd: function() { +
21360 this._curve.lineEnd(); +
21361 }, +
21362 point: function(a, r) { +
21363 this._curve.point(r * Math.sin(a), r * -Math.cos(a)); +
21364 } +
21365}; +
21366 +
21367function curveRadial(curve) { +
21368 +
21369 function radial(context) { +
21370 return new Radial(curve(context)); +
21371 } +
21372 +
21373 radial._curve = curve; +
21374 +
21375 return radial; +
21376} +
21377 +
21378 +
21379/***/ }), +
21380 +
21381/***/ "./node_modules/d3-shape/src/curve/step.js": +
21382/*!*************************************************!*\ +
21383 !*** ./node_modules/d3-shape/src/curve/step.js ***! +
21384 \*************************************************/ +
21385/*! exports provided: default, stepBefore, stepAfter */ +
21386/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21387 +
21388"use strict"; +
21389__webpack_require__.r(__webpack_exports__); +
21390/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stepBefore", function() { return stepBefore; }); +
21391/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stepAfter", function() { return stepAfter; }); +
21392function Step(context, t) { +
21393 this._context = context; +
21394 this._t = t; +
21395} +
21396 +
21397Step.prototype = { +
21398 areaStart: function() { +
21399 this._line = 0; +
21400 }, +
21401 areaEnd: function() { +
21402 this._line = NaN; +
21403 }, +
21404 lineStart: function() { +
21405 this._x = this._y = NaN; +
21406 this._point = 0; +
21407 }, +
21408 lineEnd: function() { +
21409 if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); +
21410 if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); +
21411 if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; +
21412 }, +
21413 point: function(x, y) { +
21414 x = +x, y = +y; +
21415 switch (this._point) { +
21416 case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; +
21417 case 1: this._point = 2; // proceed +
21418 default: { +
21419 if (this._t <= 0) { +
21420 this._context.lineTo(this._x, y); +
21421 this._context.lineTo(x, y); +
21422 } else { +
21423 var x1 = this._x * (1 - this._t) + x * this._t; +
21424 this._context.lineTo(x1, this._y); +
21425 this._context.lineTo(x1, y); +
21426 } +
21427 break; +
21428 } +
21429 } +
21430 this._x = x, this._y = y; +
21431 } +
21432}; +
21433 +
21434/* harmony default export */ __webpack_exports__["default"] = (function(context) { +
21435 return new Step(context, 0.5); +
21436}); +
21437 +
21438function stepBefore(context) { +
21439 return new Step(context, 0); +
21440} +
21441 +
21442function stepAfter(context) { +
21443 return new Step(context, 1); +
21444} +
21445 +
21446 +
21447/***/ }), +
21448 +
21449/***/ "./node_modules/d3-shape/src/descending.js": +
21450/*!*************************************************!*\ +
21451 !*** ./node_modules/d3-shape/src/descending.js ***! +
21452 \*************************************************/ +
21453/*! exports provided: default */ +
21454/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21455 +
21456"use strict"; +
21457__webpack_require__.r(__webpack_exports__); +
21458/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
21459 return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; +
21460}); +
21461 +
21462 +
21463/***/ }), +
21464 +
21465/***/ "./node_modules/d3-shape/src/identity.js": +
21466/*!***********************************************!*\ +
21467 !*** ./node_modules/d3-shape/src/identity.js ***! +
21468 \***********************************************/ +
21469/*! exports provided: default */ +
21470/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21471 +
21472"use strict"; +
21473__webpack_require__.r(__webpack_exports__); +
21474/* harmony default export */ __webpack_exports__["default"] = (function(d) { +
21475 return d; +
21476}); +
21477 +
21478 +
21479/***/ }), +
21480 +
21481/***/ "./node_modules/d3-shape/src/index.js": +
21482/*!********************************************!*\ +
21483 !*** ./node_modules/d3-shape/src/index.js ***! +
21484 \********************************************/ +
21485/*! exports provided: arc, area, line, pie, areaRadial, radialArea, lineRadial, radialLine, pointRadial, linkHorizontal, linkVertical, linkRadial, symbol, symbols, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye, curveBasisClosed, curveBasisOpen, curveBasis, curveBundle, curveCardinalClosed, curveCardinalOpen, curveCardinal, curveCatmullRomClosed, curveCatmullRomOpen, curveCatmullRom, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore, stack, stackOffsetExpand, stackOffsetDiverging, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderAscending, stackOrderDescending, stackOrderInsideOut, stackOrderNone, stackOrderReverse */ +
21486/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21487 +
21488"use strict"; +
21489__webpack_require__.r(__webpack_exports__); +
21490/* harmony import */ var _arc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arc */ "./node_modules/d3-shape/src/arc.js"); +
21491/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "arc", function() { return _arc__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
21492 +
21493/* harmony import */ var _area__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./area */ "./node_modules/d3-shape/src/area.js"); +
21494/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "area", function() { return _area__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
21495 +
21496/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./line */ "./node_modules/d3-shape/src/line.js"); +
21497/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "line", function() { return _line__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
21498 +
21499/* harmony import */ var _pie__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pie */ "./node_modules/d3-shape/src/pie.js"); +
21500/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pie", function() { return _pie__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
21501 +
21502/* harmony import */ var _areaRadial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./areaRadial */ "./node_modules/d3-shape/src/areaRadial.js"); +
21503/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "areaRadial", function() { return _areaRadial__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
21504 +
21505/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "radialArea", function() { return _areaRadial__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
21506 +
21507/* harmony import */ var _lineRadial__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lineRadial */ "./node_modules/d3-shape/src/lineRadial.js"); +
21508/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lineRadial", function() { return _lineRadial__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
21509 +
21510/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "radialLine", function() { return _lineRadial__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
21511 +
21512/* harmony import */ var _pointRadial__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pointRadial */ "./node_modules/d3-shape/src/pointRadial.js"); +
21513/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pointRadial", function() { return _pointRadial__WEBPACK_IMPORTED_MODULE_6__["default"]; }); +
21514 +
21515/* harmony import */ var _link_index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./link/index */ "./node_modules/d3-shape/src/link/index.js"); +
21516/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkHorizontal", function() { return _link_index__WEBPACK_IMPORTED_MODULE_7__["linkHorizontal"]; }); +
21517 +
21518/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkVertical", function() { return _link_index__WEBPACK_IMPORTED_MODULE_7__["linkVertical"]; }); +
21519 +
21520/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkRadial", function() { return _link_index__WEBPACK_IMPORTED_MODULE_7__["linkRadial"]; }); +
21521 +
21522/* harmony import */ var _symbol__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./symbol */ "./node_modules/d3-shape/src/symbol.js"); +
21523/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbol", function() { return _symbol__WEBPACK_IMPORTED_MODULE_8__["default"]; }); +
21524 +
21525/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbols", function() { return _symbol__WEBPACK_IMPORTED_MODULE_8__["symbols"]; }); +
21526 +
21527/* harmony import */ var _symbol_circle__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./symbol/circle */ "./node_modules/d3-shape/src/symbol/circle.js"); +
21528/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolCircle", function() { return _symbol_circle__WEBPACK_IMPORTED_MODULE_9__["default"]; }); +
21529 +
21530/* harmony import */ var _symbol_cross__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./symbol/cross */ "./node_modules/d3-shape/src/symbol/cross.js"); +
21531/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolCross", function() { return _symbol_cross__WEBPACK_IMPORTED_MODULE_10__["default"]; }); +
21532 +
21533/* harmony import */ var _symbol_diamond__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./symbol/diamond */ "./node_modules/d3-shape/src/symbol/diamond.js"); +
21534/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolDiamond", function() { return _symbol_diamond__WEBPACK_IMPORTED_MODULE_11__["default"]; }); +
21535 +
21536/* harmony import */ var _symbol_square__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./symbol/square */ "./node_modules/d3-shape/src/symbol/square.js"); +
21537/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolSquare", function() { return _symbol_square__WEBPACK_IMPORTED_MODULE_12__["default"]; }); +
21538 +
21539/* harmony import */ var _symbol_star__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./symbol/star */ "./node_modules/d3-shape/src/symbol/star.js"); +
21540/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolStar", function() { return _symbol_star__WEBPACK_IMPORTED_MODULE_13__["default"]; }); +
21541 +
21542/* harmony import */ var _symbol_triangle__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./symbol/triangle */ "./node_modules/d3-shape/src/symbol/triangle.js"); +
21543/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolTriangle", function() { return _symbol_triangle__WEBPACK_IMPORTED_MODULE_14__["default"]; }); +
21544 +
21545/* harmony import */ var _symbol_wye__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./symbol/wye */ "./node_modules/d3-shape/src/symbol/wye.js"); +
21546/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolWye", function() { return _symbol_wye__WEBPACK_IMPORTED_MODULE_15__["default"]; }); +
21547 +
21548/* harmony import */ var _curve_basisClosed__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./curve/basisClosed */ "./node_modules/d3-shape/src/curve/basisClosed.js"); +
21549/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasisClosed", function() { return _curve_basisClosed__WEBPACK_IMPORTED_MODULE_16__["default"]; }); +
21550 +
21551/* harmony import */ var _curve_basisOpen__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./curve/basisOpen */ "./node_modules/d3-shape/src/curve/basisOpen.js"); +
21552/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasisOpen", function() { return _curve_basisOpen__WEBPACK_IMPORTED_MODULE_17__["default"]; }); +
21553 +
21554/* harmony import */ var _curve_basis__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./curve/basis */ "./node_modules/d3-shape/src/curve/basis.js"); +
21555/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasis", function() { return _curve_basis__WEBPACK_IMPORTED_MODULE_18__["default"]; }); +
21556 +
21557/* harmony import */ var _curve_bundle__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./curve/bundle */ "./node_modules/d3-shape/src/curve/bundle.js"); +
21558/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBundle", function() { return _curve_bundle__WEBPACK_IMPORTED_MODULE_19__["default"]; }); +
21559 +
21560/* harmony import */ var _curve_cardinalClosed__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./curve/cardinalClosed */ "./node_modules/d3-shape/src/curve/cardinalClosed.js"); +
21561/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinalClosed", function() { return _curve_cardinalClosed__WEBPACK_IMPORTED_MODULE_20__["default"]; }); +
21562 +
21563/* harmony import */ var _curve_cardinalOpen__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./curve/cardinalOpen */ "./node_modules/d3-shape/src/curve/cardinalOpen.js"); +
21564/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinalOpen", function() { return _curve_cardinalOpen__WEBPACK_IMPORTED_MODULE_21__["default"]; }); +
21565 +
21566/* harmony import */ var _curve_cardinal__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./curve/cardinal */ "./node_modules/d3-shape/src/curve/cardinal.js"); +
21567/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinal", function() { return _curve_cardinal__WEBPACK_IMPORTED_MODULE_22__["default"]; }); +
21568 +
21569/* harmony import */ var _curve_catmullRomClosed__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./curve/catmullRomClosed */ "./node_modules/d3-shape/src/curve/catmullRomClosed.js"); +
21570/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomClosed", function() { return _curve_catmullRomClosed__WEBPACK_IMPORTED_MODULE_23__["default"]; }); +
21571 +
21572/* harmony import */ var _curve_catmullRomOpen__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./curve/catmullRomOpen */ "./node_modules/d3-shape/src/curve/catmullRomOpen.js"); +
21573/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomOpen", function() { return _curve_catmullRomOpen__WEBPACK_IMPORTED_MODULE_24__["default"]; }); +
21574 +
21575/* harmony import */ var _curve_catmullRom__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./curve/catmullRom */ "./node_modules/d3-shape/src/curve/catmullRom.js"); +
21576/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRom", function() { return _curve_catmullRom__WEBPACK_IMPORTED_MODULE_25__["default"]; }); +
21577 +
21578/* harmony import */ var _curve_linearClosed__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./curve/linearClosed */ "./node_modules/d3-shape/src/curve/linearClosed.js"); +
21579/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveLinearClosed", function() { return _curve_linearClosed__WEBPACK_IMPORTED_MODULE_26__["default"]; }); +
21580 +
21581/* harmony import */ var _curve_linear__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./curve/linear */ "./node_modules/d3-shape/src/curve/linear.js"); +
21582/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveLinear", function() { return _curve_linear__WEBPACK_IMPORTED_MODULE_27__["default"]; }); +
21583 +
21584/* harmony import */ var _curve_monotone__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./curve/monotone */ "./node_modules/d3-shape/src/curve/monotone.js"); +
21585/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneX", function() { return _curve_monotone__WEBPACK_IMPORTED_MODULE_28__["monotoneX"]; }); +
21586 +
21587/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneY", function() { return _curve_monotone__WEBPACK_IMPORTED_MODULE_28__["monotoneY"]; }); +
21588 +
21589/* harmony import */ var _curve_natural__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./curve/natural */ "./node_modules/d3-shape/src/curve/natural.js"); +
21590/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveNatural", function() { return _curve_natural__WEBPACK_IMPORTED_MODULE_29__["default"]; }); +
21591 +
21592/* harmony import */ var _curve_step__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./curve/step */ "./node_modules/d3-shape/src/curve/step.js"); +
21593/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStep", function() { return _curve_step__WEBPACK_IMPORTED_MODULE_30__["default"]; }); +
21594 +
21595/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStepAfter", function() { return _curve_step__WEBPACK_IMPORTED_MODULE_30__["stepAfter"]; }); +
21596 +
21597/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStepBefore", function() { return _curve_step__WEBPACK_IMPORTED_MODULE_30__["stepBefore"]; }); +
21598 +
21599/* harmony import */ var _stack__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./stack */ "./node_modules/d3-shape/src/stack.js"); +
21600/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stack", function() { return _stack__WEBPACK_IMPORTED_MODULE_31__["default"]; }); +
21601 +
21602/* harmony import */ var _offset_expand__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./offset/expand */ "./node_modules/d3-shape/src/offset/expand.js"); +
21603/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetExpand", function() { return _offset_expand__WEBPACK_IMPORTED_MODULE_32__["default"]; }); +
21604 +
21605/* harmony import */ var _offset_diverging__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./offset/diverging */ "./node_modules/d3-shape/src/offset/diverging.js"); +
21606/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetDiverging", function() { return _offset_diverging__WEBPACK_IMPORTED_MODULE_33__["default"]; }); +
21607 +
21608/* harmony import */ var _offset_none__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./offset/none */ "./node_modules/d3-shape/src/offset/none.js"); +
21609/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetNone", function() { return _offset_none__WEBPACK_IMPORTED_MODULE_34__["default"]; }); +
21610 +
21611/* harmony import */ var _offset_silhouette__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./offset/silhouette */ "./node_modules/d3-shape/src/offset/silhouette.js"); +
21612/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetSilhouette", function() { return _offset_silhouette__WEBPACK_IMPORTED_MODULE_35__["default"]; }); +
21613 +
21614/* harmony import */ var _offset_wiggle__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./offset/wiggle */ "./node_modules/d3-shape/src/offset/wiggle.js"); +
21615/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetWiggle", function() { return _offset_wiggle__WEBPACK_IMPORTED_MODULE_36__["default"]; }); +
21616 +
21617/* harmony import */ var _order_ascending__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./order/ascending */ "./node_modules/d3-shape/src/order/ascending.js"); +
21618/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderAscending", function() { return _order_ascending__WEBPACK_IMPORTED_MODULE_37__["default"]; }); +
21619 +
21620/* harmony import */ var _order_descending__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./order/descending */ "./node_modules/d3-shape/src/order/descending.js"); +
21621/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderDescending", function() { return _order_descending__WEBPACK_IMPORTED_MODULE_38__["default"]; }); +
21622 +
21623/* harmony import */ var _order_insideOut__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./order/insideOut */ "./node_modules/d3-shape/src/order/insideOut.js"); +
21624/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderInsideOut", function() { return _order_insideOut__WEBPACK_IMPORTED_MODULE_39__["default"]; }); +
21625 +
21626/* harmony import */ var _order_none__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./order/none */ "./node_modules/d3-shape/src/order/none.js"); +
21627/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderNone", function() { return _order_none__WEBPACK_IMPORTED_MODULE_40__["default"]; }); +
21628 +
21629/* harmony import */ var _order_reverse__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./order/reverse */ "./node_modules/d3-shape/src/order/reverse.js"); +
21630/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderReverse", function() { return _order_reverse__WEBPACK_IMPORTED_MODULE_41__["default"]; }); +
21631 +
21632 +
21633 +
21634 +
21635 +
21636 // Note: radialArea is deprecated! +
21637 // Note: radialLine is deprecated! +
21638 +
21639 +
21640 +
21641 +
21642 +
21643 +
21644 +
21645 +
21646 +
21647 +
21648 +
21649 +
21650 +
21651 +
21652 +
21653 +
21654 +
21655 +
21656 +
21657 +
21658 +
21659 +
21660 +
21661 +
21662 +
21663 +
21664 +
21665 +
21666 +
21667 +
21668 +
21669 +
21670 +
21671 +
21672 +
21673 +
21674 +
21675 +
21676 +
21677 +
21678 +
21679/***/ }), +
21680 +
21681/***/ "./node_modules/d3-shape/src/line.js": +
21682/*!*******************************************!*\ +
21683 !*** ./node_modules/d3-shape/src/line.js ***! +
21684 \*******************************************/ +
21685/*! exports provided: default */ +
21686/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21687 +
21688"use strict"; +
21689__webpack_require__.r(__webpack_exports__); +
21690/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/index.js"); +
21691/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-shape/src/constant.js"); +
21692/* harmony import */ var _curve_linear__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./curve/linear */ "./node_modules/d3-shape/src/curve/linear.js"); +
21693/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./point */ "./node_modules/d3-shape/src/point.js"); +
21694 +
21695 +
21696 +
21697 +
21698 +
21699/* harmony default export */ __webpack_exports__["default"] = (function() { +
21700 var x = _point__WEBPACK_IMPORTED_MODULE_3__["x"], +
21701 y = _point__WEBPACK_IMPORTED_MODULE_3__["y"], +
21702 defined = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(true), +
21703 context = null, +
21704 curve = _curve_linear__WEBPACK_IMPORTED_MODULE_2__["default"], +
21705 output = null; +
21706 +
21707 function line(data) { +
21708 var i, +
21709 n = data.length, +
21710 d, +
21711 defined0 = false, +
21712 buffer; +
21713 +
21714 if (context == null) output = curve(buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])()); +
21715 +
21716 for (i = 0; i <= n; ++i) { +
21717 if (!(i < n && defined(d = data[i], i, data)) === defined0) { +
21718 if (defined0 = !defined0) output.lineStart(); +
21719 else output.lineEnd(); +
21720 } +
21721 if (defined0) output.point(+x(d, i, data), +y(d, i, data)); +
21722 } +
21723 +
21724 if (buffer) return output = null, buffer + "" || null; +
21725 } +
21726 +
21727 line.x = function(_) { +
21728 return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), line) : x; +
21729 }; +
21730 +
21731 line.y = function(_) { +
21732 return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), line) : y; +
21733 }; +
21734 +
21735 line.defined = function(_) { +
21736 return arguments.length ? (defined = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(!!_), line) : defined; +
21737 }; +
21738 +
21739 line.curve = function(_) { +
21740 return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; +
21741 }; +
21742 +
21743 line.context = function(_) { +
21744 return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; +
21745 }; +
21746 +
21747 return line; +
21748}); +
21749 +
21750 +
21751/***/ }), +
21752 +
21753/***/ "./node_modules/d3-shape/src/lineRadial.js": +
21754/*!*************************************************!*\ +
21755 !*** ./node_modules/d3-shape/src/lineRadial.js ***! +
21756 \*************************************************/ +
21757/*! exports provided: lineRadial, default */ +
21758/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21759 +
21760"use strict"; +
21761__webpack_require__.r(__webpack_exports__); +
21762/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lineRadial", function() { return lineRadial; }); +
21763/* harmony import */ var _curve_radial__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./curve/radial */ "./node_modules/d3-shape/src/curve/radial.js"); +
21764/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./line */ "./node_modules/d3-shape/src/line.js"); +
21765 +
21766 +
21767 +
21768function lineRadial(l) { +
21769 var c = l.curve; +
21770 +
21771 l.angle = l.x, delete l.x; +
21772 l.radius = l.y, delete l.y; +
21773 +
21774 l.curve = function(_) { +
21775 return arguments.length ? c(Object(_curve_radial__WEBPACK_IMPORTED_MODULE_0__["default"])(_)) : c()._curve; +
21776 }; +
21777 +
21778 return l; +
21779} +
21780 +
21781/* harmony default export */ __webpack_exports__["default"] = (function() { +
21782 return lineRadial(Object(_line__WEBPACK_IMPORTED_MODULE_1__["default"])().curve(_curve_radial__WEBPACK_IMPORTED_MODULE_0__["curveRadialLinear"])); +
21783}); +
21784 +
21785 +
21786/***/ }), +
21787 +
21788/***/ "./node_modules/d3-shape/src/link/index.js": +
21789/*!*************************************************!*\ +
21790 !*** ./node_modules/d3-shape/src/link/index.js ***! +
21791 \*************************************************/ +
21792/*! exports provided: linkHorizontal, linkVertical, linkRadial */ +
21793/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21794 +
21795"use strict"; +
21796__webpack_require__.r(__webpack_exports__); +
21797/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linkHorizontal", function() { return linkHorizontal; }); +
21798/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linkVertical", function() { return linkVertical; }); +
21799/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linkRadial", function() { return linkRadial; }); +
21800/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/index.js"); +
21801/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../array */ "./node_modules/d3-shape/src/array.js"); +
21802/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ "./node_modules/d3-shape/src/constant.js"); +
21803/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../point */ "./node_modules/d3-shape/src/point.js"); +
21804/* harmony import */ var _pointRadial__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../pointRadial */ "./node_modules/d3-shape/src/pointRadial.js"); +
21805 +
21806 +
21807 +
21808 +
21809 +
21810 +
21811function linkSource(d) { +
21812 return d.source; +
21813} +
21814 +
21815function linkTarget(d) { +
21816 return d.target; +
21817} +
21818 +
21819function link(curve) { +
21820 var source = linkSource, +
21821 target = linkTarget, +
21822 x = _point__WEBPACK_IMPORTED_MODULE_3__["x"], +
21823 y = _point__WEBPACK_IMPORTED_MODULE_3__["y"], +
21824 context = null; +
21825 +
21826 function link() { +
21827 var buffer, argv = _array__WEBPACK_IMPORTED_MODULE_1__["slice"].call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); +
21828 if (!context) context = buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])(); +
21829 curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv)); +
21830 if (buffer) return context = null, buffer + "" || null; +
21831 } +
21832 +
21833 link.source = function(_) { +
21834 return arguments.length ? (source = _, link) : source; +
21835 }; +
21836 +
21837 link.target = function(_) { +
21838 return arguments.length ? (target = _, link) : target; +
21839 }; +
21840 +
21841 link.x = function(_) { +
21842 return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), link) : x; +
21843 }; +
21844 +
21845 link.y = function(_) { +
21846 return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_2__["default"])(+_), link) : y; +
21847 }; +
21848 +
21849 link.context = function(_) { +
21850 return arguments.length ? ((context = _ == null ? null : _), link) : context; +
21851 }; +
21852 +
21853 return link; +
21854} +
21855 +
21856function curveHorizontal(context, x0, y0, x1, y1) { +
21857 context.moveTo(x0, y0); +
21858 context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); +
21859} +
21860 +
21861function curveVertical(context, x0, y0, x1, y1) { +
21862 context.moveTo(x0, y0); +
21863 context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); +
21864} +
21865 +
21866function curveRadial(context, x0, y0, x1, y1) { +
21867 var p0 = Object(_pointRadial__WEBPACK_IMPORTED_MODULE_4__["default"])(x0, y0), +
21868 p1 = Object(_pointRadial__WEBPACK_IMPORTED_MODULE_4__["default"])(x0, y0 = (y0 + y1) / 2), +
21869 p2 = Object(_pointRadial__WEBPACK_IMPORTED_MODULE_4__["default"])(x1, y0), +
21870 p3 = Object(_pointRadial__WEBPACK_IMPORTED_MODULE_4__["default"])(x1, y1); +
21871 context.moveTo(p0[0], p0[1]); +
21872 context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); +
21873} +
21874 +
21875function linkHorizontal() { +
21876 return link(curveHorizontal); +
21877} +
21878 +
21879function linkVertical() { +
21880 return link(curveVertical); +
21881} +
21882 +
21883function linkRadial() { +
21884 var l = link(curveRadial); +
21885 l.angle = l.x, delete l.x; +
21886 l.radius = l.y, delete l.y; +
21887 return l; +
21888} +
21889 +
21890 +
21891/***/ }), +
21892 +
21893/***/ "./node_modules/d3-shape/src/math.js": +
21894/*!*******************************************!*\ +
21895 !*** ./node_modules/d3-shape/src/math.js ***! +
21896 \*******************************************/ +
21897/*! exports provided: abs, atan2, cos, max, min, sin, sqrt, epsilon, pi, halfPi, tau, acos, asin */ +
21898/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21899 +
21900"use strict"; +
21901__webpack_require__.r(__webpack_exports__); +
21902/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "abs", function() { return abs; }); +
21903/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "atan2", function() { return atan2; }); +
21904/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cos", function() { return cos; }); +
21905/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; }); +
21906/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "min", function() { return min; }); +
21907/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sin", function() { return sin; }); +
21908/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sqrt", function() { return sqrt; }); +
21909/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon", function() { return epsilon; }); +
21910/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pi", function() { return pi; }); +
21911/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "halfPi", function() { return halfPi; }); +
21912/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tau", function() { return tau; }); +
21913/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "acos", function() { return acos; }); +
21914/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asin", function() { return asin; }); +
21915var abs = Math.abs; +
21916var atan2 = Math.atan2; +
21917var cos = Math.cos; +
21918var max = Math.max; +
21919var min = Math.min; +
21920var sin = Math.sin; +
21921var sqrt = Math.sqrt; +
21922 +
21923var epsilon = 1e-12; +
21924var pi = Math.PI; +
21925var halfPi = pi / 2; +
21926var tau = 2 * pi; +
21927 +
21928function acos(x) { +
21929 return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); +
21930} +
21931 +
21932function asin(x) { +
21933 return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); +
21934} +
21935 +
21936 +
21937/***/ }), +
21938 +
21939/***/ "./node_modules/d3-shape/src/noop.js": +
21940/*!*******************************************!*\ +
21941 !*** ./node_modules/d3-shape/src/noop.js ***! +
21942 \*******************************************/ +
21943/*! exports provided: default */ +
21944/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21945 +
21946"use strict"; +
21947__webpack_require__.r(__webpack_exports__); +
21948/* harmony default export */ __webpack_exports__["default"] = (function() {}); +
21949 +
21950 +
21951/***/ }), +
21952 +
21953/***/ "./node_modules/d3-shape/src/offset/diverging.js": +
21954/*!*******************************************************!*\ +
21955 !*** ./node_modules/d3-shape/src/offset/diverging.js ***! +
21956 \*******************************************************/ +
21957/*! exports provided: default */ +
21958/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21959 +
21960"use strict"; +
21961__webpack_require__.r(__webpack_exports__); +
21962/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { +
21963 if (!((n = series.length) > 1)) return; +
21964 for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) { +
21965 for (yp = yn = 0, i = 0; i < n; ++i) { +
21966 if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) { +
21967 d[0] = yp, d[1] = yp += dy; +
21968 } else if (dy < 0) { +
21969 d[1] = yn, d[0] = yn += dy; +
21970 } else { +
21971 d[0] = yp; +
21972 } +
21973 } +
21974 } +
21975}); +
21976 +
21977 +
21978/***/ }), +
21979 +
21980/***/ "./node_modules/d3-shape/src/offset/expand.js": +
21981/*!****************************************************!*\ +
21982 !*** ./node_modules/d3-shape/src/offset/expand.js ***! +
21983 \****************************************************/ +
21984/*! exports provided: default */ +
21985/***/ (function(module, __webpack_exports__, __webpack_require__) { +
21986 +
21987"use strict"; +
21988__webpack_require__.r(__webpack_exports__); +
21989/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "./node_modules/d3-shape/src/offset/none.js"); +
21990 +
21991 +
21992/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { +
21993 if (!((n = series.length) > 0)) return; +
21994 for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { +
21995 for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; +
21996 if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; +
21997 } +
21998 Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series, order); +
21999}); +
22000 +
22001 +
22002/***/ }), +
22003 +
22004/***/ "./node_modules/d3-shape/src/offset/none.js": +
22005/*!**************************************************!*\ +
22006 !*** ./node_modules/d3-shape/src/offset/none.js ***! +
22007 \**************************************************/ +
22008/*! exports provided: default */ +
22009/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22010 +
22011"use strict"; +
22012__webpack_require__.r(__webpack_exports__); +
22013/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { +
22014 if (!((n = series.length) > 1)) return; +
22015 for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { +
22016 s0 = s1, s1 = series[order[i]]; +
22017 for (j = 0; j < m; ++j) { +
22018 s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; +
22019 } +
22020 } +
22021}); +
22022 +
22023 +
22024/***/ }), +
22025 +
22026/***/ "./node_modules/d3-shape/src/offset/silhouette.js": +
22027/*!********************************************************!*\ +
22028 !*** ./node_modules/d3-shape/src/offset/silhouette.js ***! +
22029 \********************************************************/ +
22030/*! exports provided: default */ +
22031/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22032 +
22033"use strict"; +
22034__webpack_require__.r(__webpack_exports__); +
22035/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "./node_modules/d3-shape/src/offset/none.js"); +
22036 +
22037 +
22038/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { +
22039 if (!((n = series.length) > 0)) return; +
22040 for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { +
22041 for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; +
22042 s0[j][1] += s0[j][0] = -y / 2; +
22043 } +
22044 Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series, order); +
22045}); +
22046 +
22047 +
22048/***/ }), +
22049 +
22050/***/ "./node_modules/d3-shape/src/offset/wiggle.js": +
22051/*!****************************************************!*\ +
22052 !*** ./node_modules/d3-shape/src/offset/wiggle.js ***! +
22053 \****************************************************/ +
22054/*! exports provided: default */ +
22055/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22056 +
22057"use strict"; +
22058__webpack_require__.r(__webpack_exports__); +
22059/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "./node_modules/d3-shape/src/offset/none.js"); +
22060 +
22061 +
22062/* harmony default export */ __webpack_exports__["default"] = (function(series, order) { +
22063 if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; +
22064 for (var y = 0, j = 1, s0, m, n; j < m; ++j) { +
22065 for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { +
22066 var si = series[order[i]], +
22067 sij0 = si[j][1] || 0, +
22068 sij1 = si[j - 1][1] || 0, +
22069 s3 = (sij0 - sij1) / 2; +
22070 for (var k = 0; k < i; ++k) { +
22071 var sk = series[order[k]], +
22072 skj0 = sk[j][1] || 0, +
22073 skj1 = sk[j - 1][1] || 0; +
22074 s3 += skj0 - skj1; +
22075 } +
22076 s1 += sij0, s2 += s3 * sij0; +
22077 } +
22078 s0[j - 1][1] += s0[j - 1][0] = y; +
22079 if (s1) y -= s2 / s1; +
22080 } +
22081 s0[j - 1][1] += s0[j - 1][0] = y; +
22082 Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series, order); +
22083}); +
22084 +
22085 +
22086/***/ }), +
22087 +
22088/***/ "./node_modules/d3-shape/src/order/ascending.js": +
22089/*!******************************************************!*\ +
22090 !*** ./node_modules/d3-shape/src/order/ascending.js ***! +
22091 \******************************************************/ +
22092/*! exports provided: default, sum */ +
22093/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22094 +
22095"use strict"; +
22096__webpack_require__.r(__webpack_exports__); +
22097/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sum", function() { return sum; }); +
22098/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "./node_modules/d3-shape/src/order/none.js"); +
22099 +
22100 +
22101/* harmony default export */ __webpack_exports__["default"] = (function(series) { +
22102 var sums = series.map(sum); +
22103 return Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series).sort(function(a, b) { return sums[a] - sums[b]; }); +
22104}); +
22105 +
22106function sum(series) { +
22107 var s = 0, i = -1, n = series.length, v; +
22108 while (++i < n) if (v = +series[i][1]) s += v; +
22109 return s; +
22110} +
22111 +
22112 +
22113/***/ }), +
22114 +
22115/***/ "./node_modules/d3-shape/src/order/descending.js": +
22116/*!*******************************************************!*\ +
22117 !*** ./node_modules/d3-shape/src/order/descending.js ***! +
22118 \*******************************************************/ +
22119/*! exports provided: default */ +
22120/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22121 +
22122"use strict"; +
22123__webpack_require__.r(__webpack_exports__); +
22124/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-shape/src/order/ascending.js"); +
22125 +
22126 +
22127/* harmony default export */ __webpack_exports__["default"] = (function(series) { +
22128 return Object(_ascending__WEBPACK_IMPORTED_MODULE_0__["default"])(series).reverse(); +
22129}); +
22130 +
22131 +
22132/***/ }), +
22133 +
22134/***/ "./node_modules/d3-shape/src/order/insideOut.js": +
22135/*!******************************************************!*\ +
22136 !*** ./node_modules/d3-shape/src/order/insideOut.js ***! +
22137 \******************************************************/ +
22138/*! exports provided: default */ +
22139/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22140 +
22141"use strict"; +
22142__webpack_require__.r(__webpack_exports__); +
22143/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "./node_modules/d3-shape/src/order/none.js"); +
22144/* harmony import */ var _ascending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ascending */ "./node_modules/d3-shape/src/order/ascending.js"); +
22145 +
22146 +
22147 +
22148/* harmony default export */ __webpack_exports__["default"] = (function(series) { +
22149 var n = series.length, +
22150 i, +
22151 j, +
22152 sums = series.map(_ascending__WEBPACK_IMPORTED_MODULE_1__["sum"]), +
22153 order = Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series).sort(function(a, b) { return sums[b] - sums[a]; }), +
22154 top = 0, +
22155 bottom = 0, +
22156 tops = [], +
22157 bottoms = []; +
22158 +
22159 for (i = 0; i < n; ++i) { +
22160 j = order[i]; +
22161 if (top < bottom) { +
22162 top += sums[j]; +
22163 tops.push(j); +
22164 } else { +
22165 bottom += sums[j]; +
22166 bottoms.push(j); +
22167 } +
22168 } +
22169 +
22170 return bottoms.reverse().concat(tops); +
22171}); +
22172 +
22173 +
22174/***/ }), +
22175 +
22176/***/ "./node_modules/d3-shape/src/order/none.js": +
22177/*!*************************************************!*\ +
22178 !*** ./node_modules/d3-shape/src/order/none.js ***! +
22179 \*************************************************/ +
22180/*! exports provided: default */ +
22181/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22182 +
22183"use strict"; +
22184__webpack_require__.r(__webpack_exports__); +
22185/* harmony default export */ __webpack_exports__["default"] = (function(series) { +
22186 var n = series.length, o = new Array(n); +
22187 while (--n >= 0) o[n] = n; +
22188 return o; +
22189}); +
22190 +
22191 +
22192/***/ }), +
22193 +
22194/***/ "./node_modules/d3-shape/src/order/reverse.js": +
22195/*!****************************************************!*\ +
22196 !*** ./node_modules/d3-shape/src/order/reverse.js ***! +
22197 \****************************************************/ +
22198/*! exports provided: default */ +
22199/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22200 +
22201"use strict"; +
22202__webpack_require__.r(__webpack_exports__); +
22203/* harmony import */ var _none__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./none */ "./node_modules/d3-shape/src/order/none.js"); +
22204 +
22205 +
22206/* harmony default export */ __webpack_exports__["default"] = (function(series) { +
22207 return Object(_none__WEBPACK_IMPORTED_MODULE_0__["default"])(series).reverse(); +
22208}); +
22209 +
22210 +
22211/***/ }), +
22212 +
22213/***/ "./node_modules/d3-shape/src/pie.js": +
22214/*!******************************************!*\ +
22215 !*** ./node_modules/d3-shape/src/pie.js ***! +
22216 \******************************************/ +
22217/*! exports provided: default */ +
22218/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22219 +
22220"use strict"; +
22221__webpack_require__.r(__webpack_exports__); +
22222/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-shape/src/constant.js"); +
22223/* harmony import */ var _descending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./descending */ "./node_modules/d3-shape/src/descending.js"); +
22224/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./identity */ "./node_modules/d3-shape/src/identity.js"); +
22225/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./math */ "./node_modules/d3-shape/src/math.js"); +
22226 +
22227 +
22228 +
22229 +
22230 +
22231/* harmony default export */ __webpack_exports__["default"] = (function() { +
22232 var value = _identity__WEBPACK_IMPORTED_MODULE_2__["default"], +
22233 sortValues = _descending__WEBPACK_IMPORTED_MODULE_1__["default"], +
22234 sort = null, +
22235 startAngle = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0), +
22236 endAngle = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(_math__WEBPACK_IMPORTED_MODULE_3__["tau"]), +
22237 padAngle = Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(0); +
22238 +
22239 function pie(data) { +
22240 var i, +
22241 n = data.length, +
22242 j, +
22243 k, +
22244 sum = 0, +
22245 index = new Array(n), +
22246 arcs = new Array(n), +
22247 a0 = +startAngle.apply(this, arguments), +
22248 da = Math.min(_math__WEBPACK_IMPORTED_MODULE_3__["tau"], Math.max(-_math__WEBPACK_IMPORTED_MODULE_3__["tau"], endAngle.apply(this, arguments) - a0)), +
22249 a1, +
22250 p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), +
22251 pa = p * (da < 0 ? -1 : 1), +
22252 v; +
22253 +
22254 for (i = 0; i < n; ++i) { +
22255 if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { +
22256 sum += v; +
22257 } +
22258 } +
22259 +
22260 // Optionally sort the arcs by previously-computed values or by data. +
22261 if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); +
22262 else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); +
22263 +
22264 // Compute the arcs! They are stored in the original data's order. +
22265 for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { +
22266 j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { +
22267 data: data[j], +
22268 index: i, +
22269 value: v, +
22270 startAngle: a0, +
22271 endAngle: a1, +
22272 padAngle: p +
22273 }; +
22274 } +
22275 +
22276 return arcs; +
22277 } +
22278 +
22279 pie.value = function(_) { +
22280 return arguments.length ? (value = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), pie) : value; +
22281 }; +
22282 +
22283 pie.sortValues = function(_) { +
22284 return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; +
22285 }; +
22286 +
22287 pie.sort = function(_) { +
22288 return arguments.length ? (sort = _, sortValues = null, pie) : sort; +
22289 }; +
22290 +
22291 pie.startAngle = function(_) { +
22292 return arguments.length ? (startAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), pie) : startAngle; +
22293 }; +
22294 +
22295 pie.endAngle = function(_) { +
22296 return arguments.length ? (endAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), pie) : endAngle; +
22297 }; +
22298 +
22299 pie.padAngle = function(_) { +
22300 return arguments.length ? (padAngle = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), pie) : padAngle; +
22301 }; +
22302 +
22303 return pie; +
22304}); +
22305 +
22306 +
22307/***/ }), +
22308 +
22309/***/ "./node_modules/d3-shape/src/point.js": +
22310/*!********************************************!*\ +
22311 !*** ./node_modules/d3-shape/src/point.js ***! +
22312 \********************************************/ +
22313/*! exports provided: x, y */ +
22314/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22315 +
22316"use strict"; +
22317__webpack_require__.r(__webpack_exports__); +
22318/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return x; }); +
22319/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return y; }); +
22320function x(p) { +
22321 return p[0]; +
22322} +
22323 +
22324function y(p) { +
22325 return p[1]; +
22326} +
22327 +
22328 +
22329/***/ }), +
22330 +
22331/***/ "./node_modules/d3-shape/src/pointRadial.js": +
22332/*!**************************************************!*\ +
22333 !*** ./node_modules/d3-shape/src/pointRadial.js ***! +
22334 \**************************************************/ +
22335/*! exports provided: default */ +
22336/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22337 +
22338"use strict"; +
22339__webpack_require__.r(__webpack_exports__); +
22340/* harmony default export */ __webpack_exports__["default"] = (function(x, y) { +
22341 return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)]; +
22342}); +
22343 +
22344 +
22345/***/ }), +
22346 +
22347/***/ "./node_modules/d3-shape/src/stack.js": +
22348/*!********************************************!*\ +
22349 !*** ./node_modules/d3-shape/src/stack.js ***! +
22350 \********************************************/ +
22351/*! exports provided: default */ +
22352/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22353 +
22354"use strict"; +
22355__webpack_require__.r(__webpack_exports__); +
22356/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./array */ "./node_modules/d3-shape/src/array.js"); +
22357/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-shape/src/constant.js"); +
22358/* harmony import */ var _offset_none__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./offset/none */ "./node_modules/d3-shape/src/offset/none.js"); +
22359/* harmony import */ var _order_none__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./order/none */ "./node_modules/d3-shape/src/order/none.js"); +
22360 +
22361 +
22362 +
22363 +
22364 +
22365function stackValue(d, key) { +
22366 return d[key]; +
22367} +
22368 +
22369/* harmony default export */ __webpack_exports__["default"] = (function() { +
22370 var keys = Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])([]), +
22371 order = _order_none__WEBPACK_IMPORTED_MODULE_3__["default"], +
22372 offset = _offset_none__WEBPACK_IMPORTED_MODULE_2__["default"], +
22373 value = stackValue; +
22374 +
22375 function stack(data) { +
22376 var kz = keys.apply(this, arguments), +
22377 i, +
22378 m = data.length, +
22379 n = kz.length, +
22380 sz = new Array(n), +
22381 oz; +
22382 +
22383 for (i = 0; i < n; ++i) { +
22384 for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { +
22385 si[j] = sij = [0, +value(data[j], ki, j, data)]; +
22386 sij.data = data[j]; +
22387 } +
22388 si.key = ki; +
22389 } +
22390 +
22391 for (i = 0, oz = order(sz); i < n; ++i) { +
22392 sz[oz[i]].index = i; +
22393 } +
22394 +
22395 offset(sz, oz); +
22396 return sz; +
22397 } +
22398 +
22399 stack.keys = function(_) { +
22400 return arguments.length ? (keys = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(_array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_)), stack) : keys; +
22401 }; +
22402 +
22403 stack.value = function(_) { +
22404 return arguments.length ? (value = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), stack) : value; +
22405 }; +
22406 +
22407 stack.order = function(_) { +
22408 return arguments.length ? (order = _ == null ? _order_none__WEBPACK_IMPORTED_MODULE_3__["default"] : typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_1__["default"])(_array__WEBPACK_IMPORTED_MODULE_0__["slice"].call(_)), stack) : order; +
22409 }; +
22410 +
22411 stack.offset = function(_) { +
22412 return arguments.length ? (offset = _ == null ? _offset_none__WEBPACK_IMPORTED_MODULE_2__["default"] : _, stack) : offset; +
22413 }; +
22414 +
22415 return stack; +
22416}); +
22417 +
22418 +
22419/***/ }), +
22420 +
22421/***/ "./node_modules/d3-shape/src/symbol.js": +
22422/*!*********************************************!*\ +
22423 !*** ./node_modules/d3-shape/src/symbol.js ***! +
22424 \*********************************************/ +
22425/*! exports provided: symbols, default */ +
22426/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22427 +
22428"use strict"; +
22429__webpack_require__.r(__webpack_exports__); +
22430/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "symbols", function() { return symbols; }); +
22431/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/index.js"); +
22432/* harmony import */ var _symbol_circle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./symbol/circle */ "./node_modules/d3-shape/src/symbol/circle.js"); +
22433/* harmony import */ var _symbol_cross__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./symbol/cross */ "./node_modules/d3-shape/src/symbol/cross.js"); +
22434/* harmony import */ var _symbol_diamond__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./symbol/diamond */ "./node_modules/d3-shape/src/symbol/diamond.js"); +
22435/* harmony import */ var _symbol_star__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./symbol/star */ "./node_modules/d3-shape/src/symbol/star.js"); +
22436/* harmony import */ var _symbol_square__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./symbol/square */ "./node_modules/d3-shape/src/symbol/square.js"); +
22437/* harmony import */ var _symbol_triangle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./symbol/triangle */ "./node_modules/d3-shape/src/symbol/triangle.js"); +
22438/* harmony import */ var _symbol_wye__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./symbol/wye */ "./node_modules/d3-shape/src/symbol/wye.js"); +
22439/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-shape/src/constant.js"); +
22440 +
22441 +
22442 +
22443 +
22444 +
22445 +
22446 +
22447 +
22448 +
22449 +
22450var symbols = [ +
22451 _symbol_circle__WEBPACK_IMPORTED_MODULE_1__["default"], +
22452 _symbol_cross__WEBPACK_IMPORTED_MODULE_2__["default"], +
22453 _symbol_diamond__WEBPACK_IMPORTED_MODULE_3__["default"], +
22454 _symbol_square__WEBPACK_IMPORTED_MODULE_5__["default"], +
22455 _symbol_star__WEBPACK_IMPORTED_MODULE_4__["default"], +
22456 _symbol_triangle__WEBPACK_IMPORTED_MODULE_6__["default"], +
22457 _symbol_wye__WEBPACK_IMPORTED_MODULE_7__["default"] +
22458]; +
22459 +
22460/* harmony default export */ __webpack_exports__["default"] = (function() { +
22461 var type = Object(_constant__WEBPACK_IMPORTED_MODULE_8__["default"])(_symbol_circle__WEBPACK_IMPORTED_MODULE_1__["default"]), +
22462 size = Object(_constant__WEBPACK_IMPORTED_MODULE_8__["default"])(64), +
22463 context = null; +
22464 +
22465 function symbol() { +
22466 var buffer; +
22467 if (!context) context = buffer = Object(d3_path__WEBPACK_IMPORTED_MODULE_0__["path"])(); +
22468 type.apply(this, arguments).draw(context, +size.apply(this, arguments)); +
22469 if (buffer) return context = null, buffer + "" || null; +
22470 } +
22471 +
22472 symbol.type = function(_) { +
22473 return arguments.length ? (type = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_8__["default"])(_), symbol) : type; +
22474 }; +
22475 +
22476 symbol.size = function(_) { +
22477 return arguments.length ? (size = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_8__["default"])(+_), symbol) : size; +
22478 }; +
22479 +
22480 symbol.context = function(_) { +
22481 return arguments.length ? (context = _ == null ? null : _, symbol) : context; +
22482 }; +
22483 +
22484 return symbol; +
22485}); +
22486 +
22487 +
22488/***/ }), +
22489 +
22490/***/ "./node_modules/d3-shape/src/symbol/circle.js": +
22491/*!****************************************************!*\ +
22492 !*** ./node_modules/d3-shape/src/symbol/circle.js ***! +
22493 \****************************************************/ +
22494/*! exports provided: default */ +
22495/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22496 +
22497"use strict"; +
22498__webpack_require__.r(__webpack_exports__); +
22499/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-shape/src/math.js"); +
22500 +
22501 +
22502/* harmony default export */ __webpack_exports__["default"] = ({ +
22503 draw: function(context, size) { +
22504 var r = Math.sqrt(size / _math__WEBPACK_IMPORTED_MODULE_0__["pi"]); +
22505 context.moveTo(r, 0); +
22506 context.arc(0, 0, r, 0, _math__WEBPACK_IMPORTED_MODULE_0__["tau"]); +
22507 } +
22508}); +
22509 +
22510 +
22511/***/ }), +
22512 +
22513/***/ "./node_modules/d3-shape/src/symbol/cross.js": +
22514/*!***************************************************!*\ +
22515 !*** ./node_modules/d3-shape/src/symbol/cross.js ***! +
22516 \***************************************************/ +
22517/*! exports provided: default */ +
22518/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22519 +
22520"use strict"; +
22521__webpack_require__.r(__webpack_exports__); +
22522/* harmony default export */ __webpack_exports__["default"] = ({ +
22523 draw: function(context, size) { +
22524 var r = Math.sqrt(size / 5) / 2; +
22525 context.moveTo(-3 * r, -r); +
22526 context.lineTo(-r, -r); +
22527 context.lineTo(-r, -3 * r); +
22528 context.lineTo(r, -3 * r); +
22529 context.lineTo(r, -r); +
22530 context.lineTo(3 * r, -r); +
22531 context.lineTo(3 * r, r); +
22532 context.lineTo(r, r); +
22533 context.lineTo(r, 3 * r); +
22534 context.lineTo(-r, 3 * r); +
22535 context.lineTo(-r, r); +
22536 context.lineTo(-3 * r, r); +
22537 context.closePath(); +
22538 } +
22539}); +
22540 +
22541 +
22542/***/ }), +
22543 +
22544/***/ "./node_modules/d3-shape/src/symbol/diamond.js": +
22545/*!*****************************************************!*\ +
22546 !*** ./node_modules/d3-shape/src/symbol/diamond.js ***! +
22547 \*****************************************************/ +
22548/*! exports provided: default */ +
22549/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22550 +
22551"use strict"; +
22552__webpack_require__.r(__webpack_exports__); +
22553var tan30 = Math.sqrt(1 / 3), +
22554 tan30_2 = tan30 * 2; +
22555 +
22556/* harmony default export */ __webpack_exports__["default"] = ({ +
22557 draw: function(context, size) { +
22558 var y = Math.sqrt(size / tan30_2), +
22559 x = y * tan30; +
22560 context.moveTo(0, -y); +
22561 context.lineTo(x, 0); +
22562 context.lineTo(0, y); +
22563 context.lineTo(-x, 0); +
22564 context.closePath(); +
22565 } +
22566}); +
22567 +
22568 +
22569/***/ }), +
22570 +
22571/***/ "./node_modules/d3-shape/src/symbol/square.js": +
22572/*!****************************************************!*\ +
22573 !*** ./node_modules/d3-shape/src/symbol/square.js ***! +
22574 \****************************************************/ +
22575/*! exports provided: default */ +
22576/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22577 +
22578"use strict"; +
22579__webpack_require__.r(__webpack_exports__); +
22580/* harmony default export */ __webpack_exports__["default"] = ({ +
22581 draw: function(context, size) { +
22582 var w = Math.sqrt(size), +
22583 x = -w / 2; +
22584 context.rect(x, x, w, w); +
22585 } +
22586}); +
22587 +
22588 +
22589/***/ }), +
22590 +
22591/***/ "./node_modules/d3-shape/src/symbol/star.js": +
22592/*!**************************************************!*\ +
22593 !*** ./node_modules/d3-shape/src/symbol/star.js ***! +
22594 \**************************************************/ +
22595/*! exports provided: default */ +
22596/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22597 +
22598"use strict"; +
22599__webpack_require__.r(__webpack_exports__); +
22600/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math */ "./node_modules/d3-shape/src/math.js"); +
22601 +
22602 +
22603var ka = 0.89081309152928522810, +
22604 kr = Math.sin(_math__WEBPACK_IMPORTED_MODULE_0__["pi"] / 10) / Math.sin(7 * _math__WEBPACK_IMPORTED_MODULE_0__["pi"] / 10), +
22605 kx = Math.sin(_math__WEBPACK_IMPORTED_MODULE_0__["tau"] / 10) * kr, +
22606 ky = -Math.cos(_math__WEBPACK_IMPORTED_MODULE_0__["tau"] / 10) * kr; +
22607 +
22608/* harmony default export */ __webpack_exports__["default"] = ({ +
22609 draw: function(context, size) { +
22610 var r = Math.sqrt(size * ka), +
22611 x = kx * r, +
22612 y = ky * r; +
22613 context.moveTo(0, -r); +
22614 context.lineTo(x, y); +
22615 for (var i = 1; i < 5; ++i) { +
22616 var a = _math__WEBPACK_IMPORTED_MODULE_0__["tau"] * i / 5, +
22617 c = Math.cos(a), +
22618 s = Math.sin(a); +
22619 context.lineTo(s * r, -c * r); +
22620 context.lineTo(c * x - s * y, s * x + c * y); +
22621 } +
22622 context.closePath(); +
22623 } +
22624}); +
22625 +
22626 +
22627/***/ }), +
22628 +
22629/***/ "./node_modules/d3-shape/src/symbol/triangle.js": +
22630/*!******************************************************!*\ +
22631 !*** ./node_modules/d3-shape/src/symbol/triangle.js ***! +
22632 \******************************************************/ +
22633/*! exports provided: default */ +
22634/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22635 +
22636"use strict"; +
22637__webpack_require__.r(__webpack_exports__); +
22638var sqrt3 = Math.sqrt(3); +
22639 +
22640/* harmony default export */ __webpack_exports__["default"] = ({ +
22641 draw: function(context, size) { +
22642 var y = -Math.sqrt(size / (sqrt3 * 3)); +
22643 context.moveTo(0, y * 2); +
22644 context.lineTo(-sqrt3 * y, -y); +
22645 context.lineTo(sqrt3 * y, -y); +
22646 context.closePath(); +
22647 } +
22648}); +
22649 +
22650 +
22651/***/ }), +
22652 +
22653/***/ "./node_modules/d3-shape/src/symbol/wye.js": +
22654/*!*************************************************!*\ +
22655 !*** ./node_modules/d3-shape/src/symbol/wye.js ***! +
22656 \*************************************************/ +
22657/*! exports provided: default */ +
22658/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22659 +
22660"use strict"; +
22661__webpack_require__.r(__webpack_exports__); +
22662var c = -0.5, +
22663 s = Math.sqrt(3) / 2, +
22664 k = 1 / Math.sqrt(12), +
22665 a = (k / 2 + 1) * 3; +
22666 +
22667/* harmony default export */ __webpack_exports__["default"] = ({ +
22668 draw: function(context, size) { +
22669 var r = Math.sqrt(size / a), +
22670 x0 = r / 2, +
22671 y0 = r * k, +
22672 x1 = x0, +
22673 y1 = r * k + r, +
22674 x2 = -x1, +
22675 y2 = y1; +
22676 context.moveTo(x0, y0); +
22677 context.lineTo(x1, y1); +
22678 context.lineTo(x2, y2); +
22679 context.lineTo(c * x0 - s * y0, s * x0 + c * y0); +
22680 context.lineTo(c * x1 - s * y1, s * x1 + c * y1); +
22681 context.lineTo(c * x2 - s * y2, s * x2 + c * y2); +
22682 context.lineTo(c * x0 + s * y0, c * y0 - s * x0); +
22683 context.lineTo(c * x1 + s * y1, c * y1 - s * x1); +
22684 context.lineTo(c * x2 + s * y2, c * y2 - s * x2); +
22685 context.closePath(); +
22686 } +
22687}); +
22688 +
22689 +
22690/***/ }), +
22691 +
22692/***/ "./node_modules/d3-time-format/src/defaultLocale.js": +
22693/*!**********************************************************!*\ +
22694 !*** ./node_modules/d3-time-format/src/defaultLocale.js ***! +
22695 \**********************************************************/ +
22696/*! exports provided: timeFormat, timeParse, utcFormat, utcParse, default */ +
22697/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22698 +
22699"use strict"; +
22700__webpack_require__.r(__webpack_exports__); +
22701/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeFormat", function() { return timeFormat; }); +
22702/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeParse", function() { return timeParse; }); +
22703/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcFormat", function() { return utcFormat; }); +
22704/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcParse", function() { return utcParse; }); +
22705/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return defaultLocale; }); +
22706/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./locale */ "./node_modules/d3-time-format/src/locale.js"); +
22707 +
22708 +
22709var locale; +
22710var timeFormat; +
22711var timeParse; +
22712var utcFormat; +
22713var utcParse; +
22714 +
22715defaultLocale({ +
22716 dateTime: "%x, %X", +
22717 date: "%-m/%-d/%Y", +
22718 time: "%-I:%M:%S %p", +
22719 periods: ["AM", "PM"], +
22720 days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], +
22721 shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], +
22722 months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], +
22723 shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +
22724}); +
22725 +
22726function defaultLocale(definition) { +
22727 locale = Object(_locale__WEBPACK_IMPORTED_MODULE_0__["default"])(definition); +
22728 timeFormat = locale.format; +
22729 timeParse = locale.parse; +
22730 utcFormat = locale.utcFormat; +
22731 utcParse = locale.utcParse; +
22732 return locale; +
22733} +
22734 +
22735 +
22736/***/ }), +
22737 +
22738/***/ "./node_modules/d3-time-format/src/index.js": +
22739/*!**************************************************!*\ +
22740 !*** ./node_modules/d3-time-format/src/index.js ***! +
22741 \**************************************************/ +
22742/*! exports provided: timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale, isoFormat, isoParse */ +
22743/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22744 +
22745"use strict"; +
22746__webpack_require__.r(__webpack_exports__); +
22747/* harmony import */ var _defaultLocale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale */ "./node_modules/d3-time-format/src/defaultLocale.js"); +
22748/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormatDefaultLocale", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
22749 +
22750/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormat", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["timeFormat"]; }); +
22751 +
22752/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeParse", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["timeParse"]; }); +
22753 +
22754/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFormat", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["utcFormat"]; }); +
22755 +
22756/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcParse", function() { return _defaultLocale__WEBPACK_IMPORTED_MODULE_0__["utcParse"]; }); +
22757 +
22758/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./locale */ "./node_modules/d3-time-format/src/locale.js"); +
22759/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormatLocale", function() { return _locale__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
22760 +
22761/* harmony import */ var _isoFormat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isoFormat */ "./node_modules/d3-time-format/src/isoFormat.js"); +
22762/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isoFormat", function() { return _isoFormat__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
22763 +
22764/* harmony import */ var _isoParse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isoParse */ "./node_modules/d3-time-format/src/isoParse.js"); +
22765/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isoParse", function() { return _isoParse__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
22766 +
22767 +
22768 +
22769 +
22770 +
22771 +
22772 +
22773/***/ }), +
22774 +
22775/***/ "./node_modules/d3-time-format/src/isoFormat.js": +
22776/*!******************************************************!*\ +
22777 !*** ./node_modules/d3-time-format/src/isoFormat.js ***! +
22778 \******************************************************/ +
22779/*! exports provided: isoSpecifier, default */ +
22780/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22781 +
22782"use strict"; +
22783__webpack_require__.r(__webpack_exports__); +
22784/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isoSpecifier", function() { return isoSpecifier; }); +
22785/* harmony import */ var _defaultLocale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defaultLocale */ "./node_modules/d3-time-format/src/defaultLocale.js"); +
22786 +
22787 +
22788var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; +
22789 +
22790function formatIsoNative(date) { +
22791 return date.toISOString(); +
22792} +
22793 +
22794var formatIso = Date.prototype.toISOString +
22795 ? formatIsoNative +
22796 : Object(_defaultLocale__WEBPACK_IMPORTED_MODULE_0__["utcFormat"])(isoSpecifier); +
22797 +
22798/* harmony default export */ __webpack_exports__["default"] = (formatIso); +
22799 +
22800 +
22801/***/ }), +
22802 +
22803/***/ "./node_modules/d3-time-format/src/isoParse.js": +
22804/*!*****************************************************!*\ +
22805 !*** ./node_modules/d3-time-format/src/isoParse.js ***! +
22806 \*****************************************************/ +
22807/*! exports provided: default */ +
22808/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22809 +
22810"use strict"; +
22811__webpack_require__.r(__webpack_exports__); +
22812/* harmony import */ var _isoFormat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isoFormat */ "./node_modules/d3-time-format/src/isoFormat.js"); +
22813/* harmony import */ var _defaultLocale__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./defaultLocale */ "./node_modules/d3-time-format/src/defaultLocale.js"); +
22814 +
22815 +
22816 +
22817function parseIsoNative(string) { +
22818 var date = new Date(string); +
22819 return isNaN(date) ? null : date; +
22820} +
22821 +
22822var parseIso = +new Date("2000-01-01T00:00:00.000Z") +
22823 ? parseIsoNative +
22824 : Object(_defaultLocale__WEBPACK_IMPORTED_MODULE_1__["utcParse"])(_isoFormat__WEBPACK_IMPORTED_MODULE_0__["isoSpecifier"]); +
22825 +
22826/* harmony default export */ __webpack_exports__["default"] = (parseIso); +
22827 +
22828 +
22829/***/ }), +
22830 +
22831/***/ "./node_modules/d3-time-format/src/locale.js": +
22832/*!***************************************************!*\ +
22833 !*** ./node_modules/d3-time-format/src/locale.js ***! +
22834 \***************************************************/ +
22835/*! exports provided: default */ +
22836/***/ (function(module, __webpack_exports__, __webpack_require__) { +
22837 +
22838"use strict"; +
22839__webpack_require__.r(__webpack_exports__); +
22840/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return formatLocale; }); +
22841/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/index.js"); +
22842 +
22843 +
22844function localDate(d) { +
22845 if (0 <= d.y && d.y < 100) { +
22846 var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); +
22847 date.setFullYear(d.y); +
22848 return date; +
22849 } +
22850 return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); +
22851} +
22852 +
22853function utcDate(d) { +
22854 if (0 <= d.y && d.y < 100) { +
22855 var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); +
22856 date.setUTCFullYear(d.y); +
22857 return date; +
22858 } +
22859 return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); +
22860} +
22861 +
22862function newYear(y) { +
22863 return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; +
22864} +
22865 +
22866function formatLocale(locale) { +
22867 var locale_dateTime = locale.dateTime, +
22868 locale_date = locale.date, +
22869 locale_time = locale.time, +
22870 locale_periods = locale.periods, +
22871 locale_weekdays = locale.days, +
22872 locale_shortWeekdays = locale.shortDays, +
22873 locale_months = locale.months, +
22874 locale_shortMonths = locale.shortMonths; +
22875 +
22876 var periodRe = formatRe(locale_periods), +
22877 periodLookup = formatLookup(locale_periods), +
22878 weekdayRe = formatRe(locale_weekdays), +
22879 weekdayLookup = formatLookup(locale_weekdays), +
22880 shortWeekdayRe = formatRe(locale_shortWeekdays), +
22881 shortWeekdayLookup = formatLookup(locale_shortWeekdays), +
22882 monthRe = formatRe(locale_months), +
22883 monthLookup = formatLookup(locale_months), +
22884 shortMonthRe = formatRe(locale_shortMonths), +
22885 shortMonthLookup = formatLookup(locale_shortMonths); +
22886 +
22887 var formats = { +
22888 "a": formatShortWeekday, +
22889 "A": formatWeekday, +
22890 "b": formatShortMonth, +
22891 "B": formatMonth, +
22892 "c": null, +
22893 "d": formatDayOfMonth, +
22894 "e": formatDayOfMonth, +
22895 "f": formatMicroseconds, +
22896 "H": formatHour24, +
22897 "I": formatHour12, +
22898 "j": formatDayOfYear, +
22899 "L": formatMilliseconds, +
22900 "m": formatMonthNumber, +
22901 "M": formatMinutes, +
22902 "p": formatPeriod, +
22903 "Q": formatUnixTimestamp, +
22904 "s": formatUnixTimestampSeconds, +
22905 "S": formatSeconds, +
22906 "u": formatWeekdayNumberMonday, +
22907 "U": formatWeekNumberSunday, +
22908 "V": formatWeekNumberISO, +
22909 "w": formatWeekdayNumberSunday, +
22910 "W": formatWeekNumberMonday, +
22911 "x": null, +
22912 "X": null, +
22913 "y": formatYear, +
22914 "Y": formatFullYear, +
22915 "Z": formatZone, +
22916 "%": formatLiteralPercent +
22917 }; +
22918 +
22919 var utcFormats = { +
22920 "a": formatUTCShortWeekday, +
22921 "A": formatUTCWeekday, +
22922 "b": formatUTCShortMonth, +
22923 "B": formatUTCMonth, +
22924 "c": null, +
22925 "d": formatUTCDayOfMonth, +
22926 "e": formatUTCDayOfMonth, +
22927 "f": formatUTCMicroseconds, +
22928 "H": formatUTCHour24, +
22929 "I": formatUTCHour12, +
22930 "j": formatUTCDayOfYear, +
22931 "L": formatUTCMilliseconds, +
22932 "m": formatUTCMonthNumber, +
22933 "M": formatUTCMinutes, +
22934 "p": formatUTCPeriod, +
22935 "Q": formatUnixTimestamp, +
22936 "s": formatUnixTimestampSeconds, +
22937 "S": formatUTCSeconds, +
22938 "u": formatUTCWeekdayNumberMonday, +
22939 "U": formatUTCWeekNumberSunday, +
22940 "V": formatUTCWeekNumberISO, +
22941 "w": formatUTCWeekdayNumberSunday, +
22942 "W": formatUTCWeekNumberMonday, +
22943 "x": null, +
22944 "X": null, +
22945 "y": formatUTCYear, +
22946 "Y": formatUTCFullYear, +
22947 "Z": formatUTCZone, +
22948 "%": formatLiteralPercent +
22949 }; +
22950 +
22951 var parses = { +
22952 "a": parseShortWeekday, +
22953 "A": parseWeekday, +
22954 "b": parseShortMonth, +
22955 "B": parseMonth, +
22956 "c": parseLocaleDateTime, +
22957 "d": parseDayOfMonth, +
22958 "e": parseDayOfMonth, +
22959 "f": parseMicroseconds, +
22960 "H": parseHour24, +
22961 "I": parseHour24, +
22962 "j": parseDayOfYear, +
22963 "L": parseMilliseconds, +
22964 "m": parseMonthNumber, +
22965 "M": parseMinutes, +
22966 "p": parsePeriod, +
22967 "Q": parseUnixTimestamp, +
22968 "s": parseUnixTimestampSeconds, +
22969 "S": parseSeconds, +
22970 "u": parseWeekdayNumberMonday, +
22971 "U": parseWeekNumberSunday, +
22972 "V": parseWeekNumberISO, +
22973 "w": parseWeekdayNumberSunday, +
22974 "W": parseWeekNumberMonday, +
22975 "x": parseLocaleDate, +
22976 "X": parseLocaleTime, +
22977 "y": parseYear, +
22978 "Y": parseFullYear, +
22979 "Z": parseZone, +
22980 "%": parseLiteralPercent +
22981 }; +
22982 +
22983 // These recursive directive definitions must be deferred. +
22984 formats.x = newFormat(locale_date, formats); +
22985 formats.X = newFormat(locale_time, formats); +
22986 formats.c = newFormat(locale_dateTime, formats); +
22987 utcFormats.x = newFormat(locale_date, utcFormats); +
22988 utcFormats.X = newFormat(locale_time, utcFormats); +
22989 utcFormats.c = newFormat(locale_dateTime, utcFormats); +
22990 +
22991 function newFormat(specifier, formats) { +
22992 return function(date) { +
22993 var string = [], +
22994 i = -1, +
22995 j = 0, +
22996 n = specifier.length, +
22997 c, +
22998 pad, +
22999 format; +
23000 +
23001 if (!(date instanceof Date)) date = new Date(+date); +
23002 +
23003 while (++i < n) { +
23004 if (specifier.charCodeAt(i) === 37) { +
23005 string.push(specifier.slice(j, i)); +
23006 if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); +
23007 else pad = c === "e" ? " " : "0"; +
23008 if (format = formats[c]) c = format(date, pad); +
23009 string.push(c); +
23010 j = i + 1; +
23011 } +
23012 } +
23013 +
23014 string.push(specifier.slice(j, i)); +
23015 return string.join(""); +
23016 }; +
23017 } +
23018 +
23019 function newParse(specifier, newDate) { +
23020 return function(string) { +
23021 var d = newYear(1900), +
23022 i = parseSpecifier(d, specifier, string += "", 0), +
23023 week, day; +
23024 if (i != string.length) return null; +
23025 +
23026 // If a UNIX timestamp is specified, return it. +
23027 if ("Q" in d) return new Date(d.Q); +
23028 +
23029 // The am-pm flag is 0 for AM, and 1 for PM. +
23030 if ("p" in d) d.H = d.H % 12 + d.p * 12; +
23031 +
23032 // Convert day-of-week and week-of-year to day-of-year. +
23033 if ("V" in d) { +
23034 if (d.V < 1 || d.V > 53) return null; +
23035 if (!("w" in d)) d.w = 1; +
23036 if ("Z" in d) { +
23037 week = utcDate(newYear(d.y)), day = week.getUTCDay(); +
23038 week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_0__["utcMonday"].ceil(week) : Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcMonday"])(week); +
23039 week = d3_time__WEBPACK_IMPORTED_MODULE_0__["utcDay"].offset(week, (d.V - 1) * 7); +
23040 d.y = week.getUTCFullYear(); +
23041 d.m = week.getUTCMonth(); +
23042 d.d = week.getUTCDate() + (d.w + 6) % 7; +
23043 } else { +
23044 week = newDate(newYear(d.y)), day = week.getDay(); +
23045 week = day > 4 || day === 0 ? d3_time__WEBPACK_IMPORTED_MODULE_0__["timeMonday"].ceil(week) : Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeMonday"])(week); +
23046 week = d3_time__WEBPACK_IMPORTED_MODULE_0__["timeDay"].offset(week, (d.V - 1) * 7); +
23047 d.y = week.getFullYear(); +
23048 d.m = week.getMonth(); +
23049 d.d = week.getDate() + (d.w + 6) % 7; +
23050 } +
23051 } else if ("W" in d || "U" in d) { +
23052 if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; +
23053 day = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); +
23054 d.m = 0; +
23055 d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7; +
23056 } +
23057 +
23058 // If a time zone is specified, all fields are interpreted as UTC and then +
23059 // offset according to the specified time zone. +
23060 if ("Z" in d) { +
23061 d.H += d.Z / 100 | 0; +
23062 d.M += d.Z % 100; +
23063 return utcDate(d); +
23064 } +
23065 +
23066 // Otherwise, all fields are in local time. +
23067 return newDate(d); +
23068 }; +
23069 } +
23070 +
23071 function parseSpecifier(d, specifier, string, j) { +
23072 var i = 0, +
23073 n = specifier.length, +
23074 m = string.length, +
23075 c, +
23076 parse; +
23077 +
23078 while (i < n) { +
23079 if (j >= m) return -1; +
23080 c = specifier.charCodeAt(i++); +
23081 if (c === 37) { +
23082 c = specifier.charAt(i++); +
23083 parse = parses[c in pads ? specifier.charAt(i++) : c]; +
23084 if (!parse || ((j = parse(d, string, j)) < 0)) return -1; +
23085 } else if (c != string.charCodeAt(j++)) { +
23086 return -1; +
23087 } +
23088 } +
23089 +
23090 return j; +
23091 } +
23092 +
23093 function parsePeriod(d, string, i) { +
23094 var n = periodRe.exec(string.slice(i)); +
23095 return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; +
23096 } +
23097 +
23098 function parseShortWeekday(d, string, i) { +
23099 var n = shortWeekdayRe.exec(string.slice(i)); +
23100 return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; +
23101 } +
23102 +
23103 function parseWeekday(d, string, i) { +
23104 var n = weekdayRe.exec(string.slice(i)); +
23105 return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; +
23106 } +
23107 +
23108 function parseShortMonth(d, string, i) { +
23109 var n = shortMonthRe.exec(string.slice(i)); +
23110 return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; +
23111 } +
23112 +
23113 function parseMonth(d, string, i) { +
23114 var n = monthRe.exec(string.slice(i)); +
23115 return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; +
23116 } +
23117 +
23118 function parseLocaleDateTime(d, string, i) { +
23119 return parseSpecifier(d, locale_dateTime, string, i); +
23120 } +
23121 +
23122 function parseLocaleDate(d, string, i) { +
23123 return parseSpecifier(d, locale_date, string, i); +
23124 } +
23125 +
23126 function parseLocaleTime(d, string, i) { +
23127 return parseSpecifier(d, locale_time, string, i); +
23128 } +
23129 +
23130 function formatShortWeekday(d) { +
23131 return locale_shortWeekdays[d.getDay()]; +
23132 } +
23133 +
23134 function formatWeekday(d) { +
23135 return locale_weekdays[d.getDay()]; +
23136 } +
23137 +
23138 function formatShortMonth(d) { +
23139 return locale_shortMonths[d.getMonth()]; +
23140 } +
23141 +
23142 function formatMonth(d) { +
23143 return locale_months[d.getMonth()]; +
23144 } +
23145 +
23146 function formatPeriod(d) { +
23147 return locale_periods[+(d.getHours() >= 12)]; +
23148 } +
23149 +
23150 function formatUTCShortWeekday(d) { +
23151 return locale_shortWeekdays[d.getUTCDay()]; +
23152 } +
23153 +
23154 function formatUTCWeekday(d) { +
23155 return locale_weekdays[d.getUTCDay()]; +
23156 } +
23157 +
23158 function formatUTCShortMonth(d) { +
23159 return locale_shortMonths[d.getUTCMonth()]; +
23160 } +
23161 +
23162 function formatUTCMonth(d) { +
23163 return locale_months[d.getUTCMonth()]; +
23164 } +
23165 +
23166 function formatUTCPeriod(d) { +
23167 return locale_periods[+(d.getUTCHours() >= 12)]; +
23168 } +
23169 +
23170 return { +
23171 format: function(specifier) { +
23172 var f = newFormat(specifier += "", formats); +
23173 f.toString = function() { return specifier; }; +
23174 return f; +
23175 }, +
23176 parse: function(specifier) { +
23177 var p = newParse(specifier += "", localDate); +
23178 p.toString = function() { return specifier; }; +
23179 return p; +
23180 }, +
23181 utcFormat: function(specifier) { +
23182 var f = newFormat(specifier += "", utcFormats); +
23183 f.toString = function() { return specifier; }; +
23184 return f; +
23185 }, +
23186 utcParse: function(specifier) { +
23187 var p = newParse(specifier, utcDate); +
23188 p.toString = function() { return specifier; }; +
23189 return p; +
23190 } +
23191 }; +
23192} +
23193 +
23194var pads = {"-": "", "_": " ", "0": "0"}, +
23195 numberRe = /^\s*\d+/, // note: ignores next directive +
23196 percentRe = /^%/, +
23197 requoteRe = /[\\^$*+?|[\]().{}]/g; +
23198 +
23199function pad(value, fill, width) { +
23200 var sign = value < 0 ? "-" : "", +
23201 string = (sign ? -value : value) + "", +
23202 length = string.length; +
23203 return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); +
23204} +
23205 +
23206function requote(s) { +
23207 return s.replace(requoteRe, "\\$&"); +
23208} +
23209 +
23210function formatRe(names) { +
23211 return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); +
23212} +
23213 +
23214function formatLookup(names) { +
23215 var map = {}, i = -1, n = names.length; +
23216 while (++i < n) map[names[i].toLowerCase()] = i; +
23217 return map; +
23218} +
23219 +
23220function parseWeekdayNumberSunday(d, string, i) { +
23221 var n = numberRe.exec(string.slice(i, i + 1)); +
23222 return n ? (d.w = +n[0], i + n[0].length) : -1; +
23223} +
23224 +
23225function parseWeekdayNumberMonday(d, string, i) { +
23226 var n = numberRe.exec(string.slice(i, i + 1)); +
23227 return n ? (d.u = +n[0], i + n[0].length) : -1; +
23228} +
23229 +
23230function parseWeekNumberSunday(d, string, i) { +
23231 var n = numberRe.exec(string.slice(i, i + 2)); +
23232 return n ? (d.U = +n[0], i + n[0].length) : -1; +
23233} +
23234 +
23235function parseWeekNumberISO(d, string, i) { +
23236 var n = numberRe.exec(string.slice(i, i + 2)); +
23237 return n ? (d.V = +n[0], i + n[0].length) : -1; +
23238} +
23239 +
23240function parseWeekNumberMonday(d, string, i) { +
23241 var n = numberRe.exec(string.slice(i, i + 2)); +
23242 return n ? (d.W = +n[0], i + n[0].length) : -1; +
23243} +
23244 +
23245function parseFullYear(d, string, i) { +
23246 var n = numberRe.exec(string.slice(i, i + 4)); +
23247 return n ? (d.y = +n[0], i + n[0].length) : -1; +
23248} +
23249 +
23250function parseYear(d, string, i) { +
23251 var n = numberRe.exec(string.slice(i, i + 2)); +
23252 return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; +
23253} +
23254 +
23255function parseZone(d, string, i) { +
23256 var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); +
23257 return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; +
23258} +
23259 +
23260function parseMonthNumber(d, string, i) { +
23261 var n = numberRe.exec(string.slice(i, i + 2)); +
23262 return n ? (d.m = n[0] - 1, i + n[0].length) : -1; +
23263} +
23264 +
23265function parseDayOfMonth(d, string, i) { +
23266 var n = numberRe.exec(string.slice(i, i + 2)); +
23267 return n ? (d.d = +n[0], i + n[0].length) : -1; +
23268} +
23269 +
23270function parseDayOfYear(d, string, i) { +
23271 var n = numberRe.exec(string.slice(i, i + 3)); +
23272 return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; +
23273} +
23274 +
23275function parseHour24(d, string, i) { +
23276 var n = numberRe.exec(string.slice(i, i + 2)); +
23277 return n ? (d.H = +n[0], i + n[0].length) : -1; +
23278} +
23279 +
23280function parseMinutes(d, string, i) { +
23281 var n = numberRe.exec(string.slice(i, i + 2)); +
23282 return n ? (d.M = +n[0], i + n[0].length) : -1; +
23283} +
23284 +
23285function parseSeconds(d, string, i) { +
23286 var n = numberRe.exec(string.slice(i, i + 2)); +
23287 return n ? (d.S = +n[0], i + n[0].length) : -1; +
23288} +
23289 +
23290function parseMilliseconds(d, string, i) { +
23291 var n = numberRe.exec(string.slice(i, i + 3)); +
23292 return n ? (d.L = +n[0], i + n[0].length) : -1; +
23293} +
23294 +
23295function parseMicroseconds(d, string, i) { +
23296 var n = numberRe.exec(string.slice(i, i + 6)); +
23297 return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; +
23298} +
23299 +
23300function parseLiteralPercent(d, string, i) { +
23301 var n = percentRe.exec(string.slice(i, i + 1)); +
23302 return n ? i + n[0].length : -1; +
23303} +
23304 +
23305function parseUnixTimestamp(d, string, i) { +
23306 var n = numberRe.exec(string.slice(i)); +
23307 return n ? (d.Q = +n[0], i + n[0].length) : -1; +
23308} +
23309 +
23310function parseUnixTimestampSeconds(d, string, i) { +
23311 var n = numberRe.exec(string.slice(i)); +
23312 return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1; +
23313} +
23314 +
23315function formatDayOfMonth(d, p) { +
23316 return pad(d.getDate(), p, 2); +
23317} +
23318 +
23319function formatHour24(d, p) { +
23320 return pad(d.getHours(), p, 2); +
23321} +
23322 +
23323function formatHour12(d, p) { +
23324 return pad(d.getHours() % 12 || 12, p, 2); +
23325} +
23326 +
23327function formatDayOfYear(d, p) { +
23328 return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_0__["timeDay"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d), d), p, 3); +
23329} +
23330 +
23331function formatMilliseconds(d, p) { +
23332 return pad(d.getMilliseconds(), p, 3); +
23333} +
23334 +
23335function formatMicroseconds(d, p) { +
23336 return formatMilliseconds(d, p) + "000"; +
23337} +
23338 +
23339function formatMonthNumber(d, p) { +
23340 return pad(d.getMonth() + 1, p, 2); +
23341} +
23342 +
23343function formatMinutes(d, p) { +
23344 return pad(d.getMinutes(), p, 2); +
23345} +
23346 +
23347function formatSeconds(d, p) { +
23348 return pad(d.getSeconds(), p, 2); +
23349} +
23350 +
23351function formatWeekdayNumberMonday(d) { +
23352 var day = d.getDay(); +
23353 return day === 0 ? 7 : day; +
23354} +
23355 +
23356function formatWeekNumberSunday(d, p) { +
23357 return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeSunday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d), d), p, 2); +
23358} +
23359 +
23360function formatWeekNumberISO(d, p) { +
23361 var day = d.getDay(); +
23362 d = (day >= 4 || day === 0) ? Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeThursday"])(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__["timeThursday"].ceil(d); +
23363 return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeThursday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d), d) + (Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d).getDay() === 4), p, 2); +
23364} +
23365 +
23366function formatWeekdayNumberSunday(d) { +
23367 return d.getDay(); +
23368} +
23369 +
23370function formatWeekNumberMonday(d, p) { +
23371 return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeMonday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["timeYear"])(d), d), p, 2); +
23372} +
23373 +
23374function formatYear(d, p) { +
23375 return pad(d.getFullYear() % 100, p, 2); +
23376} +
23377 +
23378function formatFullYear(d, p) { +
23379 return pad(d.getFullYear() % 10000, p, 4); +
23380} +
23381 +
23382function formatZone(d) { +
23383 var z = d.getTimezoneOffset(); +
23384 return (z > 0 ? "-" : (z *= -1, "+")) +
23385 + pad(z / 60 | 0, "0", 2) +
23386 + pad(z % 60, "0", 2); +
23387} +
23388 +
23389function formatUTCDayOfMonth(d, p) { +
23390 return pad(d.getUTCDate(), p, 2); +
23391} +
23392 +
23393function formatUTCHour24(d, p) { +
23394 return pad(d.getUTCHours(), p, 2); +
23395} +
23396 +
23397function formatUTCHour12(d, p) { +
23398 return pad(d.getUTCHours() % 12 || 12, p, 2); +
23399} +
23400 +
23401function formatUTCDayOfYear(d, p) { +
23402 return pad(1 + d3_time__WEBPACK_IMPORTED_MODULE_0__["utcDay"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d), d), p, 3); +
23403} +
23404 +
23405function formatUTCMilliseconds(d, p) { +
23406 return pad(d.getUTCMilliseconds(), p, 3); +
23407} +
23408 +
23409function formatUTCMicroseconds(d, p) { +
23410 return formatUTCMilliseconds(d, p) + "000"; +
23411} +
23412 +
23413function formatUTCMonthNumber(d, p) { +
23414 return pad(d.getUTCMonth() + 1, p, 2); +
23415} +
23416 +
23417function formatUTCMinutes(d, p) { +
23418 return pad(d.getUTCMinutes(), p, 2); +
23419} +
23420 +
23421function formatUTCSeconds(d, p) { +
23422 return pad(d.getUTCSeconds(), p, 2); +
23423} +
23424 +
23425function formatUTCWeekdayNumberMonday(d) { +
23426 var dow = d.getUTCDay(); +
23427 return dow === 0 ? 7 : dow; +
23428} +
23429 +
23430function formatUTCWeekNumberSunday(d, p) { +
23431 return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcSunday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d), d), p, 2); +
23432} +
23433 +
23434function formatUTCWeekNumberISO(d, p) { +
23435 var day = d.getUTCDay(); +
23436 d = (day >= 4 || day === 0) ? Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcThursday"])(d) : d3_time__WEBPACK_IMPORTED_MODULE_0__["utcThursday"].ceil(d); +
23437 return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcThursday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d), d) + (Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d).getUTCDay() === 4), p, 2); +
23438} +
23439 +
23440function formatUTCWeekdayNumberSunday(d) { +
23441 return d.getUTCDay(); +
23442} +
23443 +
23444function formatUTCWeekNumberMonday(d, p) { +
23445 return pad(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcMonday"].count(Object(d3_time__WEBPACK_IMPORTED_MODULE_0__["utcYear"])(d), d), p, 2); +
23446} +
23447 +
23448function formatUTCYear(d, p) { +
23449 return pad(d.getUTCFullYear() % 100, p, 2); +
23450} +
23451 +
23452function formatUTCFullYear(d, p) { +
23453 return pad(d.getUTCFullYear() % 10000, p, 4); +
23454} +
23455 +
23456function formatUTCZone() { +
23457 return "+0000"; +
23458} +
23459 +
23460function formatLiteralPercent() { +
23461 return "%"; +
23462} +
23463 +
23464function formatUnixTimestamp(d) { +
23465 return +d; +
23466} +
23467 +
23468function formatUnixTimestampSeconds(d) { +
23469 return Math.floor(+d / 1000); +
23470} +
23471 +
23472 +
23473/***/ }), +
23474 +
23475/***/ "./node_modules/d3-time/src/day.js": +
23476/*!*****************************************!*\ +
23477 !*** ./node_modules/d3-time/src/day.js ***! +
23478 \*****************************************/ +
23479/*! exports provided: default, days */ +
23480/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23481 +
23482"use strict"; +
23483__webpack_require__.r(__webpack_exports__); +
23484/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "days", function() { return days; }); +
23485/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
23486/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-time/src/duration.js"); +
23487 +
23488 +
23489 +
23490var day = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
23491 date.setHours(0, 0, 0, 0); +
23492}, function(date, step) { +
23493 date.setDate(date.getDate() + step); +
23494}, function(start, end) { +
23495 return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationDay"]; +
23496}, function(date) { +
23497 return date.getDate() - 1; +
23498}); +
23499 +
23500/* harmony default export */ __webpack_exports__["default"] = (day); +
23501var days = day.range; +
23502 +
23503 +
23504/***/ }), +
23505 +
23506/***/ "./node_modules/d3-time/src/duration.js": +
23507/*!**********************************************!*\ +
23508 !*** ./node_modules/d3-time/src/duration.js ***! +
23509 \**********************************************/ +
23510/*! exports provided: durationSecond, durationMinute, durationHour, durationDay, durationWeek */ +
23511/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23512 +
23513"use strict"; +
23514__webpack_require__.r(__webpack_exports__); +
23515/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationSecond", function() { return durationSecond; }); +
23516/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationMinute", function() { return durationMinute; }); +
23517/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationHour", function() { return durationHour; }); +
23518/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationDay", function() { return durationDay; }); +
23519/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "durationWeek", function() { return durationWeek; }); +
23520var durationSecond = 1e3; +
23521var durationMinute = 6e4; +
23522var durationHour = 36e5; +
23523var durationDay = 864e5; +
23524var durationWeek = 6048e5; +
23525 +
23526 +
23527/***/ }), +
23528 +
23529/***/ "./node_modules/d3-time/src/hour.js": +
23530/*!******************************************!*\ +
23531 !*** ./node_modules/d3-time/src/hour.js ***! +
23532 \******************************************/ +
23533/*! exports provided: default, hours */ +
23534/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23535 +
23536"use strict"; +
23537__webpack_require__.r(__webpack_exports__); +
23538/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hours", function() { return hours; }); +
23539/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
23540/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-time/src/duration.js"); +
23541 +
23542 +
23543 +
23544var hour = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
23545 var offset = date.getTimezoneOffset() * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"] % _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]; +
23546 if (offset < 0) offset += _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]; +
23547 date.setTime(Math.floor((+date - offset) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]) * _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"] + offset); +
23548}, function(date, step) { +
23549 date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]); +
23550}, function(start, end) { +
23551 return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]; +
23552}, function(date) { +
23553 return date.getHours(); +
23554}); +
23555 +
23556/* harmony default export */ __webpack_exports__["default"] = (hour); +
23557var hours = hour.range; +
23558 +
23559 +
23560/***/ }), +
23561 +
23562/***/ "./node_modules/d3-time/src/index.js": +
23563/*!*******************************************!*\ +
23564 !*** ./node_modules/d3-time/src/index.js ***! +
23565 \*******************************************/ +
23566/*! exports provided: timeInterval, timeMillisecond, timeMilliseconds, utcMillisecond, utcMilliseconds, timeSecond, timeSeconds, utcSecond, utcSeconds, timeMinute, timeMinutes, timeHour, timeHours, timeDay, timeDays, timeWeek, timeWeeks, timeSunday, timeSundays, timeMonday, timeMondays, timeTuesday, timeTuesdays, timeWednesday, timeWednesdays, timeThursday, timeThursdays, timeFriday, timeFridays, timeSaturday, timeSaturdays, timeMonth, timeMonths, timeYear, timeYears, utcMinute, utcMinutes, utcHour, utcHours, utcDay, utcDays, utcWeek, utcWeeks, utcSunday, utcSundays, utcMonday, utcMondays, utcTuesday, utcTuesdays, utcWednesday, utcWednesdays, utcThursday, utcThursdays, utcFriday, utcFridays, utcSaturday, utcSaturdays, utcMonth, utcMonths, utcYear, utcYears */ +
23567/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23568 +
23569"use strict"; +
23570__webpack_require__.r(__webpack_exports__); +
23571/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
23572/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return _interval__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
23573 +
23574/* harmony import */ var _millisecond__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./millisecond */ "./node_modules/d3-time/src/millisecond.js"); +
23575/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMillisecond", function() { return _millisecond__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
23576 +
23577/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMilliseconds", function() { return _millisecond__WEBPACK_IMPORTED_MODULE_1__["milliseconds"]; }); +
23578 +
23579/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMillisecond", function() { return _millisecond__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
23580 +
23581/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMilliseconds", function() { return _millisecond__WEBPACK_IMPORTED_MODULE_1__["milliseconds"]; }); +
23582 +
23583/* harmony import */ var _second__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./second */ "./node_modules/d3-time/src/second.js"); +
23584/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSecond", function() { return _second__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
23585 +
23586/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSeconds", function() { return _second__WEBPACK_IMPORTED_MODULE_2__["seconds"]; }); +
23587 +
23588/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSecond", function() { return _second__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
23589 +
23590/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSeconds", function() { return _second__WEBPACK_IMPORTED_MODULE_2__["seconds"]; }); +
23591 +
23592/* harmony import */ var _minute__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./minute */ "./node_modules/d3-time/src/minute.js"); +
23593/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMinute", function() { return _minute__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
23594 +
23595/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMinutes", function() { return _minute__WEBPACK_IMPORTED_MODULE_3__["minutes"]; }); +
23596 +
23597/* harmony import */ var _hour__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hour */ "./node_modules/d3-time/src/hour.js"); +
23598/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeHour", function() { return _hour__WEBPACK_IMPORTED_MODULE_4__["default"]; }); +
23599 +
23600/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeHours", function() { return _hour__WEBPACK_IMPORTED_MODULE_4__["hours"]; }); +
23601 +
23602/* harmony import */ var _day__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./day */ "./node_modules/d3-time/src/day.js"); +
23603/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeDay", function() { return _day__WEBPACK_IMPORTED_MODULE_5__["default"]; }); +
23604 +
23605/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeDays", function() { return _day__WEBPACK_IMPORTED_MODULE_5__["days"]; }); +
23606 +
23607/* harmony import */ var _week__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./week */ "./node_modules/d3-time/src/week.js"); +
23608/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWeek", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["sunday"]; }); +
23609 +
23610/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWeeks", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["sundays"]; }); +
23611 +
23612/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSunday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["sunday"]; }); +
23613 +
23614/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSundays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["sundays"]; }); +
23615 +
23616/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["monday"]; }); +
23617 +
23618/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMondays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["mondays"]; }); +
23619 +
23620/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeTuesday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["tuesday"]; }); +
23621 +
23622/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeTuesdays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["tuesdays"]; }); +
23623 +
23624/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWednesday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["wednesday"]; }); +
23625 +
23626/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWednesdays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["wednesdays"]; }); +
23627 +
23628/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeThursday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["thursday"]; }); +
23629 +
23630/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeThursdays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["thursdays"]; }); +
23631 +
23632/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFriday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["friday"]; }); +
23633 +
23634/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFridays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["fridays"]; }); +
23635 +
23636/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSaturday", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["saturday"]; }); +
23637 +
23638/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSaturdays", function() { return _week__WEBPACK_IMPORTED_MODULE_6__["saturdays"]; }); +
23639 +
23640/* harmony import */ var _month__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./month */ "./node_modules/d3-time/src/month.js"); +
23641/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonth", function() { return _month__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +
23642 +
23643/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonths", function() { return _month__WEBPACK_IMPORTED_MODULE_7__["months"]; }); +
23644 +
23645/* harmony import */ var _year__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./year */ "./node_modules/d3-time/src/year.js"); +
23646/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeYear", function() { return _year__WEBPACK_IMPORTED_MODULE_8__["default"]; }); +
23647 +
23648/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeYears", function() { return _year__WEBPACK_IMPORTED_MODULE_8__["years"]; }); +
23649 +
23650/* harmony import */ var _utcMinute__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utcMinute */ "./node_modules/d3-time/src/utcMinute.js"); +
23651/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMinute", function() { return _utcMinute__WEBPACK_IMPORTED_MODULE_9__["default"]; }); +
23652 +
23653/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMinutes", function() { return _utcMinute__WEBPACK_IMPORTED_MODULE_9__["utcMinutes"]; }); +
23654 +
23655/* harmony import */ var _utcHour__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utcHour */ "./node_modules/d3-time/src/utcHour.js"); +
23656/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcHour", function() { return _utcHour__WEBPACK_IMPORTED_MODULE_10__["default"]; }); +
23657 +
23658/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcHours", function() { return _utcHour__WEBPACK_IMPORTED_MODULE_10__["utcHours"]; }); +
23659 +
23660/* harmony import */ var _utcDay__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utcDay */ "./node_modules/d3-time/src/utcDay.js"); +
23661/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcDay", function() { return _utcDay__WEBPACK_IMPORTED_MODULE_11__["default"]; }); +
23662 +
23663/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcDays", function() { return _utcDay__WEBPACK_IMPORTED_MODULE_11__["utcDays"]; }); +
23664 +
23665/* harmony import */ var _utcWeek__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utcWeek */ "./node_modules/d3-time/src/utcWeek.js"); +
23666/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWeek", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSunday"]; }); +
23667 +
23668/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWeeks", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSundays"]; }); +
23669 +
23670/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSunday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSunday"]; }); +
23671 +
23672/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSundays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSundays"]; }); +
23673 +
23674/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcMonday"]; }); +
23675 +
23676/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMondays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcMondays"]; }); +
23677 +
23678/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcTuesday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcTuesday"]; }); +
23679 +
23680/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcTuesdays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcTuesdays"]; }); +
23681 +
23682/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWednesday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcWednesday"]; }); +
23683 +
23684/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWednesdays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcWednesdays"]; }); +
23685 +
23686/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcThursday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcThursday"]; }); +
23687 +
23688/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcThursdays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcThursdays"]; }); +
23689 +
23690/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFriday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcFriday"]; }); +
23691 +
23692/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFridays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcFridays"]; }); +
23693 +
23694/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSaturday", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSaturday"]; }); +
23695 +
23696/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSaturdays", function() { return _utcWeek__WEBPACK_IMPORTED_MODULE_12__["utcSaturdays"]; }); +
23697 +
23698/* harmony import */ var _utcMonth__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utcMonth */ "./node_modules/d3-time/src/utcMonth.js"); +
23699/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonth", function() { return _utcMonth__WEBPACK_IMPORTED_MODULE_13__["default"]; }); +
23700 +
23701/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonths", function() { return _utcMonth__WEBPACK_IMPORTED_MODULE_13__["utcMonths"]; }); +
23702 +
23703/* harmony import */ var _utcYear__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utcYear */ "./node_modules/d3-time/src/utcYear.js"); +
23704/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcYear", function() { return _utcYear__WEBPACK_IMPORTED_MODULE_14__["default"]; }); +
23705 +
23706/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcYears", function() { return _utcYear__WEBPACK_IMPORTED_MODULE_14__["utcYears"]; }); +
23707 +
23708 +
23709 +
23710 +
23711 +
23712 +
23713 +
23714 +
23715 +
23716 +
23717 +
23718 +
23719 +
23720 +
23721 +
23722 +
23723 +
23724 +
23725 +
23726 +
23727 +
23728 +
23729 +
23730 +
23731 +
23732 +
23733 +
23734 +
23735 +
23736 +
23737 +
23738 +
23739/***/ }), +
23740 +
23741/***/ "./node_modules/d3-time/src/interval.js": +
23742/*!**********************************************!*\ +
23743 !*** ./node_modules/d3-time/src/interval.js ***! +
23744 \**********************************************/ +
23745/*! exports provided: default */ +
23746/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23747 +
23748"use strict"; +
23749__webpack_require__.r(__webpack_exports__); +
23750/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return newInterval; }); +
23751var t0 = new Date, +
23752 t1 = new Date; +
23753 +
23754function newInterval(floori, offseti, count, field) { +
23755 +
23756 function interval(date) { +
23757 return floori(date = new Date(+date)), date; +
23758 } +
23759 +
23760 interval.floor = interval; +
23761 +
23762 interval.ceil = function(date) { +
23763 return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; +
23764 }; +
23765 +
23766 interval.round = function(date) { +
23767 var d0 = interval(date), +
23768 d1 = interval.ceil(date); +
23769 return date - d0 < d1 - date ? d0 : d1; +
23770 }; +
23771 +
23772 interval.offset = function(date, step) { +
23773 return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; +
23774 }; +
23775 +
23776 interval.range = function(start, stop, step) { +
23777 var range = [], previous; +
23778 start = interval.ceil(start); +
23779 step = step == null ? 1 : Math.floor(step); +
23780 if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date +
23781 do range.push(previous = new Date(+start)), offseti(start, step), floori(start); +
23782 while (previous < start && start < stop); +
23783 return range; +
23784 }; +
23785 +
23786 interval.filter = function(test) { +
23787 return newInterval(function(date) { +
23788 if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); +
23789 }, function(date, step) { +
23790 if (date >= date) { +
23791 if (step < 0) while (++step <= 0) { +
23792 while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty +
23793 } else while (--step >= 0) { +
23794 while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty +
23795 } +
23796 } +
23797 }); +
23798 }; +
23799 +
23800 if (count) { +
23801 interval.count = function(start, end) { +
23802 t0.setTime(+start), t1.setTime(+end); +
23803 floori(t0), floori(t1); +
23804 return Math.floor(count(t0, t1)); +
23805 }; +
23806 +
23807 interval.every = function(step) { +
23808 step = Math.floor(step); +
23809 return !isFinite(step) || !(step > 0) ? null +
23810 : !(step > 1) ? interval +
23811 : interval.filter(field +
23812 ? function(d) { return field(d) % step === 0; } +
23813 : function(d) { return interval.count(0, d) % step === 0; }); +
23814 }; +
23815 } +
23816 +
23817 return interval; +
23818} +
23819 +
23820 +
23821/***/ }), +
23822 +
23823/***/ "./node_modules/d3-time/src/millisecond.js": +
23824/*!*************************************************!*\ +
23825 !*** ./node_modules/d3-time/src/millisecond.js ***! +
23826 \*************************************************/ +
23827/*! exports provided: default, milliseconds */ +
23828/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23829 +
23830"use strict"; +
23831__webpack_require__.r(__webpack_exports__); +
23832/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "milliseconds", function() { return milliseconds; }); +
23833/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
23834 +
23835 +
23836var millisecond = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function() { +
23837 // noop +
23838}, function(date, step) { +
23839 date.setTime(+date + step); +
23840}, function(start, end) { +
23841 return end - start; +
23842}); +
23843 +
23844// An optimized implementation for this simple case. +
23845millisecond.every = function(k) { +
23846 k = Math.floor(k); +
23847 if (!isFinite(k) || !(k > 0)) return null; +
23848 if (!(k > 1)) return millisecond; +
23849 return Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
23850 date.setTime(Math.floor(date / k) * k); +
23851 }, function(date, step) { +
23852 date.setTime(+date + step * k); +
23853 }, function(start, end) { +
23854 return (end - start) / k; +
23855 }); +
23856}; +
23857 +
23858/* harmony default export */ __webpack_exports__["default"] = (millisecond); +
23859var milliseconds = millisecond.range; +
23860 +
23861 +
23862/***/ }), +
23863 +
23864/***/ "./node_modules/d3-time/src/minute.js": +
23865/*!********************************************!*\ +
23866 !*** ./node_modules/d3-time/src/minute.js ***! +
23867 \********************************************/ +
23868/*! exports provided: default, minutes */ +
23869/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23870 +
23871"use strict"; +
23872__webpack_require__.r(__webpack_exports__); +
23873/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "minutes", function() { return minutes; }); +
23874/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
23875/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-time/src/duration.js"); +
23876 +
23877 +
23878 +
23879var minute = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
23880 date.setTime(Math.floor(date / _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]) * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]); +
23881}, function(date, step) { +
23882 date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]); +
23883}, function(start, end) { +
23884 return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]; +
23885}, function(date) { +
23886 return date.getMinutes(); +
23887}); +
23888 +
23889/* harmony default export */ __webpack_exports__["default"] = (minute); +
23890var minutes = minute.range; +
23891 +
23892 +
23893/***/ }), +
23894 +
23895/***/ "./node_modules/d3-time/src/month.js": +
23896/*!*******************************************!*\ +
23897 !*** ./node_modules/d3-time/src/month.js ***! +
23898 \*******************************************/ +
23899/*! exports provided: default, months */ +
23900/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23901 +
23902"use strict"; +
23903__webpack_require__.r(__webpack_exports__); +
23904/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "months", function() { return months; }); +
23905/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
23906 +
23907 +
23908var month = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
23909 date.setDate(1); +
23910 date.setHours(0, 0, 0, 0); +
23911}, function(date, step) { +
23912 date.setMonth(date.getMonth() + step); +
23913}, function(start, end) { +
23914 return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; +
23915}, function(date) { +
23916 return date.getMonth(); +
23917}); +
23918 +
23919/* harmony default export */ __webpack_exports__["default"] = (month); +
23920var months = month.range; +
23921 +
23922 +
23923/***/ }), +
23924 +
23925/***/ "./node_modules/d3-time/src/second.js": +
23926/*!********************************************!*\ +
23927 !*** ./node_modules/d3-time/src/second.js ***! +
23928 \********************************************/ +
23929/*! exports provided: default, seconds */ +
23930/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23931 +
23932"use strict"; +
23933__webpack_require__.r(__webpack_exports__); +
23934/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "seconds", function() { return seconds; }); +
23935/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
23936/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-time/src/duration.js"); +
23937 +
23938 +
23939 +
23940var second = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
23941 date.setTime(Math.floor(date / _duration__WEBPACK_IMPORTED_MODULE_1__["durationSecond"]) * _duration__WEBPACK_IMPORTED_MODULE_1__["durationSecond"]); +
23942}, function(date, step) { +
23943 date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationSecond"]); +
23944}, function(start, end) { +
23945 return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationSecond"]; +
23946}, function(date) { +
23947 return date.getUTCSeconds(); +
23948}); +
23949 +
23950/* harmony default export */ __webpack_exports__["default"] = (second); +
23951var seconds = second.range; +
23952 +
23953 +
23954/***/ }), +
23955 +
23956/***/ "./node_modules/d3-time/src/utcDay.js": +
23957/*!********************************************!*\ +
23958 !*** ./node_modules/d3-time/src/utcDay.js ***! +
23959 \********************************************/ +
23960/*! exports provided: default, utcDays */ +
23961/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23962 +
23963"use strict"; +
23964__webpack_require__.r(__webpack_exports__); +
23965/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcDays", function() { return utcDays; }); +
23966/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
23967/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-time/src/duration.js"); +
23968 +
23969 +
23970 +
23971var utcDay = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
23972 date.setUTCHours(0, 0, 0, 0); +
23973}, function(date, step) { +
23974 date.setUTCDate(date.getUTCDate() + step); +
23975}, function(start, end) { +
23976 return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationDay"]; +
23977}, function(date) { +
23978 return date.getUTCDate() - 1; +
23979}); +
23980 +
23981/* harmony default export */ __webpack_exports__["default"] = (utcDay); +
23982var utcDays = utcDay.range; +
23983 +
23984 +
23985/***/ }), +
23986 +
23987/***/ "./node_modules/d3-time/src/utcHour.js": +
23988/*!*********************************************!*\ +
23989 !*** ./node_modules/d3-time/src/utcHour.js ***! +
23990 \*********************************************/ +
23991/*! exports provided: default, utcHours */ +
23992/***/ (function(module, __webpack_exports__, __webpack_require__) { +
23993 +
23994"use strict"; +
23995__webpack_require__.r(__webpack_exports__); +
23996/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcHours", function() { return utcHours; }); +
23997/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
23998/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-time/src/duration.js"); +
23999 +
24000 +
24001 +
24002var utcHour = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
24003 date.setUTCMinutes(0, 0, 0); +
24004}, function(date, step) { +
24005 date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]); +
24006}, function(start, end) { +
24007 return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationHour"]; +
24008}, function(date) { +
24009 return date.getUTCHours(); +
24010}); +
24011 +
24012/* harmony default export */ __webpack_exports__["default"] = (utcHour); +
24013var utcHours = utcHour.range; +
24014 +
24015 +
24016/***/ }), +
24017 +
24018/***/ "./node_modules/d3-time/src/utcMinute.js": +
24019/*!***********************************************!*\ +
24020 !*** ./node_modules/d3-time/src/utcMinute.js ***! +
24021 \***********************************************/ +
24022/*! exports provided: default, utcMinutes */ +
24023/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24024 +
24025"use strict"; +
24026__webpack_require__.r(__webpack_exports__); +
24027/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcMinutes", function() { return utcMinutes; }); +
24028/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
24029/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-time/src/duration.js"); +
24030 +
24031 +
24032 +
24033var utcMinute = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
24034 date.setUTCSeconds(0, 0); +
24035}, function(date, step) { +
24036 date.setTime(+date + step * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]); +
24037}, function(start, end) { +
24038 return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]; +
24039}, function(date) { +
24040 return date.getUTCMinutes(); +
24041}); +
24042 +
24043/* harmony default export */ __webpack_exports__["default"] = (utcMinute); +
24044var utcMinutes = utcMinute.range; +
24045 +
24046 +
24047/***/ }), +
24048 +
24049/***/ "./node_modules/d3-time/src/utcMonth.js": +
24050/*!**********************************************!*\ +
24051 !*** ./node_modules/d3-time/src/utcMonth.js ***! +
24052 \**********************************************/ +
24053/*! exports provided: default, utcMonths */ +
24054/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24055 +
24056"use strict"; +
24057__webpack_require__.r(__webpack_exports__); +
24058/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcMonths", function() { return utcMonths; }); +
24059/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
24060 +
24061 +
24062var utcMonth = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
24063 date.setUTCDate(1); +
24064 date.setUTCHours(0, 0, 0, 0); +
24065}, function(date, step) { +
24066 date.setUTCMonth(date.getUTCMonth() + step); +
24067}, function(start, end) { +
24068 return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; +
24069}, function(date) { +
24070 return date.getUTCMonth(); +
24071}); +
24072 +
24073/* harmony default export */ __webpack_exports__["default"] = (utcMonth); +
24074var utcMonths = utcMonth.range; +
24075 +
24076 +
24077/***/ }), +
24078 +
24079/***/ "./node_modules/d3-time/src/utcWeek.js": +
24080/*!*********************************************!*\ +
24081 !*** ./node_modules/d3-time/src/utcWeek.js ***! +
24082 \*********************************************/ +
24083/*! exports provided: utcSunday, utcMonday, utcTuesday, utcWednesday, utcThursday, utcFriday, utcSaturday, utcSundays, utcMondays, utcTuesdays, utcWednesdays, utcThursdays, utcFridays, utcSaturdays */ +
24084/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24085 +
24086"use strict"; +
24087__webpack_require__.r(__webpack_exports__); +
24088/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcSunday", function() { return utcSunday; }); +
24089/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcMonday", function() { return utcMonday; }); +
24090/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcTuesday", function() { return utcTuesday; }); +
24091/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcWednesday", function() { return utcWednesday; }); +
24092/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcThursday", function() { return utcThursday; }); +
24093/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcFriday", function() { return utcFriday; }); +
24094/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcSaturday", function() { return utcSaturday; }); +
24095/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcSundays", function() { return utcSundays; }); +
24096/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcMondays", function() { return utcMondays; }); +
24097/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcTuesdays", function() { return utcTuesdays; }); +
24098/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcWednesdays", function() { return utcWednesdays; }); +
24099/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcThursdays", function() { return utcThursdays; }); +
24100/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcFridays", function() { return utcFridays; }); +
24101/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcSaturdays", function() { return utcSaturdays; }); +
24102/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
24103/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-time/src/duration.js"); +
24104 +
24105 +
24106 +
24107function utcWeekday(i) { +
24108 return Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
24109 date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); +
24110 date.setUTCHours(0, 0, 0, 0); +
24111 }, function(date, step) { +
24112 date.setUTCDate(date.getUTCDate() + step * 7); +
24113 }, function(start, end) { +
24114 return (end - start) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationWeek"]; +
24115 }); +
24116} +
24117 +
24118var utcSunday = utcWeekday(0); +
24119var utcMonday = utcWeekday(1); +
24120var utcTuesday = utcWeekday(2); +
24121var utcWednesday = utcWeekday(3); +
24122var utcThursday = utcWeekday(4); +
24123var utcFriday = utcWeekday(5); +
24124var utcSaturday = utcWeekday(6); +
24125 +
24126var utcSundays = utcSunday.range; +
24127var utcMondays = utcMonday.range; +
24128var utcTuesdays = utcTuesday.range; +
24129var utcWednesdays = utcWednesday.range; +
24130var utcThursdays = utcThursday.range; +
24131var utcFridays = utcFriday.range; +
24132var utcSaturdays = utcSaturday.range; +
24133 +
24134 +
24135/***/ }), +
24136 +
24137/***/ "./node_modules/d3-time/src/utcYear.js": +
24138/*!*********************************************!*\ +
24139 !*** ./node_modules/d3-time/src/utcYear.js ***! +
24140 \*********************************************/ +
24141/*! exports provided: default, utcYears */ +
24142/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24143 +
24144"use strict"; +
24145__webpack_require__.r(__webpack_exports__); +
24146/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "utcYears", function() { return utcYears; }); +
24147/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
24148 +
24149 +
24150var utcYear = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
24151 date.setUTCMonth(0, 1); +
24152 date.setUTCHours(0, 0, 0, 0); +
24153}, function(date, step) { +
24154 date.setUTCFullYear(date.getUTCFullYear() + step); +
24155}, function(start, end) { +
24156 return end.getUTCFullYear() - start.getUTCFullYear(); +
24157}, function(date) { +
24158 return date.getUTCFullYear(); +
24159}); +
24160 +
24161// An optimized implementation for this simple case. +
24162utcYear.every = function(k) { +
24163 return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
24164 date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); +
24165 date.setUTCMonth(0, 1); +
24166 date.setUTCHours(0, 0, 0, 0); +
24167 }, function(date, step) { +
24168 date.setUTCFullYear(date.getUTCFullYear() + step * k); +
24169 }); +
24170}; +
24171 +
24172/* harmony default export */ __webpack_exports__["default"] = (utcYear); +
24173var utcYears = utcYear.range; +
24174 +
24175 +
24176/***/ }), +
24177 +
24178/***/ "./node_modules/d3-time/src/week.js": +
24179/*!******************************************!*\ +
24180 !*** ./node_modules/d3-time/src/week.js ***! +
24181 \******************************************/ +
24182/*! exports provided: sunday, monday, tuesday, wednesday, thursday, friday, saturday, sundays, mondays, tuesdays, wednesdays, thursdays, fridays, saturdays */ +
24183/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24184 +
24185"use strict"; +
24186__webpack_require__.r(__webpack_exports__); +
24187/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sunday", function() { return sunday; }); +
24188/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "monday", function() { return monday; }); +
24189/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tuesday", function() { return tuesday; }); +
24190/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wednesday", function() { return wednesday; }); +
24191/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "thursday", function() { return thursday; }); +
24192/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "friday", function() { return friday; }); +
24193/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saturday", function() { return saturday; }); +
24194/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sundays", function() { return sundays; }); +
24195/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mondays", function() { return mondays; }); +
24196/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tuesdays", function() { return tuesdays; }); +
24197/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wednesdays", function() { return wednesdays; }); +
24198/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "thursdays", function() { return thursdays; }); +
24199/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fridays", function() { return fridays; }); +
24200/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saturdays", function() { return saturdays; }); +
24201/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
24202/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-time/src/duration.js"); +
24203 +
24204 +
24205 +
24206function weekday(i) { +
24207 return Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
24208 date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); +
24209 date.setHours(0, 0, 0, 0); +
24210 }, function(date, step) { +
24211 date.setDate(date.getDate() + step * 7); +
24212 }, function(start, end) { +
24213 return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * _duration__WEBPACK_IMPORTED_MODULE_1__["durationMinute"]) / _duration__WEBPACK_IMPORTED_MODULE_1__["durationWeek"]; +
24214 }); +
24215} +
24216 +
24217var sunday = weekday(0); +
24218var monday = weekday(1); +
24219var tuesday = weekday(2); +
24220var wednesday = weekday(3); +
24221var thursday = weekday(4); +
24222var friday = weekday(5); +
24223var saturday = weekday(6); +
24224 +
24225var sundays = sunday.range; +
24226var mondays = monday.range; +
24227var tuesdays = tuesday.range; +
24228var wednesdays = wednesday.range; +
24229var thursdays = thursday.range; +
24230var fridays = friday.range; +
24231var saturdays = saturday.range; +
24232 +
24233 +
24234/***/ }), +
24235 +
24236/***/ "./node_modules/d3-time/src/year.js": +
24237/*!******************************************!*\ +
24238 !*** ./node_modules/d3-time/src/year.js ***! +
24239 \******************************************/ +
24240/*! exports provided: default, years */ +
24241/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24242 +
24243"use strict"; +
24244__webpack_require__.r(__webpack_exports__); +
24245/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "years", function() { return years; }); +
24246/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-time/src/interval.js"); +
24247 +
24248 +
24249var year = Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
24250 date.setMonth(0, 1); +
24251 date.setHours(0, 0, 0, 0); +
24252}, function(date, step) { +
24253 date.setFullYear(date.getFullYear() + step); +
24254}, function(start, end) { +
24255 return end.getFullYear() - start.getFullYear(); +
24256}, function(date) { +
24257 return date.getFullYear(); +
24258}); +
24259 +
24260// An optimized implementation for this simple case. +
24261year.every = function(k) { +
24262 return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : Object(_interval__WEBPACK_IMPORTED_MODULE_0__["default"])(function(date) { +
24263 date.setFullYear(Math.floor(date.getFullYear() / k) * k); +
24264 date.setMonth(0, 1); +
24265 date.setHours(0, 0, 0, 0); +
24266 }, function(date, step) { +
24267 date.setFullYear(date.getFullYear() + step * k); +
24268 }); +
24269}; +
24270 +
24271/* harmony default export */ __webpack_exports__["default"] = (year); +
24272var years = year.range; +
24273 +
24274 +
24275/***/ }), +
24276 +
24277/***/ "./node_modules/d3-timer/src/index.js": +
24278/*!********************************************!*\ +
24279 !*** ./node_modules/d3-timer/src/index.js ***! +
24280 \********************************************/ +
24281/*! exports provided: now, timer, timerFlush, timeout, interval */ +
24282/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24283 +
24284"use strict"; +
24285__webpack_require__.r(__webpack_exports__); +
24286/* harmony import */ var _timer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer */ "./node_modules/d3-timer/src/timer.js"); +
24287/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "now", function() { return _timer__WEBPACK_IMPORTED_MODULE_0__["now"]; }); +
24288 +
24289/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return _timer__WEBPACK_IMPORTED_MODULE_0__["timer"]; }); +
24290 +
24291/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timerFlush", function() { return _timer__WEBPACK_IMPORTED_MODULE_0__["timerFlush"]; }); +
24292 +
24293/* harmony import */ var _timeout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timeout */ "./node_modules/d3-timer/src/timeout.js"); +
24294/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return _timeout__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
24295 +
24296/* harmony import */ var _interval__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./interval */ "./node_modules/d3-timer/src/interval.js"); +
24297/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return _interval__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
24298 +
24299 +
24300 +
24301 +
24302 +
24303 +
24304 +
24305 +
24306/***/ }), +
24307 +
24308/***/ "./node_modules/d3-timer/src/interval.js": +
24309/*!***********************************************!*\ +
24310 !*** ./node_modules/d3-timer/src/interval.js ***! +
24311 \***********************************************/ +
24312/*! exports provided: default */ +
24313/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24314 +
24315"use strict"; +
24316__webpack_require__.r(__webpack_exports__); +
24317/* harmony import */ var _timer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer */ "./node_modules/d3-timer/src/timer.js"); +
24318 +
24319 +
24320/* harmony default export */ __webpack_exports__["default"] = (function(callback, delay, time) { +
24321 var t = new _timer__WEBPACK_IMPORTED_MODULE_0__["Timer"], total = delay; +
24322 if (delay == null) return t.restart(callback, delay, time), t; +
24323 delay = +delay, time = time == null ? Object(_timer__WEBPACK_IMPORTED_MODULE_0__["now"])() : +time; +
24324 t.restart(function tick(elapsed) { +
24325 elapsed += total; +
24326 t.restart(tick, total += delay, time); +
24327 callback(elapsed); +
24328 }, delay, time); +
24329 return t; +
24330}); +
24331 +
24332 +
24333/***/ }), +
24334 +
24335/***/ "./node_modules/d3-timer/src/timeout.js": +
24336/*!**********************************************!*\ +
24337 !*** ./node_modules/d3-timer/src/timeout.js ***! +
24338 \**********************************************/ +
24339/*! exports provided: default */ +
24340/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24341 +
24342"use strict"; +
24343__webpack_require__.r(__webpack_exports__); +
24344/* harmony import */ var _timer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timer */ "./node_modules/d3-timer/src/timer.js"); +
24345 +
24346 +
24347/* harmony default export */ __webpack_exports__["default"] = (function(callback, delay, time) { +
24348 var t = new _timer__WEBPACK_IMPORTED_MODULE_0__["Timer"]; +
24349 delay = delay == null ? 0 : +delay; +
24350 t.restart(function(elapsed) { +
24351 t.stop(); +
24352 callback(elapsed + delay); +
24353 }, delay, time); +
24354 return t; +
24355}); +
24356 +
24357 +
24358/***/ }), +
24359 +
24360/***/ "./node_modules/d3-timer/src/timer.js": +
24361/*!********************************************!*\ +
24362 !*** ./node_modules/d3-timer/src/timer.js ***! +
24363 \********************************************/ +
24364/*! exports provided: now, Timer, timer, timerFlush */ +
24365/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24366 +
24367"use strict"; +
24368__webpack_require__.r(__webpack_exports__); +
24369/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "now", function() { return now; }); +
24370/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Timer", function() { return Timer; }); +
24371/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return timer; }); +
24372/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timerFlush", function() { return timerFlush; }); +
24373var frame = 0, // is an animation frame pending? +
24374 timeout = 0, // is a timeout pending? +
24375 interval = 0, // are any timers active? +
24376 pokeDelay = 1000, // how frequently we check for clock skew +
24377 taskHead, +
24378 taskTail, +
24379 clockLast = 0, +
24380 clockNow = 0, +
24381 clockSkew = 0, +
24382 clock = typeof performance === "object" && performance.now ? performance : Date, +
24383 setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; +
24384 +
24385function now() { +
24386 return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); +
24387} +
24388 +
24389function clearNow() { +
24390 clockNow = 0; +
24391} +
24392 +
24393function Timer() { +
24394 this._call = +
24395 this._time = +
24396 this._next = null; +
24397} +
24398 +
24399Timer.prototype = timer.prototype = { +
24400 constructor: Timer, +
24401 restart: function(callback, delay, time) { +
24402 if (typeof callback !== "function") throw new TypeError("callback is not a function"); +
24403 time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); +
24404 if (!this._next && taskTail !== this) { +
24405 if (taskTail) taskTail._next = this; +
24406 else taskHead = this; +
24407 taskTail = this; +
24408 } +
24409 this._call = callback; +
24410 this._time = time; +
24411 sleep(); +
24412 }, +
24413 stop: function() { +
24414 if (this._call) { +
24415 this._call = null; +
24416 this._time = Infinity; +
24417 sleep(); +
24418 } +
24419 } +
24420}; +
24421 +
24422function timer(callback, delay, time) { +
24423 var t = new Timer; +
24424 t.restart(callback, delay, time); +
24425 return t; +
24426} +
24427 +
24428function timerFlush() { +
24429 now(); // Get the current time, if not already set. +
24430 ++frame; // Pretend we’ve set an alarm, if we haven’t already. +
24431 var t = taskHead, e; +
24432 while (t) { +
24433 if ((e = clockNow - t._time) >= 0) t._call.call(null, e); +
24434 t = t._next; +
24435 } +
24436 --frame; +
24437} +
24438 +
24439function wake() { +
24440 clockNow = (clockLast = clock.now()) + clockSkew; +
24441 frame = timeout = 0; +
24442 try { +
24443 timerFlush(); +
24444 } finally { +
24445 frame = 0; +
24446 nap(); +
24447 clockNow = 0; +
24448 } +
24449} +
24450 +
24451function poke() { +
24452 var now = clock.now(), delay = now - clockLast; +
24453 if (delay > pokeDelay) clockSkew -= delay, clockLast = now; +
24454} +
24455 +
24456function nap() { +
24457 var t0, t1 = taskHead, t2, time = Infinity; +
24458 while (t1) { +
24459 if (t1._call) { +
24460 if (time > t1._time) time = t1._time; +
24461 t0 = t1, t1 = t1._next; +
24462 } else { +
24463 t2 = t1._next, t1._next = null; +
24464 t1 = t0 ? t0._next = t2 : taskHead = t2; +
24465 } +
24466 } +
24467 taskTail = t0; +
24468 sleep(time); +
24469} +
24470 +
24471function sleep(time) { +
24472 if (frame) return; // Soonest alarm already set, or will be. +
24473 if (timeout) timeout = clearTimeout(timeout); +
24474 var delay = time - clockNow; // Strictly less than if we recomputed clockNow. +
24475 if (delay > 24) { +
24476 if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); +
24477 if (interval) interval = clearInterval(interval); +
24478 } else { +
24479 if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); +
24480 frame = 1, setFrame(wake); +
24481 } +
24482} +
24483 +
24484 +
24485/***/ }), +
24486 +
24487/***/ "./node_modules/d3-transition/src/active.js": +
24488/*!**************************************************!*\ +
24489 !*** ./node_modules/d3-transition/src/active.js ***! +
24490 \**************************************************/ +
24491/*! exports provided: default */ +
24492/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24493 +
24494"use strict"; +
24495__webpack_require__.r(__webpack_exports__); +
24496/* harmony import */ var _transition_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/index */ "./node_modules/d3-transition/src/transition/index.js"); +
24497/* harmony import */ var _transition_schedule__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
24498 +
24499 +
24500 +
24501var root = [null]; +
24502 +
24503/* harmony default export */ __webpack_exports__["default"] = (function(node, name) { +
24504 var schedules = node.__transition, +
24505 schedule, +
24506 i; +
24507 +
24508 if (schedules) { +
24509 name = name == null ? null : name + ""; +
24510 for (i in schedules) { +
24511 if ((schedule = schedules[i]).state > _transition_schedule__WEBPACK_IMPORTED_MODULE_1__["SCHEDULED"] && schedule.name === name) { +
24512 return new _transition_index__WEBPACK_IMPORTED_MODULE_0__["Transition"]([[node]], root, name, +i); +
24513 } +
24514 } +
24515 } +
24516 +
24517 return null; +
24518}); +
24519 +
24520 +
24521/***/ }), +
24522 +
24523/***/ "./node_modules/d3-transition/src/index.js": +
24524/*!*************************************************!*\ +
24525 !*** ./node_modules/d3-transition/src/index.js ***! +
24526 \*************************************************/ +
24527/*! exports provided: transition, active, interrupt */ +
24528/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24529 +
24530"use strict"; +
24531__webpack_require__.r(__webpack_exports__); +
24532/* harmony import */ var _selection_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./selection/index */ "./node_modules/d3-transition/src/selection/index.js"); +
24533/* harmony import */ var _transition_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transition/index */ "./node_modules/d3-transition/src/transition/index.js"); +
24534/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transition", function() { return _transition_index__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
24535 +
24536/* harmony import */ var _active__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./active */ "./node_modules/d3-transition/src/active.js"); +
24537/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "active", function() { return _active__WEBPACK_IMPORTED_MODULE_2__["default"]; }); +
24538 +
24539/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interrupt */ "./node_modules/d3-transition/src/interrupt.js"); +
24540/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interrupt", function() { return _interrupt__WEBPACK_IMPORTED_MODULE_3__["default"]; }); +
24541 +
24542 +
24543 +
24544 +
24545 +
24546 +
24547 +
24548/***/ }), +
24549 +
24550/***/ "./node_modules/d3-transition/src/interrupt.js": +
24551/*!*****************************************************!*\ +
24552 !*** ./node_modules/d3-transition/src/interrupt.js ***! +
24553 \*****************************************************/ +
24554/*! exports provided: default */ +
24555/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24556 +
24557"use strict"; +
24558__webpack_require__.r(__webpack_exports__); +
24559/* harmony import */ var _transition_schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transition/schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
24560 +
24561 +
24562/* harmony default export */ __webpack_exports__["default"] = (function(node, name) { +
24563 var schedules = node.__transition, +
24564 schedule, +
24565 active, +
24566 empty = true, +
24567 i; +
24568 +
24569 if (!schedules) return; +
24570 +
24571 name = name == null ? null : name + ""; +
24572 +
24573 for (i in schedules) { +
24574 if ((schedule = schedules[i]).name !== name) { empty = false; continue; } +
24575 active = schedule.state > _transition_schedule__WEBPACK_IMPORTED_MODULE_0__["STARTING"] && schedule.state < _transition_schedule__WEBPACK_IMPORTED_MODULE_0__["ENDING"]; +
24576 schedule.state = _transition_schedule__WEBPACK_IMPORTED_MODULE_0__["ENDED"]; +
24577 schedule.timer.stop(); +
24578 if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group); +
24579 delete schedules[i]; +
24580 } +
24581 +
24582 if (empty) delete node.__transition; +
24583}); +
24584 +
24585 +
24586/***/ }), +
24587 +
24588/***/ "./node_modules/d3-transition/src/selection/index.js": +
24589/*!***********************************************************!*\ +
24590 !*** ./node_modules/d3-transition/src/selection/index.js ***! +
24591 \***********************************************************/ +
24592/*! no exports provided */ +
24593/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24594 +
24595"use strict"; +
24596__webpack_require__.r(__webpack_exports__); +
24597/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
24598/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./interrupt */ "./node_modules/d3-transition/src/selection/interrupt.js"); +
24599/* harmony import */ var _transition__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transition */ "./node_modules/d3-transition/src/selection/transition.js"); +
24600 +
24601 +
24602 +
24603 +
24604d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"].prototype.interrupt = _interrupt__WEBPACK_IMPORTED_MODULE_1__["default"]; +
24605d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"].prototype.transition = _transition__WEBPACK_IMPORTED_MODULE_2__["default"]; +
24606 +
24607 +
24608/***/ }), +
24609 +
24610/***/ "./node_modules/d3-transition/src/selection/interrupt.js": +
24611/*!***************************************************************!*\ +
24612 !*** ./node_modules/d3-transition/src/selection/interrupt.js ***! +
24613 \***************************************************************/ +
24614/*! exports provided: default */ +
24615/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24616 +
24617"use strict"; +
24618__webpack_require__.r(__webpack_exports__); +
24619/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../interrupt */ "./node_modules/d3-transition/src/interrupt.js"); +
24620 +
24621 +
24622/* harmony default export */ __webpack_exports__["default"] = (function(name) { +
24623 return this.each(function() { +
24624 Object(_interrupt__WEBPACK_IMPORTED_MODULE_0__["default"])(this, name); +
24625 }); +
24626}); +
24627 +
24628 +
24629/***/ }), +
24630 +
24631/***/ "./node_modules/d3-transition/src/selection/transition.js": +
24632/*!****************************************************************!*\ +
24633 !*** ./node_modules/d3-transition/src/selection/transition.js ***! +
24634 \****************************************************************/ +
24635/*! exports provided: default */ +
24636/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24637 +
24638"use strict"; +
24639__webpack_require__.r(__webpack_exports__); +
24640/* harmony import */ var _transition_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transition/index */ "./node_modules/d3-transition/src/transition/index.js"); +
24641/* harmony import */ var _transition_schedule__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../transition/schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
24642/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-ease */ "./node_modules/d3-ease/src/index.js"); +
24643/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/index.js"); +
24644 +
24645 +
24646 +
24647 +
24648 +
24649var defaultTiming = { +
24650 time: null, // Set on use. +
24651 delay: 0, +
24652 duration: 250, +
24653 ease: d3_ease__WEBPACK_IMPORTED_MODULE_2__["easeCubicInOut"] +
24654}; +
24655 +
24656function inherit(node, id) { +
24657 var timing; +
24658 while (!(timing = node.__transition) || !(timing = timing[id])) { +
24659 if (!(node = node.parentNode)) { +
24660 return defaultTiming.time = Object(d3_timer__WEBPACK_IMPORTED_MODULE_3__["now"])(), defaultTiming; +
24661 } +
24662 } +
24663 return timing; +
24664} +
24665 +
24666/* harmony default export */ __webpack_exports__["default"] = (function(name) { +
24667 var id, +
24668 timing; +
24669 +
24670 if (name instanceof _transition_index__WEBPACK_IMPORTED_MODULE_0__["Transition"]) { +
24671 id = name._id, name = name._name; +
24672 } else { +
24673 id = Object(_transition_index__WEBPACK_IMPORTED_MODULE_0__["newId"])(), (timing = defaultTiming).time = Object(d3_timer__WEBPACK_IMPORTED_MODULE_3__["now"])(), name = name == null ? null : name + ""; +
24674 } +
24675 +
24676 for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { +
24677 for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { +
24678 if (node = group[i]) { +
24679 Object(_transition_schedule__WEBPACK_IMPORTED_MODULE_1__["default"])(node, name, id, i, group, timing || inherit(node, id)); +
24680 } +
24681 } +
24682 } +
24683 +
24684 return new _transition_index__WEBPACK_IMPORTED_MODULE_0__["Transition"](groups, this._parents, name, id); +
24685}); +
24686 +
24687 +
24688/***/ }), +
24689 +
24690/***/ "./node_modules/d3-transition/src/transition/attr.js": +
24691/*!***********************************************************!*\ +
24692 !*** ./node_modules/d3-transition/src/transition/attr.js ***! +
24693 \***********************************************************/ +
24694/*! exports provided: default */ +
24695/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24696 +
24697"use strict"; +
24698__webpack_require__.r(__webpack_exports__); +
24699/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
24700/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
24701/* harmony import */ var _tween__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tween */ "./node_modules/d3-transition/src/transition/tween.js"); +
24702/* harmony import */ var _interpolate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interpolate */ "./node_modules/d3-transition/src/transition/interpolate.js"); +
24703 +
24704 +
24705 +
24706 +
24707 +
24708function attrRemove(name) { +
24709 return function() { +
24710 this.removeAttribute(name); +
24711 }; +
24712} +
24713 +
24714function attrRemoveNS(fullname) { +
24715 return function() { +
24716 this.removeAttributeNS(fullname.space, fullname.local); +
24717 }; +
24718} +
24719 +
24720function attrConstant(name, interpolate, value1) { +
24721 var value00, +
24722 interpolate0; +
24723 return function() { +
24724 var value0 = this.getAttribute(name); +
24725 return value0 === value1 ? null +
24726 : value0 === value00 ? interpolate0 +
24727 : interpolate0 = interpolate(value00 = value0, value1); +
24728 }; +
24729} +
24730 +
24731function attrConstantNS(fullname, interpolate, value1) { +
24732 var value00, +
24733 interpolate0; +
24734 return function() { +
24735 var value0 = this.getAttributeNS(fullname.space, fullname.local); +
24736 return value0 === value1 ? null +
24737 : value0 === value00 ? interpolate0 +
24738 : interpolate0 = interpolate(value00 = value0, value1); +
24739 }; +
24740} +
24741 +
24742function attrFunction(name, interpolate, value) { +
24743 var value00, +
24744 value10, +
24745 interpolate0; +
24746 return function() { +
24747 var value0, value1 = value(this); +
24748 if (value1 == null) return void this.removeAttribute(name); +
24749 value0 = this.getAttribute(name); +
24750 return value0 === value1 ? null +
24751 : value0 === value00 && value1 === value10 ? interpolate0 +
24752 : interpolate0 = interpolate(value00 = value0, value10 = value1); +
24753 }; +
24754} +
24755 +
24756function attrFunctionNS(fullname, interpolate, value) { +
24757 var value00, +
24758 value10, +
24759 interpolate0; +
24760 return function() { +
24761 var value0, value1 = value(this); +
24762 if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); +
24763 value0 = this.getAttributeNS(fullname.space, fullname.local); +
24764 return value0 === value1 ? null +
24765 : value0 === value00 && value1 === value10 ? interpolate0 +
24766 : interpolate0 = interpolate(value00 = value0, value10 = value1); +
24767 }; +
24768} +
24769 +
24770/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { +
24771 var fullname = Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["namespace"])(name), i = fullname === "transform" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_0__["interpolateTransformSvg"] : _interpolate__WEBPACK_IMPORTED_MODULE_3__["default"]; +
24772 return this.attrTween(name, typeof value === "function" +
24773 ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, Object(_tween__WEBPACK_IMPORTED_MODULE_2__["tweenValue"])(this, "attr." + name, value)) +
24774 : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname) +
24775 : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + "")); +
24776}); +
24777 +
24778 +
24779/***/ }), +
24780 +
24781/***/ "./node_modules/d3-transition/src/transition/attrTween.js": +
24782/*!****************************************************************!*\ +
24783 !*** ./node_modules/d3-transition/src/transition/attrTween.js ***! +
24784 \****************************************************************/ +
24785/*! exports provided: default */ +
24786/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24787 +
24788"use strict"; +
24789__webpack_require__.r(__webpack_exports__); +
24790/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
24791 +
24792 +
24793function attrTweenNS(fullname, value) { +
24794 function tween() { +
24795 var node = this, i = value.apply(node, arguments); +
24796 return i && function(t) { +
24797 node.setAttributeNS(fullname.space, fullname.local, i(t)); +
24798 }; +
24799 } +
24800 tween._value = value; +
24801 return tween; +
24802} +
24803 +
24804function attrTween(name, value) { +
24805 function tween() { +
24806 var node = this, i = value.apply(node, arguments); +
24807 return i && function(t) { +
24808 node.setAttribute(name, i(t)); +
24809 }; +
24810 } +
24811 tween._value = value; +
24812 return tween; +
24813} +
24814 +
24815/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { +
24816 var key = "attr." + name; +
24817 if (arguments.length < 2) return (key = this.tween(key)) && key._value; +
24818 if (value == null) return this.tween(key, null); +
24819 if (typeof value !== "function") throw new Error; +
24820 var fullname = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["namespace"])(name); +
24821 return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); +
24822}); +
24823 +
24824 +
24825/***/ }), +
24826 +
24827/***/ "./node_modules/d3-transition/src/transition/delay.js": +
24828/*!************************************************************!*\ +
24829 !*** ./node_modules/d3-transition/src/transition/delay.js ***! +
24830 \************************************************************/ +
24831/*! exports provided: default */ +
24832/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24833 +
24834"use strict"; +
24835__webpack_require__.r(__webpack_exports__); +
24836/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
24837 +
24838 +
24839function delayFunction(id, value) { +
24840 return function() { +
24841 Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["init"])(this, id).delay = +value.apply(this, arguments); +
24842 }; +
24843} +
24844 +
24845function delayConstant(id, value) { +
24846 return value = +value, function() { +
24847 Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["init"])(this, id).delay = value; +
24848 }; +
24849} +
24850 +
24851/* harmony default export */ __webpack_exports__["default"] = (function(value) { +
24852 var id = this._id; +
24853 +
24854 return arguments.length +
24855 ? this.each((typeof value === "function" +
24856 ? delayFunction +
24857 : delayConstant)(id, value)) +
24858 : Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).delay; +
24859}); +
24860 +
24861 +
24862/***/ }), +
24863 +
24864/***/ "./node_modules/d3-transition/src/transition/duration.js": +
24865/*!***************************************************************!*\ +
24866 !*** ./node_modules/d3-transition/src/transition/duration.js ***! +
24867 \***************************************************************/ +
24868/*! exports provided: default */ +
24869/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24870 +
24871"use strict"; +
24872__webpack_require__.r(__webpack_exports__); +
24873/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
24874 +
24875 +
24876function durationFunction(id, value) { +
24877 return function() { +
24878 Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id).duration = +value.apply(this, arguments); +
24879 }; +
24880} +
24881 +
24882function durationConstant(id, value) { +
24883 return value = +value, function() { +
24884 Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id).duration = value; +
24885 }; +
24886} +
24887 +
24888/* harmony default export */ __webpack_exports__["default"] = (function(value) { +
24889 var id = this._id; +
24890 +
24891 return arguments.length +
24892 ? this.each((typeof value === "function" +
24893 ? durationFunction +
24894 : durationConstant)(id, value)) +
24895 : Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).duration; +
24896}); +
24897 +
24898 +
24899/***/ }), +
24900 +
24901/***/ "./node_modules/d3-transition/src/transition/ease.js": +
24902/*!***********************************************************!*\ +
24903 !*** ./node_modules/d3-transition/src/transition/ease.js ***! +
24904 \***********************************************************/ +
24905/*! exports provided: default */ +
24906/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24907 +
24908"use strict"; +
24909__webpack_require__.r(__webpack_exports__); +
24910/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
24911 +
24912 +
24913function easeConstant(id, value) { +
24914 if (typeof value !== "function") throw new Error; +
24915 return function() { +
24916 Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id).ease = value; +
24917 }; +
24918} +
24919 +
24920/* harmony default export */ __webpack_exports__["default"] = (function(value) { +
24921 var id = this._id; +
24922 +
24923 return arguments.length +
24924 ? this.each(easeConstant(id, value)) +
24925 : Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).ease; +
24926}); +
24927 +
24928 +
24929/***/ }), +
24930 +
24931/***/ "./node_modules/d3-transition/src/transition/filter.js": +
24932/*!*************************************************************!*\ +
24933 !*** ./node_modules/d3-transition/src/transition/filter.js ***! +
24934 \*************************************************************/ +
24935/*! exports provided: default */ +
24936/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24937 +
24938"use strict"; +
24939__webpack_require__.r(__webpack_exports__); +
24940/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
24941/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/d3-transition/src/transition/index.js"); +
24942 +
24943 +
24944 +
24945/* harmony default export */ __webpack_exports__["default"] = (function(match) { +
24946 if (typeof match !== "function") match = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["matcher"])(match); +
24947 +
24948 for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { +
24949 for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { +
24950 if ((node = group[i]) && match.call(node, node.__data__, i, group)) { +
24951 subgroup.push(node); +
24952 } +
24953 } +
24954 } +
24955 +
24956 return new _index__WEBPACK_IMPORTED_MODULE_1__["Transition"](subgroups, this._parents, this._name, this._id); +
24957}); +
24958 +
24959 +
24960/***/ }), +
24961 +
24962/***/ "./node_modules/d3-transition/src/transition/index.js": +
24963/*!************************************************************!*\ +
24964 !*** ./node_modules/d3-transition/src/transition/index.js ***! +
24965 \************************************************************/ +
24966/*! exports provided: Transition, default, newId */ +
24967/***/ (function(module, __webpack_exports__, __webpack_require__) { +
24968 +
24969"use strict"; +
24970__webpack_require__.r(__webpack_exports__); +
24971/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transition", function() { return Transition; }); +
24972/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return transition; }); +
24973/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "newId", function() { return newId; }); +
24974/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
24975/* harmony import */ var _attr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./attr */ "./node_modules/d3-transition/src/transition/attr.js"); +
24976/* harmony import */ var _attrTween__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./attrTween */ "./node_modules/d3-transition/src/transition/attrTween.js"); +
24977/* harmony import */ var _delay__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./delay */ "./node_modules/d3-transition/src/transition/delay.js"); +
24978/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./duration */ "./node_modules/d3-transition/src/transition/duration.js"); +
24979/* harmony import */ var _ease__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ease */ "./node_modules/d3-transition/src/transition/ease.js"); +
24980/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./filter */ "./node_modules/d3-transition/src/transition/filter.js"); +
24981/* harmony import */ var _merge__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./merge */ "./node_modules/d3-transition/src/transition/merge.js"); +
24982/* harmony import */ var _on__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./on */ "./node_modules/d3-transition/src/transition/on.js"); +
24983/* harmony import */ var _remove__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./remove */ "./node_modules/d3-transition/src/transition/remove.js"); +
24984/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./select */ "./node_modules/d3-transition/src/transition/select.js"); +
24985/* harmony import */ var _selectAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./selectAll */ "./node_modules/d3-transition/src/transition/selectAll.js"); +
24986/* harmony import */ var _selection__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./selection */ "./node_modules/d3-transition/src/transition/selection.js"); +
24987/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./style */ "./node_modules/d3-transition/src/transition/style.js"); +
24988/* harmony import */ var _styleTween__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./styleTween */ "./node_modules/d3-transition/src/transition/styleTween.js"); +
24989/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./text */ "./node_modules/d3-transition/src/transition/text.js"); +
24990/* harmony import */ var _transition__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./transition */ "./node_modules/d3-transition/src/transition/transition.js"); +
24991/* harmony import */ var _tween__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./tween */ "./node_modules/d3-transition/src/transition/tween.js"); +
24992 +
24993 +
24994 +
24995 +
24996 +
24997 +
24998 +
24999 +
25000 +
25001 +
25002 +
25003 +
25004 +
25005 +
25006 +
25007 +
25008 +
25009 +
25010 +
25011var id = 0; +
25012 +
25013function Transition(groups, parents, name, id) { +
25014 this._groups = groups; +
25015 this._parents = parents; +
25016 this._name = name; +
25017 this._id = id; +
25018} +
25019 +
25020function transition(name) { +
25021 return Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"])().transition(name); +
25022} +
25023 +
25024function newId() { +
25025 return ++id; +
25026} +
25027 +
25028var selection_prototype = d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"].prototype; +
25029 +
25030Transition.prototype = transition.prototype = { +
25031 constructor: Transition, +
25032 select: _select__WEBPACK_IMPORTED_MODULE_10__["default"], +
25033 selectAll: _selectAll__WEBPACK_IMPORTED_MODULE_11__["default"], +
25034 filter: _filter__WEBPACK_IMPORTED_MODULE_6__["default"], +
25035 merge: _merge__WEBPACK_IMPORTED_MODULE_7__["default"], +
25036 selection: _selection__WEBPACK_IMPORTED_MODULE_12__["default"], +
25037 transition: _transition__WEBPACK_IMPORTED_MODULE_16__["default"], +
25038 call: selection_prototype.call, +
25039 nodes: selection_prototype.nodes, +
25040 node: selection_prototype.node, +
25041 size: selection_prototype.size, +
25042 empty: selection_prototype.empty, +
25043 each: selection_prototype.each, +
25044 on: _on__WEBPACK_IMPORTED_MODULE_8__["default"], +
25045 attr: _attr__WEBPACK_IMPORTED_MODULE_1__["default"], +
25046 attrTween: _attrTween__WEBPACK_IMPORTED_MODULE_2__["default"], +
25047 style: _style__WEBPACK_IMPORTED_MODULE_13__["default"], +
25048 styleTween: _styleTween__WEBPACK_IMPORTED_MODULE_14__["default"], +
25049 text: _text__WEBPACK_IMPORTED_MODULE_15__["default"], +
25050 remove: _remove__WEBPACK_IMPORTED_MODULE_9__["default"], +
25051 tween: _tween__WEBPACK_IMPORTED_MODULE_17__["default"], +
25052 delay: _delay__WEBPACK_IMPORTED_MODULE_3__["default"], +
25053 duration: _duration__WEBPACK_IMPORTED_MODULE_4__["default"], +
25054 ease: _ease__WEBPACK_IMPORTED_MODULE_5__["default"] +
25055}; +
25056 +
25057 +
25058/***/ }), +
25059 +
25060/***/ "./node_modules/d3-transition/src/transition/interpolate.js": +
25061/*!******************************************************************!*\ +
25062 !*** ./node_modules/d3-transition/src/transition/interpolate.js ***! +
25063 \******************************************************************/ +
25064/*! exports provided: default */ +
25065/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25066 +
25067"use strict"; +
25068__webpack_require__.r(__webpack_exports__); +
25069/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
25070/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
25071 +
25072 +
25073 +
25074/* harmony default export */ __webpack_exports__["default"] = (function(a, b) { +
25075 var c; +
25076 return (typeof b === "number" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateNumber"] +
25077 : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_0__["color"] ? d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateRgb"] +
25078 : (c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__["color"])(b)) ? (b = c, d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateRgb"]) +
25079 : d3_interpolate__WEBPACK_IMPORTED_MODULE_1__["interpolateString"])(a, b); +
25080}); +
25081 +
25082 +
25083/***/ }), +
25084 +
25085/***/ "./node_modules/d3-transition/src/transition/merge.js": +
25086/*!************************************************************!*\ +
25087 !*** ./node_modules/d3-transition/src/transition/merge.js ***! +
25088 \************************************************************/ +
25089/*! exports provided: default */ +
25090/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25091 +
25092"use strict"; +
25093__webpack_require__.r(__webpack_exports__); +
25094/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-transition/src/transition/index.js"); +
25095 +
25096 +
25097/* harmony default export */ __webpack_exports__["default"] = (function(transition) { +
25098 if (transition._id !== this._id) throw new Error; +
25099 +
25100 for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { +
25101 for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { +
25102 if (node = group0[i] || group1[i]) { +
25103 merge[i] = node; +
25104 } +
25105 } +
25106 } +
25107 +
25108 for (; j < m0; ++j) { +
25109 merges[j] = groups0[j]; +
25110 } +
25111 +
25112 return new _index__WEBPACK_IMPORTED_MODULE_0__["Transition"](merges, this._parents, this._name, this._id); +
25113}); +
25114 +
25115 +
25116/***/ }), +
25117 +
25118/***/ "./node_modules/d3-transition/src/transition/on.js": +
25119/*!*********************************************************!*\ +
25120 !*** ./node_modules/d3-transition/src/transition/on.js ***! +
25121 \*********************************************************/ +
25122/*! exports provided: default */ +
25123/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25124 +
25125"use strict"; +
25126__webpack_require__.r(__webpack_exports__); +
25127/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
25128 +
25129 +
25130function start(name) { +
25131 return (name + "").trim().split(/^|\s+/).every(function(t) { +
25132 var i = t.indexOf("."); +
25133 if (i >= 0) t = t.slice(0, i); +
25134 return !t || t === "start"; +
25135 }); +
25136} +
25137 +
25138function onFunction(id, name, listener) { +
25139 var on0, on1, sit = start(name) ? _schedule__WEBPACK_IMPORTED_MODULE_0__["init"] : _schedule__WEBPACK_IMPORTED_MODULE_0__["set"]; +
25140 return function() { +
25141 var schedule = sit(this, id), +
25142 on = schedule.on; +
25143 +
25144 // If this node shared a dispatch with the previous node, +
25145 // just assign the updated shared dispatch and we’re done! +
25146 // Otherwise, copy-on-write. +
25147 if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); +
25148 +
25149 schedule.on = on1; +
25150 }; +
25151} +
25152 +
25153/* harmony default export */ __webpack_exports__["default"] = (function(name, listener) { +
25154 var id = this._id; +
25155 +
25156 return arguments.length < 2 +
25157 ? Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).on.on(name) +
25158 : this.each(onFunction(id, name, listener)); +
25159}); +
25160 +
25161 +
25162/***/ }), +
25163 +
25164/***/ "./node_modules/d3-transition/src/transition/remove.js": +
25165/*!*************************************************************!*\ +
25166 !*** ./node_modules/d3-transition/src/transition/remove.js ***! +
25167 \*************************************************************/ +
25168/*! exports provided: default */ +
25169/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25170 +
25171"use strict"; +
25172__webpack_require__.r(__webpack_exports__); +
25173function removeFunction(id) { +
25174 return function() { +
25175 var parent = this.parentNode; +
25176 for (var i in this.__transition) if (+i !== id) return; +
25177 if (parent) parent.removeChild(this); +
25178 }; +
25179} +
25180 +
25181/* harmony default export */ __webpack_exports__["default"] = (function() { +
25182 return this.on("end.remove", removeFunction(this._id)); +
25183}); +
25184 +
25185 +
25186/***/ }), +
25187 +
25188/***/ "./node_modules/d3-transition/src/transition/schedule.js": +
25189/*!***************************************************************!*\ +
25190 !*** ./node_modules/d3-transition/src/transition/schedule.js ***! +
25191 \***************************************************************/ +
25192/*! exports provided: CREATED, SCHEDULED, STARTING, STARTED, RUNNING, ENDING, ENDED, default, init, set, get */ +
25193/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25194 +
25195"use strict"; +
25196__webpack_require__.r(__webpack_exports__); +
25197/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CREATED", function() { return CREATED; }); +
25198/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SCHEDULED", function() { return SCHEDULED; }); +
25199/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STARTING", function() { return STARTING; }); +
25200/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STARTED", function() { return STARTED; }); +
25201/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RUNNING", function() { return RUNNING; }); +
25202/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ENDING", function() { return ENDING; }); +
25203/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ENDED", function() { return ENDED; }); +
25204/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "init", function() { return init; }); +
25205/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "set", function() { return set; }); +
25206/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return get; }); +
25207/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/index.js"); +
25208/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/index.js"); +
25209 +
25210 +
25211 +
25212var emptyOn = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])("start", "end", "interrupt"); +
25213var emptyTween = []; +
25214 +
25215var CREATED = 0; +
25216var SCHEDULED = 1; +
25217var STARTING = 2; +
25218var STARTED = 3; +
25219var RUNNING = 4; +
25220var ENDING = 5; +
25221var ENDED = 6; +
25222 +
25223/* harmony default export */ __webpack_exports__["default"] = (function(node, name, id, index, group, timing) { +
25224 var schedules = node.__transition; +
25225 if (!schedules) node.__transition = {}; +
25226 else if (id in schedules) return; +
25227 create(node, id, { +
25228 name: name, +
25229 index: index, // For context during callback. +
25230 group: group, // For context during callback. +
25231 on: emptyOn, +
25232 tween: emptyTween, +
25233 time: timing.time, +
25234 delay: timing.delay, +
25235 duration: timing.duration, +
25236 ease: timing.ease, +
25237 timer: null, +
25238 state: CREATED +
25239 }); +
25240}); +
25241 +
25242function init(node, id) { +
25243 var schedule = get(node, id); +
25244 if (schedule.state > CREATED) throw new Error("too late; already scheduled"); +
25245 return schedule; +
25246} +
25247 +
25248function set(node, id) { +
25249 var schedule = get(node, id); +
25250 if (schedule.state > STARTING) throw new Error("too late; already started"); +
25251 return schedule; +
25252} +
25253 +
25254function get(node, id) { +
25255 var schedule = node.__transition; +
25256 if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found"); +
25257 return schedule; +
25258} +
25259 +
25260function create(node, id, self) { +
25261 var schedules = node.__transition, +
25262 tween; +
25263 +
25264 // Initialize the self timer when the transition is created. +
25265 // Note the actual delay is not known until the first callback! +
25266 schedules[id] = self; +
25267 self.timer = Object(d3_timer__WEBPACK_IMPORTED_MODULE_1__["timer"])(schedule, 0, self.time); +
25268 +
25269 function schedule(elapsed) { +
25270 self.state = SCHEDULED; +
25271 self.timer.restart(start, self.delay, self.time); +
25272 +
25273 // If the elapsed delay is less than our first sleep, start immediately. +
25274 if (self.delay <= elapsed) start(elapsed - self.delay); +
25275 } +
25276 +
25277 function start(elapsed) { +
25278 var i, j, n, o; +
25279 +
25280 // If the state is not SCHEDULED, then we previously errored on start. +
25281 if (self.state !== SCHEDULED) return stop(); +
25282 +
25283 for (i in schedules) { +
25284 o = schedules[i]; +
25285 if (o.name !== self.name) continue; +
25286 +
25287 // While this element already has a starting transition during this frame, +
25288 // defer starting an interrupting transition until that transition has a +
25289 // chance to tick (and possibly end); see d3/d3-transition#54! +
25290 if (o.state === STARTED) return Object(d3_timer__WEBPACK_IMPORTED_MODULE_1__["timeout"])(start); +
25291 +
25292 // Interrupt the active transition, if any. +
25293 // Dispatch the interrupt event. +
25294 if (o.state === RUNNING) { +
25295 o.state = ENDED; +
25296 o.timer.stop(); +
25297 o.on.call("interrupt", node, node.__data__, o.index, o.group); +
25298 delete schedules[i]; +
25299 } +
25300 +
25301 // Cancel any pre-empted transitions. No interrupt event is dispatched +
25302 // because the cancelled transitions never started. Note that this also +
25303 // removes this transition from the pending list! +
25304 else if (+i < id) { +
25305 o.state = ENDED; +
25306 o.timer.stop(); +
25307 delete schedules[i]; +
25308 } +
25309 } +
25310 +
25311 // Defer the first tick to end of the current frame; see d3/d3#1576. +
25312 // Note the transition may be canceled after start and before the first tick! +
25313 // Note this must be scheduled before the start event; see d3/d3-transition#16! +
25314 // Assuming this is successful, subsequent callbacks go straight to tick. +
25315 Object(d3_timer__WEBPACK_IMPORTED_MODULE_1__["timeout"])(function() { +
25316 if (self.state === STARTED) { +
25317 self.state = RUNNING; +
25318 self.timer.restart(tick, self.delay, self.time); +
25319 tick(elapsed); +
25320 } +
25321 }); +
25322 +
25323 // Dispatch the start event. +
25324 // Note this must be done before the tween are initialized. +
25325 self.state = STARTING; +
25326 self.on.call("start", node, node.__data__, self.index, self.group); +
25327 if (self.state !== STARTING) return; // interrupted +
25328 self.state = STARTED; +
25329 +
25330 // Initialize the tween, deleting null tween. +
25331 tween = new Array(n = self.tween.length); +
25332 for (i = 0, j = -1; i < n; ++i) { +
25333 if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { +
25334 tween[++j] = o; +
25335 } +
25336 } +
25337 tween.length = j + 1; +
25338 } +
25339 +
25340 function tick(elapsed) { +
25341 var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), +
25342 i = -1, +
25343 n = tween.length; +
25344 +
25345 while (++i < n) { +
25346 tween[i].call(null, t); +
25347 } +
25348 +
25349 // Dispatch the end event. +
25350 if (self.state === ENDING) { +
25351 self.on.call("end", node, node.__data__, self.index, self.group); +
25352 stop(); +
25353 } +
25354 } +
25355 +
25356 function stop() { +
25357 self.state = ENDED; +
25358 self.timer.stop(); +
25359 delete schedules[id]; +
25360 for (var i in schedules) return; // eslint-disable-line no-unused-vars +
25361 delete node.__transition; +
25362 } +
25363} +
25364 +
25365 +
25366/***/ }), +
25367 +
25368/***/ "./node_modules/d3-transition/src/transition/select.js": +
25369/*!*************************************************************!*\ +
25370 !*** ./node_modules/d3-transition/src/transition/select.js ***! +
25371 \*************************************************************/ +
25372/*! exports provided: default */ +
25373/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25374 +
25375"use strict"; +
25376__webpack_require__.r(__webpack_exports__); +
25377/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
25378/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/d3-transition/src/transition/index.js"); +
25379/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
25380 +
25381 +
25382 +
25383 +
25384/* harmony default export */ __webpack_exports__["default"] = (function(select) { +
25385 var name = this._name, +
25386 id = this._id; +
25387 +
25388 if (typeof select !== "function") select = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["selector"])(select); +
25389 +
25390 for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { +
25391 for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { +
25392 if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { +
25393 if ("__data__" in node) subnode.__data__ = node.__data__; +
25394 subgroup[i] = subnode; +
25395 Object(_schedule__WEBPACK_IMPORTED_MODULE_2__["default"])(subgroup[i], name, id, i, subgroup, Object(_schedule__WEBPACK_IMPORTED_MODULE_2__["get"])(node, id)); +
25396 } +
25397 } +
25398 } +
25399 +
25400 return new _index__WEBPACK_IMPORTED_MODULE_1__["Transition"](subgroups, this._parents, name, id); +
25401}); +
25402 +
25403 +
25404/***/ }), +
25405 +
25406/***/ "./node_modules/d3-transition/src/transition/selectAll.js": +
25407/*!****************************************************************!*\ +
25408 !*** ./node_modules/d3-transition/src/transition/selectAll.js ***! +
25409 \****************************************************************/ +
25410/*! exports provided: default */ +
25411/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25412 +
25413"use strict"; +
25414__webpack_require__.r(__webpack_exports__); +
25415/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
25416/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/d3-transition/src/transition/index.js"); +
25417/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
25418 +
25419 +
25420 +
25421 +
25422/* harmony default export */ __webpack_exports__["default"] = (function(select) { +
25423 var name = this._name, +
25424 id = this._id; +
25425 +
25426 if (typeof select !== "function") select = Object(d3_selection__WEBPACK_IMPORTED_MODULE_0__["selectorAll"])(select); +
25427 +
25428 for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { +
25429 for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { +
25430 if (node = group[i]) { +
25431 for (var children = select.call(node, node.__data__, i, group), child, inherit = Object(_schedule__WEBPACK_IMPORTED_MODULE_2__["get"])(node, id), k = 0, l = children.length; k < l; ++k) { +
25432 if (child = children[k]) { +
25433 Object(_schedule__WEBPACK_IMPORTED_MODULE_2__["default"])(child, name, id, k, children, inherit); +
25434 } +
25435 } +
25436 subgroups.push(children); +
25437 parents.push(node); +
25438 } +
25439 } +
25440 } +
25441 +
25442 return new _index__WEBPACK_IMPORTED_MODULE_1__["Transition"](subgroups, parents, name, id); +
25443}); +
25444 +
25445 +
25446/***/ }), +
25447 +
25448/***/ "./node_modules/d3-transition/src/transition/selection.js": +
25449/*!****************************************************************!*\ +
25450 !*** ./node_modules/d3-transition/src/transition/selection.js ***! +
25451 \****************************************************************/ +
25452/*! exports provided: default */ +
25453/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25454 +
25455"use strict"; +
25456__webpack_require__.r(__webpack_exports__); +
25457/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
25458 +
25459 +
25460var Selection = d3_selection__WEBPACK_IMPORTED_MODULE_0__["selection"].prototype.constructor; +
25461 +
25462/* harmony default export */ __webpack_exports__["default"] = (function() { +
25463 return new Selection(this._groups, this._parents); +
25464}); +
25465 +
25466 +
25467/***/ }), +
25468 +
25469/***/ "./node_modules/d3-transition/src/transition/style.js": +
25470/*!************************************************************!*\ +
25471 !*** ./node_modules/d3-transition/src/transition/style.js ***! +
25472 \************************************************************/ +
25473/*! exports provided: default */ +
25474/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25475 +
25476"use strict"; +
25477__webpack_require__.r(__webpack_exports__); +
25478/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
25479/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
25480/* harmony import */ var _tween__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tween */ "./node_modules/d3-transition/src/transition/tween.js"); +
25481/* harmony import */ var _interpolate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./interpolate */ "./node_modules/d3-transition/src/transition/interpolate.js"); +
25482 +
25483 +
25484 +
25485 +
25486 +
25487function styleRemove(name, interpolate) { +
25488 var value00, +
25489 value10, +
25490 interpolate0; +
25491 return function() { +
25492 var value0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name), +
25493 value1 = (this.style.removeProperty(name), Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name)); +
25494 return value0 === value1 ? null +
25495 : value0 === value00 && value1 === value10 ? interpolate0 +
25496 : interpolate0 = interpolate(value00 = value0, value10 = value1); +
25497 }; +
25498} +
25499 +
25500function styleRemoveEnd(name) { +
25501 return function() { +
25502 this.style.removeProperty(name); +
25503 }; +
25504} +
25505 +
25506function styleConstant(name, interpolate, value1) { +
25507 var value00, +
25508 interpolate0; +
25509 return function() { +
25510 var value0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name); +
25511 return value0 === value1 ? null +
25512 : value0 === value00 ? interpolate0 +
25513 : interpolate0 = interpolate(value00 = value0, value1); +
25514 }; +
25515} +
25516 +
25517function styleFunction(name, interpolate, value) { +
25518 var value00, +
25519 value10, +
25520 interpolate0; +
25521 return function() { +
25522 var value0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name), +
25523 value1 = value(this); +
25524 if (value1 == null) value1 = (this.style.removeProperty(name), Object(d3_selection__WEBPACK_IMPORTED_MODULE_1__["style"])(this, name)); +
25525 return value0 === value1 ? null +
25526 : value0 === value00 && value1 === value10 ? interpolate0 +
25527 : interpolate0 = interpolate(value00 = value0, value10 = value1); +
25528 }; +
25529} +
25530 +
25531/* harmony default export */ __webpack_exports__["default"] = (function(name, value, priority) { +
25532 var i = (name += "") === "transform" ? d3_interpolate__WEBPACK_IMPORTED_MODULE_0__["interpolateTransformCss"] : _interpolate__WEBPACK_IMPORTED_MODULE_3__["default"]; +
25533 return value == null ? this +
25534 .styleTween(name, styleRemove(name, i)) +
25535 .on("end.style." + name, styleRemoveEnd(name)) +
25536 : this.styleTween(name, typeof value === "function" +
25537 ? styleFunction(name, i, Object(_tween__WEBPACK_IMPORTED_MODULE_2__["tweenValue"])(this, "style." + name, value)) +
25538 : styleConstant(name, i, value + ""), priority); +
25539}); +
25540 +
25541 +
25542/***/ }), +
25543 +
25544/***/ "./node_modules/d3-transition/src/transition/styleTween.js": +
25545/*!*****************************************************************!*\ +
25546 !*** ./node_modules/d3-transition/src/transition/styleTween.js ***! +
25547 \*****************************************************************/ +
25548/*! exports provided: default */ +
25549/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25550 +
25551"use strict"; +
25552__webpack_require__.r(__webpack_exports__); +
25553function styleTween(name, value, priority) { +
25554 function tween() { +
25555 var node = this, i = value.apply(node, arguments); +
25556 return i && function(t) { +
25557 node.style.setProperty(name, i(t), priority); +
25558 }; +
25559 } +
25560 tween._value = value; +
25561 return tween; +
25562} +
25563 +
25564/* harmony default export */ __webpack_exports__["default"] = (function(name, value, priority) { +
25565 var key = "style." + (name += ""); +
25566 if (arguments.length < 2) return (key = this.tween(key)) && key._value; +
25567 if (value == null) return this.tween(key, null); +
25568 if (typeof value !== "function") throw new Error; +
25569 return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); +
25570}); +
25571 +
25572 +
25573/***/ }), +
25574 +
25575/***/ "./node_modules/d3-transition/src/transition/text.js": +
25576/*!***********************************************************!*\ +
25577 !*** ./node_modules/d3-transition/src/transition/text.js ***! +
25578 \***********************************************************/ +
25579/*! exports provided: default */ +
25580/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25581 +
25582"use strict"; +
25583__webpack_require__.r(__webpack_exports__); +
25584/* harmony import */ var _tween__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tween */ "./node_modules/d3-transition/src/transition/tween.js"); +
25585 +
25586 +
25587function textConstant(value) { +
25588 return function() { +
25589 this.textContent = value; +
25590 }; +
25591} +
25592 +
25593function textFunction(value) { +
25594 return function() { +
25595 var value1 = value(this); +
25596 this.textContent = value1 == null ? "" : value1; +
25597 }; +
25598} +
25599 +
25600/* harmony default export */ __webpack_exports__["default"] = (function(value) { +
25601 return this.tween("text", typeof value === "function" +
25602 ? textFunction(Object(_tween__WEBPACK_IMPORTED_MODULE_0__["tweenValue"])(this, "text", value)) +
25603 : textConstant(value == null ? "" : value + "")); +
25604}); +
25605 +
25606 +
25607/***/ }), +
25608 +
25609/***/ "./node_modules/d3-transition/src/transition/transition.js": +
25610/*!*****************************************************************!*\ +
25611 !*** ./node_modules/d3-transition/src/transition/transition.js ***! +
25612 \*****************************************************************/ +
25613/*! exports provided: default */ +
25614/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25615 +
25616"use strict"; +
25617__webpack_require__.r(__webpack_exports__); +
25618/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/d3-transition/src/transition/index.js"); +
25619/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
25620 +
25621 +
25622 +
25623/* harmony default export */ __webpack_exports__["default"] = (function() { +
25624 var name = this._name, +
25625 id0 = this._id, +
25626 id1 = Object(_index__WEBPACK_IMPORTED_MODULE_0__["newId"])(); +
25627 +
25628 for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { +
25629 for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { +
25630 if (node = group[i]) { +
25631 var inherit = Object(_schedule__WEBPACK_IMPORTED_MODULE_1__["get"])(node, id0); +
25632 Object(_schedule__WEBPACK_IMPORTED_MODULE_1__["default"])(node, name, id1, i, group, { +
25633 time: inherit.time + inherit.delay + inherit.duration, +
25634 delay: 0, +
25635 duration: inherit.duration, +
25636 ease: inherit.ease +
25637 }); +
25638 } +
25639 } +
25640 } +
25641 +
25642 return new _index__WEBPACK_IMPORTED_MODULE_0__["Transition"](groups, this._parents, name, id1); +
25643}); +
25644 +
25645 +
25646/***/ }), +
25647 +
25648/***/ "./node_modules/d3-transition/src/transition/tween.js": +
25649/*!************************************************************!*\ +
25650 !*** ./node_modules/d3-transition/src/transition/tween.js ***! +
25651 \************************************************************/ +
25652/*! exports provided: default, tweenValue */ +
25653/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25654 +
25655"use strict"; +
25656__webpack_require__.r(__webpack_exports__); +
25657/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tweenValue", function() { return tweenValue; }); +
25658/* harmony import */ var _schedule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./schedule */ "./node_modules/d3-transition/src/transition/schedule.js"); +
25659 +
25660 +
25661function tweenRemove(id, name) { +
25662 var tween0, tween1; +
25663 return function() { +
25664 var schedule = Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id), +
25665 tween = schedule.tween; +
25666 +
25667 // If this node shared tween with the previous node, +
25668 // just assign the updated shared tween and we’re done! +
25669 // Otherwise, copy-on-write. +
25670 if (tween !== tween0) { +
25671 tween1 = tween0 = tween; +
25672 for (var i = 0, n = tween1.length; i < n; ++i) { +
25673 if (tween1[i].name === name) { +
25674 tween1 = tween1.slice(); +
25675 tween1.splice(i, 1); +
25676 break; +
25677 } +
25678 } +
25679 } +
25680 +
25681 schedule.tween = tween1; +
25682 }; +
25683} +
25684 +
25685function tweenFunction(id, name, value) { +
25686 var tween0, tween1; +
25687 if (typeof value !== "function") throw new Error; +
25688 return function() { +
25689 var schedule = Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id), +
25690 tween = schedule.tween; +
25691 +
25692 // If this node shared tween with the previous node, +
25693 // just assign the updated shared tween and we’re done! +
25694 // Otherwise, copy-on-write. +
25695 if (tween !== tween0) { +
25696 tween1 = (tween0 = tween).slice(); +
25697 for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { +
25698 if (tween1[i].name === name) { +
25699 tween1[i] = t; +
25700 break; +
25701 } +
25702 } +
25703 if (i === n) tween1.push(t); +
25704 } +
25705 +
25706 schedule.tween = tween1; +
25707 }; +
25708} +
25709 +
25710/* harmony default export */ __webpack_exports__["default"] = (function(name, value) { +
25711 var id = this._id; +
25712 +
25713 name += ""; +
25714 +
25715 if (arguments.length < 2) { +
25716 var tween = Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(this.node(), id).tween; +
25717 for (var i = 0, n = tween.length, t; i < n; ++i) { +
25718 if ((t = tween[i]).name === name) { +
25719 return t.value; +
25720 } +
25721 } +
25722 return null; +
25723 } +
25724 +
25725 return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); +
25726}); +
25727 +
25728function tweenValue(transition, name, value) { +
25729 var id = transition._id; +
25730 +
25731 transition.each(function() { +
25732 var schedule = Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["set"])(this, id); +
25733 (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments); +
25734 }); +
25735 +
25736 return function(node) { +
25737 return Object(_schedule__WEBPACK_IMPORTED_MODULE_0__["get"])(node, id).value[name]; +
25738 }; +
25739} +
25740 +
25741 +
25742/***/ }), +
25743 +
25744/***/ "./node_modules/d3-voronoi/src/Beach.js": +
25745/*!**********************************************!*\ +
25746 !*** ./node_modules/d3-voronoi/src/Beach.js ***! +
25747 \**********************************************/ +
25748/*! exports provided: removeBeach, addBeach */ +
25749/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25750 +
25751"use strict"; +
25752__webpack_require__.r(__webpack_exports__); +
25753/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeBeach", function() { return removeBeach; }); +
25754/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addBeach", function() { return addBeach; }); +
25755/* harmony import */ var _RedBlackTree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RedBlackTree */ "./node_modules/d3-voronoi/src/RedBlackTree.js"); +
25756/* harmony import */ var _Cell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Cell */ "./node_modules/d3-voronoi/src/Cell.js"); +
25757/* harmony import */ var _Circle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Circle */ "./node_modules/d3-voronoi/src/Circle.js"); +
25758/* harmony import */ var _Edge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Edge */ "./node_modules/d3-voronoi/src/Edge.js"); +
25759/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); +
25760 +
25761 +
25762 +
25763 +
25764 +
25765 +
25766var beachPool = []; +
25767 +
25768function Beach() { +
25769 Object(_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__["RedBlackNode"])(this); +
25770 this.edge = +
25771 this.site = +
25772 this.circle = null; +
25773} +
25774 +
25775function createBeach(site) { +
25776 var beach = beachPool.pop() || new Beach; +
25777 beach.site = site; +
25778 return beach; +
25779} +
25780 +
25781function detachBeach(beach) { +
25782 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(beach); +
25783 _Diagram__WEBPACK_IMPORTED_MODULE_4__["beaches"].remove(beach); +
25784 beachPool.push(beach); +
25785 Object(_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__["RedBlackNode"])(beach); +
25786} +
25787 +
25788function removeBeach(beach) { +
25789 var circle = beach.circle, +
25790 x = circle.x, +
25791 y = circle.cy, +
25792 vertex = [x, y], +
25793 previous = beach.P, +
25794 next = beach.N, +
25795 disappearing = [beach]; +
25796 +
25797 detachBeach(beach); +
25798 +
25799 var lArc = previous; +
25800 while (lArc.circle +
25801 && Math.abs(x - lArc.circle.x) < _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"] +
25802 && Math.abs(y - lArc.circle.cy) < _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { +
25803 previous = lArc.P; +
25804 disappearing.unshift(lArc); +
25805 detachBeach(lArc); +
25806 lArc = previous; +
25807 } +
25808 +
25809 disappearing.unshift(lArc); +
25810 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(lArc); +
25811 +
25812 var rArc = next; +
25813 while (rArc.circle +
25814 && Math.abs(x - rArc.circle.x) < _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"] +
25815 && Math.abs(y - rArc.circle.cy) < _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { +
25816 next = rArc.N; +
25817 disappearing.push(rArc); +
25818 detachBeach(rArc); +
25819 rArc = next; +
25820 } +
25821 +
25822 disappearing.push(rArc); +
25823 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(rArc); +
25824 +
25825 var nArcs = disappearing.length, +
25826 iArc; +
25827 for (iArc = 1; iArc < nArcs; ++iArc) { +
25828 rArc = disappearing[iArc]; +
25829 lArc = disappearing[iArc - 1]; +
25830 Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["setEdgeEnd"])(rArc.edge, lArc.site, rArc.site, vertex); +
25831 } +
25832 +
25833 lArc = disappearing[0]; +
25834 rArc = disappearing[nArcs - 1]; +
25835 rArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(lArc.site, rArc.site, null, vertex); +
25836 +
25837 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(lArc); +
25838 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(rArc); +
25839} +
25840 +
25841function addBeach(site) { +
25842 var x = site[0], +
25843 directrix = site[1], +
25844 lArc, +
25845 rArc, +
25846 dxl, +
25847 dxr, +
25848 node = _Diagram__WEBPACK_IMPORTED_MODULE_4__["beaches"]._; +
25849 +
25850 while (node) { +
25851 dxl = leftBreakPoint(node, directrix) - x; +
25852 if (dxl > _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) node = node.L; else { +
25853 dxr = x - rightBreakPoint(node, directrix); +
25854 if (dxr > _Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { +
25855 if (!node.R) { +
25856 lArc = node; +
25857 break; +
25858 } +
25859 node = node.R; +
25860 } else { +
25861 if (dxl > -_Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { +
25862 lArc = node.P; +
25863 rArc = node; +
25864 } else if (dxr > -_Diagram__WEBPACK_IMPORTED_MODULE_4__["epsilon"]) { +
25865 lArc = node; +
25866 rArc = node.N; +
25867 } else { +
25868 lArc = rArc = node; +
25869 } +
25870 break; +
25871 } +
25872 } +
25873 } +
25874 +
25875 Object(_Cell__WEBPACK_IMPORTED_MODULE_1__["createCell"])(site); +
25876 var newArc = createBeach(site); +
25877 _Diagram__WEBPACK_IMPORTED_MODULE_4__["beaches"].insert(lArc, newArc); +
25878 +
25879 if (!lArc && !rArc) return; +
25880 +
25881 if (lArc === rArc) { +
25882 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(lArc); +
25883 rArc = createBeach(lArc.site); +
25884 _Diagram__WEBPACK_IMPORTED_MODULE_4__["beaches"].insert(newArc, rArc); +
25885 newArc.edge = rArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(lArc.site, newArc.site); +
25886 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(lArc); +
25887 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(rArc); +
25888 return; +
25889 } +
25890 +
25891 if (!rArc) { // && lArc +
25892 newArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(lArc.site, newArc.site); +
25893 return; +
25894 } +
25895 +
25896 // else lArc !== rArc +
25897 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(lArc); +
25898 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["detachCircle"])(rArc); +
25899 +
25900 var lSite = lArc.site, +
25901 ax = lSite[0], +
25902 ay = lSite[1], +
25903 bx = site[0] - ax, +
25904 by = site[1] - ay, +
25905 rSite = rArc.site, +
25906 cx = rSite[0] - ax, +
25907 cy = rSite[1] - ay, +
25908 d = 2 * (bx * cy - by * cx), +
25909 hb = bx * bx + by * by, +
25910 hc = cx * cx + cy * cy, +
25911 vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; +
25912 +
25913 Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["setEdgeEnd"])(rArc.edge, lSite, rSite, vertex); +
25914 newArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(lSite, site, null, vertex); +
25915 rArc.edge = Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["createEdge"])(site, rSite, null, vertex); +
25916 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(lArc); +
25917 Object(_Circle__WEBPACK_IMPORTED_MODULE_2__["attachCircle"])(rArc); +
25918} +
25919 +
25920function leftBreakPoint(arc, directrix) { +
25921 var site = arc.site, +
25922 rfocx = site[0], +
25923 rfocy = site[1], +
25924 pby2 = rfocy - directrix; +
25925 +
25926 if (!pby2) return rfocx; +
25927 +
25928 var lArc = arc.P; +
25929 if (!lArc) return -Infinity; +
25930 +
25931 site = lArc.site; +
25932 var lfocx = site[0], +
25933 lfocy = site[1], +
25934 plby2 = lfocy - directrix; +
25935 +
25936 if (!plby2) return lfocx; +
25937 +
25938 var hl = lfocx - rfocx, +
25939 aby2 = 1 / pby2 - 1 / plby2, +
25940 b = hl / plby2; +
25941 +
25942 if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; +
25943 +
25944 return (rfocx + lfocx) / 2; +
25945} +
25946 +
25947function rightBreakPoint(arc, directrix) { +
25948 var rArc = arc.N; +
25949 if (rArc) return leftBreakPoint(rArc, directrix); +
25950 var site = arc.site; +
25951 return site[1] === directrix ? site[0] : Infinity; +
25952} +
25953 +
25954 +
25955/***/ }), +
25956 +
25957/***/ "./node_modules/d3-voronoi/src/Cell.js": +
25958/*!*********************************************!*\ +
25959 !*** ./node_modules/d3-voronoi/src/Cell.js ***! +
25960 \*********************************************/ +
25961/*! exports provided: createCell, cellHalfedgeStart, cellHalfedgeEnd, sortCellHalfedges, clipCells */ +
25962/***/ (function(module, __webpack_exports__, __webpack_require__) { +
25963 +
25964"use strict"; +
25965__webpack_require__.r(__webpack_exports__); +
25966/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createCell", function() { return createCell; }); +
25967/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cellHalfedgeStart", function() { return cellHalfedgeStart; }); +
25968/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cellHalfedgeEnd", function() { return cellHalfedgeEnd; }); +
25969/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sortCellHalfedges", function() { return sortCellHalfedges; }); +
25970/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clipCells", function() { return clipCells; }); +
25971/* harmony import */ var _Edge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Edge */ "./node_modules/d3-voronoi/src/Edge.js"); +
25972/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); +
25973 +
25974 +
25975 +
25976function createCell(site) { +
25977 return _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][site.index] = { +
25978 site: site, +
25979 halfedges: [] +
25980 }; +
25981} +
25982 +
25983function cellHalfedgeAngle(cell, edge) { +
25984 var site = cell.site, +
25985 va = edge.left, +
25986 vb = edge.right; +
25987 if (site === vb) vb = va, va = site; +
25988 if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); +
25989 if (site === va) va = edge[1], vb = edge[0]; +
25990 else va = edge[0], vb = edge[1]; +
25991 return Math.atan2(va[0] - vb[0], vb[1] - va[1]); +
25992} +
25993 +
25994function cellHalfedgeStart(cell, edge) { +
25995 return edge[+(edge.left !== cell.site)]; +
25996} +
25997 +
25998function cellHalfedgeEnd(cell, edge) { +
25999 return edge[+(edge.left === cell.site)]; +
26000} +
26001 +
26002function sortCellHalfedges() { +
26003 for (var i = 0, n = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"].length, cell, halfedges, j, m; i < n; ++i) { +
26004 if ((cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][i]) && (m = (halfedges = cell.halfedges).length)) { +
26005 var index = new Array(m), +
26006 array = new Array(m); +
26007 for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"][halfedges[j]]); +
26008 index.sort(function(i, j) { return array[j] - array[i]; }); +
26009 for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; +
26010 for (j = 0; j < m; ++j) halfedges[j] = array[j]; +
26011 } +
26012 } +
26013} +
26014 +
26015function clipCells(x0, y0, x1, y1) { +
26016 var nCells = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"].length, +
26017 iCell, +
26018 cell, +
26019 site, +
26020 iHalfedge, +
26021 halfedges, +
26022 nHalfedges, +
26023 start, +
26024 startX, +
26025 startY, +
26026 end, +
26027 endX, +
26028 endY, +
26029 cover = true; +
26030 +
26031 for (iCell = 0; iCell < nCells; ++iCell) { +
26032 if (cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][iCell]) { +
26033 site = cell.site; +
26034 halfedges = cell.halfedges; +
26035 iHalfedge = halfedges.length; +
26036 +
26037 // Remove any dangling clipped edges. +
26038 while (iHalfedge--) { +
26039 if (!_Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"][halfedges[iHalfedge]]) { +
26040 halfedges.splice(iHalfedge, 1); +
26041 } +
26042 } +
26043 +
26044 // Insert any border edges as necessary. +
26045 iHalfedge = 0, nHalfedges = halfedges.length; +
26046 while (iHalfedge < nHalfedges) { +
26047 end = cellHalfedgeEnd(cell, _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"][halfedges[iHalfedge]]), endX = end[0], endY = end[1]; +
26048 start = cellHalfedgeStart(cell, _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"][halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; +
26049 if (Math.abs(endX - startX) > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] || Math.abs(endY - startY) > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"]) { +
26050 halfedges.splice(iHalfedge, 0, _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site, end, +
26051 Math.abs(endX - x0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && y1 - endY > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? [x0, Math.abs(startX - x0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? startY : y1] +
26052 : Math.abs(endY - y1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && x1 - endX > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? [Math.abs(startY - y1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? startX : x1, y1] +
26053 : Math.abs(endX - x1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && endY - y0 > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? [x1, Math.abs(startX - x1) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? startY : y0] +
26054 : Math.abs(endY - y0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] && endX - x0 > _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? [Math.abs(startY - y0) < _Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon"] ? startX : x0, y0] +
26055 : null)) - 1); +
26056 ++nHalfedges; +
26057 } +
26058 } +
26059 +
26060 if (nHalfedges) cover = false; +
26061 } +
26062 } +
26063 +
26064 // If there weren’t any edges, have the closest site cover the extent. +
26065 // It doesn’t matter which corner of the extent we measure! +
26066 if (cover) { +
26067 var dx, dy, d2, dc = Infinity; +
26068 +
26069 for (iCell = 0, cover = null; iCell < nCells; ++iCell) { +
26070 if (cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][iCell]) { +
26071 site = cell.site; +
26072 dx = site[0] - x0; +
26073 dy = site[1] - y0; +
26074 d2 = dx * dx + dy * dy; +
26075 if (d2 < dc) dc = d2, cover = cell; +
26076 } +
26077 } +
26078 +
26079 if (cover) { +
26080 var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; +
26081 cover.halfedges.push( +
26082 _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site = cover.site, v00, v01)) - 1, +
26083 _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site, v01, v11)) - 1, +
26084 _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site, v11, v10)) - 1, +
26085 _Diagram__WEBPACK_IMPORTED_MODULE_1__["edges"].push(Object(_Edge__WEBPACK_IMPORTED_MODULE_0__["createBorderEdge"])(site, v10, v00)) - 1 +
26086 ); +
26087 } +
26088 } +
26089 +
26090 // Lastly delete any cells with no edges; these were entirely clipped. +
26091 for (iCell = 0; iCell < nCells; ++iCell) { +
26092 if (cell = _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][iCell]) { +
26093 if (!cell.halfedges.length) { +
26094 delete _Diagram__WEBPACK_IMPORTED_MODULE_1__["cells"][iCell]; +
26095 } +
26096 } +
26097 } +
26098} +
26099 +
26100 +
26101/***/ }), +
26102 +
26103/***/ "./node_modules/d3-voronoi/src/Circle.js": +
26104/*!***********************************************!*\ +
26105 !*** ./node_modules/d3-voronoi/src/Circle.js ***! +
26106 \***********************************************/ +
26107/*! exports provided: firstCircle, attachCircle, detachCircle */ +
26108/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26109 +
26110"use strict"; +
26111__webpack_require__.r(__webpack_exports__); +
26112/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "firstCircle", function() { return firstCircle; }); +
26113/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "attachCircle", function() { return attachCircle; }); +
26114/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "detachCircle", function() { return detachCircle; }); +
26115/* harmony import */ var _RedBlackTree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RedBlackTree */ "./node_modules/d3-voronoi/src/RedBlackTree.js"); +
26116/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); +
26117 +
26118 +
26119 +
26120var circlePool = []; +
26121 +
26122var firstCircle; +
26123 +
26124function Circle() { +
26125 Object(_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__["RedBlackNode"])(this); +
26126 this.x = +
26127 this.y = +
26128 this.arc = +
26129 this.site = +
26130 this.cy = null; +
26131} +
26132 +
26133function attachCircle(arc) { +
26134 var lArc = arc.P, +
26135 rArc = arc.N; +
26136 +
26137 if (!lArc || !rArc) return; +
26138 +
26139 var lSite = lArc.site, +
26140 cSite = arc.site, +
26141 rSite = rArc.site; +
26142 +
26143 if (lSite === rSite) return; +
26144 +
26145 var bx = cSite[0], +
26146 by = cSite[1], +
26147 ax = lSite[0] - bx, +
26148 ay = lSite[1] - by, +
26149 cx = rSite[0] - bx, +
26150 cy = rSite[1] - by; +
26151 +
26152 var d = 2 * (ax * cy - ay * cx); +
26153 if (d >= -_Diagram__WEBPACK_IMPORTED_MODULE_1__["epsilon2"]) return; +
26154 +
26155 var ha = ax * ax + ay * ay, +
26156 hc = cx * cx + cy * cy, +
26157 x = (cy * ha - ay * hc) / d, +
26158 y = (ax * hc - cx * ha) / d; +
26159 +
26160 var circle = circlePool.pop() || new Circle; +
26161 circle.arc = arc; +
26162 circle.site = cSite; +
26163 circle.x = x + bx; +
26164 circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom +
26165 +
26166 arc.circle = circle; +
26167 +
26168 var before = null, +
26169 node = _Diagram__WEBPACK_IMPORTED_MODULE_1__["circles"]._; +
26170 +
26171 while (node) { +
26172 if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { +
26173 if (node.L) node = node.L; +
26174 else { before = node.P; break; } +
26175 } else { +
26176 if (node.R) node = node.R; +
26177 else { before = node; break; } +
26178 } +
26179 } +
26180 +
26181 _Diagram__WEBPACK_IMPORTED_MODULE_1__["circles"].insert(before, circle); +
26182 if (!before) firstCircle = circle; +
26183} +
26184 +
26185function detachCircle(arc) { +
26186 var circle = arc.circle; +
26187 if (circle) { +
26188 if (!circle.P) firstCircle = circle.N; +
26189 _Diagram__WEBPACK_IMPORTED_MODULE_1__["circles"].remove(circle); +
26190 circlePool.push(circle); +
26191 Object(_RedBlackTree__WEBPACK_IMPORTED_MODULE_0__["RedBlackNode"])(circle); +
26192 arc.circle = null; +
26193 } +
26194} +
26195 +
26196 +
26197/***/ }), +
26198 +
26199/***/ "./node_modules/d3-voronoi/src/Diagram.js": +
26200/*!************************************************!*\ +
26201 !*** ./node_modules/d3-voronoi/src/Diagram.js ***! +
26202 \************************************************/ +
26203/*! exports provided: epsilon, epsilon2, beaches, cells, circles, edges, default */ +
26204/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26205 +
26206"use strict"; +
26207__webpack_require__.r(__webpack_exports__); +
26208/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon", function() { return epsilon; }); +
26209/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "epsilon2", function() { return epsilon2; }); +
26210/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "beaches", function() { return beaches; }); +
26211/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cells", function() { return cells; }); +
26212/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circles", function() { return circles; }); +
26213/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "edges", function() { return edges; }); +
26214/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Diagram; }); +
26215/* harmony import */ var _Beach__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Beach */ "./node_modules/d3-voronoi/src/Beach.js"); +
26216/* harmony import */ var _Cell__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Cell */ "./node_modules/d3-voronoi/src/Cell.js"); +
26217/* harmony import */ var _Circle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Circle */ "./node_modules/d3-voronoi/src/Circle.js"); +
26218/* harmony import */ var _Edge__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Edge */ "./node_modules/d3-voronoi/src/Edge.js"); +
26219/* harmony import */ var _RedBlackTree__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RedBlackTree */ "./node_modules/d3-voronoi/src/RedBlackTree.js"); +
26220 +
26221 +
26222 +
26223 +
26224 +
26225 +
26226var epsilon = 1e-6; +
26227var epsilon2 = 1e-12; +
26228var beaches; +
26229var cells; +
26230var circles; +
26231var edges; +
26232 +
26233function triangleArea(a, b, c) { +
26234 return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); +
26235} +
26236 +
26237function lexicographic(a, b) { +
26238 return b[1] - a[1] +
26239 || b[0] - a[0]; +
26240} +
26241 +
26242function Diagram(sites, extent) { +
26243 var site = sites.sort(lexicographic).pop(), +
26244 x, +
26245 y, +
26246 circle; +
26247 +
26248 edges = []; +
26249 cells = new Array(sites.length); +
26250 beaches = new _RedBlackTree__WEBPACK_IMPORTED_MODULE_4__["default"]; +
26251 circles = new _RedBlackTree__WEBPACK_IMPORTED_MODULE_4__["default"]; +
26252 +
26253 while (true) { +
26254 circle = _Circle__WEBPACK_IMPORTED_MODULE_2__["firstCircle"]; +
26255 if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { +
26256 if (site[0] !== x || site[1] !== y) { +
26257 Object(_Beach__WEBPACK_IMPORTED_MODULE_0__["addBeach"])(site); +
26258 x = site[0], y = site[1]; +
26259 } +
26260 site = sites.pop(); +
26261 } else if (circle) { +
26262 Object(_Beach__WEBPACK_IMPORTED_MODULE_0__["removeBeach"])(circle.arc); +
26263 } else { +
26264 break; +
26265 } +
26266 } +
26267 +
26268 Object(_Cell__WEBPACK_IMPORTED_MODULE_1__["sortCellHalfedges"])(); +
26269 +
26270 if (extent) { +
26271 var x0 = +extent[0][0], +
26272 y0 = +extent[0][1], +
26273 x1 = +extent[1][0], +
26274 y1 = +extent[1][1]; +
26275 Object(_Edge__WEBPACK_IMPORTED_MODULE_3__["clipEdges"])(x0, y0, x1, y1); +
26276 Object(_Cell__WEBPACK_IMPORTED_MODULE_1__["clipCells"])(x0, y0, x1, y1); +
26277 } +
26278 +
26279 this.edges = edges; +
26280 this.cells = cells; +
26281 +
26282 beaches = +
26283 circles = +
26284 edges = +
26285 cells = null; +
26286} +
26287 +
26288Diagram.prototype = { +
26289 constructor: Diagram, +
26290 +
26291 polygons: function() { +
26292 var edges = this.edges; +
26293 +
26294 return this.cells.map(function(cell) { +
26295 var polygon = cell.halfedges.map(function(i) { return Object(_Cell__WEBPACK_IMPORTED_MODULE_1__["cellHalfedgeStart"])(cell, edges[i]); }); +
26296 polygon.data = cell.site.data; +
26297 return polygon; +
26298 }); +
26299 }, +
26300 +
26301 triangles: function() { +
26302 var triangles = [], +
26303 edges = this.edges; +
26304 +
26305 this.cells.forEach(function(cell, i) { +
26306 if (!(m = (halfedges = cell.halfedges).length)) return; +
26307 var site = cell.site, +
26308 halfedges, +
26309 j = -1, +
26310 m, +
26311 s0, +
26312 e1 = edges[halfedges[m - 1]], +
26313 s1 = e1.left === site ? e1.right : e1.left; +
26314 +
26315 while (++j < m) { +
26316 s0 = s1; +
26317 e1 = edges[halfedges[j]]; +
26318 s1 = e1.left === site ? e1.right : e1.left; +
26319 if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { +
26320 triangles.push([site.data, s0.data, s1.data]); +
26321 } +
26322 } +
26323 }); +
26324 +
26325 return triangles; +
26326 }, +
26327 +
26328 links: function() { +
26329 return this.edges.filter(function(edge) { +
26330 return edge.right; +
26331 }).map(function(edge) { +
26332 return { +
26333 source: edge.left.data, +
26334 target: edge.right.data +
26335 }; +
26336 }); +
26337 }, +
26338 +
26339 find: function(x, y, radius) { +
26340 var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell; +
26341 +
26342 // Use the previously-found cell, or start with an arbitrary one. +
26343 while (!(cell = that.cells[i1])) if (++i1 >= n) return null; +
26344 var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy; +
26345 +
26346 // Traverse the half-edges to find a closer cell, if any. +
26347 do { +
26348 cell = that.cells[i0 = i1], i1 = null; +
26349 cell.halfedges.forEach(function(e) { +
26350 var edge = that.edges[e], v = edge.left; +
26351 if ((v === cell.site || !v) && !(v = edge.right)) return; +
26352 var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy; +
26353 if (v2 < d2) d2 = v2, i1 = v.index; +
26354 }); +
26355 } while (i1 !== null); +
26356 +
26357 that._found = i0; +
26358 +
26359 return radius == null || d2 <= radius * radius ? cell.site : null; +
26360 } +
26361} +
26362 +
26363 +
26364/***/ }), +
26365 +
26366/***/ "./node_modules/d3-voronoi/src/Edge.js": +
26367/*!*********************************************!*\ +
26368 !*** ./node_modules/d3-voronoi/src/Edge.js ***! +
26369 \*********************************************/ +
26370/*! exports provided: createEdge, createBorderEdge, setEdgeEnd, clipEdges */ +
26371/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26372 +
26373"use strict"; +
26374__webpack_require__.r(__webpack_exports__); +
26375/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createEdge", function() { return createEdge; }); +
26376/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createBorderEdge", function() { return createBorderEdge; }); +
26377/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setEdgeEnd", function() { return setEdgeEnd; }); +
26378/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clipEdges", function() { return clipEdges; }); +
26379/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); +
26380 +
26381 +
26382function createEdge(left, right, v0, v1) { +
26383 var edge = [null, null], +
26384 index = _Diagram__WEBPACK_IMPORTED_MODULE_0__["edges"].push(edge) - 1; +
26385 edge.left = left; +
26386 edge.right = right; +
26387 if (v0) setEdgeEnd(edge, left, right, v0); +
26388 if (v1) setEdgeEnd(edge, right, left, v1); +
26389 _Diagram__WEBPACK_IMPORTED_MODULE_0__["cells"][left.index].halfedges.push(index); +
26390 _Diagram__WEBPACK_IMPORTED_MODULE_0__["cells"][right.index].halfedges.push(index); +
26391 return edge; +
26392} +
26393 +
26394function createBorderEdge(left, v0, v1) { +
26395 var edge = [v0, v1]; +
26396 edge.left = left; +
26397 return edge; +
26398} +
26399 +
26400function setEdgeEnd(edge, left, right, vertex) { +
26401 if (!edge[0] && !edge[1]) { +
26402 edge[0] = vertex; +
26403 edge.left = left; +
26404 edge.right = right; +
26405 } else if (edge.left === right) { +
26406 edge[1] = vertex; +
26407 } else { +
26408 edge[0] = vertex; +
26409 } +
26410} +
26411 +
26412// Liang–Barsky line clipping. +
26413function clipEdge(edge, x0, y0, x1, y1) { +
26414 var a = edge[0], +
26415 b = edge[1], +
26416 ax = a[0], +
26417 ay = a[1], +
26418 bx = b[0], +
26419 by = b[1], +
26420 t0 = 0, +
26421 t1 = 1, +
26422 dx = bx - ax, +
26423 dy = by - ay, +
26424 r; +
26425 +
26426 r = x0 - ax; +
26427 if (!dx && r > 0) return; +
26428 r /= dx; +
26429 if (dx < 0) { +
26430 if (r < t0) return; +
26431 if (r < t1) t1 = r; +
26432 } else if (dx > 0) { +
26433 if (r > t1) return; +
26434 if (r > t0) t0 = r; +
26435 } +
26436 +
26437 r = x1 - ax; +
26438 if (!dx && r < 0) return; +
26439 r /= dx; +
26440 if (dx < 0) { +
26441 if (r > t1) return; +
26442 if (r > t0) t0 = r; +
26443 } else if (dx > 0) { +
26444 if (r < t0) return; +
26445 if (r < t1) t1 = r; +
26446 } +
26447 +
26448 r = y0 - ay; +
26449 if (!dy && r > 0) return; +
26450 r /= dy; +
26451 if (dy < 0) { +
26452 if (r < t0) return; +
26453 if (r < t1) t1 = r; +
26454 } else if (dy > 0) { +
26455 if (r > t1) return; +
26456 if (r > t0) t0 = r; +
26457 } +
26458 +
26459 r = y1 - ay; +
26460 if (!dy && r < 0) return; +
26461 r /= dy; +
26462 if (dy < 0) { +
26463 if (r > t1) return; +
26464 if (r > t0) t0 = r; +
26465 } else if (dy > 0) { +
26466 if (r < t0) return; +
26467 if (r < t1) t1 = r; +
26468 } +
26469 +
26470 if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? +
26471 +
26472 if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; +
26473 if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; +
26474 return true; +
26475} +
26476 +
26477function connectEdge(edge, x0, y0, x1, y1) { +
26478 var v1 = edge[1]; +
26479 if (v1) return true; +
26480 +
26481 var v0 = edge[0], +
26482 left = edge.left, +
26483 right = edge.right, +
26484 lx = left[0], +
26485 ly = left[1], +
26486 rx = right[0], +
26487 ry = right[1], +
26488 fx = (lx + rx) / 2, +
26489 fy = (ly + ry) / 2, +
26490 fm, +
26491 fb; +
26492 +
26493 if (ry === ly) { +
26494 if (fx < x0 || fx >= x1) return; +
26495 if (lx > rx) { +
26496 if (!v0) v0 = [fx, y0]; +
26497 else if (v0[1] >= y1) return; +
26498 v1 = [fx, y1]; +
26499 } else { +
26500 if (!v0) v0 = [fx, y1]; +
26501 else if (v0[1] < y0) return; +
26502 v1 = [fx, y0]; +
26503 } +
26504 } else { +
26505 fm = (lx - rx) / (ry - ly); +
26506 fb = fy - fm * fx; +
26507 if (fm < -1 || fm > 1) { +
26508 if (lx > rx) { +
26509 if (!v0) v0 = [(y0 - fb) / fm, y0]; +
26510 else if (v0[1] >= y1) return; +
26511 v1 = [(y1 - fb) / fm, y1]; +
26512 } else { +
26513 if (!v0) v0 = [(y1 - fb) / fm, y1]; +
26514 else if (v0[1] < y0) return; +
26515 v1 = [(y0 - fb) / fm, y0]; +
26516 } +
26517 } else { +
26518 if (ly < ry) { +
26519 if (!v0) v0 = [x0, fm * x0 + fb]; +
26520 else if (v0[0] >= x1) return; +
26521 v1 = [x1, fm * x1 + fb]; +
26522 } else { +
26523 if (!v0) v0 = [x1, fm * x1 + fb]; +
26524 else if (v0[0] < x0) return; +
26525 v1 = [x0, fm * x0 + fb]; +
26526 } +
26527 } +
26528 } +
26529 +
26530 edge[0] = v0; +
26531 edge[1] = v1; +
26532 return true; +
26533} +
26534 +
26535function clipEdges(x0, y0, x1, y1) { +
26536 var i = _Diagram__WEBPACK_IMPORTED_MODULE_0__["edges"].length, +
26537 edge; +
26538 +
26539 while (i--) { +
26540 if (!connectEdge(edge = _Diagram__WEBPACK_IMPORTED_MODULE_0__["edges"][i], x0, y0, x1, y1) +
26541 || !clipEdge(edge, x0, y0, x1, y1) +
26542 || !(Math.abs(edge[0][0] - edge[1][0]) > _Diagram__WEBPACK_IMPORTED_MODULE_0__["epsilon"] +
26543 || Math.abs(edge[0][1] - edge[1][1]) > _Diagram__WEBPACK_IMPORTED_MODULE_0__["epsilon"])) { +
26544 delete _Diagram__WEBPACK_IMPORTED_MODULE_0__["edges"][i]; +
26545 } +
26546 } +
26547} +
26548 +
26549 +
26550/***/ }), +
26551 +
26552/***/ "./node_modules/d3-voronoi/src/RedBlackTree.js": +
26553/*!*****************************************************!*\ +
26554 !*** ./node_modules/d3-voronoi/src/RedBlackTree.js ***! +
26555 \*****************************************************/ +
26556/*! exports provided: RedBlackNode, default */ +
26557/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26558 +
26559"use strict"; +
26560__webpack_require__.r(__webpack_exports__); +
26561/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RedBlackNode", function() { return RedBlackNode; }); +
26562function RedBlackTree() { +
26563 this._ = null; // root node +
26564} +
26565 +
26566function RedBlackNode(node) { +
26567 node.U = // parent node +
26568 node.C = // color - true for red, false for black +
26569 node.L = // left node +
26570 node.R = // right node +
26571 node.P = // previous node +
26572 node.N = null; // next node +
26573} +
26574 +
26575RedBlackTree.prototype = { +
26576 constructor: RedBlackTree, +
26577 +
26578 insert: function(after, node) { +
26579 var parent, grandpa, uncle; +
26580 +
26581 if (after) { +
26582 node.P = after; +
26583 node.N = after.N; +
26584 if (after.N) after.N.P = node; +
26585 after.N = node; +
26586 if (after.R) { +
26587 after = after.R; +
26588 while (after.L) after = after.L; +
26589 after.L = node; +
26590 } else { +
26591 after.R = node; +
26592 } +
26593 parent = after; +
26594 } else if (this._) { +
26595 after = RedBlackFirst(this._); +
26596 node.P = null; +
26597 node.N = after; +
26598 after.P = after.L = node; +
26599 parent = after; +
26600 } else { +
26601 node.P = node.N = null; +
26602 this._ = node; +
26603 parent = null; +
26604 } +
26605 node.L = node.R = null; +
26606 node.U = parent; +
26607 node.C = true; +
26608 +
26609 after = node; +
26610 while (parent && parent.C) { +
26611 grandpa = parent.U; +
26612 if (parent === grandpa.L) { +
26613 uncle = grandpa.R; +
26614 if (uncle && uncle.C) { +
26615 parent.C = uncle.C = false; +
26616 grandpa.C = true; +
26617 after = grandpa; +
26618 } else { +
26619 if (after === parent.R) { +
26620 RedBlackRotateLeft(this, parent); +
26621 after = parent; +
26622 parent = after.U; +
26623 } +
26624 parent.C = false; +
26625 grandpa.C = true; +
26626 RedBlackRotateRight(this, grandpa); +
26627 } +
26628 } else { +
26629 uncle = grandpa.L; +
26630 if (uncle && uncle.C) { +
26631 parent.C = uncle.C = false; +
26632 grandpa.C = true; +
26633 after = grandpa; +
26634 } else { +
26635 if (after === parent.L) { +
26636 RedBlackRotateRight(this, parent); +
26637 after = parent; +
26638 parent = after.U; +
26639 } +
26640 parent.C = false; +
26641 grandpa.C = true; +
26642 RedBlackRotateLeft(this, grandpa); +
26643 } +
26644 } +
26645 parent = after.U; +
26646 } +
26647 this._.C = false; +
26648 }, +
26649 +
26650 remove: function(node) { +
26651 if (node.N) node.N.P = node.P; +
26652 if (node.P) node.P.N = node.N; +
26653 node.N = node.P = null; +
26654 +
26655 var parent = node.U, +
26656 sibling, +
26657 left = node.L, +
26658 right = node.R, +
26659 next, +
26660 red; +
26661 +
26662 if (!left) next = right; +
26663 else if (!right) next = left; +
26664 else next = RedBlackFirst(right); +
26665 +
26666 if (parent) { +
26667 if (parent.L === node) parent.L = next; +
26668 else parent.R = next; +
26669 } else { +
26670 this._ = next; +
26671 } +
26672 +
26673 if (left && right) { +
26674 red = next.C; +
26675 next.C = node.C; +
26676 next.L = left; +
26677 left.U = next; +
26678 if (next !== right) { +
26679 parent = next.U; +
26680 next.U = node.U; +
26681 node = next.R; +
26682 parent.L = node; +
26683 next.R = right; +
26684 right.U = next; +
26685 } else { +
26686 next.U = parent; +
26687 parent = next; +
26688 node = next.R; +
26689 } +
26690 } else { +
26691 red = node.C; +
26692 node = next; +
26693 } +
26694 +
26695 if (node) node.U = parent; +
26696 if (red) return; +
26697 if (node && node.C) { node.C = false; return; } +
26698 +
26699 do { +
26700 if (node === this._) break; +
26701 if (node === parent.L) { +
26702 sibling = parent.R; +
26703 if (sibling.C) { +
26704 sibling.C = false; +
26705 parent.C = true; +
26706 RedBlackRotateLeft(this, parent); +
26707 sibling = parent.R; +
26708 } +
26709 if ((sibling.L && sibling.L.C) +
26710 || (sibling.R && sibling.R.C)) { +
26711 if (!sibling.R || !sibling.R.C) { +
26712 sibling.L.C = false; +
26713 sibling.C = true; +
26714 RedBlackRotateRight(this, sibling); +
26715 sibling = parent.R; +
26716 } +
26717 sibling.C = parent.C; +
26718 parent.C = sibling.R.C = false; +
26719 RedBlackRotateLeft(this, parent); +
26720 node = this._; +
26721 break; +
26722 } +
26723 } else { +
26724 sibling = parent.L; +
26725 if (sibling.C) { +
26726 sibling.C = false; +
26727 parent.C = true; +
26728 RedBlackRotateRight(this, parent); +
26729 sibling = parent.L; +
26730 } +
26731 if ((sibling.L && sibling.L.C) +
26732 || (sibling.R && sibling.R.C)) { +
26733 if (!sibling.L || !sibling.L.C) { +
26734 sibling.R.C = false; +
26735 sibling.C = true; +
26736 RedBlackRotateLeft(this, sibling); +
26737 sibling = parent.L; +
26738 } +
26739 sibling.C = parent.C; +
26740 parent.C = sibling.L.C = false; +
26741 RedBlackRotateRight(this, parent); +
26742 node = this._; +
26743 break; +
26744 } +
26745 } +
26746 sibling.C = true; +
26747 node = parent; +
26748 parent = parent.U; +
26749 } while (!node.C); +
26750 +
26751 if (node) node.C = false; +
26752 } +
26753}; +
26754 +
26755function RedBlackRotateLeft(tree, node) { +
26756 var p = node, +
26757 q = node.R, +
26758 parent = p.U; +
26759 +
26760 if (parent) { +
26761 if (parent.L === p) parent.L = q; +
26762 else parent.R = q; +
26763 } else { +
26764 tree._ = q; +
26765 } +
26766 +
26767 q.U = parent; +
26768 p.U = q; +
26769 p.R = q.L; +
26770 if (p.R) p.R.U = p; +
26771 q.L = p; +
26772} +
26773 +
26774function RedBlackRotateRight(tree, node) { +
26775 var p = node, +
26776 q = node.L, +
26777 parent = p.U; +
26778 +
26779 if (parent) { +
26780 if (parent.L === p) parent.L = q; +
26781 else parent.R = q; +
26782 } else { +
26783 tree._ = q; +
26784 } +
26785 +
26786 q.U = parent; +
26787 p.U = q; +
26788 p.L = q.R; +
26789 if (p.L) p.L.U = p; +
26790 q.R = p; +
26791} +
26792 +
26793function RedBlackFirst(node) { +
26794 while (node.L) node = node.L; +
26795 return node; +
26796} +
26797 +
26798/* harmony default export */ __webpack_exports__["default"] = (RedBlackTree); +
26799 +
26800 +
26801/***/ }), +
26802 +
26803/***/ "./node_modules/d3-voronoi/src/constant.js": +
26804/*!*************************************************!*\ +
26805 !*** ./node_modules/d3-voronoi/src/constant.js ***! +
26806 \*************************************************/ +
26807/*! exports provided: default */ +
26808/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26809 +
26810"use strict"; +
26811__webpack_require__.r(__webpack_exports__); +
26812/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
26813 return function() { +
26814 return x; +
26815 }; +
26816}); +
26817 +
26818 +
26819/***/ }), +
26820 +
26821/***/ "./node_modules/d3-voronoi/src/index.js": +
26822/*!**********************************************!*\ +
26823 !*** ./node_modules/d3-voronoi/src/index.js ***! +
26824 \**********************************************/ +
26825/*! exports provided: voronoi */ +
26826/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26827 +
26828"use strict"; +
26829__webpack_require__.r(__webpack_exports__); +
26830/* harmony import */ var _voronoi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./voronoi */ "./node_modules/d3-voronoi/src/voronoi.js"); +
26831/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "voronoi", function() { return _voronoi__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
26832 +
26833 +
26834 +
26835 +
26836/***/ }), +
26837 +
26838/***/ "./node_modules/d3-voronoi/src/point.js": +
26839/*!**********************************************!*\ +
26840 !*** ./node_modules/d3-voronoi/src/point.js ***! +
26841 \**********************************************/ +
26842/*! exports provided: x, y */ +
26843/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26844 +
26845"use strict"; +
26846__webpack_require__.r(__webpack_exports__); +
26847/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return x; }); +
26848/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return y; }); +
26849function x(d) { +
26850 return d[0]; +
26851} +
26852 +
26853function y(d) { +
26854 return d[1]; +
26855} +
26856 +
26857 +
26858/***/ }), +
26859 +
26860/***/ "./node_modules/d3-voronoi/src/voronoi.js": +
26861/*!************************************************!*\ +
26862 !*** ./node_modules/d3-voronoi/src/voronoi.js ***! +
26863 \************************************************/ +
26864/*! exports provided: default */ +
26865/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26866 +
26867"use strict"; +
26868__webpack_require__.r(__webpack_exports__); +
26869/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-voronoi/src/constant.js"); +
26870/* harmony import */ var _point__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./point */ "./node_modules/d3-voronoi/src/point.js"); +
26871/* harmony import */ var _Diagram__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Diagram */ "./node_modules/d3-voronoi/src/Diagram.js"); +
26872 +
26873 +
26874 +
26875 +
26876/* harmony default export */ __webpack_exports__["default"] = (function() { +
26877 var x = _point__WEBPACK_IMPORTED_MODULE_1__["x"], +
26878 y = _point__WEBPACK_IMPORTED_MODULE_1__["y"], +
26879 extent = null; +
26880 +
26881 function voronoi(data) { +
26882 return new _Diagram__WEBPACK_IMPORTED_MODULE_2__["default"](data.map(function(d, i) { +
26883 var s = [Math.round(x(d, i, data) / _Diagram__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) * _Diagram__WEBPACK_IMPORTED_MODULE_2__["epsilon"], Math.round(y(d, i, data) / _Diagram__WEBPACK_IMPORTED_MODULE_2__["epsilon"]) * _Diagram__WEBPACK_IMPORTED_MODULE_2__["epsilon"]]; +
26884 s.index = i; +
26885 s.data = d; +
26886 return s; +
26887 }), extent); +
26888 } +
26889 +
26890 voronoi.polygons = function(data) { +
26891 return voronoi(data).polygons(); +
26892 }; +
26893 +
26894 voronoi.links = function(data) { +
26895 return voronoi(data).links(); +
26896 }; +
26897 +
26898 voronoi.triangles = function(data) { +
26899 return voronoi(data).triangles(); +
26900 }; +
26901 +
26902 voronoi.x = function(_) { +
26903 return arguments.length ? (x = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), voronoi) : x; +
26904 }; +
26905 +
26906 voronoi.y = function(_) { +
26907 return arguments.length ? (y = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), voronoi) : y; +
26908 }; +
26909 +
26910 voronoi.extent = function(_) { +
26911 return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; +
26912 }; +
26913 +
26914 voronoi.size = function(_) { +
26915 return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; +
26916 }; +
26917 +
26918 return voronoi; +
26919}); +
26920 +
26921 +
26922/***/ }), +
26923 +
26924/***/ "./node_modules/d3-zoom/src/constant.js": +
26925/*!**********************************************!*\ +
26926 !*** ./node_modules/d3-zoom/src/constant.js ***! +
26927 \**********************************************/ +
26928/*! exports provided: default */ +
26929/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26930 +
26931"use strict"; +
26932__webpack_require__.r(__webpack_exports__); +
26933/* harmony default export */ __webpack_exports__["default"] = (function(x) { +
26934 return function() { +
26935 return x; +
26936 }; +
26937}); +
26938 +
26939 +
26940/***/ }), +
26941 +
26942/***/ "./node_modules/d3-zoom/src/event.js": +
26943/*!*******************************************!*\ +
26944 !*** ./node_modules/d3-zoom/src/event.js ***! +
26945 \*******************************************/ +
26946/*! exports provided: default */ +
26947/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26948 +
26949"use strict"; +
26950__webpack_require__.r(__webpack_exports__); +
26951/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ZoomEvent; }); +
26952function ZoomEvent(target, type, transform) { +
26953 this.target = target; +
26954 this.type = type; +
26955 this.transform = transform; +
26956} +
26957 +
26958 +
26959/***/ }), +
26960 +
26961/***/ "./node_modules/d3-zoom/src/index.js": +
26962/*!*******************************************!*\ +
26963 !*** ./node_modules/d3-zoom/src/index.js ***! +
26964 \*******************************************/ +
26965/*! exports provided: zoom, zoomTransform, zoomIdentity */ +
26966/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26967 +
26968"use strict"; +
26969__webpack_require__.r(__webpack_exports__); +
26970/* harmony import */ var _zoom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./zoom */ "./node_modules/d3-zoom/src/zoom.js"); +
26971/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoom", function() { return _zoom__WEBPACK_IMPORTED_MODULE_0__["default"]; }); +
26972 +
26973/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transform */ "./node_modules/d3-zoom/src/transform.js"); +
26974/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoomTransform", function() { return _transform__WEBPACK_IMPORTED_MODULE_1__["default"]; }); +
26975 +
26976/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoomIdentity", function() { return _transform__WEBPACK_IMPORTED_MODULE_1__["identity"]; }); +
26977 +
26978 +
26979 +
26980 +
26981 +
26982/***/ }), +
26983 +
26984/***/ "./node_modules/d3-zoom/src/noevent.js": +
26985/*!*********************************************!*\ +
26986 !*** ./node_modules/d3-zoom/src/noevent.js ***! +
26987 \*********************************************/ +
26988/*! exports provided: nopropagation, default */ +
26989/***/ (function(module, __webpack_exports__, __webpack_require__) { +
26990 +
26991"use strict"; +
26992__webpack_require__.r(__webpack_exports__); +
26993/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nopropagation", function() { return nopropagation; }); +
26994/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
26995 +
26996 +
26997function nopropagation() { +
26998 d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +
26999} +
27000 +
27001/* harmony default export */ __webpack_exports__["default"] = (function() { +
27002 d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].preventDefault(); +
27003 d3_selection__WEBPACK_IMPORTED_MODULE_0__["event"].stopImmediatePropagation(); +
27004}); +
27005 +
27006 +
27007/***/ }), +
27008 +
27009/***/ "./node_modules/d3-zoom/src/transform.js": +
27010/*!***********************************************!*\ +
27011 !*** ./node_modules/d3-zoom/src/transform.js ***! +
27012 \***********************************************/ +
27013/*! exports provided: Transform, identity, default */ +
27014/***/ (function(module, __webpack_exports__, __webpack_require__) { +
27015 +
27016"use strict"; +
27017__webpack_require__.r(__webpack_exports__); +
27018/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transform", function() { return Transform; }); +
27019/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; }); +
27020/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return transform; }); +
27021function Transform(k, x, y) { +
27022 this.k = k; +
27023 this.x = x; +
27024 this.y = y; +
27025} +
27026 +
27027Transform.prototype = { +
27028 constructor: Transform, +
27029 scale: function(k) { +
27030 return k === 1 ? this : new Transform(this.k * k, this.x, this.y); +
27031 }, +
27032 translate: function(x, y) { +
27033 return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); +
27034 }, +
27035 apply: function(point) { +
27036 return [point[0] * this.k + this.x, point[1] * this.k + this.y]; +
27037 }, +
27038 applyX: function(x) { +
27039 return x * this.k + this.x; +
27040 }, +
27041 applyY: function(y) { +
27042 return y * this.k + this.y; +
27043 }, +
27044 invert: function(location) { +
27045 return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; +
27046 }, +
27047 invertX: function(x) { +
27048 return (x - this.x) / this.k; +
27049 }, +
27050 invertY: function(y) { +
27051 return (y - this.y) / this.k; +
27052 }, +
27053 rescaleX: function(x) { +
27054 return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); +
27055 }, +
27056 rescaleY: function(y) { +
27057 return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); +
27058 }, +
27059 toString: function() { +
27060 return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; +
27061 } +
27062}; +
27063 +
27064var identity = new Transform(1, 0, 0); +
27065 +
27066transform.prototype = Transform.prototype; +
27067 +
27068function transform(node) { +
27069 return node.__zoom || identity; +
27070} +
27071 +
27072 +
27073/***/ }), +
27074 +
27075/***/ "./node_modules/d3-zoom/src/zoom.js": +
27076/*!******************************************!*\ +
27077 !*** ./node_modules/d3-zoom/src/zoom.js ***! +
27078 \******************************************/ +
27079/*! exports provided: default */ +
27080/***/ (function(module, __webpack_exports__, __webpack_require__) { +
27081 +
27082"use strict"; +
27083__webpack_require__.r(__webpack_exports__); +
27084/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/index.js"); +
27085/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-drag */ "./node_modules/d3-drag/src/index.js"); +
27086/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
27087/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
27088/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-transition */ "./node_modules/d3-transition/src/index.js"); +
27089/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constant */ "./node_modules/d3-zoom/src/constant.js"); +
27090/* harmony import */ var _event__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./event */ "./node_modules/d3-zoom/src/event.js"); +
27091/* harmony import */ var _transform__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./transform */ "./node_modules/d3-zoom/src/transform.js"); +
27092/* harmony import */ var _noevent__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./noevent */ "./node_modules/d3-zoom/src/noevent.js"); +
27093 +
27094 +
27095 +
27096 +
27097 +
27098 +
27099 +
27100 +
27101 +
27102 +
27103// Ignore right-click, since that should open the context menu. +
27104function defaultFilter() { +
27105 return !d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].button; +
27106} +
27107 +
27108function defaultExtent() { +
27109 var e = this, w, h; +
27110 if (e instanceof SVGElement) { +
27111 e = e.ownerSVGElement || e; +
27112 w = e.width.baseVal.value; +
27113 h = e.height.baseVal.value; +
27114 } else { +
27115 w = e.clientWidth; +
27116 h = e.clientHeight; +
27117 } +
27118 return [[0, 0], [w, h]]; +
27119} +
27120 +
27121function defaultTransform() { +
27122 return this.__zoom || _transform__WEBPACK_IMPORTED_MODULE_7__["identity"]; +
27123} +
27124 +
27125function defaultWheelDelta() { +
27126 return -d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].deltaY * (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].deltaMode ? 120 : 1) / 500; +
27127} +
27128 +
27129function defaultTouchable() { +
27130 return "ontouchstart" in this; +
27131} +
27132 +
27133function defaultConstrain(transform, extent, translateExtent) { +
27134 var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0], +
27135 dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0], +
27136 dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1], +
27137 dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1]; +
27138 return transform.translate( +
27139 dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), +
27140 dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) +
27141 ); +
27142} +
27143 +
27144/* harmony default export */ __webpack_exports__["default"] = (function() { +
27145 var filter = defaultFilter, +
27146 extent = defaultExtent, +
27147 constrain = defaultConstrain, +
27148 wheelDelta = defaultWheelDelta, +
27149 touchable = defaultTouchable, +
27150 scaleExtent = [0, Infinity], +
27151 translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], +
27152 duration = 250, +
27153 interpolate = d3_interpolate__WEBPACK_IMPORTED_MODULE_2__["interpolateZoom"], +
27154 gestures = [], +
27155 listeners = Object(d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["dispatch"])("start", "zoom", "end"), +
27156 touchstarting, +
27157 touchending, +
27158 touchDelay = 500, +
27159 wheelDelay = 150, +
27160 clickDistance2 = 0; +
27161 +
27162 function zoom(selection) { +
27163 selection +
27164 .property("__zoom", defaultTransform) +
27165 .on("wheel.zoom", wheeled) +
27166 .on("mousedown.zoom", mousedowned) +
27167 .on("dblclick.zoom", dblclicked) +
27168 .filter(touchable) +
27169 .on("touchstart.zoom", touchstarted) +
27170 .on("touchmove.zoom", touchmoved) +
27171 .on("touchend.zoom touchcancel.zoom", touchended) +
27172 .style("touch-action", "none") +
27173 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); +
27174 } +
27175 +
27176 zoom.transform = function(collection, transform) { +
27177 var selection = collection.selection ? collection.selection() : collection; +
27178 selection.property("__zoom", defaultTransform); +
27179 if (collection !== selection) { +
27180 schedule(collection, transform); +
27181 } else { +
27182 selection.interrupt().each(function() { +
27183 gesture(this, arguments) +
27184 .start() +
27185 .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform) +
27186 .end(); +
27187 }); +
27188 } +
27189 }; +
27190 +
27191 zoom.scaleBy = function(selection, k) { +
27192 zoom.scaleTo(selection, function() { +
27193 var k0 = this.__zoom.k, +
27194 k1 = typeof k === "function" ? k.apply(this, arguments) : k; +
27195 return k0 * k1; +
27196 }); +
27197 }; +
27198 +
27199 zoom.scaleTo = function(selection, k) { +
27200 zoom.transform(selection, function() { +
27201 var e = extent.apply(this, arguments), +
27202 t0 = this.__zoom, +
27203 p0 = centroid(e), +
27204 p1 = t0.invert(p0), +
27205 k1 = typeof k === "function" ? k.apply(this, arguments) : k; +
27206 return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent); +
27207 }); +
27208 }; +
27209 +
27210 zoom.translateBy = function(selection, x, y) { +
27211 zoom.transform(selection, function() { +
27212 return constrain(this.__zoom.translate( +
27213 typeof x === "function" ? x.apply(this, arguments) : x, +
27214 typeof y === "function" ? y.apply(this, arguments) : y +
27215 ), extent.apply(this, arguments), translateExtent); +
27216 }); +
27217 }; +
27218 +
27219 zoom.translateTo = function(selection, x, y) { +
27220 zoom.transform(selection, function() { +
27221 var e = extent.apply(this, arguments), +
27222 t = this.__zoom, +
27223 p = centroid(e); +
27224 return constrain(_transform__WEBPACK_IMPORTED_MODULE_7__["identity"].translate(p[0], p[1]).scale(t.k).translate( +
27225 typeof x === "function" ? -x.apply(this, arguments) : -x, +
27226 typeof y === "function" ? -y.apply(this, arguments) : -y +
27227 ), e, translateExtent); +
27228 }); +
27229 }; +
27230 +
27231 function scale(transform, k) { +
27232 k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k)); +
27233 return k === transform.k ? transform : new _transform__WEBPACK_IMPORTED_MODULE_7__["Transform"](k, transform.x, transform.y); +
27234 } +
27235 +
27236 function translate(transform, p0, p1) { +
27237 var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k; +
27238 return x === transform.x && y === transform.y ? transform : new _transform__WEBPACK_IMPORTED_MODULE_7__["Transform"](transform.k, x, y); +
27239 } +
27240 +
27241 function centroid(extent) { +
27242 return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; +
27243 } +
27244 +
27245 function schedule(transition, transform, center) { +
27246 transition +
27247 .on("start.zoom", function() { gesture(this, arguments).start(); }) +
27248 .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); }) +
27249 .tween("zoom", function() { +
27250 var that = this, +
27251 args = arguments, +
27252 g = gesture(that, args), +
27253 e = extent.apply(that, args), +
27254 p = center || centroid(e), +
27255 w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), +
27256 a = that.__zoom, +
27257 b = typeof transform === "function" ? transform.apply(that, args) : transform, +
27258 i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); +
27259 return function(t) { +
27260 if (t === 1) t = b; // Avoid rounding error on end. +
27261 else { var l = i(t), k = w / l[2]; t = new _transform__WEBPACK_IMPORTED_MODULE_7__["Transform"](k, p[0] - l[0] * k, p[1] - l[1] * k); } +
27262 g.zoom(null, t); +
27263 }; +
27264 }); +
27265 } +
27266 +
27267 function gesture(that, args) { +
27268 for (var i = 0, n = gestures.length, g; i < n; ++i) { +
27269 if ((g = gestures[i]).that === that) { +
27270 return g; +
27271 } +
27272 } +
27273 return new Gesture(that, args); +
27274 } +
27275 +
27276 function Gesture(that, args) { +
27277 this.that = that; +
27278 this.args = args; +
27279 this.index = -1; +
27280 this.active = 0; +
27281 this.extent = extent.apply(that, args); +
27282 } +
27283 +
27284 Gesture.prototype = { +
27285 start: function() { +
27286 if (++this.active === 1) { +
27287 this.index = gestures.push(this) - 1; +
27288 this.emit("start"); +
27289 } +
27290 return this; +
27291 }, +
27292 zoom: function(key, transform) { +
27293 if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]); +
27294 if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]); +
27295 if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]); +
27296 this.that.__zoom = transform; +
27297 this.emit("zoom"); +
27298 return this; +
27299 }, +
27300 end: function() { +
27301 if (--this.active === 0) { +
27302 gestures.splice(this.index, 1); +
27303 this.index = -1; +
27304 this.emit("end"); +
27305 } +
27306 return this; +
27307 }, +
27308 emit: function(type) { +
27309 Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["customEvent"])(new _event__WEBPACK_IMPORTED_MODULE_6__["default"](zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]); +
27310 } +
27311 }; +
27312 +
27313 function wheeled() { +
27314 if (!filter.apply(this, arguments)) return; +
27315 var g = gesture(this, arguments), +
27316 t = this.__zoom, +
27317 k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))), +
27318 p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(this); +
27319 +
27320 // If the mouse is in the same location as before, reuse it. +
27321 // If there were recent wheel events, reset the wheel idle timeout. +
27322 if (g.wheel) { +
27323 if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { +
27324 g.mouse[1] = t.invert(g.mouse[0] = p); +
27325 } +
27326 clearTimeout(g.wheel); +
27327 } +
27328 +
27329 // If this wheel event won’t trigger a transform change, ignore it. +
27330 else if (t.k === k) return; +
27331 +
27332 // Otherwise, capture the mouse point and location at the start. +
27333 else { +
27334 g.mouse = [p, t.invert(p)]; +
27335 Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(this); +
27336 g.start(); +
27337 } +
27338 +
27339 Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); +
27340 g.wheel = setTimeout(wheelidled, wheelDelay); +
27341 g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent)); +
27342 +
27343 function wheelidled() { +
27344 g.wheel = null; +
27345 g.end(); +
27346 } +
27347 } +
27348 +
27349 function mousedowned() { +
27350 if (touchending || !filter.apply(this, arguments)) return; +
27351 var g = gesture(this, arguments), +
27352 v = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), +
27353 p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(this), +
27354 x0 = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].clientX, +
27355 y0 = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].clientY; +
27356 +
27357 Object(d3_drag__WEBPACK_IMPORTED_MODULE_1__["dragDisable"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view); +
27358 Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["nopropagation"])(); +
27359 g.mouse = [p, this.__zoom.invert(p)]; +
27360 Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(this); +
27361 g.start(); +
27362 +
27363 function mousemoved() { +
27364 Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); +
27365 if (!g.moved) { +
27366 var dx = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].clientX - x0, dy = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].clientY - y0; +
27367 g.moved = dx * dx + dy * dy > clickDistance2; +
27368 } +
27369 g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(g.that), g.mouse[1]), g.extent, translateExtent)); +
27370 } +
27371 +
27372 function mouseupped() { +
27373 v.on("mousemove.zoom mouseup.zoom", null); +
27374 Object(d3_drag__WEBPACK_IMPORTED_MODULE_1__["dragEnable"])(d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].view, g.moved); +
27375 Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); +
27376 g.end(); +
27377 } +
27378 } +
27379 +
27380 function dblclicked() { +
27381 if (!filter.apply(this, arguments)) return; +
27382 var t0 = this.__zoom, +
27383 p0 = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["mouse"])(this), +
27384 p1 = t0.invert(p0), +
27385 k1 = t0.k * (d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].shiftKey ? 0.5 : 2), +
27386 t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent); +
27387 +
27388 Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); +
27389 if (duration > 0) Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this).transition().duration(duration).call(schedule, t1, p0); +
27390 else Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this).call(zoom.transform, t1); +
27391 } +
27392 +
27393 function touchstarted() { +
27394 if (!filter.apply(this, arguments)) return; +
27395 var g = gesture(this, arguments), +
27396 touches = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].changedTouches, +
27397 started, +
27398 n = touches.length, i, t, p; +
27399 +
27400 Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["nopropagation"])(); +
27401 for (i = 0; i < n; ++i) { +
27402 t = touches[i], p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["touch"])(this, touches, t.identifier); +
27403 p = [p, this.__zoom.invert(p), t.identifier]; +
27404 if (!g.touch0) g.touch0 = p, started = true; +
27405 else if (!g.touch1) g.touch1 = p; +
27406 } +
27407 +
27408 // If this is a dbltap, reroute to the (optional) dblclick.zoom handler. +
27409 if (touchstarting) { +
27410 touchstarting = clearTimeout(touchstarting); +
27411 if (!g.touch1) { +
27412 g.end(); +
27413 p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["select"])(this).on("dblclick.zoom"); +
27414 if (p) p.apply(this, arguments); +
27415 return; +
27416 } +
27417 } +
27418 +
27419 if (started) { +
27420 touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); +
27421 Object(d3_transition__WEBPACK_IMPORTED_MODULE_4__["interrupt"])(this); +
27422 g.start(); +
27423 } +
27424 } +
27425 +
27426 function touchmoved() { +
27427 var g = gesture(this, arguments), +
27428 touches = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].changedTouches, +
27429 n = touches.length, i, t, p, l; +
27430 +
27431 Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["default"])(); +
27432 if (touchstarting) touchstarting = clearTimeout(touchstarting); +
27433 for (i = 0; i < n; ++i) { +
27434 t = touches[i], p = Object(d3_selection__WEBPACK_IMPORTED_MODULE_3__["touch"])(this, touches, t.identifier); +
27435 if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; +
27436 else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; +
27437 } +
27438 t = g.that.__zoom; +
27439 if (g.touch1) { +
27440 var p0 = g.touch0[0], l0 = g.touch0[1], +
27441 p1 = g.touch1[0], l1 = g.touch1[1], +
27442 dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, +
27443 dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; +
27444 t = scale(t, Math.sqrt(dp / dl)); +
27445 p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; +
27446 l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; +
27447 } +
27448 else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; +
27449 else return; +
27450 g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent)); +
27451 } +
27452 +
27453 function touchended() { +
27454 var g = gesture(this, arguments), +
27455 touches = d3_selection__WEBPACK_IMPORTED_MODULE_3__["event"].changedTouches, +
27456 n = touches.length, i, t; +
27457 +
27458 Object(_noevent__WEBPACK_IMPORTED_MODULE_8__["nopropagation"])(); +
27459 if (touchending) clearTimeout(touchending); +
27460 touchending = setTimeout(function() { touchending = null; }, touchDelay); +
27461 for (i = 0; i < n; ++i) { +
27462 t = touches[i]; +
27463 if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; +
27464 else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; +
27465 } +
27466 if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; +
27467 if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); +
27468 else g.end(); +
27469 } +
27470 +
27471 zoom.wheelDelta = function(_) { +
27472 return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])(+_), zoom) : wheelDelta; +
27473 }; +
27474 +
27475 zoom.filter = function(_) { +
27476 return arguments.length ? (filter = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])(!!_), zoom) : filter; +
27477 }; +
27478 +
27479 zoom.touchable = function(_) { +
27480 return arguments.length ? (touchable = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])(!!_), zoom) : touchable; +
27481 }; +
27482 +
27483 zoom.extent = function(_) { +
27484 return arguments.length ? (extent = typeof _ === "function" ? _ : Object(_constant__WEBPACK_IMPORTED_MODULE_5__["default"])([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; +
27485 }; +
27486 +
27487 zoom.scaleExtent = function(_) { +
27488 return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]]; +
27489 }; +
27490 +
27491 zoom.translateExtent = function(_) { +
27492 return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]]; +
27493 }; +
27494 +
27495 zoom.constrain = function(_) { +
27496 return arguments.length ? (constrain = _, zoom) : constrain; +
27497 }; +
27498 +
27499 zoom.duration = function(_) { +
27500 return arguments.length ? (duration = +_, zoom) : duration; +
27501 }; +
27502 +
27503 zoom.interpolate = function(_) { +
27504 return arguments.length ? (interpolate = _, zoom) : interpolate; +
27505 }; +
27506 +
27507 zoom.on = function() { +
27508 var value = listeners.on.apply(listeners, arguments); +
27509 return value === listeners ? zoom : value; +
27510 }; +
27511 +
27512 zoom.clickDistance = function(_) { +
27513 return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); +
27514 }; +
27515 +
27516 return zoom; +
27517}); +
27518 +
27519 +
27520/***/ }), +
27521 +
27522/***/ "./node_modules/d3/dist/package.js": +
27523/*!*****************************************!*\ +
27524 !*** ./node_modules/d3/dist/package.js ***! +
27525 \*****************************************/ +
27526/*! exports provided: name, version, description, keywords, homepage, license, author, main, unpkg, jsdelivr, module, repository, scripts, devDependencies, dependencies */ +
27527/***/ (function(module, __webpack_exports__, __webpack_require__) { +
27528 +
27529"use strict"; +
27530__webpack_require__.r(__webpack_exports__); +
27531/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "name", function() { return name; }); +
27532/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "version", function() { return version; }); +
27533/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "description", function() { return description; }); +
27534/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keywords", function() { return keywords; }); +
27535/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "homepage", function() { return homepage; }); +
27536/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "license", function() { return license; }); +
27537/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "author", function() { return author; }); +
27538/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "main", function() { return main; }); +
27539/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unpkg", function() { return unpkg; }); +
27540/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "jsdelivr", function() { return jsdelivr; }); +
27541/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "module", function() { return module; }); +
27542/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repository", function() { return repository; }); +
27543/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scripts", function() { return scripts; }); +
27544/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "devDependencies", function() { return devDependencies; }); +
27545/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dependencies", function() { return dependencies; }); +
27546var name = "d3"; +
27547var version = "5.7.0"; +
27548var description = "Data-Driven Documents"; +
27549var keywords = ["dom","visualization","svg","animation","canvas"]; +
27550var homepage = "https://d3js.org"; +
27551var license = "BSD-3-Clause"; +
27552var author = {"name":"Mike Bostock","url":"https://bost.ocks.org/mike"}; +
27553var main = "dist/d3.node.js"; +
27554var unpkg = "dist/d3.min.js"; +
27555var jsdelivr = "dist/d3.min.js"; +
27556var module = "index.js"; +
27557var repository = {"type":"git","url":"https://github.com/d3/d3.git"}; +
27558var scripts = {"pretest":"rimraf dist && mkdir dist && json2module package.json > dist/package.js && node rollup.node","test":"tape 'test/**/*-test.js'","prepublishOnly":"yarn test && rollup -c","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \"d3 ${npm_package_version}\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \"${npm_package_version}\" && git tag -am \"${npm_package_version}\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js"}; +
27559var devDependencies = {"json2module":"0.0","rimraf":"2","rollup":"0.64","rollup-plugin-ascii":"0.0","rollup-plugin-node-resolve":"3","rollup-plugin-terser":"1","tape":"4"}; +
27560var dependencies = {"d3-array":"1","d3-axis":"1","d3-brush":"1","d3-chord":"1","d3-collection":"1","d3-color":"1","d3-contour":"1","d3-dispatch":"1","d3-drag":"1","d3-dsv":"1","d3-ease":"1","d3-fetch":"1","d3-force":"1","d3-format":"1","d3-geo":"1","d3-hierarchy":"1","d3-interpolate":"1","d3-path":"1","d3-polygon":"1","d3-quadtree":"1","d3-random":"1","d3-scale":"2","d3-scale-chromatic":"1","d3-selection":"1","d3-shape":"1","d3-time":"1","d3-time-format":"2","d3-timer":"1","d3-transition":"1","d3-voronoi":"1","d3-zoom":"1"}; +
27561 +
27562 +
27563/***/ }), +
27564 +
27565/***/ "./node_modules/d3/index.js": +
27566/*!**********************************!*\ +
27567 !*** ./node_modules/d3/index.js ***! +
27568 \**********************************/ +
27569/*! exports provided: version, bisect, bisectRight, bisectLeft, ascending, bisector, cross, descending, deviation, extent, histogram, thresholdFreedmanDiaconis, thresholdScott, thresholdSturges, max, mean, median, merge, min, pairs, permute, quantile, range, scan, shuffle, sum, ticks, tickIncrement, tickStep, transpose, variance, zip, axisTop, axisRight, axisBottom, axisLeft, brush, brushX, brushY, brushSelection, chord, ribbon, nest, set, map, keys, values, entries, color, rgb, hsl, lab, hcl, lch, gray, cubehelix, contours, contourDensity, dispatch, drag, dragDisable, dragEnable, dsvFormat, csvParse, csvParseRows, csvFormat, csvFormatRows, tsvParse, tsvParseRows, tsvFormat, tsvFormatRows, easeLinear, easeQuad, easeQuadIn, easeQuadOut, easeQuadInOut, easeCubic, easeCubicIn, easeCubicOut, easeCubicInOut, easePoly, easePolyIn, easePolyOut, easePolyInOut, easeSin, easeSinIn, easeSinOut, easeSinInOut, easeExp, easeExpIn, easeExpOut, easeExpInOut, easeCircle, easeCircleIn, easeCircleOut, easeCircleInOut, easeBounce, easeBounceIn, easeBounceOut, easeBounceInOut, easeBack, easeBackIn, easeBackOut, easeBackInOut, easeElastic, easeElasticIn, easeElasticOut, easeElasticInOut, blob, buffer, dsv, csv, tsv, image, json, text, xml, html, svg, forceCenter, forceCollide, forceLink, forceManyBody, forceRadial, forceSimulation, forceX, forceY, formatDefaultLocale, format, formatPrefix, formatLocale, formatSpecifier, precisionFixed, precisionPrefix, precisionRound, geoArea, geoBounds, geoCentroid, geoCircle, geoClipAntimeridian, geoClipCircle, geoClipExtent, geoClipRectangle, geoContains, geoDistance, geoGraticule, geoGraticule10, geoInterpolate, geoLength, geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEqualAreaRaw, geoAzimuthalEquidistant, geoAzimuthalEquidistantRaw, geoConicConformal, geoConicConformalRaw, geoConicEqualArea, geoConicEqualAreaRaw, geoConicEquidistant, geoConicEquidistantRaw, geoEqualEarth, geoEqualEarthRaw, geoEquirectangular, geoEquirectangularRaw, geoGnomonic, geoGnomonicRaw, geoIdentity, geoProjection, geoProjectionMutator, geoMercator, geoMercatorRaw, geoNaturalEarth1, geoNaturalEarth1Raw, geoOrthographic, geoOrthographicRaw, geoStereographic, geoStereographicRaw, geoTransverseMercator, geoTransverseMercatorRaw, geoRotation, geoStream, geoTransform, cluster, hierarchy, pack, packSiblings, packEnclose, partition, stratify, tree, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify, interpolate, interpolateArray, interpolateBasis, interpolateBasisClosed, interpolateDate, interpolateDiscrete, interpolateHue, interpolateNumber, interpolateObject, interpolateRound, interpolateString, interpolateTransformCss, interpolateTransformSvg, interpolateZoom, interpolateRgb, interpolateRgbBasis, interpolateRgbBasisClosed, interpolateHsl, interpolateHslLong, interpolateLab, interpolateHcl, interpolateHclLong, interpolateCubehelix, interpolateCubehelixLong, piecewise, quantize, path, polygonArea, polygonCentroid, polygonHull, polygonContains, polygonLength, quadtree, randomUniform, randomNormal, randomLogNormal, randomBates, randomIrwinHall, randomExponential, scaleBand, scalePoint, scaleIdentity, scaleLinear, scaleLog, scaleOrdinal, scaleImplicit, scalePow, scaleSqrt, scaleQuantile, scaleQuantize, scaleThreshold, scaleTime, scaleUtc, scaleSequential, scaleDiverging, schemeCategory10, schemeAccent, schemeDark2, schemePaired, schemePastel1, schemePastel2, schemeSet1, schemeSet2, schemeSet3, interpolateBrBG, schemeBrBG, interpolatePRGn, schemePRGn, interpolatePiYG, schemePiYG, interpolatePuOr, schemePuOr, interpolateRdBu, schemeRdBu, interpolateRdGy, schemeRdGy, interpolateRdYlBu, schemeRdYlBu, interpolateRdYlGn, schemeRdYlGn, interpolateSpectral, schemeSpectral, interpolateBuGn, schemeBuGn, interpolateBuPu, schemeBuPu, interpolateGnBu, schemeGnBu, interpolateOrRd, schemeOrRd, interpolatePuBuGn, schemePuBuGn, interpolatePuBu, schemePuBu, interpolatePuRd, schemePuRd, interpolateRdPu, schemeRdPu, interpolateYlGnBu, schemeYlGnBu, interpolateYlGn, schemeYlGn, interpolateYlOrBr, schemeYlOrBr, interpolateYlOrRd, schemeYlOrRd, interpolateBlues, schemeBlues, interpolateGreens, schemeGreens, interpolateGreys, schemeGreys, interpolatePurples, schemePurples, interpolateReds, schemeReds, interpolateOranges, schemeOranges, interpolateCubehelixDefault, interpolateRainbow, interpolateWarm, interpolateCool, interpolateSinebow, interpolateViridis, interpolateMagma, interpolateInferno, interpolatePlasma, create, creator, local, matcher, mouse, namespace, namespaces, clientPoint, select, selectAll, selection, selector, selectorAll, style, touch, touches, window, event, customEvent, arc, area, line, pie, areaRadial, radialArea, lineRadial, radialLine, pointRadial, linkHorizontal, linkVertical, linkRadial, symbol, symbols, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye, curveBasisClosed, curveBasisOpen, curveBasis, curveBundle, curveCardinalClosed, curveCardinalOpen, curveCardinal, curveCatmullRomClosed, curveCatmullRomOpen, curveCatmullRom, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore, stack, stackOffsetExpand, stackOffsetDiverging, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderAscending, stackOrderDescending, stackOrderInsideOut, stackOrderNone, stackOrderReverse, timeInterval, timeMillisecond, timeMilliseconds, utcMillisecond, utcMilliseconds, timeSecond, timeSeconds, utcSecond, utcSeconds, timeMinute, timeMinutes, timeHour, timeHours, timeDay, timeDays, timeWeek, timeWeeks, timeSunday, timeSundays, timeMonday, timeMondays, timeTuesday, timeTuesdays, timeWednesday, timeWednesdays, timeThursday, timeThursdays, timeFriday, timeFridays, timeSaturday, timeSaturdays, timeMonth, timeMonths, timeYear, timeYears, utcMinute, utcMinutes, utcHour, utcHours, utcDay, utcDays, utcWeek, utcWeeks, utcSunday, utcSundays, utcMonday, utcMondays, utcTuesday, utcTuesdays, utcWednesday, utcWednesdays, utcThursday, utcThursdays, utcFriday, utcFridays, utcSaturday, utcSaturdays, utcMonth, utcMonths, utcYear, utcYears, timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale, isoFormat, isoParse, now, timer, timerFlush, timeout, interval, transition, active, interrupt, voronoi, zoom, zoomTransform, zoomIdentity */ +
27570/***/ (function(module, __webpack_exports__, __webpack_require__) { +
27571 +
27572"use strict"; +
27573__webpack_require__.r(__webpack_exports__); +
27574/* harmony import */ var _dist_package__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dist/package */ "./node_modules/d3/dist/package.js"); +
27575/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "version", function() { return _dist_package__WEBPACK_IMPORTED_MODULE_0__["version"]; }); +
27576 +
27577/* harmony import */ var d3_array__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-array */ "./node_modules/d3-array/src/index.js"); +
27578/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisect", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["bisect"]; }); +
27579 +
27580/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisectRight", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["bisectRight"]; }); +
27581 +
27582/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisectLeft", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["bisectLeft"]; }); +
27583 +
27584/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ascending", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["ascending"]; }); +
27585 +
27586/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bisector", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["bisector"]; }); +
27587 +
27588/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cross", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["cross"]; }); +
27589 +
27590/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "descending", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["descending"]; }); +
27591 +
27592/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "deviation", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["deviation"]; }); +
27593 +
27594/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "extent", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["extent"]; }); +
27595 +
27596/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "histogram", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["histogram"]; }); +
27597 +
27598/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdFreedmanDiaconis", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["thresholdFreedmanDiaconis"]; }); +
27599 +
27600/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdScott", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["thresholdScott"]; }); +
27601 +
27602/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "thresholdSturges", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["thresholdSturges"]; }); +
27603 +
27604/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["max"]; }); +
27605 +
27606/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mean", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["mean"]; }); +
27607 +
27608/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "median", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["median"]; }); +
27609 +
27610/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["merge"]; }); +
27611 +
27612/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["min"]; }); +
27613 +
27614/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["pairs"]; }); +
27615 +
27616/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "permute", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["permute"]; }); +
27617 +
27618/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quantile", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["quantile"]; }); +
27619 +
27620/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "range", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["range"]; }); +
27621 +
27622/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["scan"]; }); +
27623 +
27624/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shuffle", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["shuffle"]; }); +
27625 +
27626/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sum", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["sum"]; }); +
27627 +
27628/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ticks", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["ticks"]; }); +
27629 +
27630/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickIncrement", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["tickIncrement"]; }); +
27631 +
27632/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tickStep", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["tickStep"]; }); +
27633 +
27634/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transpose", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["transpose"]; }); +
27635 +
27636/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "variance", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["variance"]; }); +
27637 +
27638/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return d3_array__WEBPACK_IMPORTED_MODULE_1__["zip"]; }); +
27639 +
27640/* harmony import */ var d3_axis__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-axis */ "./node_modules/d3-axis/src/index.js"); +
27641/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisTop", function() { return d3_axis__WEBPACK_IMPORTED_MODULE_2__["axisTop"]; }); +
27642 +
27643/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisRight", function() { return d3_axis__WEBPACK_IMPORTED_MODULE_2__["axisRight"]; }); +
27644 +
27645/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisBottom", function() { return d3_axis__WEBPACK_IMPORTED_MODULE_2__["axisBottom"]; }); +
27646 +
27647/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "axisLeft", function() { return d3_axis__WEBPACK_IMPORTED_MODULE_2__["axisLeft"]; }); +
27648 +
27649/* harmony import */ var d3_brush__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-brush */ "./node_modules/d3-brush/src/index.js"); +
27650/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brush", function() { return d3_brush__WEBPACK_IMPORTED_MODULE_3__["brush"]; }); +
27651 +
27652/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushX", function() { return d3_brush__WEBPACK_IMPORTED_MODULE_3__["brushX"]; }); +
27653 +
27654/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushY", function() { return d3_brush__WEBPACK_IMPORTED_MODULE_3__["brushY"]; }); +
27655 +
27656/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brushSelection", function() { return d3_brush__WEBPACK_IMPORTED_MODULE_3__["brushSelection"]; }); +
27657 +
27658/* harmony import */ var d3_chord__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-chord */ "./node_modules/d3-chord/src/index.js"); +
27659/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "chord", function() { return d3_chord__WEBPACK_IMPORTED_MODULE_4__["chord"]; }); +
27660 +
27661/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ribbon", function() { return d3_chord__WEBPACK_IMPORTED_MODULE_4__["ribbon"]; }); +
27662 +
27663/* harmony import */ var d3_collection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-collection */ "./node_modules/d3-collection/src/index.js"); +
27664/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "nest", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["nest"]; }); +
27665 +
27666/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "set", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["set"]; }); +
27667 +
27668/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["map"]; }); +
27669 +
27670/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "keys", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["keys"]; }); +
27671 +
27672/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "values", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["values"]; }); +
27673 +
27674/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "entries", function() { return d3_collection__WEBPACK_IMPORTED_MODULE_5__["entries"]; }); +
27675 +
27676/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-color */ "./node_modules/d3-color/src/index.js"); +
27677/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "color", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["color"]; }); +
27678 +
27679/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rgb", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["rgb"]; }); +
27680 +
27681/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hsl", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["hsl"]; }); +
27682 +
27683/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lab", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["lab"]; }); +
27684 +
27685/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hcl", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["hcl"]; }); +
27686 +
27687/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lch", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["lch"]; }); +
27688 +
27689/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "gray", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["gray"]; }); +
27690 +
27691/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cubehelix", function() { return d3_color__WEBPACK_IMPORTED_MODULE_6__["cubehelix"]; }); +
27692 +
27693/* harmony import */ var d3_contour__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-contour */ "./node_modules/d3-contour/src/index.js"); +
27694/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "contours", function() { return d3_contour__WEBPACK_IMPORTED_MODULE_7__["contours"]; }); +
27695 +
27696/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "contourDensity", function() { return d3_contour__WEBPACK_IMPORTED_MODULE_7__["contourDensity"]; }); +
27697 +
27698/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/index.js"); +
27699/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return d3_dispatch__WEBPACK_IMPORTED_MODULE_8__["dispatch"]; }); +
27700 +
27701/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-drag */ "./node_modules/d3-drag/src/index.js"); +
27702/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drag", function() { return d3_drag__WEBPACK_IMPORTED_MODULE_9__["drag"]; }); +
27703 +
27704/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragDisable", function() { return d3_drag__WEBPACK_IMPORTED_MODULE_9__["dragDisable"]; }); +
27705 +
27706/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dragEnable", function() { return d3_drag__WEBPACK_IMPORTED_MODULE_9__["dragEnable"]; }); +
27707 +
27708/* harmony import */ var d3_dsv__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-dsv */ "./node_modules/d3-dsv/src/index.js"); +
27709/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dsvFormat", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["dsvFormat"]; }); +
27710 +
27711/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvParse", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["csvParse"]; }); +
27712 +
27713/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvParseRows", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["csvParseRows"]; }); +
27714 +
27715/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormat", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["csvFormat"]; }); +
27716 +
27717/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csvFormatRows", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["csvFormatRows"]; }); +
27718 +
27719/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvParse", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["tsvParse"]; }); +
27720 +
27721/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvParseRows", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["tsvParseRows"]; }); +
27722 +
27723/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormat", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["tsvFormat"]; }); +
27724 +
27725/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsvFormatRows", function() { return d3_dsv__WEBPACK_IMPORTED_MODULE_10__["tsvFormatRows"]; }); +
27726 +
27727/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! d3-ease */ "./node_modules/d3-ease/src/index.js"); +
27728/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeLinear", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeLinear"]; }); +
27729 +
27730/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuad", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeQuad"]; }); +
27731 +
27732/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeQuadIn"]; }); +
27733 +
27734/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeQuadOut"]; }); +
27735 +
27736/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeQuadInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeQuadInOut"]; }); +
27737 +
27738/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubic", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCubic"]; }); +
27739 +
27740/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCubicIn"]; }); +
27741 +
27742/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCubicOut"]; }); +
27743 +
27744/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCubicInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCubicInOut"]; }); +
27745 +
27746/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePoly", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easePoly"]; }); +
27747 +
27748/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easePolyIn"]; }); +
27749 +
27750/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easePolyOut"]; }); +
27751 +
27752/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easePolyInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easePolyInOut"]; }); +
27753 +
27754/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSin", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeSin"]; }); +
27755 +
27756/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeSinIn"]; }); +
27757 +
27758/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeSinOut"]; }); +
27759 +
27760/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeSinInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeSinInOut"]; }); +
27761 +
27762/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExp", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeExp"]; }); +
27763 +
27764/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeExpIn"]; }); +
27765 +
27766/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeExpOut"]; }); +
27767 +
27768/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeExpInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeExpInOut"]; }); +
27769 +
27770/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircle", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCircle"]; }); +
27771 +
27772/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCircleIn"]; }); +
27773 +
27774/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCircleOut"]; }); +
27775 +
27776/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeCircleInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeCircleInOut"]; }); +
27777 +
27778/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounce", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBounce"]; }); +
27779 +
27780/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBounceIn"]; }); +
27781 +
27782/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBounceOut"]; }); +
27783 +
27784/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBounceInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBounceInOut"]; }); +
27785 +
27786/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBack", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBack"]; }); +
27787 +
27788/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBackIn"]; }); +
27789 +
27790/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBackOut"]; }); +
27791 +
27792/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeBackInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeBackInOut"]; }); +
27793 +
27794/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElastic", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeElastic"]; }); +
27795 +
27796/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticIn", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeElasticIn"]; }); +
27797 +
27798/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeElasticOut"]; }); +
27799 +
27800/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "easeElasticInOut", function() { return d3_ease__WEBPACK_IMPORTED_MODULE_11__["easeElasticInOut"]; }); +
27801 +
27802/* harmony import */ var d3_fetch__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! d3-fetch */ "./node_modules/d3-fetch/src/index.js"); +
27803/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "blob", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["blob"]; }); +
27804 +
27805/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["buffer"]; }); +
27806 +
27807/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dsv", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["dsv"]; }); +
27808 +
27809/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "csv", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["csv"]; }); +
27810 +
27811/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tsv", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["tsv"]; }); +
27812 +
27813/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "image", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["image"]; }); +
27814 +
27815/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "json", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["json"]; }); +
27816 +
27817/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "text", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["text"]; }); +
27818 +
27819/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "xml", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["xml"]; }); +
27820 +
27821/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "html", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["html"]; }); +
27822 +
27823/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "svg", function() { return d3_fetch__WEBPACK_IMPORTED_MODULE_12__["svg"]; }); +
27824 +
27825/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! d3-force */ "./node_modules/d3-force/src/index.js"); +
27826/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceCenter", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceCenter"]; }); +
27827 +
27828/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceCollide", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceCollide"]; }); +
27829 +
27830/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceLink", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceLink"]; }); +
27831 +
27832/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceManyBody", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceManyBody"]; }); +
27833 +
27834/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceRadial", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceRadial"]; }); +
27835 +
27836/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceSimulation", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceSimulation"]; }); +
27837 +
27838/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceX", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceX"]; }); +
27839 +
27840/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceY", function() { return d3_force__WEBPACK_IMPORTED_MODULE_13__["forceY"]; }); +
27841 +
27842/* harmony import */ var d3_format__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! d3-format */ "./node_modules/d3-format/src/index.js"); +
27843/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatDefaultLocale", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["formatDefaultLocale"]; }); +
27844 +
27845/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "format", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["format"]; }); +
27846 +
27847/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatPrefix", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["formatPrefix"]; }); +
27848 +
27849/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatLocale", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["formatLocale"]; }); +
27850 +
27851/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatSpecifier", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["formatSpecifier"]; }); +
27852 +
27853/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionFixed", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["precisionFixed"]; }); +
27854 +
27855/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionPrefix", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["precisionPrefix"]; }); +
27856 +
27857/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "precisionRound", function() { return d3_format__WEBPACK_IMPORTED_MODULE_14__["precisionRound"]; }); +
27858 +
27859/* harmony import */ var d3_geo__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! d3-geo */ "./node_modules/d3-geo/src/index.js"); +
27860/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoArea", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoArea"]; }); +
27861 +
27862/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoBounds", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoBounds"]; }); +
27863 +
27864/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoCentroid", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoCentroid"]; }); +
27865 +
27866/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoCircle", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoCircle"]; }); +
27867 +
27868/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipAntimeridian", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoClipAntimeridian"]; }); +
27869 +
27870/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipCircle", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoClipCircle"]; }); +
27871 +
27872/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipExtent", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoClipExtent"]; }); +
27873 +
27874/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoClipRectangle", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoClipRectangle"]; }); +
27875 +
27876/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoContains", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoContains"]; }); +
27877 +
27878/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoDistance", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoDistance"]; }); +
27879 +
27880/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGraticule", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoGraticule"]; }); +
27881 +
27882/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGraticule10", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoGraticule10"]; }); +
27883 +
27884/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoInterpolate", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoInterpolate"]; }); +
27885 +
27886/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoLength", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoLength"]; }); +
27887 +
27888/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoPath", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoPath"]; }); +
27889 +
27890/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAlbers", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAlbers"]; }); +
27891 +
27892/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAlbersUsa", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAlbersUsa"]; }); +
27893 +
27894/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualArea", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAzimuthalEqualArea"]; }); +
27895 +
27896/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualAreaRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAzimuthalEqualAreaRaw"]; }); +
27897 +
27898/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistant", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAzimuthalEquidistant"]; }); +
27899 +
27900/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistantRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoAzimuthalEquidistantRaw"]; }); +
27901 +
27902/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicConformal", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicConformal"]; }); +
27903 +
27904/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicConformalRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicConformalRaw"]; }); +
27905 +
27906/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualArea", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicEqualArea"]; }); +
27907 +
27908/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualAreaRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicEqualAreaRaw"]; }); +
27909 +
27910/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistant", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicEquidistant"]; }); +
27911 +
27912/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistantRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoConicEquidistantRaw"]; }); +
27913 +
27914/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEqualEarth", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoEqualEarth"]; }); +
27915 +
27916/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEqualEarthRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoEqualEarthRaw"]; }); +
27917 +
27918/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangular", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoEquirectangular"]; }); +
27919 +
27920/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangularRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoEquirectangularRaw"]; }); +
27921 +
27922/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGnomonic", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoGnomonic"]; }); +
27923 +
27924/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoGnomonicRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoGnomonicRaw"]; }); +
27925 +
27926/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoIdentity", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoIdentity"]; }); +
27927 +
27928/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoProjection", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoProjection"]; }); +
27929 +
27930/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoProjectionMutator", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoProjectionMutator"]; }); +
27931 +
27932/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoMercator", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoMercator"]; }); +
27933 +
27934/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoMercatorRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoMercatorRaw"]; }); +
27935 +
27936/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoNaturalEarth1", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoNaturalEarth1"]; }); +
27937 +
27938/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoNaturalEarth1Raw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoNaturalEarth1Raw"]; }); +
27939 +
27940/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoOrthographic", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoOrthographic"]; }); +
27941 +
27942/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoOrthographicRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoOrthographicRaw"]; }); +
27943 +
27944/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStereographic", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoStereographic"]; }); +
27945 +
27946/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStereographicRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoStereographicRaw"]; }); +
27947 +
27948/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercator", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoTransverseMercator"]; }); +
27949 +
27950/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercatorRaw", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoTransverseMercatorRaw"]; }); +
27951 +
27952/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoRotation", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoRotation"]; }); +
27953 +
27954/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoStream", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoStream"]; }); +
27955 +
27956/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "geoTransform", function() { return d3_geo__WEBPACK_IMPORTED_MODULE_15__["geoTransform"]; }); +
27957 +
27958/* harmony import */ var d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! d3-hierarchy */ "./node_modules/d3-hierarchy/src/index.js"); +
27959/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cluster", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["cluster"]; }); +
27960 +
27961/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hierarchy", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["hierarchy"]; }); +
27962 +
27963/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pack", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["pack"]; }); +
27964 +
27965/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "packSiblings", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["packSiblings"]; }); +
27966 +
27967/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "packEnclose", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["packEnclose"]; }); +
27968 +
27969/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["partition"]; }); +
27970 +
27971/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stratify", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["stratify"]; }); +
27972 +
27973/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tree", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["tree"]; }); +
27974 +
27975/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemap", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemap"]; }); +
27976 +
27977/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapBinary", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapBinary"]; }); +
27978 +
27979/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapDice", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapDice"]; }); +
27980 +
27981/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSlice", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapSlice"]; }); +
27982 +
27983/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSliceDice", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapSliceDice"]; }); +
27984 +
27985/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapSquarify", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapSquarify"]; }); +
27986 +
27987/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "treemapResquarify", function() { return d3_hierarchy__WEBPACK_IMPORTED_MODULE_16__["treemapResquarify"]; }); +
27988 +
27989/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! d3-interpolate */ "./node_modules/d3-interpolate/src/index.js"); +
27990/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolate", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolate"]; }); +
27991 +
27992/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateArray", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateArray"]; }); +
27993 +
27994/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBasis", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateBasis"]; }); +
27995 +
27996/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBasisClosed", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateBasisClosed"]; }); +
27997 +
27998/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateDate", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateDate"]; }); +
27999 +
28000/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateDiscrete", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateDiscrete"]; }); +
28001 +
28002/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHue", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHue"]; }); +
28003 +
28004/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateNumber", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateNumber"]; }); +
28005 +
28006/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateObject", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateObject"]; }); +
28007 +
28008/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRound", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateRound"]; }); +
28009 +
28010/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateString", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateString"]; }); +
28011 +
28012/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformCss", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateTransformCss"]; }); +
28013 +
28014/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformSvg", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateTransformSvg"]; }); +
28015 +
28016/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateZoom", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateZoom"]; }); +
28017 +
28018/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgb", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateRgb"]; }); +
28019 +
28020/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasis", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateRgbBasis"]; }); +
28021 +
28022/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasisClosed", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateRgbBasisClosed"]; }); +
28023 +
28024/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHsl", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHsl"]; }); +
28025 +
28026/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHslLong", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHslLong"]; }); +
28027 +
28028/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateLab", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateLab"]; }); +
28029 +
28030/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHcl", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHcl"]; }); +
28031 +
28032/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateHclLong", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateHclLong"]; }); +
28033 +
28034/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelix", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateCubehelix"]; }); +
28035 +
28036/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixLong", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["interpolateCubehelixLong"]; }); +
28037 +
28038/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "piecewise", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["piecewise"]; }); +
28039 +
28040/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quantize", function() { return d3_interpolate__WEBPACK_IMPORTED_MODULE_17__["quantize"]; }); +
28041 +
28042/* harmony import */ var d3_path__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! d3-path */ "./node_modules/d3-path/src/index.js"); +
28043/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "path", function() { return d3_path__WEBPACK_IMPORTED_MODULE_18__["path"]; }); +
28044 +
28045/* harmony import */ var d3_polygon__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! d3-polygon */ "./node_modules/d3-polygon/src/index.js"); +
28046/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonArea", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonArea"]; }); +
28047 +
28048/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonCentroid", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonCentroid"]; }); +
28049 +
28050/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonHull", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonHull"]; }); +
28051 +
28052/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonContains", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonContains"]; }); +
28053 +
28054/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "polygonLength", function() { return d3_polygon__WEBPACK_IMPORTED_MODULE_19__["polygonLength"]; }); +
28055 +
28056/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! d3-quadtree */ "./node_modules/d3-quadtree/src/index.js"); +
28057/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "quadtree", function() { return d3_quadtree__WEBPACK_IMPORTED_MODULE_20__["quadtree"]; }); +
28058 +
28059/* harmony import */ var d3_random__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! d3-random */ "./node_modules/d3-random/src/index.js"); +
28060/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomUniform", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomUniform"]; }); +
28061 +
28062/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomNormal", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomNormal"]; }); +
28063 +
28064/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomLogNormal", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomLogNormal"]; }); +
28065 +
28066/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomBates", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomBates"]; }); +
28067 +
28068/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomIrwinHall", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomIrwinHall"]; }); +
28069 +
28070/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "randomExponential", function() { return d3_random__WEBPACK_IMPORTED_MODULE_21__["randomExponential"]; }); +
28071 +
28072/* harmony import */ var d3_scale__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! d3-scale */ "./node_modules/d3-scale/src/index.js"); +
28073/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleBand", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleBand"]; }); +
28074 +
28075/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scalePoint", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scalePoint"]; }); +
28076 +
28077/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleIdentity", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleIdentity"]; }); +
28078 +
28079/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleLinear", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleLinear"]; }); +
28080 +
28081/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleLog", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleLog"]; }); +
28082 +
28083/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleOrdinal", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleOrdinal"]; }); +
28084 +
28085/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleImplicit", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleImplicit"]; }); +
28086 +
28087/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scalePow", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scalePow"]; }); +
28088 +
28089/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSqrt", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSqrt"]; }); +
28090 +
28091/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleQuantile", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleQuantile"]; }); +
28092 +
28093/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleQuantize", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleQuantize"]; }); +
28094 +
28095/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleThreshold", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleThreshold"]; }); +
28096 +
28097/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleTime", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleTime"]; }); +
28098 +
28099/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleUtc", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleUtc"]; }); +
28100 +
28101/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleSequential", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleSequential"]; }); +
28102 +
28103/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scaleDiverging", function() { return d3_scale__WEBPACK_IMPORTED_MODULE_22__["scaleDiverging"]; }); +
28104 +
28105/* harmony import */ var d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! d3-scale-chromatic */ "./node_modules/d3-scale-chromatic/src/index.js"); +
28106/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeCategory10", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeCategory10"]; }); +
28107 +
28108/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeAccent", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeAccent"]; }); +
28109 +
28110/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeDark2", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeDark2"]; }); +
28111 +
28112/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePaired", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePaired"]; }); +
28113 +
28114/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePastel1", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePastel1"]; }); +
28115 +
28116/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePastel2", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePastel2"]; }); +
28117 +
28118/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet1", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeSet1"]; }); +
28119 +
28120/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet2", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeSet2"]; }); +
28121 +
28122/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSet3", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeSet3"]; }); +
28123 +
28124/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBrBG", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateBrBG"]; }); +
28125 +
28126/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBrBG", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeBrBG"]; }); +
28127 +
28128/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePRGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePRGn"]; }); +
28129 +
28130/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePRGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePRGn"]; }); +
28131 +
28132/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePiYG", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePiYG"]; }); +
28133 +
28134/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePiYG", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePiYG"]; }); +
28135 +
28136/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuOr", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePuOr"]; }); +
28137 +
28138/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuOr", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePuOr"]; }); +
28139 +
28140/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdBu"]; }); +
28141 +
28142/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdBu"]; }); +
28143 +
28144/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdGy", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdGy"]; }); +
28145 +
28146/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdGy", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdGy"]; }); +
28147 +
28148/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdYlBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdYlBu"]; }); +
28149 +
28150/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdYlBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdYlBu"]; }); +
28151 +
28152/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdYlGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdYlGn"]; }); +
28153 +
28154/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdYlGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdYlGn"]; }); +
28155 +
28156/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateSpectral", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateSpectral"]; }); +
28157 +
28158/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeSpectral", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeSpectral"]; }); +
28159 +
28160/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBuGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateBuGn"]; }); +
28161 +
28162/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBuGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeBuGn"]; }); +
28163 +
28164/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBuPu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateBuPu"]; }); +
28165 +
28166/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBuPu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeBuPu"]; }); +
28167 +
28168/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGnBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateGnBu"]; }); +
28169 +
28170/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGnBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeGnBu"]; }); +
28171 +
28172/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateOrRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateOrRd"]; }); +
28173 +
28174/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeOrRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeOrRd"]; }); +
28175 +
28176/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuBuGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePuBuGn"]; }); +
28177 +
28178/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuBuGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePuBuGn"]; }); +
28179 +
28180/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePuBu"]; }); +
28181 +
28182/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePuBu"]; }); +
28183 +
28184/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePuRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePuRd"]; }); +
28185 +
28186/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePuRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePuRd"]; }); +
28187 +
28188/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRdPu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRdPu"]; }); +
28189 +
28190/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeRdPu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeRdPu"]; }); +
28191 +
28192/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlGnBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateYlGnBu"]; }); +
28193 +
28194/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlGnBu", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeYlGnBu"]; }); +
28195 +
28196/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateYlGn"]; }); +
28197 +
28198/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlGn", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeYlGn"]; }); +
28199 +
28200/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlOrBr", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateYlOrBr"]; }); +
28201 +
28202/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlOrBr", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeYlOrBr"]; }); +
28203 +
28204/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateYlOrRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateYlOrRd"]; }); +
28205 +
28206/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeYlOrRd", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeYlOrRd"]; }); +
28207 +
28208/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateBlues", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateBlues"]; }); +
28209 +
28210/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeBlues", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeBlues"]; }); +
28211 +
28212/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGreens", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateGreens"]; }); +
28213 +
28214/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGreens", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeGreens"]; }); +
28215 +
28216/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateGreys", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateGreys"]; }); +
28217 +
28218/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeGreys", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeGreys"]; }); +
28219 +
28220/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePurples", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePurples"]; }); +
28221 +
28222/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemePurples", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemePurples"]; }); +
28223 +
28224/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateReds", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateReds"]; }); +
28225 +
28226/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeReds", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeReds"]; }); +
28227 +
28228/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateOranges", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateOranges"]; }); +
28229 +
28230/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "schemeOranges", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["schemeOranges"]; }); +
28231 +
28232/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixDefault", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateCubehelixDefault"]; }); +
28233 +
28234/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateRainbow", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateRainbow"]; }); +
28235 +
28236/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateWarm", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateWarm"]; }); +
28237 +
28238/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateCool", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateCool"]; }); +
28239 +
28240/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateSinebow", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateSinebow"]; }); +
28241 +
28242/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateViridis", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateViridis"]; }); +
28243 +
28244/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateMagma", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateMagma"]; }); +
28245 +
28246/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolateInferno", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolateInferno"]; }); +
28247 +
28248/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interpolatePlasma", function() { return d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_23__["interpolatePlasma"]; }); +
28249 +
28250/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! d3-selection */ "./node_modules/d3-selection/src/index.js"); +
28251/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "create", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["create"]; }); +
28252 +
28253/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "creator", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["creator"]; }); +
28254 +
28255/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "local", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["local"]; }); +
28256 +
28257/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "matcher", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["matcher"]; }); +
28258 +
28259/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouse", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["mouse"]; }); +
28260 +
28261/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "namespace", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["namespace"]; }); +
28262 +
28263/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "namespaces", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["namespaces"]; }); +
28264 +
28265/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "clientPoint", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["clientPoint"]; }); +
28266 +
28267/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "select", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["select"]; }); +
28268 +
28269/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectAll", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["selectAll"]; }); +
28270 +
28271/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selection", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["selection"]; }); +
28272 +
28273/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selector", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["selector"]; }); +
28274 +
28275/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "selectorAll", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["selectorAll"]; }); +
28276 +
28277/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "style", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["style"]; }); +
28278 +
28279/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touch", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["touch"]; }); +
28280 +
28281/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touches", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["touches"]; }); +
28282 +
28283/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["window"]; }); +
28284 +
28285/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "event", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["event"]; }); +
28286 +
28287/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "customEvent", function() { return d3_selection__WEBPACK_IMPORTED_MODULE_24__["customEvent"]; }); +
28288 +
28289/* harmony import */ var d3_shape__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! d3-shape */ "./node_modules/d3-shape/src/index.js"); +
28290/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "arc", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["arc"]; }); +
28291 +
28292/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "area", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["area"]; }); +
28293 +
28294/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "line", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["line"]; }); +
28295 +
28296/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pie", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["pie"]; }); +
28297 +
28298/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "areaRadial", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["areaRadial"]; }); +
28299 +
28300/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "radialArea", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["radialArea"]; }); +
28301 +
28302/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lineRadial", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["lineRadial"]; }); +
28303 +
28304/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "radialLine", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["radialLine"]; }); +
28305 +
28306/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pointRadial", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["pointRadial"]; }); +
28307 +
28308/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkHorizontal", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["linkHorizontal"]; }); +
28309 +
28310/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkVertical", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["linkVertical"]; }); +
28311 +
28312/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "linkRadial", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["linkRadial"]; }); +
28313 +
28314/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbol", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbol"]; }); +
28315 +
28316/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbols", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbols"]; }); +
28317 +
28318/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolCircle", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolCircle"]; }); +
28319 +
28320/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolCross", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolCross"]; }); +
28321 +
28322/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolDiamond", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolDiamond"]; }); +
28323 +
28324/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolSquare", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolSquare"]; }); +
28325 +
28326/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolStar", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolStar"]; }); +
28327 +
28328/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolTriangle", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolTriangle"]; }); +
28329 +
28330/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "symbolWye", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["symbolWye"]; }); +
28331 +
28332/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasisClosed", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveBasisClosed"]; }); +
28333 +
28334/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasisOpen", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveBasisOpen"]; }); +
28335 +
28336/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBasis", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveBasis"]; }); +
28337 +
28338/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveBundle", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveBundle"]; }); +
28339 +
28340/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinalClosed", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCardinalClosed"]; }); +
28341 +
28342/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinalOpen", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCardinalOpen"]; }); +
28343 +
28344/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCardinal", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCardinal"]; }); +
28345 +
28346/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomClosed", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCatmullRomClosed"]; }); +
28347 +
28348/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomOpen", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCatmullRomOpen"]; }); +
28349 +
28350/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRom", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveCatmullRom"]; }); +
28351 +
28352/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveLinearClosed", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveLinearClosed"]; }); +
28353 +
28354/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveLinear", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveLinear"]; }); +
28355 +
28356/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneX", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveMonotoneX"]; }); +
28357 +
28358/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneY", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveMonotoneY"]; }); +
28359 +
28360/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveNatural", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveNatural"]; }); +
28361 +
28362/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStep", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveStep"]; }); +
28363 +
28364/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStepAfter", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveStepAfter"]; }); +
28365 +
28366/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "curveStepBefore", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["curveStepBefore"]; }); +
28367 +
28368/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stack", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stack"]; }); +
28369 +
28370/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetExpand", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetExpand"]; }); +
28371 +
28372/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetDiverging", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetDiverging"]; }); +
28373 +
28374/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetNone", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetNone"]; }); +
28375 +
28376/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetSilhouette", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetSilhouette"]; }); +
28377 +
28378/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOffsetWiggle", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOffsetWiggle"]; }); +
28379 +
28380/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderAscending", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderAscending"]; }); +
28381 +
28382/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderDescending", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderDescending"]; }); +
28383 +
28384/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderInsideOut", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderInsideOut"]; }); +
28385 +
28386/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderNone", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderNone"]; }); +
28387 +
28388/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackOrderReverse", function() { return d3_shape__WEBPACK_IMPORTED_MODULE_25__["stackOrderReverse"]; }); +
28389 +
28390/* harmony import */ var d3_time__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! d3-time */ "./node_modules/d3-time/src/index.js"); +
28391/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeInterval"]; }); +
28392 +
28393/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMillisecond", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMillisecond"]; }); +
28394 +
28395/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMilliseconds", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMilliseconds"]; }); +
28396 +
28397/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMillisecond", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMillisecond"]; }); +
28398 +
28399/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMilliseconds", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMilliseconds"]; }); +
28400 +
28401/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSecond", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSecond"]; }); +
28402 +
28403/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSeconds", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSeconds"]; }); +
28404 +
28405/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSecond", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSecond"]; }); +
28406 +
28407/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSeconds", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSeconds"]; }); +
28408 +
28409/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMinute", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMinute"]; }); +
28410 +
28411/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMinutes", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMinutes"]; }); +
28412 +
28413/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeHour", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeHour"]; }); +
28414 +
28415/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeHours", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeHours"]; }); +
28416 +
28417/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeDay", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeDay"]; }); +
28418 +
28419/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeDays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeDays"]; }); +
28420 +
28421/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWeek", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeWeek"]; }); +
28422 +
28423/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWeeks", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeWeeks"]; }); +
28424 +
28425/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSunday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSunday"]; }); +
28426 +
28427/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSundays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSundays"]; }); +
28428 +
28429/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMonday"]; }); +
28430 +
28431/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMondays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMondays"]; }); +
28432 +
28433/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeTuesday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeTuesday"]; }); +
28434 +
28435/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeTuesdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeTuesdays"]; }); +
28436 +
28437/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWednesday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeWednesday"]; }); +
28438 +
28439/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeWednesdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeWednesdays"]; }); +
28440 +
28441/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeThursday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeThursday"]; }); +
28442 +
28443/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeThursdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeThursdays"]; }); +
28444 +
28445/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFriday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeFriday"]; }); +
28446 +
28447/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFridays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeFridays"]; }); +
28448 +
28449/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSaturday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSaturday"]; }); +
28450 +
28451/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeSaturdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeSaturdays"]; }); +
28452 +
28453/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonth", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMonth"]; }); +
28454 +
28455/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeMonths", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeMonths"]; }); +
28456 +
28457/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeYear", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeYear"]; }); +
28458 +
28459/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeYears", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["timeYears"]; }); +
28460 +
28461/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMinute", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMinute"]; }); +
28462 +
28463/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMinutes", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMinutes"]; }); +
28464 +
28465/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcHour", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcHour"]; }); +
28466 +
28467/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcHours", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcHours"]; }); +
28468 +
28469/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcDay", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcDay"]; }); +
28470 +
28471/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcDays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcDays"]; }); +
28472 +
28473/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWeek", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcWeek"]; }); +
28474 +
28475/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWeeks", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcWeeks"]; }); +
28476 +
28477/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSunday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSunday"]; }); +
28478 +
28479/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSundays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSundays"]; }); +
28480 +
28481/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMonday"]; }); +
28482 +
28483/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMondays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMondays"]; }); +
28484 +
28485/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcTuesday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcTuesday"]; }); +
28486 +
28487/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcTuesdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcTuesdays"]; }); +
28488 +
28489/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWednesday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcWednesday"]; }); +
28490 +
28491/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcWednesdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcWednesdays"]; }); +
28492 +
28493/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcThursday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcThursday"]; }); +
28494 +
28495/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcThursdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcThursdays"]; }); +
28496 +
28497/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFriday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcFriday"]; }); +
28498 +
28499/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFridays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcFridays"]; }); +
28500 +
28501/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSaturday", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSaturday"]; }); +
28502 +
28503/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcSaturdays", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcSaturdays"]; }); +
28504 +
28505/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonth", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMonth"]; }); +
28506 +
28507/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcMonths", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcMonths"]; }); +
28508 +
28509/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcYear", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcYear"]; }); +
28510 +
28511/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcYears", function() { return d3_time__WEBPACK_IMPORTED_MODULE_26__["utcYears"]; }); +
28512 +
28513/* harmony import */ var d3_time_format__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! d3-time-format */ "./node_modules/d3-time-format/src/index.js"); +
28514/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormatDefaultLocale", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["timeFormatDefaultLocale"]; }); +
28515 +
28516/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormat", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["timeFormat"]; }); +
28517 +
28518/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeParse", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["timeParse"]; }); +
28519 +
28520/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcFormat", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["utcFormat"]; }); +
28521 +
28522/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "utcParse", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["utcParse"]; }); +
28523 +
28524/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeFormatLocale", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["timeFormatLocale"]; }); +
28525 +
28526/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isoFormat", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["isoFormat"]; }); +
28527 +
28528/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isoParse", function() { return d3_time_format__WEBPACK_IMPORTED_MODULE_27__["isoParse"]; }); +
28529 +
28530/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/index.js"); +
28531/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "now", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["now"]; }); +
28532 +
28533/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["timer"]; }); +
28534 +
28535/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timerFlush", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["timerFlush"]; }); +
28536 +
28537/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["timeout"]; }); +
28538 +
28539/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return d3_timer__WEBPACK_IMPORTED_MODULE_28__["interval"]; }); +
28540 +
28541/* harmony import */ var d3_transition__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! d3-transition */ "./node_modules/d3-transition/src/index.js"); +
28542/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transition", function() { return d3_transition__WEBPACK_IMPORTED_MODULE_29__["transition"]; }); +
28543 +
28544/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "active", function() { return d3_transition__WEBPACK_IMPORTED_MODULE_29__["active"]; }); +
28545 +
28546/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interrupt", function() { return d3_transition__WEBPACK_IMPORTED_MODULE_29__["interrupt"]; }); +
28547 +
28548/* harmony import */ var d3_voronoi__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! d3-voronoi */ "./node_modules/d3-voronoi/src/index.js"); +
28549/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "voronoi", function() { return d3_voronoi__WEBPACK_IMPORTED_MODULE_30__["voronoi"]; }); +
28550 +
28551/* harmony import */ var d3_zoom__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! d3-zoom */ "./node_modules/d3-zoom/src/index.js"); +
28552/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoom", function() { return d3_zoom__WEBPACK_IMPORTED_MODULE_31__["zoom"]; }); +
28553 +
28554/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoomTransform", function() { return d3_zoom__WEBPACK_IMPORTED_MODULE_31__["zoomTransform"]; }); +
28555 +
28556/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zoomIdentity", function() { return d3_zoom__WEBPACK_IMPORTED_MODULE_31__["zoomIdentity"]; }); +
28557 +
28558 +
28559 +
28560 +
28561 +
28562 +
28563 +
28564 +
28565 +
28566 +
28567 +
28568 +
28569 +
28570 +
28571 +
28572 +
28573 +
28574 +
28575 +
28576 +
28577 +
28578 +
28579 +
28580 +
28581 +
28582 +
28583 +
28584 +
28585 +
28586 +
28587 +
28588 +
28589 +
28590 +
28591 +
28592/***/ }), +
28593 +
28594/***/ "./node_modules/dagre-d3-renderer/dist/dagre-d3.core.js": +
28595/*!**************************************************************!*\ +
28596 !*** ./node_modules/dagre-d3-renderer/dist/dagre-d3.core.js ***! +
28597 \**************************************************************/ +
28598/*! no static exports found */ +
28599/***/ (function(module, exports, __webpack_require__) { +
28600 +
28601module.exports=function(t){var e={};function a(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,a),n.l=!0,n.exports}return a.m=t,a.c=e,a.d=function(t,e,r){a.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},a.r=function(t){Object.defineProperty(t,"__esModule",{value:!0})},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a.w={},a(a.s=25)}([function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,n=a(2),l=(r=n)&&r.__esModule?r:{default:r};var u=/:/g;function i(t){return t?String(t).replace(u,"\\:"):""}e.default={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return i(t.v)+":"+i(t.w)+":"+i(t.name)},applyStyle:function(t,e){e&&t.attr("style",e)},applyClass:function(t,e,a){e&&t.attr("class",e).attr("class",a+" "+t.attr("class"))},applyTransition:function(t,e){var a=e.graph();if(l.default.isPlainObject(a)){var r=a.transition;if(l.default.isFunction(r))return r(t)}return t}}},function(t,e){t.exports=__webpack_require__(/*! d3 */ "./node_modules/d3/index.js")},function(t,e){t.exports=__webpack_require__(/*! lodash */ "./node_modules/dagre-d3-renderer/node_modules/lodash/lodash.js")},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=u(a(16)),n=u(a(15)),l=u(a(14));function u(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e,a){var u=e.label,i=t.append("g");"svg"===e.labelType?(0,l.default)(i,e):"string"!=typeof u||"html"===e.labelType?(0,n.default)(i,e):(0,r.default)(i,e);var d=i.node().getBBox(),o=void 0;switch(a){case"top":o=-e.height/2;break;case"bottom":o=e.height/2-d.height;break;default:o=-d.height/2}return i.attr("transform","translate("+-d.width/2+","+o+")"),i}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,a,r){var n=t.x,l=t.y,u=n-r.x,i=l-r.y,d=Math.sqrt(e*e*i*i+a*a*u*u),o=Math.abs(e*a*u/d);r.x<n&&(o=-o);var s=Math.abs(e*a*i/d);return r.y<l&&(s=-s),{x:n+o,y:l+s}}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){var a=t.x,r=t.y,n=e.x-a,l=e.y-r,u=t.width/2,i=t.height/2,d=void 0,o=void 0;return Math.abs(l)*u>Math.abs(n)*i?(l<0&&(i=-i),d=0===l?0:i*n/l,o=i):(n<0&&(u=-u),d=u,o=0===n?0:u*l/n),{x:a+d,y:r+o}}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,n=a(23),l=(r=n)&&r.__esModule?r:{default:r};e.default=function(t,e,a){var r=t.x,n=t.y,u=[],i=Number.POSITIVE_INFINITY,d=Number.POSITIVE_INFINITY;e.forEach(function(t){i=Math.min(i,t.x),d=Math.min(d,t.y)});for(var o=r-t.width/2-i,s=n-t.height/2-d,f=0;f<e.length;f+=1){var c=e[f],h=e[f<e.length-1?f+1:0],p=(0,l.default)(t,a,{x:o+c.x,y:s+c.y},{x:o+h.x,y:s+h.y});p&&u.push(p)}return u.length?(u.length>1&&u.sort(function(t,e){var r=t.x-a.x,n=t.y-a.y,l=Math.sqrt(r*r+n*n),u=e.x-a.x,i=e.y-a.y,d=Math.sqrt(u*u+i*i);return l<d?-1:l===d?0:1}),u[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,n=a(4),l=(r=n)&&r.__esModule?r:{default:r};e.default=function(t,e,a){return(0,l.default)(t,e,e,a)}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){return t.intersect(e)}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,n=a(0),l=(r=n)&&r.__esModule?r:{default:r};function u(t,e,a,r){var n=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");l.default.applyStyle(n,a[r+"Style"]),a[r+"Class"]&&n.attr("class",a[r+"Class"])}e.default={normal:u,vee:function(t,e,a,r){var n=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");l.default.applyStyle(n,a[r+"Style"]),a[r+"Class"]&&n.attr("class",a[r+"Class"])},undirected:function(t,e,a,r){var n=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");l.default.applyStyle(n,a[r+"Style"]),a[r+"Class"]&&n.attr("class",a[r+"Class"])},default:u}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=i(a(5)),n=i(a(4)),l=i(a(7)),u=i(a(6));function i(t){return t&&t.__esModule?t:{default:t}}e.default={rect:function(t,e,a){var n=t.insert("rect",":first-child").attr("rx",a.rx).attr("ry",a.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return a.intersect=function(t){return(0,r.default)(a,t)},n},ellipse:function(t,e,a){var r=e.width/2,l=e.height/2,u=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",r).attr("ry",l);return a.intersect=function(t){return(0,n.default)(a,r,l,t)},u},circle:function(t,e,a){var r=Math.max(e.width,e.height)/2,n=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",r);return a.intersect=function(t){return(0,l.default)(a,r,t)},n},diamond:function(t,e,a){var r=e.width*Math.SQRT2/2,n=e.height*Math.SQRT2/2,l=[{x:0,y:-n},{x:-r,y:0},{x:0,y:n},{x:r,y:0}],i=t.insert("polygon",":first-child").attr("points",l.map(function(t){return t.x+","+t.y}).join(" "));return a.intersect=function(t){return(0,u.default)(a,l,t)},i}}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),n=i(a(2)),l=i(a(8)),u=i(a(0));function i(t){return t&&t.__esModule?t:{default:t}}function d(t,e){var a=r.line().x(function(t){return t.x}).y(function(t){return t.y});return a.curve(t.curve),a(e)}e.default=function(t,e,a){var i=t.selectAll("g.edgePath").data(e.edges(),function(t){return u.default.edgeToId(t)}).classed("update",!0);return function(t,e){var a=t.enter().append("g").attr("class","edgePath").style("opacity",0);a.append("path").attr("class","path").attr("d",function(t){var a=e.edge(t),r=e.node(t.v).elem,l=n.default.range(a.points.length).map(function(){return e=(t=r).getBBox(),{x:(a=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:a.f};var t,e,a});return d(a,l)}),a.append("defs")}(i,e),function(t,e){var a=t.exit();u.default.applyTransition(a,e).style("opacity",0).remove(),u.default.applyTransition(a.select("path.path"),e).attr("d",function(t){var a=e.node(t.v);if(a){var l=n.default.range(this.getTotalLength()).map(function(){return a});return d({},l)}return r.select(this).attr("d")})}(i,e),i=t.selectAll("g.edgePath"),u.default.applyTransition(i,e).style("opacity",1),i.each(function(t){var a=r.select(this),n=e.edge(t);n.elem=this,n.id&&a.attr("id",n.id),u.default.applyClass(a,n.class,(a.classed("update")?"update ":"")+"edgePath")}),i.selectAll("path.path").each(function(t){var a=e.edge(t);a.arrowheadId=n.default.uniqueId("arrowhead");var i=r.select(this).attr("marker-end",function(){return"url(#"+a.arrowheadId+")"}).style("fill","none");u.default.applyTransition(i,e).attr("d",function(t){return function(t,e){var a=t.edge(e),r=t.node(e.v),n=t.node(e.w),u=a.points.slice(1,a.points.length-1);return u.unshift((0,l.default)(r,u[0])),u.push((0,l.default)(n,u[u.length-1])),d(a,u)}(e,t)}),u.default.applyStyle(i,a.style)}),i.selectAll("defs *").remove(),i.selectAll("defs").each(function(t){var n=e.edge(t);(0,a[n.arrowhead])(r.select(this),n.arrowheadId,n,"arrowhead")}),i}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),n=i(a(2)),l=i(a(3)),u=i(a(0));function i(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){var a=t.selectAll("g.edgeLabel").data(e.edges(),function(t){return u.default.edgeToId(t)}).classed("update",!0);return a.selectAll("*").remove(),a.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(a=t.selectAll("g.edgeLabel")).each(function(t){var a=e.edge(t),u=(0,l.default)(r.select(this),e.edge(t),0,0).classed("label",!0),i=u.node().getBBox();a.labelId&&u.attr("id",a.labelId),n.default.has(a,"width")||(a.width=i.width),n.default.has(a,"height")||(a.height=i.height)}),u.default.applyTransition(a.exit(),e).style("opacity",0).remove(),a}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),n=u(a(0)),l=u(a(3));function u(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){var a=e.nodes().filter(function(t){return n.default.isSubgraph(e,t)}),u=t.selectAll("g.cluster").data(a,function(t){return t});return u.selectAll("*").remove(),u.enter().append("g").attr("class","cluster").attr("id",function(t){return e.node(t).id}).style("opacity",0),u=t.selectAll("g.cluster"),n.default.applyTransition(u,e).style("opacity",1),u.each(function(t){var a=e.node(t),n=r.select(this);r.select(this).append("rect");var u=n.append("g").attr("class","label");(0,l.default)(u,a,a.clusterLabelPos)}),u.selectAll("rect").each(function(t){var a=e.node(t),l=r.select(this);n.default.applyStyle(l,a.style)}),n.default.applyTransition(u.exit(),e).style("opacity",0).remove(),u}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,n=a(0),l=(r=n)&&r.__esModule?r:{default:r};e.default=function(t,e){var a=t;return a.node().appendChild(e.label),l.default.applyStyle(a,e.labelStyle),a}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l=a(0),u=(r=l)&&r.__esModule?r:{default:r};e.default=function(t,e){var a=t.append("foreignObject").attr("width","100000"),r=a.append("xhtml:div");r.attr("xmlns","http://www.w3.org/1999/xhtml");var l=e.label;switch(void 0===l?"undefined":n(l)){case"function":r.insert(l);break;case"object":r.insert(function(){return l});break;default:r.html(l)}u.default.applyStyle(r,e.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap");var i=r.node().getBoundingClientRect();return a.attr("width",i.width).attr("height",i.height),a}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,n=a(0),l=(r=n)&&r.__esModule?r:{default:r};e.default=function(t,e){for(var a=t.append("text"),r=function(t){for(var e="",a=!1,r=null,n=0;n<t.length;n+=1)if(r=t[n],a){switch(r){case"n":e+="\n";break;default:e+=r}a=!1}else"\\"===r?a=!0:e+=r;return e}(e.label).split("\n"),n=0;n<r.length;n+=1)a.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(r[n]);return l.default.applyStyle(a,e.labelStyle),a}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=i(a(2)),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),l=i(a(3)),u=i(a(0));function i(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e,a){var i=e.nodes().filter(function(t){return!u.default.isSubgraph(e,t)}),d=t.selectAll("g.node").data(i,function(t){return t}).classed("update",!0);return d.selectAll("*").remove(),d.enter().append("g").attr("class","node").style("opacity",0),(d=t.selectAll("g.node")).each(function(t){var i=e.node(t),d=n.select(this);u.default.applyClass(d,i.class,(d.classed("update")?"update ":"")+"node");var o=d.append("g").attr("class","label"),s=(0,l.default)(o,i),f=a[i.shape],c=r.default.pick(s.node().getBBox(),"width","height");i.elem=this,i.id&&d.attr("id",i.id),i.labelId&&o.attr("id",i.labelId),r.default.has(i,"width")&&(c.width=i.width),r.default.has(i,"height")&&(c.height=i.height),c.width+=i.paddingLeft+i.paddingRight,c.height+=i.paddingTop+i.paddingBottom,o.attr("transform","translate("+(i.paddingLeft-i.paddingRight)/2+","+(i.paddingTop-i.paddingBottom)/2+")");var h=f(n.select(this),c,i);u.default.applyStyle(h,i.style);var p=h.node().getBBox();i.width=p.width,i.height=p.height}),u.default.applyTransition(d.exit(),e).style("opacity",0).remove(),d}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),l=a(0),u=(r=l)&&r.__esModule?r:{default:r};e.default=function(t,e){var a=t.filter(function(){return!n.select(this).classed("update")});function r(t){var a=e.node(t);return"translate("+a.x+","+a.y+")"}a.attr("transform",r),u.default.applyTransition(t,e).style("opacity",1).attr("transform",r),u.default.applyTransition(a.selectAll("rect"),e).attr("width",function(t){return e.node(t).width}).attr("height",function(t){return e.node(t).height}).attr("x",function(t){return-e.node(t).width/2}).attr("y",function(t){return-e.node(t).height/2})}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),n=u(a(2)),l=u(a(0));function u(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){function a(t){var a=e.edge(t);return n.default.has(a,"x")?"translate("+a.x+","+a.y+")":""}t.filter(function(){return!r.select(this).classed("update")}).attr("transform",a),l.default.applyTransition(t,e).style("opacity",1).attr("transform",a)}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),l=a(0),u=(r=l)&&r.__esModule?r:{default:r};e.default=function(t,e){function a(t){var a=e.node(t);return"translate("+a.x+","+a.y+")"}t.filter(function(){return!n.select(this).classed("update")}).attr("transform",a),u.default.applyTransition(t,e).style("opacity",1).attr("transform",a)}},function(t,e){t.exports=__webpack_require__(/*! dagre-layout */ "./node_modules/dagre-layout/dist/dagre-layout.core.js")},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=y(a(2)),n=y(a(21)),l=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),u=y(a(20)),i=y(a(19)),d=y(a(18)),o=y(a(17)),s=y(a(13)),f=y(a(12)),c=y(a(11)),h=y(a(10)),p=y(a(9));function y(t){return t&&t.__esModule?t:{default:t}}var g={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},v={arrowhead:"normal",curve:l.curveLinear};function _(t,e){var a=t.select("g."+e);return a.empty()&&(a=t.append("g").attr("class",e)),a}e.default=function(){var t=o.default,e=s.default,a=f.default,l=c.default,y=h.default,x=p.default,b=function(o,s){!function(t){t.nodes().forEach(function(e){var a=t.node(e);r.default.has(a,"label")||t.children(e).length||(a.label=e),r.default.has(a,"paddingX")&&r.default.defaults(a,{paddingLeft:a.paddingX,paddingRight:a.paddingX}),r.default.has(a,"paddingY")&&r.default.defaults(a,{paddingTop:a.paddingY,paddingBottom:a.paddingY}),r.default.has(a,"padding")&&r.default.defaults(a,{paddingLeft:a.padding,paddingRight:a.padding,paddingTop:a.padding,paddingBottom:a.padding}),r.default.defaults(a,g),r.default.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(t){a[t]=Number(a[t])}),r.default.has(a,"width")&&(a._prevWidth=a.width),r.default.has(a,"height")&&(a._prevHeight=a.height)}),t.edges().forEach(function(e){var a=t.edge(e);r.default.has(a,"label")||(a.label=""),r.default.defaults(a,v)})}(s),o.selectAll("*").remove();var f=_(o,"output"),c=_(f,"clusters"),h=_(f,"edgePaths"),p=a(_(f,"edgeLabels"),s),b=t(_(f,"nodes"),s,y);n.default.layout(s);var m=1e3,M=1e3,w=-1e3,O=-1e3,P=s;P.nodes().map(function(t){return P.node(t)}).forEach(function(t){m=Math.min(m,t.x-t.width/2),M=Math.min(M,t.y-t.height/2),w=Math.max(w,t.x+t.width/2),O=Math.max(O,t.y+t.height/2)}),P.edges().forEach(function(t){var e=P.edge(t);void 0!==e.label&&void 0!==e.x&&void 0!==e.y&&(m=Math.min(m,e.x-e.width/2),M=Math.min(M,e.y-e.height/2),w=Math.max(w,e.x+e.width/2),O=Math.max(O,e.y+e.height/2));for(var a=e.points.slice(1,e.points.length-1),r=0;r<a.length;r++){var n=a[r];m=Math.min(m,n.x),M=Math.min(M,n.y),w=Math.max(w,n.x),O=Math.max(O,n.y)}}),P.minX=m,P.minY=M,P.maxX=w,P.maxY=O,(0,u.default)(b,s),(0,i.default)(p,s),l(h,s,x);var j=e(c,s);(0,d.default)(j,s),function(t){r.default.each(t.nodes(),function(e){var a=t.node(e);r.default.has(a,"_prevWidth")?a.width=a._prevWidth:delete a.width,r.default.has(a,"_prevHeight")?a.height=a._prevHeight:delete a.height,delete a._prevWidth,delete a._prevHeight})}(s)};return b.createNodes=function(e){return arguments.length?(t=e,b):t},b.createClusters=function(t){return arguments.length?(e=t,b):e},b.createEdgeLabels=function(t){return arguments.length?(a=t,b):a},b.createEdgePaths=function(t){return arguments.length?(l=t,b):l},b.shapes=function(t){return arguments.length?(y=t,b):y},b.arrows=function(t){return arguments.length?(x=t,b):x},b}},function(t,e,a){"use strict";function r(t,e){return t*e>0}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,a,n){var l=e.y-t.y,u=t.x-e.x,i=e.x*t.y-t.x*e.y,d=l*a.x+u*a.y+i,o=l*n.x+u*n.y+i;if(0===d||0===o||!r(d,o)){var s=n.y-a.y,f=a.x-n.x,c=n.x*a.y-a.x*n.y,h=s*t.x+f*t.y+c,p=s*e.x+f*e.y+c;if(0===h||0===p||!r(h,p)){var y=l*f-s*u;if(0!==y){var g=Math.abs(y/2),v=u*c-f*i;return{x:v<0?(v-g)/y:(v+g)/y,y:(v=s*i-l*c)<0?(v-g)/y:(v+g)/y}}}}}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=d(a(8)),n=d(a(7)),l=d(a(4)),u=d(a(6)),i=d(a(5));function d(t){return t&&t.__esModule?t:{default:t}}e.default={node:r.default,circle:n.default,ellipse:l.default,polygon:u.default,rect:i.default}},function(t,e,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=u(a(24)),n=u(a(22)),l=u(a(0));function u(t){return t&&t.__esModule?t:{default:t}}e.default={intersect:r.default,render:n.default,util:l.default}}]); +
28602//# sourceMappingURL=dagre-d3.core.js.map +
28603 +
28604/***/ }), +
28605 +
28606/***/ "./node_modules/dagre-d3-renderer/lib/label/add-html-label.js": +
28607/*!********************************************************************!*\ +
28608 !*** ./node_modules/dagre-d3-renderer/lib/label/add-html-label.js ***! +
28609 \********************************************************************/ +
28610/*! exports provided: default */ +
28611/***/ (function(module, __webpack_exports__, __webpack_require__) { +
28612 +
28613"use strict"; +
28614__webpack_require__.r(__webpack_exports__); +
28615/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ "./node_modules/dagre-d3-renderer/lib/util.js"); +
28616 +
28617 +
28618function addHtmlLabel(root, node) { +
28619 const fo = root.append('foreignObject').attr('width', '100000'); +
28620 const div = fo.append('xhtml:div'); +
28621 div.attr('xmlns', 'http://www.w3.org/1999/xhtml'); +
28622 const label = node.label; +
28623 +
28624 switch (typeof label) { +
28625 case 'function': +
28626 div.insert(label); +
28627 break; +
28628 +
28629 case 'object': +
28630 // Currently we assume this is a DOM object. +
28631 div.insert(function () { +
28632 return label; +
28633 }); +
28634 break; +
28635 +
28636 default: +
28637 div.html(label); +
28638 } +
28639 +
28640 _util__WEBPACK_IMPORTED_MODULE_0__["default"].applyStyle(div, node.labelStyle); +
28641 div.style('display', 'inline-block'); // Fix for firefox +
28642 +
28643 div.style('white-space', 'nowrap'); +
28644 const client = div.node().getBoundingClientRect(); +
28645 fo.attr('width', client.width).attr('height', client.height); +
28646 return fo; +
28647} +
28648 +
28649/* harmony default export */ __webpack_exports__["default"] = (addHtmlLabel); +
28650 +
28651/***/ }), +
28652 +
28653/***/ "./node_modules/dagre-d3-renderer/lib/util.js": +
28654/*!****************************************************!*\ +
28655 !*** ./node_modules/dagre-d3-renderer/lib/util.js ***! +
28656 \****************************************************/ +
28657/*! exports provided: default */ +
28658/***/ (function(module, __webpack_exports__, __webpack_require__) { +
28659 +
28660"use strict"; +
28661__webpack_require__.r(__webpack_exports__); +
28662/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "./node_modules/dagre-d3-renderer/node_modules/lodash/lodash.js"); +
28663/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__); +
28664 +
28665/* +
28666 * Returns true if the specified node in the graph is a subgraph node. A +
28667 * subgraph node is one that contains other nodes. +
28668 */ +
28669 +
28670function isSubgraph(g, v) { +
28671 return !!g.children(v).length; +
28672} +
28673 +
28674function edgeToId(e) { +
28675 return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name); +
28676} +
28677 +
28678const ID_DELIM = /:/g; +
28679 +
28680function escapeId(str) { +
28681 return str ? String(str).replace(ID_DELIM, '\\:') : ''; +
28682} +
28683 +
28684function applyStyle(dom, styleFn) { +
28685 if (styleFn) { +
28686 dom.attr('style', styleFn); +
28687 } +
28688} +
28689 +
28690function applyClass(dom, classFn, otherClasses) { +
28691 if (classFn) { +
28692 dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class')); +
28693 } +
28694} +
28695 +
28696function applyTransition(selection, g) { +
28697 const graph = g.graph(); +
28698 +
28699 if (lodash__WEBPACK_IMPORTED_MODULE_0___default.a.isPlainObject(graph)) { +
28700 const transition = graph.transition; +
28701 +
28702 if (lodash__WEBPACK_IMPORTED_MODULE_0___default.a.isFunction(transition)) { +
28703 return transition(selection); +
28704 } +
28705 } +
28706 +
28707 return selection; +
28708} // Public utility functions +
28709 +
28710 +
28711/* harmony default export */ __webpack_exports__["default"] = ({ +
28712 isSubgraph, +
28713 edgeToId, +
28714 applyStyle, +
28715 applyClass, +
28716 applyTransition +
28717}); +
28718 +
28719/***/ }), +
28720 +
28721/***/ "./node_modules/dagre-d3-renderer/node_modules/lodash/lodash.js": +
28722/*!**********************************************************************!*\ +
28723 !*** ./node_modules/dagre-d3-renderer/node_modules/lodash/lodash.js ***! +
28724 \**********************************************************************/ +
28725/*! no static exports found */ +
28726/***/ (function(module, exports, __webpack_require__) { +
28727 +
28728/* WEBPACK VAR INJECTION */(function(global, module) {/** +
28729 * @license +
28730 * Lodash <https://lodash.com/> +
28731 * Copyright JS Foundation and other contributors <https://js.foundation/> +
28732 * Released under MIT license <https://lodash.com/license> +
28733 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> +
28734 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +
28735 */ +
28736;(function() { +
28737 +
28738 /** Used as a safe reference for `undefined` in pre-ES5 environments. */ +
28739 var undefined; +
28740 +
28741 /** Used as the semantic version number. */ +
28742 var VERSION = '4.17.5'; +
28743 +
28744 /** Used as the size to enable large array optimizations. */ +
28745 var LARGE_ARRAY_SIZE = 200; +
28746 +
28747 /** Error message constants. */ +
28748 var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', +
28749 FUNC_ERROR_TEXT = 'Expected a function'; +
28750 +
28751 /** Used to stand-in for `undefined` hash values. */ +
28752 var HASH_UNDEFINED = '__lodash_hash_undefined__'; +
28753 +
28754 /** Used as the maximum memoize cache size. */ +
28755 var MAX_MEMOIZE_SIZE = 500; +
28756 +
28757 /** Used as the internal argument placeholder. */ +
28758 var PLACEHOLDER = '__lodash_placeholder__'; +
28759 +
28760 /** Used to compose bitmasks for cloning. */ +
28761 var CLONE_DEEP_FLAG = 1, +
28762 CLONE_FLAT_FLAG = 2, +
28763 CLONE_SYMBOLS_FLAG = 4; +
28764 +
28765 /** Used to compose bitmasks for value comparisons. */ +
28766 var COMPARE_PARTIAL_FLAG = 1, +
28767 COMPARE_UNORDERED_FLAG = 2; +
28768 +
28769 /** Used to compose bitmasks for function metadata. */ +
28770 var WRAP_BIND_FLAG = 1, +
28771 WRAP_BIND_KEY_FLAG = 2, +
28772 WRAP_CURRY_BOUND_FLAG = 4, +
28773 WRAP_CURRY_FLAG = 8, +
28774 WRAP_CURRY_RIGHT_FLAG = 16, +
28775 WRAP_PARTIAL_FLAG = 32, +
28776 WRAP_PARTIAL_RIGHT_FLAG = 64, +
28777 WRAP_ARY_FLAG = 128, +
28778 WRAP_REARG_FLAG = 256, +
28779 WRAP_FLIP_FLAG = 512; +
28780 +
28781 /** Used as default options for `_.truncate`. */ +
28782 var DEFAULT_TRUNC_LENGTH = 30, +
28783 DEFAULT_TRUNC_OMISSION = '...'; +
28784 +
28785 /** Used to detect hot functions by number of calls within a span of milliseconds. */ +
28786 var HOT_COUNT = 800, +
28787 HOT_SPAN = 16; +
28788 +
28789 /** Used to indicate the type of lazy iteratees. */ +
28790 var LAZY_FILTER_FLAG = 1, +
28791 LAZY_MAP_FLAG = 2, +
28792 LAZY_WHILE_FLAG = 3; +
28793 +
28794 /** Used as references for various `Number` constants. */ +
28795 var INFINITY = 1 / 0, +
28796 MAX_SAFE_INTEGER = 9007199254740991, +
28797 MAX_INTEGER = 1.7976931348623157e+308, +
28798 NAN = 0 / 0; +
28799 +
28800 /** Used as references for the maximum length and index of an array. */ +
28801 var MAX_ARRAY_LENGTH = 4294967295, +
28802 MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, +
28803 HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; +
28804 +
28805 /** Used to associate wrap methods with their bit flags. */ +
28806 var wrapFlags = [ +
28807 ['ary', WRAP_ARY_FLAG], +
28808 ['bind', WRAP_BIND_FLAG], +
28809 ['bindKey', WRAP_BIND_KEY_FLAG], +
28810 ['curry', WRAP_CURRY_FLAG], +
28811 ['curryRight', WRAP_CURRY_RIGHT_FLAG], +
28812 ['flip', WRAP_FLIP_FLAG], +
28813 ['partial', WRAP_PARTIAL_FLAG], +
28814 ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], +
28815 ['rearg', WRAP_REARG_FLAG] +
28816 ]; +
28817 +
28818 /** `Object#toString` result references. */ +
28819 var argsTag = '[object Arguments]', +
28820 arrayTag = '[object Array]', +
28821 asyncTag = '[object AsyncFunction]', +
28822 boolTag = '[object Boolean]', +
28823 dateTag = '[object Date]', +
28824 domExcTag = '[object DOMException]', +
28825 errorTag = '[object Error]', +
28826 funcTag = '[object Function]', +
28827 genTag = '[object GeneratorFunction]', +
28828 mapTag = '[object Map]', +
28829 numberTag = '[object Number]', +
28830 nullTag = '[object Null]', +
28831 objectTag = '[object Object]', +
28832 promiseTag = '[object Promise]', +
28833 proxyTag = '[object Proxy]', +
28834 regexpTag = '[object RegExp]', +
28835 setTag = '[object Set]', +
28836 stringTag = '[object String]', +
28837 symbolTag = '[object Symbol]', +
28838 undefinedTag = '[object Undefined]', +
28839 weakMapTag = '[object WeakMap]', +
28840 weakSetTag = '[object WeakSet]'; +
28841 +
28842 var arrayBufferTag = '[object ArrayBuffer]', +
28843 dataViewTag = '[object DataView]', +
28844 float32Tag = '[object Float32Array]', +
28845 float64Tag = '[object Float64Array]', +
28846 int8Tag = '[object Int8Array]', +
28847 int16Tag = '[object Int16Array]', +
28848 int32Tag = '[object Int32Array]', +
28849 uint8Tag = '[object Uint8Array]', +
28850 uint8ClampedTag = '[object Uint8ClampedArray]', +
28851 uint16Tag = '[object Uint16Array]', +
28852 uint32Tag = '[object Uint32Array]'; +
28853 +
28854 /** Used to match empty string literals in compiled template source. */ +
28855 var reEmptyStringLeading = /\b__p \+= '';/g, +
28856 reEmptyStringMiddle = /\b(__p \+=) '' \+/g, +
28857 reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; +
28858 +
28859 /** Used to match HTML entities and HTML characters. */ +
28860 var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, +
28861 reUnescapedHtml = /[&<>"']/g, +
28862 reHasEscapedHtml = RegExp(reEscapedHtml.source), +
28863 reHasUnescapedHtml = RegExp(reUnescapedHtml.source); +
28864 +
28865 /** Used to match template delimiters. */ +
28866 var reEscape = /<%-([\s\S]+?)%>/g, +
28867 reEvaluate = /<%([\s\S]+?)%>/g, +
28868 reInterpolate = /<%=([\s\S]+?)%>/g; +
28869 +
28870 /** Used to match property names within property paths. */ +
28871 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, +
28872 reIsPlainProp = /^\w*$/, +
28873 rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; +
28874 +
28875 /** +
28876 * Used to match `RegExp` +
28877 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). +
28878 */ +
28879 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, +
28880 reHasRegExpChar = RegExp(reRegExpChar.source); +
28881 +
28882 /** Used to match leading and trailing whitespace. */ +
28883 var reTrim = /^\s+|\s+$/g, +
28884 reTrimStart = /^\s+/, +
28885 reTrimEnd = /\s+$/; +
28886 +
28887 /** Used to match wrap detail comments. */ +
28888 var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, +
28889 reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, +
28890 reSplitDetails = /,? & /; +
28891 +
28892 /** Used to match words composed of alphanumeric characters. */ +
28893 var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; +
28894 +
28895 /** Used to match backslashes in property paths. */ +
28896 var reEscapeChar = /\\(\\)?/g; +
28897 +
28898 /** +
28899 * Used to match +
28900 * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). +
28901 */ +
28902 var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; +
28903 +
28904 /** Used to match `RegExp` flags from their coerced string values. */ +
28905 var reFlags = /\w*$/; +
28906 +
28907 /** Used to detect bad signed hexadecimal string values. */ +
28908 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; +
28909 +
28910 /** Used to detect binary string values. */ +
28911 var reIsBinary = /^0b[01]+$/i; +
28912 +
28913 /** Used to detect host constructors (Safari). */ +
28914 var reIsHostCtor = /^\[object .+?Constructor\]$/; +
28915 +
28916 /** Used to detect octal string values. */ +
28917 var reIsOctal = /^0o[0-7]+$/i; +
28918 +
28919 /** Used to detect unsigned integer values. */ +
28920 var reIsUint = /^(?:0|[1-9]\d*)$/; +
28921 +
28922 /** Used to match Latin Unicode letters (excluding mathematical operators). */ +
28923 var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; +
28924 +
28925 /** Used to ensure capturing order of template delimiters. */ +
28926 var reNoMatch = /($^)/; +
28927 +
28928 /** Used to match unescaped characters in compiled string literals. */ +
28929 var reUnescapedString = /['\n\r\u2028\u2029\\]/g; +
28930 +
28931 /** Used to compose unicode character classes. */ +
28932 var rsAstralRange = '\\ud800-\\udfff', +
28933 rsComboMarksRange = '\\u0300-\\u036f', +
28934 reComboHalfMarksRange = '\\ufe20-\\ufe2f', +
28935 rsComboSymbolsRange = '\\u20d0-\\u20ff', +
28936 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, +
28937 rsDingbatRange = '\\u2700-\\u27bf', +
28938 rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', +
28939 rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', +
28940 rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', +
28941 rsPunctuationRange = '\\u2000-\\u206f', +
28942 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', +
28943 rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', +
28944 rsVarRange = '\\ufe0e\\ufe0f', +
28945 rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; +
28946 +
28947 /** Used to compose unicode capture groups. */ +
28948 var rsApos = "['\u2019]", +
28949 rsAstral = '[' + rsAstralRange + ']', +
28950 rsBreak = '[' + rsBreakRange + ']', +
28951 rsCombo = '[' + rsComboRange + ']', +
28952 rsDigits = '\\d+', +
28953 rsDingbat = '[' + rsDingbatRange + ']', +
28954 rsLower = '[' + rsLowerRange + ']', +
28955 rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', +
28956 rsFitz = '\\ud83c[\\udffb-\\udfff]', +
28957 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', +
28958 rsNonAstral = '[^' + rsAstralRange + ']', +
28959 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', +
28960 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', +
28961 rsUpper = '[' + rsUpperRange + ']', +
28962 rsZWJ = '\\u200d'; +
28963 +
28964 /** Used to compose unicode regexes. */ +
28965 var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', +
28966 rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', +
28967 rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', +
28968 rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', +
28969 reOptMod = rsModifier + '?', +
28970 rsOptVar = '[' + rsVarRange + ']?', +
28971 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', +
28972 rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', +
28973 rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', +
28974 rsSeq = rsOptVar + reOptMod + rsOptJoin, +
28975 rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, +
28976 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; +
28977 +
28978 /** Used to match apostrophes. */ +
28979 var reApos = RegExp(rsApos, 'g'); +
28980 +
28981 /** +
28982 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and +
28983 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). +
28984 */ +
28985 var reComboMark = RegExp(rsCombo, 'g'); +
28986 +
28987 /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +
28988 var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); +
28989 +
28990 /** Used to match complex or compound words. */ +
28991 var reUnicodeWord = RegExp([ +
28992 rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', +
28993 rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', +
28994 rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, +
28995 rsUpper + '+' + rsOptContrUpper, +
28996 rsOrdUpper, +
28997 rsOrdLower, +
28998 rsDigits, +
28999 rsEmoji +
29000 ].join('|'), 'g'); +
29001 +
29002 /** 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/). */ +
29003 var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); +
29004 +
29005 /** Used to detect strings that need a more robust regexp to match words. */ +
29006 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 ]/; +
29007 +
29008 /** Used to assign default `context` object properties. */ +
29009 var contextProps = [ +
29010 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', +
29011 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', +
29012 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', +
29013 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', +
29014 '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' +
29015 ]; +
29016 +
29017 /** Used to make template sourceURLs easier to identify. */ +
29018 var templateCounter = -1; +
29019 +
29020 /** Used to identify `toStringTag` values of typed arrays. */ +
29021 var typedArrayTags = {}; +
29022 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +
29023 typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +
29024 typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +
29025 typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +
29026 typedArrayTags[uint32Tag] = true; +
29027 typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +
29028 typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +
29029 typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +
29030 typedArrayTags[errorTag] = typedArrayTags[funcTag] = +
29031 typedArrayTags[mapTag] = typedArrayTags[numberTag] = +
29032 typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +
29033 typedArrayTags[setTag] = typedArrayTags[stringTag] = +
29034 typedArrayTags[weakMapTag] = false; +
29035 +
29036 /** Used to identify `toStringTag` values supported by `_.clone`. */ +
29037 var cloneableTags = {}; +
29038 cloneableTags[argsTag] = cloneableTags[arrayTag] = +
29039 cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +
29040 cloneableTags[boolTag] = cloneableTags[dateTag] = +
29041 cloneableTags[float32Tag] = cloneableTags[float64Tag] = +
29042 cloneableTags[int8Tag] = cloneableTags[int16Tag] = +
29043 cloneableTags[int32Tag] = cloneableTags[mapTag] = +
29044 cloneableTags[numberTag] = cloneableTags[objectTag] = +
29045 cloneableTags[regexpTag] = cloneableTags[setTag] = +
29046 cloneableTags[stringTag] = cloneableTags[symbolTag] = +
29047 cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +
29048 cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +
29049 cloneableTags[errorTag] = cloneableTags[funcTag] = +
29050 cloneableTags[weakMapTag] = false; +
29051 +
29052 /** Used to map Latin Unicode letters to basic Latin letters. */ +
29053 var deburredLetters = { +
29054 // Latin-1 Supplement block. +
29055 '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', +
29056 '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', +
29057 '\xc7': 'C', '\xe7': 'c', +
29058 '\xd0': 'D', '\xf0': 'd', +
29059 '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', +
29060 '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', +
29061 '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', +
29062 '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', +
29063 '\xd1': 'N', '\xf1': 'n', +
29064 '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', +
29065 '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', +
29066 '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', +
29067 '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', +
29068 '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', +
29069 '\xc6': 'Ae', '\xe6': 'ae', +
29070 '\xde': 'Th', '\xfe': 'th', +
29071 '\xdf': 'ss', +
29072 // Latin Extended-A block. +
29073 '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', +
29074 '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', +
29075 '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', +
29076 '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', +
29077 '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', +
29078 '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', +
29079 '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', +
29080 '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', +
29081 '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', +
29082 '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', +
29083 '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', +
29084 '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', +
29085 '\u0134': 'J', '\u0135': 'j', +
29086 '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', +
29087 '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', +
29088 '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', +
29089 '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', +
29090 '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', +
29091 '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', +
29092 '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', +
29093 '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', +
29094 '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', +
29095 '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', +
29096 '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', +
29097 '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', +
29098 '\u0163': 't', '\u0165': 't', '\u0167': 't', +
29099 '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', +
29100 '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', +
29101 '\u0174': 'W', '\u0175': 'w', +
29102 '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', +
29103 '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', +
29104 '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', +
29105 '\u0132': 'IJ', '\u0133': 'ij', +
29106 '\u0152': 'Oe', '\u0153': 'oe', +
29107 '\u0149': "'n", '\u017f': 's' +
29108 }; +
29109 +
29110 /** Used to map characters to HTML entities. */ +
29111 var htmlEscapes = { +
29112 '&': '&amp;', +
29113 '<': '&lt;', +
29114 '>': '&gt;', +
29115 '"': '&quot;', +
29116 "'": '&#39;' +
29117 }; +
29118 +
29119 /** Used to map HTML entities to characters. */ +
29120 var htmlUnescapes = { +
29121 '&amp;': '&', +
29122 '&lt;': '<', +
29123 '&gt;': '>', +
29124 '&quot;': '"', +
29125 '&#39;': "'" +
29126 }; +
29127 +
29128 /** Used to escape characters for inclusion in compiled string literals. */ +
29129 var stringEscapes = { +
29130 '\\': '\\', +
29131 "'": "'", +
29132 '\n': 'n', +
29133 '\r': 'r', +
29134 '\u2028': 'u2028', +
29135 '\u2029': 'u2029' +
29136 }; +
29137 +
29138 /** Built-in method references without a dependency on `root`. */ +
29139 var freeParseFloat = parseFloat, +
29140 freeParseInt = parseInt; +
29141 +
29142 /** Detect free variable `global` from Node.js. */ +
29143 var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; +
29144 +
29145 /** Detect free variable `self`. */ +
29146 var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +
29147 +
29148 /** Used as a reference to the global object. */ +
29149 var root = freeGlobal || freeSelf || Function('return this')(); +
29150 +
29151 /** Detect free variable `exports`. */ +
29152 var freeExports = true && exports && !exports.nodeType && exports; +
29153 +
29154 /** Detect free variable `module`. */ +
29155 var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; +
29156 +
29157 /** Detect the popular CommonJS extension `module.exports`. */ +
29158 var moduleExports = freeModule && freeModule.exports === freeExports; +
29159 +
29160 /** Detect free variable `process` from Node.js. */ +
29161 var freeProcess = moduleExports && freeGlobal.process; +
29162 +
29163 /** Used to access faster Node.js helpers. */ +
29164 var nodeUtil = (function() { +
29165 try { +
29166 return freeProcess && freeProcess.binding && freeProcess.binding('util'); +
29167 } catch (e) {} +
29168 }()); +
29169 +
29170 /* Node.js helper references. */ +
29171 var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, +
29172 nodeIsDate = nodeUtil && nodeUtil.isDate, +
29173 nodeIsMap = nodeUtil && nodeUtil.isMap, +
29174 nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, +
29175 nodeIsSet = nodeUtil && nodeUtil.isSet, +
29176 nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; +
29177 +
29178 /*--------------------------------------------------------------------------*/ +
29179 +
29180 /** +
29181 * A faster alternative to `Function#apply`, this function invokes `func` +
29182 * with the `this` binding of `thisArg` and the arguments of `args`. +
29183 * +
29184 * @private +
29185 * @param {Function} func The function to invoke. +
29186 * @param {*} thisArg The `this` binding of `func`. +
29187 * @param {Array} args The arguments to invoke `func` with. +
29188 * @returns {*} Returns the result of `func`. +
29189 */ +
29190 function apply(func, thisArg, args) { +
29191 switch (args.length) { +
29192 case 0: return func.call(thisArg); +
29193 case 1: return func.call(thisArg, args[0]); +
29194 case 2: return func.call(thisArg, args[0], args[1]); +
29195 case 3: return func.call(thisArg, args[0], args[1], args[2]); +
29196 } +
29197 return func.apply(thisArg, args); +
29198 } +
29199 +
29200 /** +
29201 * A specialized version of `baseAggregator` for arrays. +
29202 * +
29203 * @private +
29204 * @param {Array} [array] The array to iterate over. +
29205 * @param {Function} setter The function to set `accumulator` values. +
29206 * @param {Function} iteratee The iteratee to transform keys. +
29207 * @param {Object} accumulator The initial aggregated object. +
29208 * @returns {Function} Returns `accumulator`. +
29209 */ +
29210 function arrayAggregator(array, setter, iteratee, accumulator) { +
29211 var index = -1, +
29212 length = array == null ? 0 : array.length; +
29213 +
29214 while (++index < length) { +
29215 var value = array[index]; +
29216 setter(accumulator, value, iteratee(value), array); +
29217 } +
29218 return accumulator; +
29219 } +
29220 +
29221 /** +
29222 * A specialized version of `_.forEach` for arrays without support for +
29223 * iteratee shorthands. +
29224 * +
29225 * @private +
29226 * @param {Array} [array] The array to iterate over. +
29227 * @param {Function} iteratee The function invoked per iteration. +
29228 * @returns {Array} Returns `array`. +
29229 */ +
29230 function arrayEach(array, iteratee) { +
29231 var index = -1, +
29232 length = array == null ? 0 : array.length; +
29233 +
29234 while (++index < length) { +
29235 if (iteratee(array[index], index, array) === false) { +
29236 break; +
29237 } +
29238 } +
29239 return array; +
29240 } +
29241 +
29242 /** +
29243 * A specialized version of `_.forEachRight` for arrays without support for +
29244 * iteratee shorthands. +
29245 * +
29246 * @private +
29247 * @param {Array} [array] The array to iterate over. +
29248 * @param {Function} iteratee The function invoked per iteration. +
29249 * @returns {Array} Returns `array`. +
29250 */ +
29251 function arrayEachRight(array, iteratee) { +
29252 var length = array == null ? 0 : array.length; +
29253 +
29254 while (length--) { +
29255 if (iteratee(array[length], length, array) === false) { +
29256 break; +
29257 } +
29258 } +
29259 return array; +
29260 } +
29261 +
29262 /** +
29263 * A specialized version of `_.every` for arrays without support for +
29264 * iteratee shorthands. +
29265 * +
29266 * @private +
29267 * @param {Array} [array] The array to iterate over. +
29268 * @param {Function} predicate The function invoked per iteration. +
29269 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
29270 * else `false`. +
29271 */ +
29272 function arrayEvery(array, predicate) { +
29273 var index = -1, +
29274 length = array == null ? 0 : array.length; +
29275 +
29276 while (++index < length) { +
29277 if (!predicate(array[index], index, array)) { +
29278 return false; +
29279 } +
29280 } +
29281 return true; +
29282 } +
29283 +
29284 /** +
29285 * A specialized version of `_.filter` for arrays without support for +
29286 * iteratee shorthands. +
29287 * +
29288 * @private +
29289 * @param {Array} [array] The array to iterate over. +
29290 * @param {Function} predicate The function invoked per iteration. +
29291 * @returns {Array} Returns the new filtered array. +
29292 */ +
29293 function arrayFilter(array, predicate) { +
29294 var index = -1, +
29295 length = array == null ? 0 : array.length, +
29296 resIndex = 0, +
29297 result = []; +
29298 +
29299 while (++index < length) { +
29300 var value = array[index]; +
29301 if (predicate(value, index, array)) { +
29302 result[resIndex++] = value; +
29303 } +
29304 } +
29305 return result; +
29306 } +
29307 +
29308 /** +
29309 * A specialized version of `_.includes` for arrays without support for +
29310 * specifying an index to search from. +
29311 * +
29312 * @private +
29313 * @param {Array} [array] The array to inspect. +
29314 * @param {*} target The value to search for. +
29315 * @returns {boolean} Returns `true` if `target` is found, else `false`. +
29316 */ +
29317 function arrayIncludes(array, value) { +
29318 var length = array == null ? 0 : array.length; +
29319 return !!length && baseIndexOf(array, value, 0) > -1; +
29320 } +
29321 +
29322 /** +
29323 * This function is like `arrayIncludes` except that it accepts a comparator. +
29324 * +
29325 * @private +
29326 * @param {Array} [array] The array to inspect. +
29327 * @param {*} target The value to search for. +
29328 * @param {Function} comparator The comparator invoked per element. +
29329 * @returns {boolean} Returns `true` if `target` is found, else `false`. +
29330 */ +
29331 function arrayIncludesWith(array, value, comparator) { +
29332 var index = -1, +
29333 length = array == null ? 0 : array.length; +
29334 +
29335 while (++index < length) { +
29336 if (comparator(value, array[index])) { +
29337 return true; +
29338 } +
29339 } +
29340 return false; +
29341 } +
29342 +
29343 /** +
29344 * A specialized version of `_.map` for arrays without support for iteratee +
29345 * shorthands. +
29346 * +
29347 * @private +
29348 * @param {Array} [array] The array to iterate over. +
29349 * @param {Function} iteratee The function invoked per iteration. +
29350 * @returns {Array} Returns the new mapped array. +
29351 */ +
29352 function arrayMap(array, iteratee) { +
29353 var index = -1, +
29354 length = array == null ? 0 : array.length, +
29355 result = Array(length); +
29356 +
29357 while (++index < length) { +
29358 result[index] = iteratee(array[index], index, array); +
29359 } +
29360 return result; +
29361 } +
29362 +
29363 /** +
29364 * Appends the elements of `values` to `array`. +
29365 * +
29366 * @private +
29367 * @param {Array} array The array to modify. +
29368 * @param {Array} values The values to append. +
29369 * @returns {Array} Returns `array`. +
29370 */ +
29371 function arrayPush(array, values) { +
29372 var index = -1, +
29373 length = values.length, +
29374 offset = array.length; +
29375 +
29376 while (++index < length) { +
29377 array[offset + index] = values[index]; +
29378 } +
29379 return array; +
29380 } +
29381 +
29382 /** +
29383 * A specialized version of `_.reduce` for arrays without support for +
29384 * iteratee shorthands. +
29385 * +
29386 * @private +
29387 * @param {Array} [array] The array to iterate over. +
29388 * @param {Function} iteratee The function invoked per iteration. +
29389 * @param {*} [accumulator] The initial value. +
29390 * @param {boolean} [initAccum] Specify using the first element of `array` as +
29391 * the initial value. +
29392 * @returns {*} Returns the accumulated value. +
29393 */ +
29394 function arrayReduce(array, iteratee, accumulator, initAccum) { +
29395 var index = -1, +
29396 length = array == null ? 0 : array.length; +
29397 +
29398 if (initAccum && length) { +
29399 accumulator = array[++index]; +
29400 } +
29401 while (++index < length) { +
29402 accumulator = iteratee(accumulator, array[index], index, array); +
29403 } +
29404 return accumulator; +
29405 } +
29406 +
29407 /** +
29408 * A specialized version of `_.reduceRight` for arrays without support for +
29409 * iteratee shorthands. +
29410 * +
29411 * @private +
29412 * @param {Array} [array] The array to iterate over. +
29413 * @param {Function} iteratee The function invoked per iteration. +
29414 * @param {*} [accumulator] The initial value. +
29415 * @param {boolean} [initAccum] Specify using the last element of `array` as +
29416 * the initial value. +
29417 * @returns {*} Returns the accumulated value. +
29418 */ +
29419 function arrayReduceRight(array, iteratee, accumulator, initAccum) { +
29420 var length = array == null ? 0 : array.length; +
29421 if (initAccum && length) { +
29422 accumulator = array[--length]; +
29423 } +
29424 while (length--) { +
29425 accumulator = iteratee(accumulator, array[length], length, array); +
29426 } +
29427 return accumulator; +
29428 } +
29429 +
29430 /** +
29431 * A specialized version of `_.some` for arrays without support for iteratee +
29432 * shorthands. +
29433 * +
29434 * @private +
29435 * @param {Array} [array] The array to iterate over. +
29436 * @param {Function} predicate The function invoked per iteration. +
29437 * @returns {boolean} Returns `true` if any element passes the predicate check, +
29438 * else `false`. +
29439 */ +
29440 function arraySome(array, predicate) { +
29441 var index = -1, +
29442 length = array == null ? 0 : array.length; +
29443 +
29444 while (++index < length) { +
29445 if (predicate(array[index], index, array)) { +
29446 return true; +
29447 } +
29448 } +
29449 return false; +
29450 } +
29451 +
29452 /** +
29453 * Gets the size of an ASCII `string`. +
29454 * +
29455 * @private +
29456 * @param {string} string The string inspect. +
29457 * @returns {number} Returns the string size. +
29458 */ +
29459 var asciiSize = baseProperty('length'); +
29460 +
29461 /** +
29462 * Converts an ASCII `string` to an array. +
29463 * +
29464 * @private +
29465 * @param {string} string The string to convert. +
29466 * @returns {Array} Returns the converted array. +
29467 */ +
29468 function asciiToArray(string) { +
29469 return string.split(''); +
29470 } +
29471 +
29472 /** +
29473 * Splits an ASCII `string` into an array of its words. +
29474 * +
29475 * @private +
29476 * @param {string} The string to inspect. +
29477 * @returns {Array} Returns the words of `string`. +
29478 */ +
29479 function asciiWords(string) { +
29480 return string.match(reAsciiWord) || []; +
29481 } +
29482 +
29483 /** +
29484 * The base implementation of methods like `_.findKey` and `_.findLastKey`, +
29485 * without support for iteratee shorthands, which iterates over `collection` +
29486 * using `eachFunc`. +
29487 * +
29488 * @private +
29489 * @param {Array|Object} collection The collection to inspect. +
29490 * @param {Function} predicate The function invoked per iteration. +
29491 * @param {Function} eachFunc The function to iterate over `collection`. +
29492 * @returns {*} Returns the found element or its key, else `undefined`. +
29493 */ +
29494 function baseFindKey(collection, predicate, eachFunc) { +
29495 var result; +
29496 eachFunc(collection, function(value, key, collection) { +
29497 if (predicate(value, key, collection)) { +
29498 result = key; +
29499 return false; +
29500 } +
29501 }); +
29502 return result; +
29503 } +
29504 +
29505 /** +
29506 * The base implementation of `_.findIndex` and `_.findLastIndex` without +
29507 * support for iteratee shorthands. +
29508 * +
29509 * @private +
29510 * @param {Array} array The array to inspect. +
29511 * @param {Function} predicate The function invoked per iteration. +
29512 * @param {number} fromIndex The index to search from. +
29513 * @param {boolean} [fromRight] Specify iterating from right to left. +
29514 * @returns {number} Returns the index of the matched value, else `-1`. +
29515 */ +
29516 function baseFindIndex(array, predicate, fromIndex, fromRight) { +
29517 var length = array.length, +
29518 index = fromIndex + (fromRight ? 1 : -1); +
29519 +
29520 while ((fromRight ? index-- : ++index < length)) { +
29521 if (predicate(array[index], index, array)) { +
29522 return index; +
29523 } +
29524 } +
29525 return -1; +
29526 } +
29527 +
29528 /** +
29529 * The base implementation of `_.indexOf` without `fromIndex` bounds checks. +
29530 * +
29531 * @private +
29532 * @param {Array} array The array to inspect. +
29533 * @param {*} value The value to search for. +
29534 * @param {number} fromIndex The index to search from. +
29535 * @returns {number} Returns the index of the matched value, else `-1`. +
29536 */ +
29537 function baseIndexOf(array, value, fromIndex) { +
29538 return value === value +
29539 ? strictIndexOf(array, value, fromIndex) +
29540 : baseFindIndex(array, baseIsNaN, fromIndex); +
29541 } +
29542 +
29543 /** +
29544 * This function is like `baseIndexOf` except that it accepts a comparator. +
29545 * +
29546 * @private +
29547 * @param {Array} array The array to inspect. +
29548 * @param {*} value The value to search for. +
29549 * @param {number} fromIndex The index to search from. +
29550 * @param {Function} comparator The comparator invoked per element. +
29551 * @returns {number} Returns the index of the matched value, else `-1`. +
29552 */ +
29553 function baseIndexOfWith(array, value, fromIndex, comparator) { +
29554 var index = fromIndex - 1, +
29555 length = array.length; +
29556 +
29557 while (++index < length) { +
29558 if (comparator(array[index], value)) { +
29559 return index; +
29560 } +
29561 } +
29562 return -1; +
29563 } +
29564 +
29565 /** +
29566 * The base implementation of `_.isNaN` without support for number objects. +
29567 * +
29568 * @private +
29569 * @param {*} value The value to check. +
29570 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +
29571 */ +
29572 function baseIsNaN(value) { +
29573 return value !== value; +
29574 } +
29575 +
29576 /** +
29577 * The base implementation of `_.mean` and `_.meanBy` without support for +
29578 * iteratee shorthands. +
29579 * +
29580 * @private +
29581 * @param {Array} array The array to iterate over. +
29582 * @param {Function} iteratee The function invoked per iteration. +
29583 * @returns {number} Returns the mean. +
29584 */ +
29585 function baseMean(array, iteratee) { +
29586 var length = array == null ? 0 : array.length; +
29587 return length ? (baseSum(array, iteratee) / length) : NAN; +
29588 } +
29589 +
29590 /** +
29591 * The base implementation of `_.property` without support for deep paths. +
29592 * +
29593 * @private +
29594 * @param {string} key The key of the property to get. +
29595 * @returns {Function} Returns the new accessor function. +
29596 */ +
29597 function baseProperty(key) { +
29598 return function(object) { +
29599 return object == null ? undefined : object[key]; +
29600 }; +
29601 } +
29602 +
29603 /** +
29604 * The base implementation of `_.propertyOf` without support for deep paths. +
29605 * +
29606 * @private +
29607 * @param {Object} object The object to query. +
29608 * @returns {Function} Returns the new accessor function. +
29609 */ +
29610 function basePropertyOf(object) { +
29611 return function(key) { +
29612 return object == null ? undefined : object[key]; +
29613 }; +
29614 } +
29615 +
29616 /** +
29617 * The base implementation of `_.reduce` and `_.reduceRight`, without support +
29618 * for iteratee shorthands, which iterates over `collection` using `eachFunc`. +
29619 * +
29620 * @private +
29621 * @param {Array|Object} collection The collection to iterate over. +
29622 * @param {Function} iteratee The function invoked per iteration. +
29623 * @param {*} accumulator The initial value. +
29624 * @param {boolean} initAccum Specify using the first or last element of +
29625 * `collection` as the initial value. +
29626 * @param {Function} eachFunc The function to iterate over `collection`. +
29627 * @returns {*} Returns the accumulated value. +
29628 */ +
29629 function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { +
29630 eachFunc(collection, function(value, index, collection) { +
29631 accumulator = initAccum +
29632 ? (initAccum = false, value) +
29633 : iteratee(accumulator, value, index, collection); +
29634 }); +
29635 return accumulator; +
29636 } +
29637 +
29638 /** +
29639 * The base implementation of `_.sortBy` which uses `comparer` to define the +
29640 * sort order of `array` and replaces criteria objects with their corresponding +
29641 * values. +
29642 * +
29643 * @private +
29644 * @param {Array} array The array to sort. +
29645 * @param {Function} comparer The function to define sort order. +
29646 * @returns {Array} Returns `array`. +
29647 */ +
29648 function baseSortBy(array, comparer) { +
29649 var length = array.length; +
29650 +
29651 array.sort(comparer); +
29652 while (length--) { +
29653 array[length] = array[length].value; +
29654 } +
29655 return array; +
29656 } +
29657 +
29658 /** +
29659 * The base implementation of `_.sum` and `_.sumBy` without support for +
29660 * iteratee shorthands. +
29661 * +
29662 * @private +
29663 * @param {Array} array The array to iterate over. +
29664 * @param {Function} iteratee The function invoked per iteration. +
29665 * @returns {number} Returns the sum. +
29666 */ +
29667 function baseSum(array, iteratee) { +
29668 var result, +
29669 index = -1, +
29670 length = array.length; +
29671 +
29672 while (++index < length) { +
29673 var current = iteratee(array[index]); +
29674 if (current !== undefined) { +
29675 result = result === undefined ? current : (result + current); +
29676 } +
29677 } +
29678 return result; +
29679 } +
29680 +
29681 /** +
29682 * The base implementation of `_.times` without support for iteratee shorthands +
29683 * or max array length checks. +
29684 * +
29685 * @private +
29686 * @param {number} n The number of times to invoke `iteratee`. +
29687 * @param {Function} iteratee The function invoked per iteration. +
29688 * @returns {Array} Returns the array of results. +
29689 */ +
29690 function baseTimes(n, iteratee) { +
29691 var index = -1, +
29692 result = Array(n); +
29693 +
29694 while (++index < n) { +
29695 result[index] = iteratee(index); +
29696 } +
29697 return result; +
29698 } +
29699 +
29700 /** +
29701 * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array +
29702 * of key-value pairs for `object` corresponding to the property names of `props`. +
29703 * +
29704 * @private +
29705 * @param {Object} object The object to query. +
29706 * @param {Array} props The property names to get values for. +
29707 * @returns {Object} Returns the key-value pairs. +
29708 */ +
29709 function baseToPairs(object, props) { +
29710 return arrayMap(props, function(key) { +
29711 return [key, object[key]]; +
29712 }); +
29713 } +
29714 +
29715 /** +
29716 * The base implementation of `_.unary` without support for storing metadata. +
29717 * +
29718 * @private +
29719 * @param {Function} func The function to cap arguments for. +
29720 * @returns {Function} Returns the new capped function. +
29721 */ +
29722 function baseUnary(func) { +
29723 return function(value) { +
29724 return func(value); +
29725 }; +
29726 } +
29727 +
29728 /** +
29729 * The base implementation of `_.values` and `_.valuesIn` which creates an +
29730 * array of `object` property values corresponding to the property names +
29731 * of `props`. +
29732 * +
29733 * @private +
29734 * @param {Object} object The object to query. +
29735 * @param {Array} props The property names to get values for. +
29736 * @returns {Object} Returns the array of property values. +
29737 */ +
29738 function baseValues(object, props) { +
29739 return arrayMap(props, function(key) { +
29740 return object[key]; +
29741 }); +
29742 } +
29743 +
29744 /** +
29745 * Checks if a `cache` value for `key` exists. +
29746 * +
29747 * @private +
29748 * @param {Object} cache The cache to query. +
29749 * @param {string} key The key of the entry to check. +
29750 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
29751 */ +
29752 function cacheHas(cache, key) { +
29753 return cache.has(key); +
29754 } +
29755 +
29756 /** +
29757 * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol +
29758 * that is not found in the character symbols. +
29759 * +
29760 * @private +
29761 * @param {Array} strSymbols The string symbols to inspect. +
29762 * @param {Array} chrSymbols The character symbols to find. +
29763 * @returns {number} Returns the index of the first unmatched string symbol. +
29764 */ +
29765 function charsStartIndex(strSymbols, chrSymbols) { +
29766 var index = -1, +
29767 length = strSymbols.length; +
29768 +
29769 while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +
29770 return index; +
29771 } +
29772 +
29773 /** +
29774 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol +
29775 * that is not found in the character symbols. +
29776 * +
29777 * @private +
29778 * @param {Array} strSymbols The string symbols to inspect. +
29779 * @param {Array} chrSymbols The character symbols to find. +
29780 * @returns {number} Returns the index of the last unmatched string symbol. +
29781 */ +
29782 function charsEndIndex(strSymbols, chrSymbols) { +
29783 var index = strSymbols.length; +
29784 +
29785 while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +
29786 return index; +
29787 } +
29788 +
29789 /** +
29790 * Gets the number of `placeholder` occurrences in `array`. +
29791 * +
29792 * @private +
29793 * @param {Array} array The array to inspect. +
29794 * @param {*} placeholder The placeholder to search for. +
29795 * @returns {number} Returns the placeholder count. +
29796 */ +
29797 function countHolders(array, placeholder) { +
29798 var length = array.length, +
29799 result = 0; +
29800 +
29801 while (length--) { +
29802 if (array[length] === placeholder) { +
29803 ++result; +
29804 } +
29805 } +
29806 return result; +
29807 } +
29808 +
29809 /** +
29810 * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A +
29811 * letters to basic Latin letters. +
29812 * +
29813 * @private +
29814 * @param {string} letter The matched letter to deburr. +
29815 * @returns {string} Returns the deburred letter. +
29816 */ +
29817 var deburrLetter = basePropertyOf(deburredLetters); +
29818 +
29819 /** +
29820 * Used by `_.escape` to convert characters to HTML entities. +
29821 * +
29822 * @private +
29823 * @param {string} chr The matched character to escape. +
29824 * @returns {string} Returns the escaped character. +
29825 */ +
29826 var escapeHtmlChar = basePropertyOf(htmlEscapes); +
29827 +
29828 /** +
29829 * Used by `_.template` to escape characters for inclusion in compiled string literals. +
29830 * +
29831 * @private +
29832 * @param {string} chr The matched character to escape. +
29833 * @returns {string} Returns the escaped character. +
29834 */ +
29835 function escapeStringChar(chr) { +
29836 return '\\' + stringEscapes[chr]; +
29837 } +
29838 +
29839 /** +
29840 * Gets the value at `key` of `object`. +
29841 * +
29842 * @private +
29843 * @param {Object} [object] The object to query. +
29844 * @param {string} key The key of the property to get. +
29845 * @returns {*} Returns the property value. +
29846 */ +
29847 function getValue(object, key) { +
29848 return object == null ? undefined : object[key]; +
29849 } +
29850 +
29851 /** +
29852 * Checks if `string` contains Unicode symbols. +
29853 * +
29854 * @private +
29855 * @param {string} string The string to inspect. +
29856 * @returns {boolean} Returns `true` if a symbol is found, else `false`. +
29857 */ +
29858 function hasUnicode(string) { +
29859 return reHasUnicode.test(string); +
29860 } +
29861 +
29862 /** +
29863 * Checks if `string` contains a word composed of Unicode symbols. +
29864 * +
29865 * @private +
29866 * @param {string} string The string to inspect. +
29867 * @returns {boolean} Returns `true` if a word is found, else `false`. +
29868 */ +
29869 function hasUnicodeWord(string) { +
29870 return reHasUnicodeWord.test(string); +
29871 } +
29872 +
29873 /** +
29874 * Converts `iterator` to an array. +
29875 * +
29876 * @private +
29877 * @param {Object} iterator The iterator to convert. +
29878 * @returns {Array} Returns the converted array. +
29879 */ +
29880 function iteratorToArray(iterator) { +
29881 var data, +
29882 result = []; +
29883 +
29884 while (!(data = iterator.next()).done) { +
29885 result.push(data.value); +
29886 } +
29887 return result; +
29888 } +
29889 +
29890 /** +
29891 * Converts `map` to its key-value pairs. +
29892 * +
29893 * @private +
29894 * @param {Object} map The map to convert. +
29895 * @returns {Array} Returns the key-value pairs. +
29896 */ +
29897 function mapToArray(map) { +
29898 var index = -1, +
29899 result = Array(map.size); +
29900 +
29901 map.forEach(function(value, key) { +
29902 result[++index] = [key, value]; +
29903 }); +
29904 return result; +
29905 } +
29906 +
29907 /** +
29908 * Creates a unary function that invokes `func` with its argument transformed. +
29909 * +
29910 * @private +
29911 * @param {Function} func The function to wrap. +
29912 * @param {Function} transform The argument transform. +
29913 * @returns {Function} Returns the new function. +
29914 */ +
29915 function overArg(func, transform) { +
29916 return function(arg) { +
29917 return func(transform(arg)); +
29918 }; +
29919 } +
29920 +
29921 /** +
29922 * Replaces all `placeholder` elements in `array` with an internal placeholder +
29923 * and returns an array of their indexes. +
29924 * +
29925 * @private +
29926 * @param {Array} array The array to modify. +
29927 * @param {*} placeholder The placeholder to replace. +
29928 * @returns {Array} Returns the new array of placeholder indexes. +
29929 */ +
29930 function replaceHolders(array, placeholder) { +
29931 var index = -1, +
29932 length = array.length, +
29933 resIndex = 0, +
29934 result = []; +
29935 +
29936 while (++index < length) { +
29937 var value = array[index]; +
29938 if (value === placeholder || value === PLACEHOLDER) { +
29939 array[index] = PLACEHOLDER; +
29940 result[resIndex++] = index; +
29941 } +
29942 } +
29943 return result; +
29944 } +
29945 +
29946 /** +
29947 * Gets the value at `key`, unless `key` is "__proto__". +
29948 * +
29949 * @private +
29950 * @param {Object} object The object to query. +
29951 * @param {string} key The key of the property to get. +
29952 * @returns {*} Returns the property value. +
29953 */ +
29954 function safeGet(object, key) { +
29955 return key == '__proto__' +
29956 ? undefined +
29957 : object[key]; +
29958 } +
29959 +
29960 /** +
29961 * Converts `set` to an array of its values. +
29962 * +
29963 * @private +
29964 * @param {Object} set The set to convert. +
29965 * @returns {Array} Returns the values. +
29966 */ +
29967 function setToArray(set) { +
29968 var index = -1, +
29969 result = Array(set.size); +
29970 +
29971 set.forEach(function(value) { +
29972 result[++index] = value; +
29973 }); +
29974 return result; +
29975 } +
29976 +
29977 /** +
29978 * Converts `set` to its value-value pairs. +
29979 * +
29980 * @private +
29981 * @param {Object} set The set to convert. +
29982 * @returns {Array} Returns the value-value pairs. +
29983 */ +
29984 function setToPairs(set) { +
29985 var index = -1, +
29986 result = Array(set.size); +
29987 +
29988 set.forEach(function(value) { +
29989 result[++index] = [value, value]; +
29990 }); +
29991 return result; +
29992 } +
29993 +
29994 /** +
29995 * A specialized version of `_.indexOf` which performs strict equality +
29996 * comparisons of values, i.e. `===`. +
29997 * +
29998 * @private +
29999 * @param {Array} array The array to inspect. +
30000 * @param {*} value The value to search for. +
30001 * @param {number} fromIndex The index to search from. +
30002 * @returns {number} Returns the index of the matched value, else `-1`. +
30003 */ +
30004 function strictIndexOf(array, value, fromIndex) { +
30005 var index = fromIndex - 1, +
30006 length = array.length; +
30007 +
30008 while (++index < length) { +
30009 if (array[index] === value) { +
30010 return index; +
30011 } +
30012 } +
30013 return -1; +
30014 } +
30015 +
30016 /** +
30017 * A specialized version of `_.lastIndexOf` which performs strict equality +
30018 * comparisons of values, i.e. `===`. +
30019 * +
30020 * @private +
30021 * @param {Array} array The array to inspect. +
30022 * @param {*} value The value to search for. +
30023 * @param {number} fromIndex The index to search from. +
30024 * @returns {number} Returns the index of the matched value, else `-1`. +
30025 */ +
30026 function strictLastIndexOf(array, value, fromIndex) { +
30027 var index = fromIndex + 1; +
30028 while (index--) { +
30029 if (array[index] === value) { +
30030 return index; +
30031 } +
30032 } +
30033 return index; +
30034 } +
30035 +
30036 /** +
30037 * Gets the number of symbols in `string`. +
30038 * +
30039 * @private +
30040 * @param {string} string The string to inspect. +
30041 * @returns {number} Returns the string size. +
30042 */ +
30043 function stringSize(string) { +
30044 return hasUnicode(string) +
30045 ? unicodeSize(string) +
30046 : asciiSize(string); +
30047 } +
30048 +
30049 /** +
30050 * Converts `string` to an array. +
30051 * +
30052 * @private +
30053 * @param {string} string The string to convert. +
30054 * @returns {Array} Returns the converted array. +
30055 */ +
30056 function stringToArray(string) { +
30057 return hasUnicode(string) +
30058 ? unicodeToArray(string) +
30059 : asciiToArray(string); +
30060 } +
30061 +
30062 /** +
30063 * Used by `_.unescape` to convert HTML entities to characters. +
30064 * +
30065 * @private +
30066 * @param {string} chr The matched character to unescape. +
30067 * @returns {string} Returns the unescaped character. +
30068 */ +
30069 var unescapeHtmlChar = basePropertyOf(htmlUnescapes); +
30070 +
30071 /** +
30072 * Gets the size of a Unicode `string`. +
30073 * +
30074 * @private +
30075 * @param {string} string The string inspect. +
30076 * @returns {number} Returns the string size. +
30077 */ +
30078 function unicodeSize(string) { +
30079 var result = reUnicode.lastIndex = 0; +
30080 while (reUnicode.test(string)) { +
30081 ++result; +
30082 } +
30083 return result; +
30084 } +
30085 +
30086 /** +
30087 * Converts a Unicode `string` to an array. +
30088 * +
30089 * @private +
30090 * @param {string} string The string to convert. +
30091 * @returns {Array} Returns the converted array. +
30092 */ +
30093 function unicodeToArray(string) { +
30094 return string.match(reUnicode) || []; +
30095 } +
30096 +
30097 /** +
30098 * Splits a Unicode `string` into an array of its words. +
30099 * +
30100 * @private +
30101 * @param {string} The string to inspect. +
30102 * @returns {Array} Returns the words of `string`. +
30103 */ +
30104 function unicodeWords(string) { +
30105 return string.match(reUnicodeWord) || []; +
30106 } +
30107 +
30108 /*--------------------------------------------------------------------------*/ +
30109 +
30110 /** +
30111 * Create a new pristine `lodash` function using the `context` object. +
30112 * +
30113 * @static +
30114 * @memberOf _ +
30115 * @since 1.1.0 +
30116 * @category Util +
30117 * @param {Object} [context=root] The context object. +
30118 * @returns {Function} Returns a new `lodash` function. +
30119 * @example +
30120 * +
30121 * _.mixin({ 'foo': _.constant('foo') }); +
30122 * +
30123 * var lodash = _.runInContext(); +
30124 * lodash.mixin({ 'bar': lodash.constant('bar') }); +
30125 * +
30126 * _.isFunction(_.foo); +
30127 * // => true +
30128 * _.isFunction(_.bar); +
30129 * // => false +
30130 * +
30131 * lodash.isFunction(lodash.foo); +
30132 * // => false +
30133 * lodash.isFunction(lodash.bar); +
30134 * // => true +
30135 * +
30136 * // Create a suped-up `defer` in Node.js. +
30137 * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; +
30138 */ +
30139 var runInContext = (function runInContext(context) { +
30140 context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); +
30141 +
30142 /** Built-in constructor references. */ +
30143 var Array = context.Array, +
30144 Date = context.Date, +
30145 Error = context.Error, +
30146 Function = context.Function, +
30147 Math = context.Math, +
30148 Object = context.Object, +
30149 RegExp = context.RegExp, +
30150 String = context.String, +
30151 TypeError = context.TypeError; +
30152 +
30153 /** Used for built-in method references. */ +
30154 var arrayProto = Array.prototype, +
30155 funcProto = Function.prototype, +
30156 objectProto = Object.prototype; +
30157 +
30158 /** Used to detect overreaching core-js shims. */ +
30159 var coreJsData = context['__core-js_shared__']; +
30160 +
30161 /** Used to resolve the decompiled source of functions. */ +
30162 var funcToString = funcProto.toString; +
30163 +
30164 /** Used to check objects for own properties. */ +
30165 var hasOwnProperty = objectProto.hasOwnProperty; +
30166 +
30167 /** Used to generate unique IDs. */ +
30168 var idCounter = 0; +
30169 +
30170 /** Used to detect methods masquerading as native. */ +
30171 var maskSrcKey = (function() { +
30172 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); +
30173 return uid ? ('Symbol(src)_1.' + uid) : ''; +
30174 }()); +
30175 +
30176 /** +
30177 * Used to resolve the +
30178 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) +
30179 * of values. +
30180 */ +
30181 var nativeObjectToString = objectProto.toString; +
30182 +
30183 /** Used to infer the `Object` constructor. */ +
30184 var objectCtorString = funcToString.call(Object); +
30185 +
30186 /** Used to restore the original `_` reference in `_.noConflict`. */ +
30187 var oldDash = root._; +
30188 +
30189 /** Used to detect if a method is native. */ +
30190 var reIsNative = RegExp('^' + +
30191 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') +
30192 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +
30193 ); +
30194 +
30195 /** Built-in value references. */ +
30196 var Buffer = moduleExports ? context.Buffer : undefined, +
30197 Symbol = context.Symbol, +
30198 Uint8Array = context.Uint8Array, +
30199 allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, +
30200 getPrototype = overArg(Object.getPrototypeOf, Object), +
30201 objectCreate = Object.create, +
30202 propertyIsEnumerable = objectProto.propertyIsEnumerable, +
30203 splice = arrayProto.splice, +
30204 spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, +
30205 symIterator = Symbol ? Symbol.iterator : undefined, +
30206 symToStringTag = Symbol ? Symbol.toStringTag : undefined; +
30207 +
30208 var defineProperty = (function() { +
30209 try { +
30210 var func = getNative(Object, 'defineProperty'); +
30211 func({}, '', {}); +
30212 return func; +
30213 } catch (e) {} +
30214 }()); +
30215 +
30216 /** Mocked built-ins. */ +
30217 var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, +
30218 ctxNow = Date && Date.now !== root.Date.now && Date.now, +
30219 ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; +
30220 +
30221 /* Built-in method references for those with the same name as other `lodash` methods. */ +
30222 var nativeCeil = Math.ceil, +
30223 nativeFloor = Math.floor, +
30224 nativeGetSymbols = Object.getOwnPropertySymbols, +
30225 nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, +
30226 nativeIsFinite = context.isFinite, +
30227 nativeJoin = arrayProto.join, +
30228 nativeKeys = overArg(Object.keys, Object), +
30229 nativeMax = Math.max, +
30230 nativeMin = Math.min, +
30231 nativeNow = Date.now, +
30232 nativeParseInt = context.parseInt, +
30233 nativeRandom = Math.random, +
30234 nativeReverse = arrayProto.reverse; +
30235 +
30236 /* Built-in method references that are verified to be native. */ +
30237 var DataView = getNative(context, 'DataView'), +
30238 Map = getNative(context, 'Map'), +
30239 Promise = getNative(context, 'Promise'), +
30240 Set = getNative(context, 'Set'), +
30241 WeakMap = getNative(context, 'WeakMap'), +
30242 nativeCreate = getNative(Object, 'create'); +
30243 +
30244 /** Used to store function metadata. */ +
30245 var metaMap = WeakMap && new WeakMap; +
30246 +
30247 /** Used to lookup unminified function names. */ +
30248 var realNames = {}; +
30249 +
30250 /** Used to detect maps, sets, and weakmaps. */ +
30251 var dataViewCtorString = toSource(DataView), +
30252 mapCtorString = toSource(Map), +
30253 promiseCtorString = toSource(Promise), +
30254 setCtorString = toSource(Set), +
30255 weakMapCtorString = toSource(WeakMap); +
30256 +
30257 /** Used to convert symbols to primitives and strings. */ +
30258 var symbolProto = Symbol ? Symbol.prototype : undefined, +
30259 symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, +
30260 symbolToString = symbolProto ? symbolProto.toString : undefined; +
30261 +
30262 /*------------------------------------------------------------------------*/ +
30263 +
30264 /** +
30265 * Creates a `lodash` object which wraps `value` to enable implicit method +
30266 * chain sequences. Methods that operate on and return arrays, collections, +
30267 * and functions can be chained together. Methods that retrieve a single value +
30268 * or may return a primitive value will automatically end the chain sequence +
30269 * and return the unwrapped value. Otherwise, the value must be unwrapped +
30270 * with `_#value`. +
30271 * +
30272 * Explicit chain sequences, which must be unwrapped with `_#value`, may be +
30273 * enabled using `_.chain`. +
30274 * +
30275 * The execution of chained methods is lazy, that is, it's deferred until +
30276 * `_#value` is implicitly or explicitly called. +
30277 * +
30278 * Lazy evaluation allows several methods to support shortcut fusion. +
30279 * Shortcut fusion is an optimization to merge iteratee calls; this avoids +
30280 * the creation of intermediate arrays and can greatly reduce the number of +
30281 * iteratee executions. Sections of a chain sequence qualify for shortcut +
30282 * fusion if the section is applied to an array and iteratees accept only +
30283 * one argument. The heuristic for whether a section qualifies for shortcut +
30284 * fusion is subject to change. +
30285 * +
30286 * Chaining is supported in custom builds as long as the `_#value` method is +
30287 * directly or indirectly included in the build. +
30288 * +
30289 * In addition to lodash methods, wrappers have `Array` and `String` methods. +
30290 * +
30291 * The wrapper `Array` methods are: +
30292 * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` +
30293 * +
30294 * The wrapper `String` methods are: +
30295 * `replace` and `split` +
30296 * +
30297 * The wrapper methods that support shortcut fusion are: +
30298 * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, +
30299 * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, +
30300 * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` +
30301 * +
30302 * The chainable wrapper methods are: +
30303 * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, +
30304 * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, +
30305 * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, +
30306 * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, +
30307 * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, +
30308 * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, +
30309 * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, +
30310 * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, +
30311 * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, +
30312 * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, +
30313 * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, +
30314 * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, +
30315 * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, +
30316 * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, +
30317 * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, +
30318 * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, +
30319 * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, +
30320 * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, +
30321 * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, +
30322 * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, +
30323 * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, +
30324 * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, +
30325 * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, +
30326 * `zipObject`, `zipObjectDeep`, and `zipWith` +
30327 * +
30328 * The wrapper methods that are **not** chainable by default are: +
30329 * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, +
30330 * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, +
30331 * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, +
30332 * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, +
30333 * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, +
30334 * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, +
30335 * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, +
30336 * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, +
30337 * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, +
30338 * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, +
30339 * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, +
30340 * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, +
30341 * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, +
30342 * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, +
30343 * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, +
30344 * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, +
30345 * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, +
30346 * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, +
30347 * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, +
30348 * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, +
30349 * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, +
30350 * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, +
30351 * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, +
30352 * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, +
30353 * `upperFirst`, `value`, and `words` +
30354 * +
30355 * @name _ +
30356 * @constructor +
30357 * @category Seq +
30358 * @param {*} value The value to wrap in a `lodash` instance. +
30359 * @returns {Object} Returns the new `lodash` wrapper instance. +
30360 * @example +
30361 * +
30362 * function square(n) { +
30363 * return n * n; +
30364 * } +
30365 * +
30366 * var wrapped = _([1, 2, 3]); +
30367 * +
30368 * // Returns an unwrapped value. +
30369 * wrapped.reduce(_.add); +
30370 * // => 6 +
30371 * +
30372 * // Returns a wrapped value. +
30373 * var squares = wrapped.map(square); +
30374 * +
30375 * _.isArray(squares); +
30376 * // => false +
30377 * +
30378 * _.isArray(squares.value()); +
30379 * // => true +
30380 */ +
30381 function lodash(value) { +
30382 if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { +
30383 if (value instanceof LodashWrapper) { +
30384 return value; +
30385 } +
30386 if (hasOwnProperty.call(value, '__wrapped__')) { +
30387 return wrapperClone(value); +
30388 } +
30389 } +
30390 return new LodashWrapper(value); +
30391 } +
30392 +
30393 /** +
30394 * The base implementation of `_.create` without support for assigning +
30395 * properties to the created object. +
30396 * +
30397 * @private +
30398 * @param {Object} proto The object to inherit from. +
30399 * @returns {Object} Returns the new object. +
30400 */ +
30401 var baseCreate = (function() { +
30402 function object() {} +
30403 return function(proto) { +
30404 if (!isObject(proto)) { +
30405 return {}; +
30406 } +
30407 if (objectCreate) { +
30408 return objectCreate(proto); +
30409 } +
30410 object.prototype = proto; +
30411 var result = new object; +
30412 object.prototype = undefined; +
30413 return result; +
30414 }; +
30415 }()); +
30416 +
30417 /** +
30418 * The function whose prototype chain sequence wrappers inherit from. +
30419 * +
30420 * @private +
30421 */ +
30422 function baseLodash() { +
30423 // No operation performed. +
30424 } +
30425 +
30426 /** +
30427 * The base constructor for creating `lodash` wrapper objects. +
30428 * +
30429 * @private +
30430 * @param {*} value The value to wrap. +
30431 * @param {boolean} [chainAll] Enable explicit method chain sequences. +
30432 */ +
30433 function LodashWrapper(value, chainAll) { +
30434 this.__wrapped__ = value; +
30435 this.__actions__ = []; +
30436 this.__chain__ = !!chainAll; +
30437 this.__index__ = 0; +
30438 this.__values__ = undefined; +
30439 } +
30440 +
30441 /** +
30442 * By default, the template delimiters used by lodash are like those in +
30443 * embedded Ruby (ERB) as well as ES2015 template strings. Change the +
30444 * following template settings to use alternative delimiters. +
30445 * +
30446 * @static +
30447 * @memberOf _ +
30448 * @type {Object} +
30449 */ +
30450 lodash.templateSettings = { +
30451 +
30452 /** +
30453 * Used to detect `data` property values to be HTML-escaped. +
30454 * +
30455 * @memberOf _.templateSettings +
30456 * @type {RegExp} +
30457 */ +
30458 'escape': reEscape, +
30459 +
30460 /** +
30461 * Used to detect code to be evaluated. +
30462 * +
30463 * @memberOf _.templateSettings +
30464 * @type {RegExp} +
30465 */ +
30466 'evaluate': reEvaluate, +
30467 +
30468 /** +
30469 * Used to detect `data` property values to inject. +
30470 * +
30471 * @memberOf _.templateSettings +
30472 * @type {RegExp} +
30473 */ +
30474 'interpolate': reInterpolate, +
30475 +
30476 /** +
30477 * Used to reference the data object in the template text. +
30478 * +
30479 * @memberOf _.templateSettings +
30480 * @type {string} +
30481 */ +
30482 'variable': '', +
30483 +
30484 /** +
30485 * Used to import variables into the compiled template. +
30486 * +
30487 * @memberOf _.templateSettings +
30488 * @type {Object} +
30489 */ +
30490 'imports': { +
30491 +
30492 /** +
30493 * A reference to the `lodash` function. +
30494 * +
30495 * @memberOf _.templateSettings.imports +
30496 * @type {Function} +
30497 */ +
30498 '_': lodash +
30499 } +
30500 }; +
30501 +
30502 // Ensure wrappers are instances of `baseLodash`. +
30503 lodash.prototype = baseLodash.prototype; +
30504 lodash.prototype.constructor = lodash; +
30505 +
30506 LodashWrapper.prototype = baseCreate(baseLodash.prototype); +
30507 LodashWrapper.prototype.constructor = LodashWrapper; +
30508 +
30509 /*------------------------------------------------------------------------*/ +
30510 +
30511 /** +
30512 * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. +
30513 * +
30514 * @private +
30515 * @constructor +
30516 * @param {*} value The value to wrap. +
30517 */ +
30518 function LazyWrapper(value) { +
30519 this.__wrapped__ = value; +
30520 this.__actions__ = []; +
30521 this.__dir__ = 1; +
30522 this.__filtered__ = false; +
30523 this.__iteratees__ = []; +
30524 this.__takeCount__ = MAX_ARRAY_LENGTH; +
30525 this.__views__ = []; +
30526 } +
30527 +
30528 /** +
30529 * Creates a clone of the lazy wrapper object. +
30530 * +
30531 * @private +
30532 * @name clone +
30533 * @memberOf LazyWrapper +
30534 * @returns {Object} Returns the cloned `LazyWrapper` object. +
30535 */ +
30536 function lazyClone() { +
30537 var result = new LazyWrapper(this.__wrapped__); +
30538 result.__actions__ = copyArray(this.__actions__); +
30539 result.__dir__ = this.__dir__; +
30540 result.__filtered__ = this.__filtered__; +
30541 result.__iteratees__ = copyArray(this.__iteratees__); +
30542 result.__takeCount__ = this.__takeCount__; +
30543 result.__views__ = copyArray(this.__views__); +
30544 return result; +
30545 } +
30546 +
30547 /** +
30548 * Reverses the direction of lazy iteration. +
30549 * +
30550 * @private +
30551 * @name reverse +
30552 * @memberOf LazyWrapper +
30553 * @returns {Object} Returns the new reversed `LazyWrapper` object. +
30554 */ +
30555 function lazyReverse() { +
30556 if (this.__filtered__) { +
30557 var result = new LazyWrapper(this); +
30558 result.__dir__ = -1; +
30559 result.__filtered__ = true; +
30560 } else { +
30561 result = this.clone(); +
30562 result.__dir__ *= -1; +
30563 } +
30564 return result; +
30565 } +
30566 +
30567 /** +
30568 * Extracts the unwrapped value from its lazy wrapper. +
30569 * +
30570 * @private +
30571 * @name value +
30572 * @memberOf LazyWrapper +
30573 * @returns {*} Returns the unwrapped value. +
30574 */ +
30575 function lazyValue() { +
30576 var array = this.__wrapped__.value(), +
30577 dir = this.__dir__, +
30578 isArr = isArray(array), +
30579 isRight = dir < 0, +
30580 arrLength = isArr ? array.length : 0, +
30581 view = getView(0, arrLength, this.__views__), +
30582 start = view.start, +
30583 end = view.end, +
30584 length = end - start, +
30585 index = isRight ? end : (start - 1), +
30586 iteratees = this.__iteratees__, +
30587 iterLength = iteratees.length, +
30588 resIndex = 0, +
30589 takeCount = nativeMin(length, this.__takeCount__); +
30590 +
30591 if (!isArr || (!isRight && arrLength == length && takeCount == length)) { +
30592 return baseWrapperValue(array, this.__actions__); +
30593 } +
30594 var result = []; +
30595 +
30596 outer: +
30597 while (length-- && resIndex < takeCount) { +
30598 index += dir; +
30599 +
30600 var iterIndex = -1, +
30601 value = array[index]; +
30602 +
30603 while (++iterIndex < iterLength) { +
30604 var data = iteratees[iterIndex], +
30605 iteratee = data.iteratee, +
30606 type = data.type, +
30607 computed = iteratee(value); +
30608 +
30609 if (type == LAZY_MAP_FLAG) { +
30610 value = computed; +
30611 } else if (!computed) { +
30612 if (type == LAZY_FILTER_FLAG) { +
30613 continue outer; +
30614 } else { +
30615 break outer; +
30616 } +
30617 } +
30618 } +
30619 result[resIndex++] = value; +
30620 } +
30621 return result; +
30622 } +
30623 +
30624 // Ensure `LazyWrapper` is an instance of `baseLodash`. +
30625 LazyWrapper.prototype = baseCreate(baseLodash.prototype); +
30626 LazyWrapper.prototype.constructor = LazyWrapper; +
30627 +
30628 /*------------------------------------------------------------------------*/ +
30629 +
30630 /** +
30631 * Creates a hash object. +
30632 * +
30633 * @private +
30634 * @constructor +
30635 * @param {Array} [entries] The key-value pairs to cache. +
30636 */ +
30637 function Hash(entries) { +
30638 var index = -1, +
30639 length = entries == null ? 0 : entries.length; +
30640 +
30641 this.clear(); +
30642 while (++index < length) { +
30643 var entry = entries[index]; +
30644 this.set(entry[0], entry[1]); +
30645 } +
30646 } +
30647 +
30648 /** +
30649 * Removes all key-value entries from the hash. +
30650 * +
30651 * @private +
30652 * @name clear +
30653 * @memberOf Hash +
30654 */ +
30655 function hashClear() { +
30656 this.__data__ = nativeCreate ? nativeCreate(null) : {}; +
30657 this.size = 0; +
30658 } +
30659 +
30660 /** +
30661 * Removes `key` and its value from the hash. +
30662 * +
30663 * @private +
30664 * @name delete +
30665 * @memberOf Hash +
30666 * @param {Object} hash The hash to modify. +
30667 * @param {string} key The key of the value to remove. +
30668 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
30669 */ +
30670 function hashDelete(key) { +
30671 var result = this.has(key) && delete this.__data__[key]; +
30672 this.size -= result ? 1 : 0; +
30673 return result; +
30674 } +
30675 +
30676 /** +
30677 * Gets the hash value for `key`. +
30678 * +
30679 * @private +
30680 * @name get +
30681 * @memberOf Hash +
30682 * @param {string} key The key of the value to get. +
30683 * @returns {*} Returns the entry value. +
30684 */ +
30685 function hashGet(key) { +
30686 var data = this.__data__; +
30687 if (nativeCreate) { +
30688 var result = data[key]; +
30689 return result === HASH_UNDEFINED ? undefined : result; +
30690 } +
30691 return hasOwnProperty.call(data, key) ? data[key] : undefined; +
30692 } +
30693 +
30694 /** +
30695 * Checks if a hash value for `key` exists. +
30696 * +
30697 * @private +
30698 * @name has +
30699 * @memberOf Hash +
30700 * @param {string} key The key of the entry to check. +
30701 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
30702 */ +
30703 function hashHas(key) { +
30704 var data = this.__data__; +
30705 return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +
30706 } +
30707 +
30708 /** +
30709 * Sets the hash `key` to `value`. +
30710 * +
30711 * @private +
30712 * @name set +
30713 * @memberOf Hash +
30714 * @param {string} key The key of the value to set. +
30715 * @param {*} value The value to set. +
30716 * @returns {Object} Returns the hash instance. +
30717 */ +
30718 function hashSet(key, value) { +
30719 var data = this.__data__; +
30720 this.size += this.has(key) ? 0 : 1; +
30721 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; +
30722 return this; +
30723 } +
30724 +
30725 // Add methods to `Hash`. +
30726 Hash.prototype.clear = hashClear; +
30727 Hash.prototype['delete'] = hashDelete; +
30728 Hash.prototype.get = hashGet; +
30729 Hash.prototype.has = hashHas; +
30730 Hash.prototype.set = hashSet; +
30731 +
30732 /*------------------------------------------------------------------------*/ +
30733 +
30734 /** +
30735 * Creates an list cache object. +
30736 * +
30737 * @private +
30738 * @constructor +
30739 * @param {Array} [entries] The key-value pairs to cache. +
30740 */ +
30741 function ListCache(entries) { +
30742 var index = -1, +
30743 length = entries == null ? 0 : entries.length; +
30744 +
30745 this.clear(); +
30746 while (++index < length) { +
30747 var entry = entries[index]; +
30748 this.set(entry[0], entry[1]); +
30749 } +
30750 } +
30751 +
30752 /** +
30753 * Removes all key-value entries from the list cache. +
30754 * +
30755 * @private +
30756 * @name clear +
30757 * @memberOf ListCache +
30758 */ +
30759 function listCacheClear() { +
30760 this.__data__ = []; +
30761 this.size = 0; +
30762 } +
30763 +
30764 /** +
30765 * Removes `key` and its value from the list cache. +
30766 * +
30767 * @private +
30768 * @name delete +
30769 * @memberOf ListCache +
30770 * @param {string} key The key of the value to remove. +
30771 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
30772 */ +
30773 function listCacheDelete(key) { +
30774 var data = this.__data__, +
30775 index = assocIndexOf(data, key); +
30776 +
30777 if (index < 0) { +
30778 return false; +
30779 } +
30780 var lastIndex = data.length - 1; +
30781 if (index == lastIndex) { +
30782 data.pop(); +
30783 } else { +
30784 splice.call(data, index, 1); +
30785 } +
30786 --this.size; +
30787 return true; +
30788 } +
30789 +
30790 /** +
30791 * Gets the list cache value for `key`. +
30792 * +
30793 * @private +
30794 * @name get +
30795 * @memberOf ListCache +
30796 * @param {string} key The key of the value to get. +
30797 * @returns {*} Returns the entry value. +
30798 */ +
30799 function listCacheGet(key) { +
30800 var data = this.__data__, +
30801 index = assocIndexOf(data, key); +
30802 +
30803 return index < 0 ? undefined : data[index][1]; +
30804 } +
30805 +
30806 /** +
30807 * Checks if a list cache value for `key` exists. +
30808 * +
30809 * @private +
30810 * @name has +
30811 * @memberOf ListCache +
30812 * @param {string} key The key of the entry to check. +
30813 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
30814 */ +
30815 function listCacheHas(key) { +
30816 return assocIndexOf(this.__data__, key) > -1; +
30817 } +
30818 +
30819 /** +
30820 * Sets the list cache `key` to `value`. +
30821 * +
30822 * @private +
30823 * @name set +
30824 * @memberOf ListCache +
30825 * @param {string} key The key of the value to set. +
30826 * @param {*} value The value to set. +
30827 * @returns {Object} Returns the list cache instance. +
30828 */ +
30829 function listCacheSet(key, value) { +
30830 var data = this.__data__, +
30831 index = assocIndexOf(data, key); +
30832 +
30833 if (index < 0) { +
30834 ++this.size; +
30835 data.push([key, value]); +
30836 } else { +
30837 data[index][1] = value; +
30838 } +
30839 return this; +
30840 } +
30841 +
30842 // Add methods to `ListCache`. +
30843 ListCache.prototype.clear = listCacheClear; +
30844 ListCache.prototype['delete'] = listCacheDelete; +
30845 ListCache.prototype.get = listCacheGet; +
30846 ListCache.prototype.has = listCacheHas; +
30847 ListCache.prototype.set = listCacheSet; +
30848 +
30849 /*------------------------------------------------------------------------*/ +
30850 +
30851 /** +
30852 * Creates a map cache object to store key-value pairs. +
30853 * +
30854 * @private +
30855 * @constructor +
30856 * @param {Array} [entries] The key-value pairs to cache. +
30857 */ +
30858 function MapCache(entries) { +
30859 var index = -1, +
30860 length = entries == null ? 0 : entries.length; +
30861 +
30862 this.clear(); +
30863 while (++index < length) { +
30864 var entry = entries[index]; +
30865 this.set(entry[0], entry[1]); +
30866 } +
30867 } +
30868 +
30869 /** +
30870 * Removes all key-value entries from the map. +
30871 * +
30872 * @private +
30873 * @name clear +
30874 * @memberOf MapCache +
30875 */ +
30876 function mapCacheClear() { +
30877 this.size = 0; +
30878 this.__data__ = { +
30879 'hash': new Hash, +
30880 'map': new (Map || ListCache), +
30881 'string': new Hash +
30882 }; +
30883 } +
30884 +
30885 /** +
30886 * Removes `key` and its value from the map. +
30887 * +
30888 * @private +
30889 * @name delete +
30890 * @memberOf MapCache +
30891 * @param {string} key The key of the value to remove. +
30892 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
30893 */ +
30894 function mapCacheDelete(key) { +
30895 var result = getMapData(this, key)['delete'](key); +
30896 this.size -= result ? 1 : 0; +
30897 return result; +
30898 } +
30899 +
30900 /** +
30901 * Gets the map value for `key`. +
30902 * +
30903 * @private +
30904 * @name get +
30905 * @memberOf MapCache +
30906 * @param {string} key The key of the value to get. +
30907 * @returns {*} Returns the entry value. +
30908 */ +
30909 function mapCacheGet(key) { +
30910 return getMapData(this, key).get(key); +
30911 } +
30912 +
30913 /** +
30914 * Checks if a map value for `key` exists. +
30915 * +
30916 * @private +
30917 * @name has +
30918 * @memberOf MapCache +
30919 * @param {string} key The key of the entry to check. +
30920 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
30921 */ +
30922 function mapCacheHas(key) { +
30923 return getMapData(this, key).has(key); +
30924 } +
30925 +
30926 /** +
30927 * Sets the map `key` to `value`. +
30928 * +
30929 * @private +
30930 * @name set +
30931 * @memberOf MapCache +
30932 * @param {string} key The key of the value to set. +
30933 * @param {*} value The value to set. +
30934 * @returns {Object} Returns the map cache instance. +
30935 */ +
30936 function mapCacheSet(key, value) { +
30937 var data = getMapData(this, key), +
30938 size = data.size; +
30939 +
30940 data.set(key, value); +
30941 this.size += data.size == size ? 0 : 1; +
30942 return this; +
30943 } +
30944 +
30945 // Add methods to `MapCache`. +
30946 MapCache.prototype.clear = mapCacheClear; +
30947 MapCache.prototype['delete'] = mapCacheDelete; +
30948 MapCache.prototype.get = mapCacheGet; +
30949 MapCache.prototype.has = mapCacheHas; +
30950 MapCache.prototype.set = mapCacheSet; +
30951 +
30952 /*------------------------------------------------------------------------*/ +
30953 +
30954 /** +
30955 * +
30956 * Creates an array cache object to store unique values. +
30957 * +
30958 * @private +
30959 * @constructor +
30960 * @param {Array} [values] The values to cache. +
30961 */ +
30962 function SetCache(values) { +
30963 var index = -1, +
30964 length = values == null ? 0 : values.length; +
30965 +
30966 this.__data__ = new MapCache; +
30967 while (++index < length) { +
30968 this.add(values[index]); +
30969 } +
30970 } +
30971 +
30972 /** +
30973 * Adds `value` to the array cache. +
30974 * +
30975 * @private +
30976 * @name add +
30977 * @memberOf SetCache +
30978 * @alias push +
30979 * @param {*} value The value to cache. +
30980 * @returns {Object} Returns the cache instance. +
30981 */ +
30982 function setCacheAdd(value) { +
30983 this.__data__.set(value, HASH_UNDEFINED); +
30984 return this; +
30985 } +
30986 +
30987 /** +
30988 * Checks if `value` is in the array cache. +
30989 * +
30990 * @private +
30991 * @name has +
30992 * @memberOf SetCache +
30993 * @param {*} value The value to search for. +
30994 * @returns {number} Returns `true` if `value` is found, else `false`. +
30995 */ +
30996 function setCacheHas(value) { +
30997 return this.__data__.has(value); +
30998 } +
30999 +
31000 // Add methods to `SetCache`. +
31001 SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +
31002 SetCache.prototype.has = setCacheHas; +
31003 +
31004 /*------------------------------------------------------------------------*/ +
31005 +
31006 /** +
31007 * Creates a stack cache object to store key-value pairs. +
31008 * +
31009 * @private +
31010 * @constructor +
31011 * @param {Array} [entries] The key-value pairs to cache. +
31012 */ +
31013 function Stack(entries) { +
31014 var data = this.__data__ = new ListCache(entries); +
31015 this.size = data.size; +
31016 } +
31017 +
31018 /** +
31019 * Removes all key-value entries from the stack. +
31020 * +
31021 * @private +
31022 * @name clear +
31023 * @memberOf Stack +
31024 */ +
31025 function stackClear() { +
31026 this.__data__ = new ListCache; +
31027 this.size = 0; +
31028 } +
31029 +
31030 /** +
31031 * Removes `key` and its value from the stack. +
31032 * +
31033 * @private +
31034 * @name delete +
31035 * @memberOf Stack +
31036 * @param {string} key The key of the value to remove. +
31037 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
31038 */ +
31039 function stackDelete(key) { +
31040 var data = this.__data__, +
31041 result = data['delete'](key); +
31042 +
31043 this.size = data.size; +
31044 return result; +
31045 } +
31046 +
31047 /** +
31048 * Gets the stack value for `key`. +
31049 * +
31050 * @private +
31051 * @name get +
31052 * @memberOf Stack +
31053 * @param {string} key The key of the value to get. +
31054 * @returns {*} Returns the entry value. +
31055 */ +
31056 function stackGet(key) { +
31057 return this.__data__.get(key); +
31058 } +
31059 +
31060 /** +
31061 * Checks if a stack value for `key` exists. +
31062 * +
31063 * @private +
31064 * @name has +
31065 * @memberOf Stack +
31066 * @param {string} key The key of the entry to check. +
31067 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
31068 */ +
31069 function stackHas(key) { +
31070 return this.__data__.has(key); +
31071 } +
31072 +
31073 /** +
31074 * Sets the stack `key` to `value`. +
31075 * +
31076 * @private +
31077 * @name set +
31078 * @memberOf Stack +
31079 * @param {string} key The key of the value to set. +
31080 * @param {*} value The value to set. +
31081 * @returns {Object} Returns the stack cache instance. +
31082 */ +
31083 function stackSet(key, value) { +
31084 var data = this.__data__; +
31085 if (data instanceof ListCache) { +
31086 var pairs = data.__data__; +
31087 if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { +
31088 pairs.push([key, value]); +
31089 this.size = ++data.size; +
31090 return this; +
31091 } +
31092 data = this.__data__ = new MapCache(pairs); +
31093 } +
31094 data.set(key, value); +
31095 this.size = data.size; +
31096 return this; +
31097 } +
31098 +
31099 // Add methods to `Stack`. +
31100 Stack.prototype.clear = stackClear; +
31101 Stack.prototype['delete'] = stackDelete; +
31102 Stack.prototype.get = stackGet; +
31103 Stack.prototype.has = stackHas; +
31104 Stack.prototype.set = stackSet; +
31105 +
31106 /*------------------------------------------------------------------------*/ +
31107 +
31108 /** +
31109 * Creates an array of the enumerable property names of the array-like `value`. +
31110 * +
31111 * @private +
31112 * @param {*} value The value to query. +
31113 * @param {boolean} inherited Specify returning inherited property names. +
31114 * @returns {Array} Returns the array of property names. +
31115 */ +
31116 function arrayLikeKeys(value, inherited) { +
31117 var isArr = isArray(value), +
31118 isArg = !isArr && isArguments(value), +
31119 isBuff = !isArr && !isArg && isBuffer(value), +
31120 isType = !isArr && !isArg && !isBuff && isTypedArray(value), +
31121 skipIndexes = isArr || isArg || isBuff || isType, +
31122 result = skipIndexes ? baseTimes(value.length, String) : [], +
31123 length = result.length; +
31124 +
31125 for (var key in value) { +
31126 if ((inherited || hasOwnProperty.call(value, key)) && +
31127 !(skipIndexes && ( +
31128 // Safari 9 has enumerable `arguments.length` in strict mode. +
31129 key == 'length' || +
31130 // Node.js 0.10 has enumerable non-index properties on buffers. +
31131 (isBuff && (key == 'offset' || key == 'parent')) || +
31132 // PhantomJS 2 has enumerable non-index properties on typed arrays. +
31133 (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || +
31134 // Skip index properties. +
31135 isIndex(key, length) +
31136 ))) { +
31137 result.push(key); +
31138 } +
31139 } +
31140 return result; +
31141 } +
31142 +
31143 /** +
31144 * A specialized version of `_.sample` for arrays. +
31145 * +
31146 * @private +
31147 * @param {Array} array The array to sample. +
31148 * @returns {*} Returns the random element. +
31149 */ +
31150 function arraySample(array) { +
31151 var length = array.length; +
31152 return length ? array[baseRandom(0, length - 1)] : undefined; +
31153 } +
31154 +
31155 /** +
31156 * A specialized version of `_.sampleSize` for arrays. +
31157 * +
31158 * @private +
31159 * @param {Array} array The array to sample. +
31160 * @param {number} n The number of elements to sample. +
31161 * @returns {Array} Returns the random elements. +
31162 */ +
31163 function arraySampleSize(array, n) { +
31164 return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +
31165 } +
31166 +
31167 /** +
31168 * A specialized version of `_.shuffle` for arrays. +
31169 * +
31170 * @private +
31171 * @param {Array} array The array to shuffle. +
31172 * @returns {Array} Returns the new shuffled array. +
31173 */ +
31174 function arrayShuffle(array) { +
31175 return shuffleSelf(copyArray(array)); +
31176 } +
31177 +
31178 /** +
31179 * This function is like `assignValue` except that it doesn't assign +
31180 * `undefined` values. +
31181 * +
31182 * @private +
31183 * @param {Object} object The object to modify. +
31184 * @param {string} key The key of the property to assign. +
31185 * @param {*} value The value to assign. +
31186 */ +
31187 function assignMergeValue(object, key, value) { +
31188 if ((value !== undefined && !eq(object[key], value)) || +
31189 (value === undefined && !(key in object))) { +
31190 baseAssignValue(object, key, value); +
31191 } +
31192 } +
31193 +
31194 /** +
31195 * Assigns `value` to `key` of `object` if the existing value is not equivalent +
31196 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
31197 * for equality comparisons. +
31198 * +
31199 * @private +
31200 * @param {Object} object The object to modify. +
31201 * @param {string} key The key of the property to assign. +
31202 * @param {*} value The value to assign. +
31203 */ +
31204 function assignValue(object, key, value) { +
31205 var objValue = object[key]; +
31206 if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || +
31207 (value === undefined && !(key in object))) { +
31208 baseAssignValue(object, key, value); +
31209 } +
31210 } +
31211 +
31212 /** +
31213 * Gets the index at which the `key` is found in `array` of key-value pairs. +
31214 * +
31215 * @private +
31216 * @param {Array} array The array to inspect. +
31217 * @param {*} key The key to search for. +
31218 * @returns {number} Returns the index of the matched value, else `-1`. +
31219 */ +
31220 function assocIndexOf(array, key) { +
31221 var length = array.length; +
31222 while (length--) { +
31223 if (eq(array[length][0], key)) { +
31224 return length; +
31225 } +
31226 } +
31227 return -1; +
31228 } +
31229 +
31230 /** +
31231 * Aggregates elements of `collection` on `accumulator` with keys transformed +
31232 * by `iteratee` and values set by `setter`. +
31233 * +
31234 * @private +
31235 * @param {Array|Object} collection The collection to iterate over. +
31236 * @param {Function} setter The function to set `accumulator` values. +
31237 * @param {Function} iteratee The iteratee to transform keys. +
31238 * @param {Object} accumulator The initial aggregated object. +
31239 * @returns {Function} Returns `accumulator`. +
31240 */ +
31241 function baseAggregator(collection, setter, iteratee, accumulator) { +
31242 baseEach(collection, function(value, key, collection) { +
31243 setter(accumulator, value, iteratee(value), collection); +
31244 }); +
31245 return accumulator; +
31246 } +
31247 +
31248 /** +
31249 * The base implementation of `_.assign` without support for multiple sources +
31250 * or `customizer` functions. +
31251 * +
31252 * @private +
31253 * @param {Object} object The destination object. +
31254 * @param {Object} source The source object. +
31255 * @returns {Object} Returns `object`. +
31256 */ +
31257 function baseAssign(object, source) { +
31258 return object && copyObject(source, keys(source), object); +
31259 } +
31260 +
31261 /** +
31262 * The base implementation of `_.assignIn` without support for multiple sources +
31263 * or `customizer` functions. +
31264 * +
31265 * @private +
31266 * @param {Object} object The destination object. +
31267 * @param {Object} source The source object. +
31268 * @returns {Object} Returns `object`. +
31269 */ +
31270 function baseAssignIn(object, source) { +
31271 return object && copyObject(source, keysIn(source), object); +
31272 } +
31273 +
31274 /** +
31275 * The base implementation of `assignValue` and `assignMergeValue` without +
31276 * value checks. +
31277 * +
31278 * @private +
31279 * @param {Object} object The object to modify. +
31280 * @param {string} key The key of the property to assign. +
31281 * @param {*} value The value to assign. +
31282 */ +
31283 function baseAssignValue(object, key, value) { +
31284 if (key == '__proto__' && defineProperty) { +
31285 defineProperty(object, key, { +
31286 'configurable': true, +
31287 'enumerable': true, +
31288 'value': value, +
31289 'writable': true +
31290 }); +
31291 } else { +
31292 object[key] = value; +
31293 } +
31294 } +
31295 +
31296 /** +
31297 * The base implementation of `_.at` without support for individual paths. +
31298 * +
31299 * @private +
31300 * @param {Object} object The object to iterate over. +
31301 * @param {string[]} paths The property paths to pick. +
31302 * @returns {Array} Returns the picked elements. +
31303 */ +
31304 function baseAt(object, paths) { +
31305 var index = -1, +
31306 length = paths.length, +
31307 result = Array(length), +
31308 skip = object == null; +
31309 +
31310 while (++index < length) { +
31311 result[index] = skip ? undefined : get(object, paths[index]); +
31312 } +
31313 return result; +
31314 } +
31315 +
31316 /** +
31317 * The base implementation of `_.clamp` which doesn't coerce arguments. +
31318 * +
31319 * @private +
31320 * @param {number} number The number to clamp. +
31321 * @param {number} [lower] The lower bound. +
31322 * @param {number} upper The upper bound. +
31323 * @returns {number} Returns the clamped number. +
31324 */ +
31325 function baseClamp(number, lower, upper) { +
31326 if (number === number) { +
31327 if (upper !== undefined) { +
31328 number = number <= upper ? number : upper; +
31329 } +
31330 if (lower !== undefined) { +
31331 number = number >= lower ? number : lower; +
31332 } +
31333 } +
31334 return number; +
31335 } +
31336 +
31337 /** +
31338 * The base implementation of `_.clone` and `_.cloneDeep` which tracks +
31339 * traversed objects. +
31340 * +
31341 * @private +
31342 * @param {*} value The value to clone. +
31343 * @param {boolean} bitmask The bitmask flags. +
31344 * 1 - Deep clone +
31345 * 2 - Flatten inherited properties +
31346 * 4 - Clone symbols +
31347 * @param {Function} [customizer] The function to customize cloning. +
31348 * @param {string} [key] The key of `value`. +
31349 * @param {Object} [object] The parent object of `value`. +
31350 * @param {Object} [stack] Tracks traversed objects and their clone counterparts. +
31351 * @returns {*} Returns the cloned value. +
31352 */ +
31353 function baseClone(value, bitmask, customizer, key, object, stack) { +
31354 var result, +
31355 isDeep = bitmask & CLONE_DEEP_FLAG, +
31356 isFlat = bitmask & CLONE_FLAT_FLAG, +
31357 isFull = bitmask & CLONE_SYMBOLS_FLAG; +
31358 +
31359 if (customizer) { +
31360 result = object ? customizer(value, key, object, stack) : customizer(value); +
31361 } +
31362 if (result !== undefined) { +
31363 return result; +
31364 } +
31365 if (!isObject(value)) { +
31366 return value; +
31367 } +
31368 var isArr = isArray(value); +
31369 if (isArr) { +
31370 result = initCloneArray(value); +
31371 if (!isDeep) { +
31372 return copyArray(value, result); +
31373 } +
31374 } else { +
31375 var tag = getTag(value), +
31376 isFunc = tag == funcTag || tag == genTag; +
31377 +
31378 if (isBuffer(value)) { +
31379 return cloneBuffer(value, isDeep); +
31380 } +
31381 if (tag == objectTag || tag == argsTag || (isFunc && !object)) { +
31382 result = (isFlat || isFunc) ? {} : initCloneObject(value); +
31383 if (!isDeep) { +
31384 return isFlat +
31385 ? copySymbolsIn(value, baseAssignIn(result, value)) +
31386 : copySymbols(value, baseAssign(result, value)); +
31387 } +
31388 } else { +
31389 if (!cloneableTags[tag]) { +
31390 return object ? value : {}; +
31391 } +
31392 result = initCloneByTag(value, tag, isDeep); +
31393 } +
31394 } +
31395 // Check for circular references and return its corresponding clone. +
31396 stack || (stack = new Stack); +
31397 var stacked = stack.get(value); +
31398 if (stacked) { +
31399 return stacked; +
31400 } +
31401 stack.set(value, result); +
31402 +
31403 if (isSet(value)) { +
31404 value.forEach(function(subValue) { +
31405 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); +
31406 }); +
31407 +
31408 return result; +
31409 } +
31410 +
31411 if (isMap(value)) { +
31412 value.forEach(function(subValue, key) { +
31413 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); +
31414 }); +
31415 +
31416 return result; +
31417 } +
31418 +
31419 var keysFunc = isFull +
31420 ? (isFlat ? getAllKeysIn : getAllKeys) +
31421 : (isFlat ? keysIn : keys); +
31422 +
31423 var props = isArr ? undefined : keysFunc(value); +
31424 arrayEach(props || value, function(subValue, key) { +
31425 if (props) { +
31426 key = subValue; +
31427 subValue = value[key]; +
31428 } +
31429 // Recursively populate clone (susceptible to call stack limits). +
31430 assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); +
31431 }); +
31432 return result; +
31433 } +
31434 +
31435 /** +
31436 * The base implementation of `_.conforms` which doesn't clone `source`. +
31437 * +
31438 * @private +
31439 * @param {Object} source The object of property predicates to conform to. +
31440 * @returns {Function} Returns the new spec function. +
31441 */ +
31442 function baseConforms(source) { +
31443 var props = keys(source); +
31444 return function(object) { +
31445 return baseConformsTo(object, source, props); +
31446 }; +
31447 } +
31448 +
31449 /** +
31450 * The base implementation of `_.conformsTo` which accepts `props` to check. +
31451 * +
31452 * @private +
31453 * @param {Object} object The object to inspect. +
31454 * @param {Object} source The object of property predicates to conform to. +
31455 * @returns {boolean} Returns `true` if `object` conforms, else `false`. +
31456 */ +
31457 function baseConformsTo(object, source, props) { +
31458 var length = props.length; +
31459 if (object == null) { +
31460 return !length; +
31461 } +
31462 object = Object(object); +
31463 while (length--) { +
31464 var key = props[length], +
31465 predicate = source[key], +
31466 value = object[key]; +
31467 +
31468 if ((value === undefined && !(key in object)) || !predicate(value)) { +
31469 return false; +
31470 } +
31471 } +
31472 return true; +
31473 } +
31474 +
31475 /** +
31476 * The base implementation of `_.delay` and `_.defer` which accepts `args` +
31477 * to provide to `func`. +
31478 * +
31479 * @private +
31480 * @param {Function} func The function to delay. +
31481 * @param {number} wait The number of milliseconds to delay invocation. +
31482 * @param {Array} args The arguments to provide to `func`. +
31483 * @returns {number|Object} Returns the timer id or timeout object. +
31484 */ +
31485 function baseDelay(func, wait, args) { +
31486 if (typeof func != 'function') { +
31487 throw new TypeError(FUNC_ERROR_TEXT); +
31488 } +
31489 return setTimeout(function() { func.apply(undefined, args); }, wait); +
31490 } +
31491 +
31492 /** +
31493 * The base implementation of methods like `_.difference` without support +
31494 * for excluding multiple arrays or iteratee shorthands. +
31495 * +
31496 * @private +
31497 * @param {Array} array The array to inspect. +
31498 * @param {Array} values The values to exclude. +
31499 * @param {Function} [iteratee] The iteratee invoked per element. +
31500 * @param {Function} [comparator] The comparator invoked per element. +
31501 * @returns {Array} Returns the new array of filtered values. +
31502 */ +
31503 function baseDifference(array, values, iteratee, comparator) { +
31504 var index = -1, +
31505 includes = arrayIncludes, +
31506 isCommon = true, +
31507 length = array.length, +
31508 result = [], +
31509 valuesLength = values.length; +
31510 +
31511 if (!length) { +
31512 return result; +
31513 } +
31514 if (iteratee) { +
31515 values = arrayMap(values, baseUnary(iteratee)); +
31516 } +
31517 if (comparator) { +
31518 includes = arrayIncludesWith; +
31519 isCommon = false; +
31520 } +
31521 else if (values.length >= LARGE_ARRAY_SIZE) { +
31522 includes = cacheHas; +
31523 isCommon = false; +
31524 values = new SetCache(values); +
31525 } +
31526 outer: +
31527 while (++index < length) { +
31528 var value = array[index], +
31529 computed = iteratee == null ? value : iteratee(value); +
31530 +
31531 value = (comparator || value !== 0) ? value : 0; +
31532 if (isCommon && computed === computed) { +
31533 var valuesIndex = valuesLength; +
31534 while (valuesIndex--) { +
31535 if (values[valuesIndex] === computed) { +
31536 continue outer; +
31537 } +
31538 } +
31539 result.push(value); +
31540 } +
31541 else if (!includes(values, computed, comparator)) { +
31542 result.push(value); +
31543 } +
31544 } +
31545 return result; +
31546 } +
31547 +
31548 /** +
31549 * The base implementation of `_.forEach` without support for iteratee shorthands. +
31550 * +
31551 * @private +
31552 * @param {Array|Object} collection The collection to iterate over. +
31553 * @param {Function} iteratee The function invoked per iteration. +
31554 * @returns {Array|Object} Returns `collection`. +
31555 */ +
31556 var baseEach = createBaseEach(baseForOwn); +
31557 +
31558 /** +
31559 * The base implementation of `_.forEachRight` without support for iteratee shorthands. +
31560 * +
31561 * @private +
31562 * @param {Array|Object} collection The collection to iterate over. +
31563 * @param {Function} iteratee The function invoked per iteration. +
31564 * @returns {Array|Object} Returns `collection`. +
31565 */ +
31566 var baseEachRight = createBaseEach(baseForOwnRight, true); +
31567 +
31568 /** +
31569 * The base implementation of `_.every` without support for iteratee shorthands. +
31570 * +
31571 * @private +
31572 * @param {Array|Object} collection The collection to iterate over. +
31573 * @param {Function} predicate The function invoked per iteration. +
31574 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
31575 * else `false` +
31576 */ +
31577 function baseEvery(collection, predicate) { +
31578 var result = true; +
31579 baseEach(collection, function(value, index, collection) { +
31580 result = !!predicate(value, index, collection); +
31581 return result; +
31582 }); +
31583 return result; +
31584 } +
31585 +
31586 /** +
31587 * The base implementation of methods like `_.max` and `_.min` which accepts a +
31588 * `comparator` to determine the extremum value. +
31589 * +
31590 * @private +
31591 * @param {Array} array The array to iterate over. +
31592 * @param {Function} iteratee The iteratee invoked per iteration. +
31593 * @param {Function} comparator The comparator used to compare values. +
31594 * @returns {*} Returns the extremum value. +
31595 */ +
31596 function baseExtremum(array, iteratee, comparator) { +
31597 var index = -1, +
31598 length = array.length; +
31599 +
31600 while (++index < length) { +
31601 var value = array[index], +
31602 current = iteratee(value); +
31603 +
31604 if (current != null && (computed === undefined +
31605 ? (current === current && !isSymbol(current)) +
31606 : comparator(current, computed) +
31607 )) { +
31608 var computed = current, +
31609 result = value; +
31610 } +
31611 } +
31612 return result; +
31613 } +
31614 +
31615 /** +
31616 * The base implementation of `_.fill` without an iteratee call guard. +
31617 * +
31618 * @private +
31619 * @param {Array} array The array to fill. +
31620 * @param {*} value The value to fill `array` with. +
31621 * @param {number} [start=0] The start position. +
31622 * @param {number} [end=array.length] The end position. +
31623 * @returns {Array} Returns `array`. +
31624 */ +
31625 function baseFill(array, value, start, end) { +
31626 var length = array.length; +
31627 +
31628 start = toInteger(start); +
31629 if (start < 0) { +
31630 start = -start > length ? 0 : (length + start); +
31631 } +
31632 end = (end === undefined || end > length) ? length : toInteger(end); +
31633 if (end < 0) { +
31634 end += length; +
31635 } +
31636 end = start > end ? 0 : toLength(end); +
31637 while (start < end) { +
31638 array[start++] = value; +
31639 } +
31640 return array; +
31641 } +
31642 +
31643 /** +
31644 * The base implementation of `_.filter` without support for iteratee shorthands. +
31645 * +
31646 * @private +
31647 * @param {Array|Object} collection The collection to iterate over. +
31648 * @param {Function} predicate The function invoked per iteration. +
31649 * @returns {Array} Returns the new filtered array. +
31650 */ +
31651 function baseFilter(collection, predicate) { +
31652 var result = []; +
31653 baseEach(collection, function(value, index, collection) { +
31654 if (predicate(value, index, collection)) { +
31655 result.push(value); +
31656 } +
31657 }); +
31658 return result; +
31659 } +
31660 +
31661 /** +
31662 * The base implementation of `_.flatten` with support for restricting flattening. +
31663 * +
31664 * @private +
31665 * @param {Array} array The array to flatten. +
31666 * @param {number} depth The maximum recursion depth. +
31667 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. +
31668 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. +
31669 * @param {Array} [result=[]] The initial result value. +
31670 * @returns {Array} Returns the new flattened array. +
31671 */ +
31672 function baseFlatten(array, depth, predicate, isStrict, result) { +
31673 var index = -1, +
31674 length = array.length; +
31675 +
31676 predicate || (predicate = isFlattenable); +
31677 result || (result = []); +
31678 +
31679 while (++index < length) { +
31680 var value = array[index]; +
31681 if (depth > 0 && predicate(value)) { +
31682 if (depth > 1) { +
31683 // Recursively flatten arrays (susceptible to call stack limits). +
31684 baseFlatten(value, depth - 1, predicate, isStrict, result); +
31685 } else { +
31686 arrayPush(result, value); +
31687 } +
31688 } else if (!isStrict) { +
31689 result[result.length] = value; +
31690 } +
31691 } +
31692 return result; +
31693 } +
31694 +
31695 /** +
31696 * The base implementation of `baseForOwn` which iterates over `object` +
31697 * properties returned by `keysFunc` and invokes `iteratee` for each property. +
31698 * Iteratee functions may exit iteration early by explicitly returning `false`. +
31699 * +
31700 * @private +
31701 * @param {Object} object The object to iterate over. +
31702 * @param {Function} iteratee The function invoked per iteration. +
31703 * @param {Function} keysFunc The function to get the keys of `object`. +
31704 * @returns {Object} Returns `object`. +
31705 */ +
31706 var baseFor = createBaseFor(); +
31707 +
31708 /** +
31709 * This function is like `baseFor` except that it iterates over properties +
31710 * in the opposite order. +
31711 * +
31712 * @private +
31713 * @param {Object} object The object to iterate over. +
31714 * @param {Function} iteratee The function invoked per iteration. +
31715 * @param {Function} keysFunc The function to get the keys of `object`. +
31716 * @returns {Object} Returns `object`. +
31717 */ +
31718 var baseForRight = createBaseFor(true); +
31719 +
31720 /** +
31721 * The base implementation of `_.forOwn` without support for iteratee shorthands. +
31722 * +
31723 * @private +
31724 * @param {Object} object The object to iterate over. +
31725 * @param {Function} iteratee The function invoked per iteration. +
31726 * @returns {Object} Returns `object`. +
31727 */ +
31728 function baseForOwn(object, iteratee) { +
31729 return object && baseFor(object, iteratee, keys); +
31730 } +
31731 +
31732 /** +
31733 * The base implementation of `_.forOwnRight` without support for iteratee shorthands. +
31734 * +
31735 * @private +
31736 * @param {Object} object The object to iterate over. +
31737 * @param {Function} iteratee The function invoked per iteration. +
31738 * @returns {Object} Returns `object`. +
31739 */ +
31740 function baseForOwnRight(object, iteratee) { +
31741 return object && baseForRight(object, iteratee, keys); +
31742 } +
31743 +
31744 /** +
31745 * The base implementation of `_.functions` which creates an array of +
31746 * `object` function property names filtered from `props`. +
31747 * +
31748 * @private +
31749 * @param {Object} object The object to inspect. +
31750 * @param {Array} props The property names to filter. +
31751 * @returns {Array} Returns the function names. +
31752 */ +
31753 function baseFunctions(object, props) { +
31754 return arrayFilter(props, function(key) { +
31755 return isFunction(object[key]); +
31756 }); +
31757 } +
31758 +
31759 /** +
31760 * The base implementation of `_.get` without support for default values. +
31761 * +
31762 * @private +
31763 * @param {Object} object The object to query. +
31764 * @param {Array|string} path The path of the property to get. +
31765 * @returns {*} Returns the resolved value. +
31766 */ +
31767 function baseGet(object, path) { +
31768 path = castPath(path, object); +
31769 +
31770 var index = 0, +
31771 length = path.length; +
31772 +
31773 while (object != null && index < length) { +
31774 object = object[toKey(path[index++])]; +
31775 } +
31776 return (index && index == length) ? object : undefined; +
31777 } +
31778 +
31779 /** +
31780 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses +
31781 * `keysFunc` and `symbolsFunc` to get the enumerable property names and +
31782 * symbols of `object`. +
31783 * +
31784 * @private +
31785 * @param {Object} object The object to query. +
31786 * @param {Function} keysFunc The function to get the keys of `object`. +
31787 * @param {Function} symbolsFunc The function to get the symbols of `object`. +
31788 * @returns {Array} Returns the array of property names and symbols. +
31789 */ +
31790 function baseGetAllKeys(object, keysFunc, symbolsFunc) { +
31791 var result = keysFunc(object); +
31792 return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +
31793 } +
31794 +
31795 /** +
31796 * The base implementation of `getTag` without fallbacks for buggy environments. +
31797 * +
31798 * @private +
31799 * @param {*} value The value to query. +
31800 * @returns {string} Returns the `toStringTag`. +
31801 */ +
31802 function baseGetTag(value) { +
31803 if (value == null) { +
31804 return value === undefined ? undefinedTag : nullTag; +
31805 } +
31806 return (symToStringTag && symToStringTag in Object(value)) +
31807 ? getRawTag(value) +
31808 : objectToString(value); +
31809 } +
31810 +
31811 /** +
31812 * The base implementation of `_.gt` which doesn't coerce arguments. +
31813 * +
31814 * @private +
31815 * @param {*} value The value to compare. +
31816 * @param {*} other The other value to compare. +
31817 * @returns {boolean} Returns `true` if `value` is greater than `other`, +
31818 * else `false`. +
31819 */ +
31820 function baseGt(value, other) { +
31821 return value > other; +
31822 } +
31823 +
31824 /** +
31825 * The base implementation of `_.has` without support for deep paths. +
31826 * +
31827 * @private +
31828 * @param {Object} [object] The object to query. +
31829 * @param {Array|string} key The key to check. +
31830 * @returns {boolean} Returns `true` if `key` exists, else `false`. +
31831 */ +
31832 function baseHas(object, key) { +
31833 return object != null && hasOwnProperty.call(object, key); +
31834 } +
31835 +
31836 /** +
31837 * The base implementation of `_.hasIn` without support for deep paths. +
31838 * +
31839 * @private +
31840 * @param {Object} [object] The object to query. +
31841 * @param {Array|string} key The key to check. +
31842 * @returns {boolean} Returns `true` if `key` exists, else `false`. +
31843 */ +
31844 function baseHasIn(object, key) { +
31845 return object != null && key in Object(object); +
31846 } +
31847 +
31848 /** +
31849 * The base implementation of `_.inRange` which doesn't coerce arguments. +
31850 * +
31851 * @private +
31852 * @param {number} number The number to check. +
31853 * @param {number} start The start of the range. +
31854 * @param {number} end The end of the range. +
31855 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +
31856 */ +
31857 function baseInRange(number, start, end) { +
31858 return number >= nativeMin(start, end) && number < nativeMax(start, end); +
31859 } +
31860 +
31861 /** +
31862 * The base implementation of methods like `_.intersection`, without support +
31863 * for iteratee shorthands, that accepts an array of arrays to inspect. +
31864 * +
31865 * @private +
31866 * @param {Array} arrays The arrays to inspect. +
31867 * @param {Function} [iteratee] The iteratee invoked per element. +
31868 * @param {Function} [comparator] The comparator invoked per element. +
31869 * @returns {Array} Returns the new array of shared values. +
31870 */ +
31871 function baseIntersection(arrays, iteratee, comparator) { +
31872 var includes = comparator ? arrayIncludesWith : arrayIncludes, +
31873 length = arrays[0].length, +
31874 othLength = arrays.length, +
31875 othIndex = othLength, +
31876 caches = Array(othLength), +
31877 maxLength = Infinity, +
31878 result = []; +
31879 +
31880 while (othIndex--) { +
31881 var array = arrays[othIndex]; +
31882 if (othIndex && iteratee) { +
31883 array = arrayMap(array, baseUnary(iteratee)); +
31884 } +
31885 maxLength = nativeMin(array.length, maxLength); +
31886 caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) +
31887 ? new SetCache(othIndex && array) +
31888 : undefined; +
31889 } +
31890 array = arrays[0]; +
31891 +
31892 var index = -1, +
31893 seen = caches[0]; +
31894 +
31895 outer: +
31896 while (++index < length && result.length < maxLength) { +
31897 var value = array[index], +
31898 computed = iteratee ? iteratee(value) : value; +
31899 +
31900 value = (comparator || value !== 0) ? value : 0; +
31901 if (!(seen +
31902 ? cacheHas(seen, computed) +
31903 : includes(result, computed, comparator) +
31904 )) { +
31905 othIndex = othLength; +
31906 while (--othIndex) { +
31907 var cache = caches[othIndex]; +
31908 if (!(cache +
31909 ? cacheHas(cache, computed) +
31910 : includes(arrays[othIndex], computed, comparator)) +
31911 ) { +
31912 continue outer; +
31913 } +
31914 } +
31915 if (seen) { +
31916 seen.push(computed); +
31917 } +
31918 result.push(value); +
31919 } +
31920 } +
31921 return result; +
31922 } +
31923 +
31924 /** +
31925 * The base implementation of `_.invert` and `_.invertBy` which inverts +
31926 * `object` with values transformed by `iteratee` and set by `setter`. +
31927 * +
31928 * @private +
31929 * @param {Object} object The object to iterate over. +
31930 * @param {Function} setter The function to set `accumulator` values. +
31931 * @param {Function} iteratee The iteratee to transform values. +
31932 * @param {Object} accumulator The initial inverted object. +
31933 * @returns {Function} Returns `accumulator`. +
31934 */ +
31935 function baseInverter(object, setter, iteratee, accumulator) { +
31936 baseForOwn(object, function(value, key, object) { +
31937 setter(accumulator, iteratee(value), key, object); +
31938 }); +
31939 return accumulator; +
31940 } +
31941 +
31942 /** +
31943 * The base implementation of `_.invoke` without support for individual +
31944 * method arguments. +
31945 * +
31946 * @private +
31947 * @param {Object} object The object to query. +
31948 * @param {Array|string} path The path of the method to invoke. +
31949 * @param {Array} args The arguments to invoke the method with. +
31950 * @returns {*} Returns the result of the invoked method. +
31951 */ +
31952 function baseInvoke(object, path, args) { +
31953 path = castPath(path, object); +
31954 object = parent(object, path); +
31955 var func = object == null ? object : object[toKey(last(path))]; +
31956 return func == null ? undefined : apply(func, object, args); +
31957 } +
31958 +
31959 /** +
31960 * The base implementation of `_.isArguments`. +
31961 * +
31962 * @private +
31963 * @param {*} value The value to check. +
31964 * @returns {boolean} Returns `true` if `value` is an `arguments` object, +
31965 */ +
31966 function baseIsArguments(value) { +
31967 return isObjectLike(value) && baseGetTag(value) == argsTag; +
31968 } +
31969 +
31970 /** +
31971 * The base implementation of `_.isArrayBuffer` without Node.js optimizations. +
31972 * +
31973 * @private +
31974 * @param {*} value The value to check. +
31975 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +
31976 */ +
31977 function baseIsArrayBuffer(value) { +
31978 return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +
31979 } +
31980 +
31981 /** +
31982 * The base implementation of `_.isDate` without Node.js optimizations. +
31983 * +
31984 * @private +
31985 * @param {*} value The value to check. +
31986 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +
31987 */ +
31988 function baseIsDate(value) { +
31989 return isObjectLike(value) && baseGetTag(value) == dateTag; +
31990 } +
31991 +
31992 /** +
31993 * The base implementation of `_.isEqual` which supports partial comparisons +
31994 * and tracks traversed objects. +
31995 * +
31996 * @private +
31997 * @param {*} value The value to compare. +
31998 * @param {*} other The other value to compare. +
31999 * @param {boolean} bitmask The bitmask flags. +
32000 * 1 - Unordered comparison +
32001 * 2 - Partial comparison +
32002 * @param {Function} [customizer] The function to customize comparisons. +
32003 * @param {Object} [stack] Tracks traversed `value` and `other` objects. +
32004 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
32005 */ +
32006 function baseIsEqual(value, other, bitmask, customizer, stack) { +
32007 if (value === other) { +
32008 return true; +
32009 } +
32010 if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { +
32011 return value !== value && other !== other; +
32012 } +
32013 return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +
32014 } +
32015 +
32016 /** +
32017 * A specialized version of `baseIsEqual` for arrays and objects which performs +
32018 * deep comparisons and tracks traversed objects enabling objects with circular +
32019 * references to be compared. +
32020 * +
32021 * @private +
32022 * @param {Object} object The object to compare. +
32023 * @param {Object} other The other object to compare. +
32024 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
32025 * @param {Function} customizer The function to customize comparisons. +
32026 * @param {Function} equalFunc The function to determine equivalents of values. +
32027 * @param {Object} [stack] Tracks traversed `object` and `other` objects. +
32028 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
32029 */ +
32030 function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { +
32031 var objIsArr = isArray(object), +
32032 othIsArr = isArray(other), +
32033 objTag = objIsArr ? arrayTag : getTag(object), +
32034 othTag = othIsArr ? arrayTag : getTag(other); +
32035 +
32036 objTag = objTag == argsTag ? objectTag : objTag; +
32037 othTag = othTag == argsTag ? objectTag : othTag; +
32038 +
32039 var objIsObj = objTag == objectTag, +
32040 othIsObj = othTag == objectTag, +
32041 isSameTag = objTag == othTag; +
32042 +
32043 if (isSameTag && isBuffer(object)) { +
32044 if (!isBuffer(other)) { +
32045 return false; +
32046 } +
32047 objIsArr = true; +
32048 objIsObj = false; +
32049 } +
32050 if (isSameTag && !objIsObj) { +
32051 stack || (stack = new Stack); +
32052 return (objIsArr || isTypedArray(object)) +
32053 ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) +
32054 : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); +
32055 } +
32056 if (!(bitmask & COMPARE_PARTIAL_FLAG)) { +
32057 var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), +
32058 othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); +
32059 +
32060 if (objIsWrapped || othIsWrapped) { +
32061 var objUnwrapped = objIsWrapped ? object.value() : object, +
32062 othUnwrapped = othIsWrapped ? other.value() : other; +
32063 +
32064 stack || (stack = new Stack); +
32065 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); +
32066 } +
32067 } +
32068 if (!isSameTag) { +
32069 return false; +
32070 } +
32071 stack || (stack = new Stack); +
32072 return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +
32073 } +
32074 +
32075 /** +
32076 * The base implementation of `_.isMap` without Node.js optimizations. +
32077 * +
32078 * @private +
32079 * @param {*} value The value to check. +
32080 * @returns {boolean} Returns `true` if `value` is a map, else `false`. +
32081 */ +
32082 function baseIsMap(value) { +
32083 return isObjectLike(value) && getTag(value) == mapTag; +
32084 } +
32085 +
32086 /** +
32087 * The base implementation of `_.isMatch` without support for iteratee shorthands. +
32088 * +
32089 * @private +
32090 * @param {Object} object The object to inspect. +
32091 * @param {Object} source The object of property values to match. +
32092 * @param {Array} matchData The property names, values, and compare flags to match. +
32093 * @param {Function} [customizer] The function to customize comparisons. +
32094 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
32095 */ +
32096 function baseIsMatch(object, source, matchData, customizer) { +
32097 var index = matchData.length, +
32098 length = index, +
32099 noCustomizer = !customizer; +
32100 +
32101 if (object == null) { +
32102 return !length; +
32103 } +
32104 object = Object(object); +
32105 while (index--) { +
32106 var data = matchData[index]; +
32107 if ((noCustomizer && data[2]) +
32108 ? data[1] !== object[data[0]] +
32109 : !(data[0] in object) +
32110 ) { +
32111 return false; +
32112 } +
32113 } +
32114 while (++index < length) { +
32115 data = matchData[index]; +
32116 var key = data[0], +
32117 objValue = object[key], +
32118 srcValue = data[1]; +
32119 +
32120 if (noCustomizer && data[2]) { +
32121 if (objValue === undefined && !(key in object)) { +
32122 return false; +
32123 } +
32124 } else { +
32125 var stack = new Stack; +
32126 if (customizer) { +
32127 var result = customizer(objValue, srcValue, key, object, source, stack); +
32128 } +
32129 if (!(result === undefined +
32130 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) +
32131 : result +
32132 )) { +
32133 return false; +
32134 } +
32135 } +
32136 } +
32137 return true; +
32138 } +
32139 +
32140 /** +
32141 * The base implementation of `_.isNative` without bad shim checks. +
32142 * +
32143 * @private +
32144 * @param {*} value The value to check. +
32145 * @returns {boolean} Returns `true` if `value` is a native function, +
32146 * else `false`. +
32147 */ +
32148 function baseIsNative(value) { +
32149 if (!isObject(value) || isMasked(value)) { +
32150 return false; +
32151 } +
32152 var pattern = isFunction(value) ? reIsNative : reIsHostCtor; +
32153 return pattern.test(toSource(value)); +
32154 } +
32155 +
32156 /** +
32157 * The base implementation of `_.isRegExp` without Node.js optimizations. +
32158 * +
32159 * @private +
32160 * @param {*} value The value to check. +
32161 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +
32162 */ +
32163 function baseIsRegExp(value) { +
32164 return isObjectLike(value) && baseGetTag(value) == regexpTag; +
32165 } +
32166 +
32167 /** +
32168 * The base implementation of `_.isSet` without Node.js optimizations. +
32169 * +
32170 * @private +
32171 * @param {*} value The value to check. +
32172 * @returns {boolean} Returns `true` if `value` is a set, else `false`. +
32173 */ +
32174 function baseIsSet(value) { +
32175 return isObjectLike(value) && getTag(value) == setTag; +
32176 } +
32177 +
32178 /** +
32179 * The base implementation of `_.isTypedArray` without Node.js optimizations. +
32180 * +
32181 * @private +
32182 * @param {*} value The value to check. +
32183 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +
32184 */ +
32185 function baseIsTypedArray(value) { +
32186 return isObjectLike(value) && +
32187 isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +
32188 } +
32189 +
32190 /** +
32191 * The base implementation of `_.iteratee`. +
32192 * +
32193 * @private +
32194 * @param {*} [value=_.identity] The value to convert to an iteratee. +
32195 * @returns {Function} Returns the iteratee. +
32196 */ +
32197 function baseIteratee(value) { +
32198 // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. +
32199 // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. +
32200 if (typeof value == 'function') { +
32201 return value; +
32202 } +
32203 if (value == null) { +
32204 return identity; +
32205 } +
32206 if (typeof value == 'object') { +
32207 return isArray(value) +
32208 ? baseMatchesProperty(value[0], value[1]) +
32209 : baseMatches(value); +
32210 } +
32211 return property(value); +
32212 } +
32213 +
32214 /** +
32215 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. +
32216 * +
32217 * @private +
32218 * @param {Object} object The object to query. +
32219 * @returns {Array} Returns the array of property names. +
32220 */ +
32221 function baseKeys(object) { +
32222 if (!isPrototype(object)) { +
32223 return nativeKeys(object); +
32224 } +
32225 var result = []; +
32226 for (var key in Object(object)) { +
32227 if (hasOwnProperty.call(object, key) && key != 'constructor') { +
32228 result.push(key); +
32229 } +
32230 } +
32231 return result; +
32232 } +
32233 +
32234 /** +
32235 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. +
32236 * +
32237 * @private +
32238 * @param {Object} object The object to query. +
32239 * @returns {Array} Returns the array of property names. +
32240 */ +
32241 function baseKeysIn(object) { +
32242 if (!isObject(object)) { +
32243 return nativeKeysIn(object); +
32244 } +
32245 var isProto = isPrototype(object), +
32246 result = []; +
32247 +
32248 for (var key in object) { +
32249 if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { +
32250 result.push(key); +
32251 } +
32252 } +
32253 return result; +
32254 } +
32255 +
32256 /** +
32257 * The base implementation of `_.lt` which doesn't coerce arguments. +
32258 * +
32259 * @private +
32260 * @param {*} value The value to compare. +
32261 * @param {*} other The other value to compare. +
32262 * @returns {boolean} Returns `true` if `value` is less than `other`, +
32263 * else `false`. +
32264 */ +
32265 function baseLt(value, other) { +
32266 return value < other; +
32267 } +
32268 +
32269 /** +
32270 * The base implementation of `_.map` without support for iteratee shorthands. +
32271 * +
32272 * @private +
32273 * @param {Array|Object} collection The collection to iterate over. +
32274 * @param {Function} iteratee The function invoked per iteration. +
32275 * @returns {Array} Returns the new mapped array. +
32276 */ +
32277 function baseMap(collection, iteratee) { +
32278 var index = -1, +
32279 result = isArrayLike(collection) ? Array(collection.length) : []; +
32280 +
32281 baseEach(collection, function(value, key, collection) { +
32282 result[++index] = iteratee(value, key, collection); +
32283 }); +
32284 return result; +
32285 } +
32286 +
32287 /** +
32288 * The base implementation of `_.matches` which doesn't clone `source`. +
32289 * +
32290 * @private +
32291 * @param {Object} source The object of property values to match. +
32292 * @returns {Function} Returns the new spec function. +
32293 */ +
32294 function baseMatches(source) { +
32295 var matchData = getMatchData(source); +
32296 if (matchData.length == 1 && matchData[0][2]) { +
32297 return matchesStrictComparable(matchData[0][0], matchData[0][1]); +
32298 } +
32299 return function(object) { +
32300 return object === source || baseIsMatch(object, source, matchData); +
32301 }; +
32302 } +
32303 +
32304 /** +
32305 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. +
32306 * +
32307 * @private +
32308 * @param {string} path The path of the property to get. +
32309 * @param {*} srcValue The value to match. +
32310 * @returns {Function} Returns the new spec function. +
32311 */ +
32312 function baseMatchesProperty(path, srcValue) { +
32313 if (isKey(path) && isStrictComparable(srcValue)) { +
32314 return matchesStrictComparable(toKey(path), srcValue); +
32315 } +
32316 return function(object) { +
32317 var objValue = get(object, path); +
32318 return (objValue === undefined && objValue === srcValue) +
32319 ? hasIn(object, path) +
32320 : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); +
32321 }; +
32322 } +
32323 +
32324 /** +
32325 * The base implementation of `_.merge` without support for multiple sources. +
32326 * +
32327 * @private +
32328 * @param {Object} object The destination object. +
32329 * @param {Object} source The source object. +
32330 * @param {number} srcIndex The index of `source`. +
32331 * @param {Function} [customizer] The function to customize merged values. +
32332 * @param {Object} [stack] Tracks traversed source values and their merged +
32333 * counterparts. +
32334 */ +
32335 function baseMerge(object, source, srcIndex, customizer, stack) { +
32336 if (object === source) { +
32337 return; +
32338 } +
32339 baseFor(source, function(srcValue, key) { +
32340 if (isObject(srcValue)) { +
32341 stack || (stack = new Stack); +
32342 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); +
32343 } +
32344 else { +
32345 var newValue = customizer +
32346 ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) +
32347 : undefined; +
32348 +
32349 if (newValue === undefined) { +
32350 newValue = srcValue; +
32351 } +
32352 assignMergeValue(object, key, newValue); +
32353 } +
32354 }, keysIn); +
32355 } +
32356 +
32357 /** +
32358 * A specialized version of `baseMerge` for arrays and objects which performs +
32359 * deep merges and tracks traversed objects enabling objects with circular +
32360 * references to be merged. +
32361 * +
32362 * @private +
32363 * @param {Object} object The destination object. +
32364 * @param {Object} source The source object. +
32365 * @param {string} key The key of the value to merge. +
32366 * @param {number} srcIndex The index of `source`. +
32367 * @param {Function} mergeFunc The function to merge values. +
32368 * @param {Function} [customizer] The function to customize assigned values. +
32369 * @param {Object} [stack] Tracks traversed source values and their merged +
32370 * counterparts. +
32371 */ +
32372 function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { +
32373 var objValue = safeGet(object, key), +
32374 srcValue = safeGet(source, key), +
32375 stacked = stack.get(srcValue); +
32376 +
32377 if (stacked) { +
32378 assignMergeValue(object, key, stacked); +
32379 return; +
32380 } +
32381 var newValue = customizer +
32382 ? customizer(objValue, srcValue, (key + ''), object, source, stack) +
32383 : undefined; +
32384 +
32385 var isCommon = newValue === undefined; +
32386 +
32387 if (isCommon) { +
32388 var isArr = isArray(srcValue), +
32389 isBuff = !isArr && isBuffer(srcValue), +
32390 isTyped = !isArr && !isBuff && isTypedArray(srcValue); +
32391 +
32392 newValue = srcValue; +
32393 if (isArr || isBuff || isTyped) { +
32394 if (isArray(objValue)) { +
32395 newValue = objValue; +
32396 } +
32397 else if (isArrayLikeObject(objValue)) { +
32398 newValue = copyArray(objValue); +
32399 } +
32400 else if (isBuff) { +
32401 isCommon = false; +
32402 newValue = cloneBuffer(srcValue, true); +
32403 } +
32404 else if (isTyped) { +
32405 isCommon = false; +
32406 newValue = cloneTypedArray(srcValue, true); +
32407 } +
32408 else { +
32409 newValue = []; +
32410 } +
32411 } +
32412 else if (isPlainObject(srcValue) || isArguments(srcValue)) { +
32413 newValue = objValue; +
32414 if (isArguments(objValue)) { +
32415 newValue = toPlainObject(objValue); +
32416 } +
32417 else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { +
32418 newValue = initCloneObject(srcValue); +
32419 } +
32420 } +
32421 else { +
32422 isCommon = false; +
32423 } +
32424 } +
32425 if (isCommon) { +
32426 // Recursively merge objects and arrays (susceptible to call stack limits). +
32427 stack.set(srcValue, newValue); +
32428 mergeFunc(newValue, srcValue, srcIndex, customizer, stack); +
32429 stack['delete'](srcValue); +
32430 } +
32431 assignMergeValue(object, key, newValue); +
32432 } +
32433 +
32434 /** +
32435 * The base implementation of `_.nth` which doesn't coerce arguments. +
32436 * +
32437 * @private +
32438 * @param {Array} array The array to query. +
32439 * @param {number} n The index of the element to return. +
32440 * @returns {*} Returns the nth element of `array`. +
32441 */ +
32442 function baseNth(array, n) { +
32443 var length = array.length; +
32444 if (!length) { +
32445 return; +
32446 } +
32447 n += n < 0 ? length : 0; +
32448 return isIndex(n, length) ? array[n] : undefined; +
32449 } +
32450 +
32451 /** +
32452 * The base implementation of `_.orderBy` without param guards. +
32453 * +
32454 * @private +
32455 * @param {Array|Object} collection The collection to iterate over. +
32456 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. +
32457 * @param {string[]} orders The sort orders of `iteratees`. +
32458 * @returns {Array} Returns the new sorted array. +
32459 */ +
32460 function baseOrderBy(collection, iteratees, orders) { +
32461 var index = -1; +
32462 iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); +
32463 +
32464 var result = baseMap(collection, function(value, key, collection) { +
32465 var criteria = arrayMap(iteratees, function(iteratee) { +
32466 return iteratee(value); +
32467 }); +
32468 return { 'criteria': criteria, 'index': ++index, 'value': value }; +
32469 }); +
32470 +
32471 return baseSortBy(result, function(object, other) { +
32472 return compareMultiple(object, other, orders); +
32473 }); +
32474 } +
32475 +
32476 /** +
32477 * The base implementation of `_.pick` without support for individual +
32478 * property identifiers. +
32479 * +
32480 * @private +
32481 * @param {Object} object The source object. +
32482 * @param {string[]} paths The property paths to pick. +
32483 * @returns {Object} Returns the new object. +
32484 */ +
32485 function basePick(object, paths) { +
32486 return basePickBy(object, paths, function(value, path) { +
32487 return hasIn(object, path); +
32488 }); +
32489 } +
32490 +
32491 /** +
32492 * The base implementation of `_.pickBy` without support for iteratee shorthands. +
32493 * +
32494 * @private +
32495 * @param {Object} object The source object. +
32496 * @param {string[]} paths The property paths to pick. +
32497 * @param {Function} predicate The function invoked per property. +
32498 * @returns {Object} Returns the new object. +
32499 */ +
32500 function basePickBy(object, paths, predicate) { +
32501 var index = -1, +
32502 length = paths.length, +
32503 result = {}; +
32504 +
32505 while (++index < length) { +
32506 var path = paths[index], +
32507 value = baseGet(object, path); +
32508 +
32509 if (predicate(value, path)) { +
32510 baseSet(result, castPath(path, object), value); +
32511 } +
32512 } +
32513 return result; +
32514 } +
32515 +
32516 /** +
32517 * A specialized version of `baseProperty` which supports deep paths. +
32518 * +
32519 * @private +
32520 * @param {Array|string} path The path of the property to get. +
32521 * @returns {Function} Returns the new accessor function. +
32522 */ +
32523 function basePropertyDeep(path) { +
32524 return function(object) { +
32525 return baseGet(object, path); +
32526 }; +
32527 } +
32528 +
32529 /** +
32530 * The base implementation of `_.pullAllBy` without support for iteratee +
32531 * shorthands. +
32532 * +
32533 * @private +
32534 * @param {Array} array The array to modify. +
32535 * @param {Array} values The values to remove. +
32536 * @param {Function} [iteratee] The iteratee invoked per element. +
32537 * @param {Function} [comparator] The comparator invoked per element. +
32538 * @returns {Array} Returns `array`. +
32539 */ +
32540 function basePullAll(array, values, iteratee, comparator) { +
32541 var indexOf = comparator ? baseIndexOfWith : baseIndexOf, +
32542 index = -1, +
32543 length = values.length, +
32544 seen = array; +
32545 +
32546 if (array === values) { +
32547 values = copyArray(values); +
32548 } +
32549 if (iteratee) { +
32550 seen = arrayMap(array, baseUnary(iteratee)); +
32551 } +
32552 while (++index < length) { +
32553 var fromIndex = 0, +
32554 value = values[index], +
32555 computed = iteratee ? iteratee(value) : value; +
32556 +
32557 while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { +
32558 if (seen !== array) { +
32559 splice.call(seen, fromIndex, 1); +
32560 } +
32561 splice.call(array, fromIndex, 1); +
32562 } +
32563 } +
32564 return array; +
32565 } +
32566 +
32567 /** +
32568 * The base implementation of `_.pullAt` without support for individual +
32569 * indexes or capturing the removed elements. +
32570 * +
32571 * @private +
32572 * @param {Array} array The array to modify. +
32573 * @param {number[]} indexes The indexes of elements to remove. +
32574 * @returns {Array} Returns `array`. +
32575 */ +
32576 function basePullAt(array, indexes) { +
32577 var length = array ? indexes.length : 0, +
32578 lastIndex = length - 1; +
32579 +
32580 while (length--) { +
32581 var index = indexes[length]; +
32582 if (length == lastIndex || index !== previous) { +
32583 var previous = index; +
32584 if (isIndex(index)) { +
32585 splice.call(array, index, 1); +
32586 } else { +
32587 baseUnset(array, index); +
32588 } +
32589 } +
32590 } +
32591 return array; +
32592 } +
32593 +
32594 /** +
32595 * The base implementation of `_.random` without support for returning +
32596 * floating-point numbers. +
32597 * +
32598 * @private +
32599 * @param {number} lower The lower bound. +
32600 * @param {number} upper The upper bound. +
32601 * @returns {number} Returns the random number. +
32602 */ +
32603 function baseRandom(lower, upper) { +
32604 return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +
32605 } +
32606 +
32607 /** +
32608 * The base implementation of `_.range` and `_.rangeRight` which doesn't +
32609 * coerce arguments. +
32610 * +
32611 * @private +
32612 * @param {number} start The start of the range. +
32613 * @param {number} end The end of the range. +
32614 * @param {number} step The value to increment or decrement by. +
32615 * @param {boolean} [fromRight] Specify iterating from right to left. +
32616 * @returns {Array} Returns the range of numbers. +
32617 */ +
32618 function baseRange(start, end, step, fromRight) { +
32619 var index = -1, +
32620 length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), +
32621 result = Array(length); +
32622 +
32623 while (length--) { +
32624 result[fromRight ? length : ++index] = start; +
32625 start += step; +
32626 } +
32627 return result; +
32628 } +
32629 +
32630 /** +
32631 * The base implementation of `_.repeat` which doesn't coerce arguments. +
32632 * +
32633 * @private +
32634 * @param {string} string The string to repeat. +
32635 * @param {number} n The number of times to repeat the string. +
32636 * @returns {string} Returns the repeated string. +
32637 */ +
32638 function baseRepeat(string, n) { +
32639 var result = ''; +
32640 if (!string || n < 1 || n > MAX_SAFE_INTEGER) { +
32641 return result; +
32642 } +
32643 // Leverage the exponentiation by squaring algorithm for a faster repeat. +
32644 // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. +
32645 do { +
32646 if (n % 2) { +
32647 result += string; +
32648 } +
32649 n = nativeFloor(n / 2); +
32650 if (n) { +
32651 string += string; +
32652 } +
32653 } while (n); +
32654 +
32655 return result; +
32656 } +
32657 +
32658 /** +
32659 * The base implementation of `_.rest` which doesn't validate or coerce arguments. +
32660 * +
32661 * @private +
32662 * @param {Function} func The function to apply a rest parameter to. +
32663 * @param {number} [start=func.length-1] The start position of the rest parameter. +
32664 * @returns {Function} Returns the new function. +
32665 */ +
32666 function baseRest(func, start) { +
32667 return setToString(overRest(func, start, identity), func + ''); +
32668 } +
32669 +
32670 /** +
32671 * The base implementation of `_.sample`. +
32672 * +
32673 * @private +
32674 * @param {Array|Object} collection The collection to sample. +
32675 * @returns {*} Returns the random element. +
32676 */ +
32677 function baseSample(collection) { +
32678 return arraySample(values(collection)); +
32679 } +
32680 +
32681 /** +
32682 * The base implementation of `_.sampleSize` without param guards. +
32683 * +
32684 * @private +
32685 * @param {Array|Object} collection The collection to sample. +
32686 * @param {number} n The number of elements to sample. +
32687 * @returns {Array} Returns the random elements. +
32688 */ +
32689 function baseSampleSize(collection, n) { +
32690 var array = values(collection); +
32691 return shuffleSelf(array, baseClamp(n, 0, array.length)); +
32692 } +
32693 +
32694 /** +
32695 * The base implementation of `_.set`. +
32696 * +
32697 * @private +
32698 * @param {Object} object The object to modify. +
32699 * @param {Array|string} path The path of the property to set. +
32700 * @param {*} value The value to set. +
32701 * @param {Function} [customizer] The function to customize path creation. +
32702 * @returns {Object} Returns `object`. +
32703 */ +
32704 function baseSet(object, path, value, customizer) { +
32705 if (!isObject(object)) { +
32706 return object; +
32707 } +
32708 path = castPath(path, object); +
32709 +
32710 var index = -1, +
32711 length = path.length, +
32712 lastIndex = length - 1, +
32713 nested = object; +
32714 +
32715 while (nested != null && ++index < length) { +
32716 var key = toKey(path[index]), +
32717 newValue = value; +
32718 +
32719 if (index != lastIndex) { +
32720 var objValue = nested[key]; +
32721 newValue = customizer ? customizer(objValue, key, nested) : undefined; +
32722 if (newValue === undefined) { +
32723 newValue = isObject(objValue) +
32724 ? objValue +
32725 : (isIndex(path[index + 1]) ? [] : {}); +
32726 } +
32727 } +
32728 assignValue(nested, key, newValue); +
32729 nested = nested[key]; +
32730 } +
32731 return object; +
32732 } +
32733 +
32734 /** +
32735 * The base implementation of `setData` without support for hot loop shorting. +
32736 * +
32737 * @private +
32738 * @param {Function} func The function to associate metadata with. +
32739 * @param {*} data The metadata. +
32740 * @returns {Function} Returns `func`. +
32741 */ +
32742 var baseSetData = !metaMap ? identity : function(func, data) { +
32743 metaMap.set(func, data); +
32744 return func; +
32745 }; +
32746 +
32747 /** +
32748 * The base implementation of `setToString` without support for hot loop shorting. +
32749 * +
32750 * @private +
32751 * @param {Function} func The function to modify. +
32752 * @param {Function} string The `toString` result. +
32753 * @returns {Function} Returns `func`. +
32754 */ +
32755 var baseSetToString = !defineProperty ? identity : function(func, string) { +
32756 return defineProperty(func, 'toString', { +
32757 'configurable': true, +
32758 'enumerable': false, +
32759 'value': constant(string), +
32760 'writable': true +
32761 }); +
32762 }; +
32763 +
32764 /** +
32765 * The base implementation of `_.shuffle`. +
32766 * +
32767 * @private +
32768 * @param {Array|Object} collection The collection to shuffle. +
32769 * @returns {Array} Returns the new shuffled array. +
32770 */ +
32771 function baseShuffle(collection) { +
32772 return shuffleSelf(values(collection)); +
32773 } +
32774 +
32775 /** +
32776 * The base implementation of `_.slice` without an iteratee call guard. +
32777 * +
32778 * @private +
32779 * @param {Array} array The array to slice. +
32780 * @param {number} [start=0] The start position. +
32781 * @param {number} [end=array.length] The end position. +
32782 * @returns {Array} Returns the slice of `array`. +
32783 */ +
32784 function baseSlice(array, start, end) { +
32785 var index = -1, +
32786 length = array.length; +
32787 +
32788 if (start < 0) { +
32789 start = -start > length ? 0 : (length + start); +
32790 } +
32791 end = end > length ? length : end; +
32792 if (end < 0) { +
32793 end += length; +
32794 } +
32795 length = start > end ? 0 : ((end - start) >>> 0); +
32796 start >>>= 0; +
32797 +
32798 var result = Array(length); +
32799 while (++index < length) { +
32800 result[index] = array[index + start]; +
32801 } +
32802 return result; +
32803 } +
32804 +
32805 /** +
32806 * The base implementation of `_.some` without support for iteratee shorthands. +
32807 * +
32808 * @private +
32809 * @param {Array|Object} collection The collection to iterate over. +
32810 * @param {Function} predicate The function invoked per iteration. +
32811 * @returns {boolean} Returns `true` if any element passes the predicate check, +
32812 * else `false`. +
32813 */ +
32814 function baseSome(collection, predicate) { +
32815 var result; +
32816 +
32817 baseEach(collection, function(value, index, collection) { +
32818 result = predicate(value, index, collection); +
32819 return !result; +
32820 }); +
32821 return !!result; +
32822 } +
32823 +
32824 /** +
32825 * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which +
32826 * performs a binary search of `array` to determine the index at which `value` +
32827 * should be inserted into `array` in order to maintain its sort order. +
32828 * +
32829 * @private +
32830 * @param {Array} array The sorted array to inspect. +
32831 * @param {*} value The value to evaluate. +
32832 * @param {boolean} [retHighest] Specify returning the highest qualified index. +
32833 * @returns {number} Returns the index at which `value` should be inserted +
32834 * into `array`. +
32835 */ +
32836 function baseSortedIndex(array, value, retHighest) { +
32837 var low = 0, +
32838 high = array == null ? low : array.length; +
32839 +
32840 if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { +
32841 while (low < high) { +
32842 var mid = (low + high) >>> 1, +
32843 computed = array[mid]; +
32844 +
32845 if (computed !== null && !isSymbol(computed) && +
32846 (retHighest ? (computed <= value) : (computed < value))) { +
32847 low = mid + 1; +
32848 } else { +
32849 high = mid; +
32850 } +
32851 } +
32852 return high; +
32853 } +
32854 return baseSortedIndexBy(array, value, identity, retHighest); +
32855 } +
32856 +
32857 /** +
32858 * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` +
32859 * which invokes `iteratee` for `value` and each element of `array` to compute +
32860 * their sort ranking. The iteratee is invoked with one argument; (value). +
32861 * +
32862 * @private +
32863 * @param {Array} array The sorted array to inspect. +
32864 * @param {*} value The value to evaluate. +
32865 * @param {Function} iteratee The iteratee invoked per element. +
32866 * @param {boolean} [retHighest] Specify returning the highest qualified index. +
32867 * @returns {number} Returns the index at which `value` should be inserted +
32868 * into `array`. +
32869 */ +
32870 function baseSortedIndexBy(array, value, iteratee, retHighest) { +
32871 value = iteratee(value); +
32872 +
32873 var low = 0, +
32874 high = array == null ? 0 : array.length, +
32875 valIsNaN = value !== value, +
32876 valIsNull = value === null, +
32877 valIsSymbol = isSymbol(value), +
32878 valIsUndefined = value === undefined; +
32879 +
32880 while (low < high) { +
32881 var mid = nativeFloor((low + high) / 2), +
32882 computed = iteratee(array[mid]), +
32883 othIsDefined = computed !== undefined, +
32884 othIsNull = computed === null, +
32885 othIsReflexive = computed === computed, +
32886 othIsSymbol = isSymbol(computed); +
32887 +
32888 if (valIsNaN) { +
32889 var setLow = retHighest || othIsReflexive; +
32890 } else if (valIsUndefined) { +
32891 setLow = othIsReflexive && (retHighest || othIsDefined); +
32892 } else if (valIsNull) { +
32893 setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); +
32894 } else if (valIsSymbol) { +
32895 setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); +
32896 } else if (othIsNull || othIsSymbol) { +
32897 setLow = false; +
32898 } else { +
32899 setLow = retHighest ? (computed <= value) : (computed < value); +
32900 } +
32901 if (setLow) { +
32902 low = mid + 1; +
32903 } else { +
32904 high = mid; +
32905 } +
32906 } +
32907 return nativeMin(high, MAX_ARRAY_INDEX); +
32908 } +
32909 +
32910 /** +
32911 * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without +
32912 * support for iteratee shorthands. +
32913 * +
32914 * @private +
32915 * @param {Array} array The array to inspect. +
32916 * @param {Function} [iteratee] The iteratee invoked per element. +
32917 * @returns {Array} Returns the new duplicate free array. +
32918 */ +
32919 function baseSortedUniq(array, iteratee) { +
32920 var index = -1, +
32921 length = array.length, +
32922 resIndex = 0, +
32923 result = []; +
32924 +
32925 while (++index < length) { +
32926 var value = array[index], +
32927 computed = iteratee ? iteratee(value) : value; +
32928 +
32929 if (!index || !eq(computed, seen)) { +
32930 var seen = computed; +
32931 result[resIndex++] = value === 0 ? 0 : value; +
32932 } +
32933 } +
32934 return result; +
32935 } +
32936 +
32937 /** +
32938 * The base implementation of `_.toNumber` which doesn't ensure correct +
32939 * conversions of binary, hexadecimal, or octal string values. +
32940 * +
32941 * @private +
32942 * @param {*} value The value to process. +
32943 * @returns {number} Returns the number. +
32944 */ +
32945 function baseToNumber(value) { +
32946 if (typeof value == 'number') { +
32947 return value; +
32948 } +
32949 if (isSymbol(value)) { +
32950 return NAN; +
32951 } +
32952 return +value; +
32953 } +
32954 +
32955 /** +
32956 * The base implementation of `_.toString` which doesn't convert nullish +
32957 * values to empty strings. +
32958 * +
32959 * @private +
32960 * @param {*} value The value to process. +
32961 * @returns {string} Returns the string. +
32962 */ +
32963 function baseToString(value) { +
32964 // Exit early for strings to avoid a performance hit in some environments. +
32965 if (typeof value == 'string') { +
32966 return value; +
32967 } +
32968 if (isArray(value)) { +
32969 // Recursively convert values (susceptible to call stack limits). +
32970 return arrayMap(value, baseToString) + ''; +
32971 } +
32972 if (isSymbol(value)) { +
32973 return symbolToString ? symbolToString.call(value) : ''; +
32974 } +
32975 var result = (value + ''); +
32976 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +
32977 } +
32978 +
32979 /** +
32980 * The base implementation of `_.uniqBy` without support for iteratee shorthands. +
32981 * +
32982 * @private +
32983 * @param {Array} array The array to inspect. +
32984 * @param {Function} [iteratee] The iteratee invoked per element. +
32985 * @param {Function} [comparator] The comparator invoked per element. +
32986 * @returns {Array} Returns the new duplicate free array. +
32987 */ +
32988 function baseUniq(array, iteratee, comparator) { +
32989 var index = -1, +
32990 includes = arrayIncludes, +
32991 length = array.length, +
32992 isCommon = true, +
32993 result = [], +
32994 seen = result; +
32995 +
32996 if (comparator) { +
32997 isCommon = false; +
32998 includes = arrayIncludesWith; +
32999 } +
33000 else if (length >= LARGE_ARRAY_SIZE) { +
33001 var set = iteratee ? null : createSet(array); +
33002 if (set) { +
33003 return setToArray(set); +
33004 } +
33005 isCommon = false; +
33006 includes = cacheHas; +
33007 seen = new SetCache; +
33008 } +
33009 else { +
33010 seen = iteratee ? [] : result; +
33011 } +
33012 outer: +
33013 while (++index < length) { +
33014 var value = array[index], +
33015 computed = iteratee ? iteratee(value) : value; +
33016 +
33017 value = (comparator || value !== 0) ? value : 0; +
33018 if (isCommon && computed === computed) { +
33019 var seenIndex = seen.length; +
33020 while (seenIndex--) { +
33021 if (seen[seenIndex] === computed) { +
33022 continue outer; +
33023 } +
33024 } +
33025 if (iteratee) { +
33026 seen.push(computed); +
33027 } +
33028 result.push(value); +
33029 } +
33030 else if (!includes(seen, computed, comparator)) { +
33031 if (seen !== result) { +
33032 seen.push(computed); +
33033 } +
33034 result.push(value); +
33035 } +
33036 } +
33037 return result; +
33038 } +
33039 +
33040 /** +
33041 * The base implementation of `_.unset`. +
33042 * +
33043 * @private +
33044 * @param {Object} object The object to modify. +
33045 * @param {Array|string} path The property path to unset. +
33046 * @returns {boolean} Returns `true` if the property is deleted, else `false`. +
33047 */ +
33048 function baseUnset(object, path) { +
33049 path = castPath(path, object); +
33050 object = parent(object, path); +
33051 return object == null || delete object[toKey(last(path))]; +
33052 } +
33053 +
33054 /** +
33055 * The base implementation of `_.update`. +
33056 * +
33057 * @private +
33058 * @param {Object} object The object to modify. +
33059 * @param {Array|string} path The path of the property to update. +
33060 * @param {Function} updater The function to produce the updated value. +
33061 * @param {Function} [customizer] The function to customize path creation. +
33062 * @returns {Object} Returns `object`. +
33063 */ +
33064 function baseUpdate(object, path, updater, customizer) { +
33065 return baseSet(object, path, updater(baseGet(object, path)), customizer); +
33066 } +
33067 +
33068 /** +
33069 * The base implementation of methods like `_.dropWhile` and `_.takeWhile` +
33070 * without support for iteratee shorthands. +
33071 * +
33072 * @private +
33073 * @param {Array} array The array to query. +
33074 * @param {Function} predicate The function invoked per iteration. +
33075 * @param {boolean} [isDrop] Specify dropping elements instead of taking them. +
33076 * @param {boolean} [fromRight] Specify iterating from right to left. +
33077 * @returns {Array} Returns the slice of `array`. +
33078 */ +
33079 function baseWhile(array, predicate, isDrop, fromRight) { +
33080 var length = array.length, +
33081 index = fromRight ? length : -1; +
33082 +
33083 while ((fromRight ? index-- : ++index < length) && +
33084 predicate(array[index], index, array)) {} +
33085 +
33086 return isDrop +
33087 ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) +
33088 : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +
33089 } +
33090 +
33091 /** +
33092 * The base implementation of `wrapperValue` which returns the result of +
33093 * performing a sequence of actions on the unwrapped `value`, where each +
33094 * successive action is supplied the return value of the previous. +
33095 * +
33096 * @private +
33097 * @param {*} value The unwrapped value. +
33098 * @param {Array} actions Actions to perform to resolve the unwrapped value. +
33099 * @returns {*} Returns the resolved value. +
33100 */ +
33101 function baseWrapperValue(value, actions) { +
33102 var result = value; +
33103 if (result instanceof LazyWrapper) { +
33104 result = result.value(); +
33105 } +
33106 return arrayReduce(actions, function(result, action) { +
33107 return action.func.apply(action.thisArg, arrayPush([result], action.args)); +
33108 }, result); +
33109 } +
33110 +
33111 /** +
33112 * The base implementation of methods like `_.xor`, without support for +
33113 * iteratee shorthands, that accepts an array of arrays to inspect. +
33114 * +
33115 * @private +
33116 * @param {Array} arrays The arrays to inspect. +
33117 * @param {Function} [iteratee] The iteratee invoked per element. +
33118 * @param {Function} [comparator] The comparator invoked per element. +
33119 * @returns {Array} Returns the new array of values. +
33120 */ +
33121 function baseXor(arrays, iteratee, comparator) { +
33122 var length = arrays.length; +
33123 if (length < 2) { +
33124 return length ? baseUniq(arrays[0]) : []; +
33125 } +
33126 var index = -1, +
33127 result = Array(length); +
33128 +
33129 while (++index < length) { +
33130 var array = arrays[index], +
33131 othIndex = -1; +
33132 +
33133 while (++othIndex < length) { +
33134 if (othIndex != index) { +
33135 result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); +
33136 } +
33137 } +
33138 } +
33139 return baseUniq(baseFlatten(result, 1), iteratee, comparator); +
33140 } +
33141 +
33142 /** +
33143 * This base implementation of `_.zipObject` which assigns values using `assignFunc`. +
33144 * +
33145 * @private +
33146 * @param {Array} props The property identifiers. +
33147 * @param {Array} values The property values. +
33148 * @param {Function} assignFunc The function to assign values. +
33149 * @returns {Object} Returns the new object. +
33150 */ +
33151 function baseZipObject(props, values, assignFunc) { +
33152 var index = -1, +
33153 length = props.length, +
33154 valsLength = values.length, +
33155 result = {}; +
33156 +
33157 while (++index < length) { +
33158 var value = index < valsLength ? values[index] : undefined; +
33159 assignFunc(result, props[index], value); +
33160 } +
33161 return result; +
33162 } +
33163 +
33164 /** +
33165 * Casts `value` to an empty array if it's not an array like object. +
33166 * +
33167 * @private +
33168 * @param {*} value The value to inspect. +
33169 * @returns {Array|Object} Returns the cast array-like object. +
33170 */ +
33171 function castArrayLikeObject(value) { +
33172 return isArrayLikeObject(value) ? value : []; +
33173 } +
33174 +
33175 /** +
33176 * Casts `value` to `identity` if it's not a function. +
33177 * +
33178 * @private +
33179 * @param {*} value The value to inspect. +
33180 * @returns {Function} Returns cast function. +
33181 */ +
33182 function castFunction(value) { +
33183 return typeof value == 'function' ? value : identity; +
33184 } +
33185 +
33186 /** +
33187 * Casts `value` to a path array if it's not one. +
33188 * +
33189 * @private +
33190 * @param {*} value The value to inspect. +
33191 * @param {Object} [object] The object to query keys on. +
33192 * @returns {Array} Returns the cast property path array. +
33193 */ +
33194 function castPath(value, object) { +
33195 if (isArray(value)) { +
33196 return value; +
33197 } +
33198 return isKey(value, object) ? [value] : stringToPath(toString(value)); +
33199 } +
33200 +
33201 /** +
33202 * A `baseRest` alias which can be replaced with `identity` by module +
33203 * replacement plugins. +
33204 * +
33205 * @private +
33206 * @type {Function} +
33207 * @param {Function} func The function to apply a rest parameter to. +
33208 * @returns {Function} Returns the new function. +
33209 */ +
33210 var castRest = baseRest; +
33211 +
33212 /** +
33213 * Casts `array` to a slice if it's needed. +
33214 * +
33215 * @private +
33216 * @param {Array} array The array to inspect. +
33217 * @param {number} start The start position. +
33218 * @param {number} [end=array.length] The end position. +
33219 * @returns {Array} Returns the cast slice. +
33220 */ +
33221 function castSlice(array, start, end) { +
33222 var length = array.length; +
33223 end = end === undefined ? length : end; +
33224 return (!start && end >= length) ? array : baseSlice(array, start, end); +
33225 } +
33226 +
33227 /** +
33228 * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). +
33229 * +
33230 * @private +
33231 * @param {number|Object} id The timer id or timeout object of the timer to clear. +
33232 */ +
33233 var clearTimeout = ctxClearTimeout || function(id) { +
33234 return root.clearTimeout(id); +
33235 }; +
33236 +
33237 /** +
33238 * Creates a clone of `buffer`. +
33239 * +
33240 * @private +
33241 * @param {Buffer} buffer The buffer to clone. +
33242 * @param {boolean} [isDeep] Specify a deep clone. +
33243 * @returns {Buffer} Returns the cloned buffer. +
33244 */ +
33245 function cloneBuffer(buffer, isDeep) { +
33246 if (isDeep) { +
33247 return buffer.slice(); +
33248 } +
33249 var length = buffer.length, +
33250 result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); +
33251 +
33252 buffer.copy(result); +
33253 return result; +
33254 } +
33255 +
33256 /** +
33257 * Creates a clone of `arrayBuffer`. +
33258 * +
33259 * @private +
33260 * @param {ArrayBuffer} arrayBuffer The array buffer to clone. +
33261 * @returns {ArrayBuffer} Returns the cloned array buffer. +
33262 */ +
33263 function cloneArrayBuffer(arrayBuffer) { +
33264 var result = new arrayBuffer.constructor(arrayBuffer.byteLength); +
33265 new Uint8Array(result).set(new Uint8Array(arrayBuffer)); +
33266 return result; +
33267 } +
33268 +
33269 /** +
33270 * Creates a clone of `dataView`. +
33271 * +
33272 * @private +
33273 * @param {Object} dataView The data view to clone. +
33274 * @param {boolean} [isDeep] Specify a deep clone. +
33275 * @returns {Object} Returns the cloned data view. +
33276 */ +
33277 function cloneDataView(dataView, isDeep) { +
33278 var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; +
33279 return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +
33280 } +
33281 +
33282 /** +
33283 * Creates a clone of `regexp`. +
33284 * +
33285 * @private +
33286 * @param {Object} regexp The regexp to clone. +
33287 * @returns {Object} Returns the cloned regexp. +
33288 */ +
33289 function cloneRegExp(regexp) { +
33290 var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); +
33291 result.lastIndex = regexp.lastIndex; +
33292 return result; +
33293 } +
33294 +
33295 /** +
33296 * Creates a clone of the `symbol` object. +
33297 * +
33298 * @private +
33299 * @param {Object} symbol The symbol object to clone. +
33300 * @returns {Object} Returns the cloned symbol object. +
33301 */ +
33302 function cloneSymbol(symbol) { +
33303 return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +
33304 } +
33305 +
33306 /** +
33307 * Creates a clone of `typedArray`. +
33308 * +
33309 * @private +
33310 * @param {Object} typedArray The typed array to clone. +
33311 * @param {boolean} [isDeep] Specify a deep clone. +
33312 * @returns {Object} Returns the cloned typed array. +
33313 */ +
33314 function cloneTypedArray(typedArray, isDeep) { +
33315 var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; +
33316 return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +
33317 } +
33318 +
33319 /** +
33320 * Compares values to sort them in ascending order. +
33321 * +
33322 * @private +
33323 * @param {*} value The value to compare. +
33324 * @param {*} other The other value to compare. +
33325 * @returns {number} Returns the sort order indicator for `value`. +
33326 */ +
33327 function compareAscending(value, other) { +
33328 if (value !== other) { +
33329 var valIsDefined = value !== undefined, +
33330 valIsNull = value === null, +
33331 valIsReflexive = value === value, +
33332 valIsSymbol = isSymbol(value); +
33333 +
33334 var othIsDefined = other !== undefined, +
33335 othIsNull = other === null, +
33336 othIsReflexive = other === other, +
33337 othIsSymbol = isSymbol(other); +
33338 +
33339 if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || +
33340 (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || +
33341 (valIsNull && othIsDefined && othIsReflexive) || +
33342 (!valIsDefined && othIsReflexive) || +
33343 !valIsReflexive) { +
33344 return 1; +
33345 } +
33346 if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || +
33347 (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || +
33348 (othIsNull && valIsDefined && valIsReflexive) || +
33349 (!othIsDefined && valIsReflexive) || +
33350 !othIsReflexive) { +
33351 return -1; +
33352 } +
33353 } +
33354 return 0; +
33355 } +
33356 +
33357 /** +
33358 * Used by `_.orderBy` to compare multiple properties of a value to another +
33359 * and stable sort them. +
33360 * +
33361 * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, +
33362 * specify an order of "desc" for descending or "asc" for ascending sort order +
33363 * of corresponding values. +
33364 * +
33365 * @private +
33366 * @param {Object} object The object to compare. +
33367 * @param {Object} other The other object to compare. +
33368 * @param {boolean[]|string[]} orders The order to sort by for each property. +
33369 * @returns {number} Returns the sort order indicator for `object`. +
33370 */ +
33371 function compareMultiple(object, other, orders) { +
33372 var index = -1, +
33373 objCriteria = object.criteria, +
33374 othCriteria = other.criteria, +
33375 length = objCriteria.length, +
33376 ordersLength = orders.length; +
33377 +
33378 while (++index < length) { +
33379 var result = compareAscending(objCriteria[index], othCriteria[index]); +
33380 if (result) { +
33381 if (index >= ordersLength) { +
33382 return result; +
33383 } +
33384 var order = orders[index]; +
33385 return result * (order == 'desc' ? -1 : 1); +
33386 } +
33387 } +
33388 // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications +
33389 // that causes it, under certain circumstances, to provide the same value for +
33390 // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 +
33391 // for more details. +
33392 // +
33393 // This also ensures a stable sort in V8 and other engines. +
33394 // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. +
33395 return object.index - other.index; +
33396 } +
33397 +
33398 /** +
33399 * Creates an array that is the composition of partially applied arguments, +
33400 * placeholders, and provided arguments into a single array of arguments. +
33401 * +
33402 * @private +
33403 * @param {Array} args The provided arguments. +
33404 * @param {Array} partials The arguments to prepend to those provided. +
33405 * @param {Array} holders The `partials` placeholder indexes. +
33406 * @params {boolean} [isCurried] Specify composing for a curried function. +
33407 * @returns {Array} Returns the new array of composed arguments. +
33408 */ +
33409 function composeArgs(args, partials, holders, isCurried) { +
33410 var argsIndex = -1, +
33411 argsLength = args.length, +
33412 holdersLength = holders.length, +
33413 leftIndex = -1, +
33414 leftLength = partials.length, +
33415 rangeLength = nativeMax(argsLength - holdersLength, 0), +
33416 result = Array(leftLength + rangeLength), +
33417 isUncurried = !isCurried; +
33418 +
33419 while (++leftIndex < leftLength) { +
33420 result[leftIndex] = partials[leftIndex]; +
33421 } +
33422 while (++argsIndex < holdersLength) { +
33423 if (isUncurried || argsIndex < argsLength) { +
33424 result[holders[argsIndex]] = args[argsIndex]; +
33425 } +
33426 } +
33427 while (rangeLength--) { +
33428 result[leftIndex++] = args[argsIndex++]; +
33429 } +
33430 return result; +
33431 } +
33432 +
33433 /** +
33434 * This function is like `composeArgs` except that the arguments composition +
33435 * is tailored for `_.partialRight`. +
33436 * +
33437 * @private +
33438 * @param {Array} args The provided arguments. +
33439 * @param {Array} partials The arguments to append to those provided. +
33440 * @param {Array} holders The `partials` placeholder indexes. +
33441 * @params {boolean} [isCurried] Specify composing for a curried function. +
33442 * @returns {Array} Returns the new array of composed arguments. +
33443 */ +
33444 function composeArgsRight(args, partials, holders, isCurried) { +
33445 var argsIndex = -1, +
33446 argsLength = args.length, +
33447 holdersIndex = -1, +
33448 holdersLength = holders.length, +
33449 rightIndex = -1, +
33450 rightLength = partials.length, +
33451 rangeLength = nativeMax(argsLength - holdersLength, 0), +
33452 result = Array(rangeLength + rightLength), +
33453 isUncurried = !isCurried; +
33454 +
33455 while (++argsIndex < rangeLength) { +
33456 result[argsIndex] = args[argsIndex]; +
33457 } +
33458 var offset = argsIndex; +
33459 while (++rightIndex < rightLength) { +
33460 result[offset + rightIndex] = partials[rightIndex]; +
33461 } +
33462 while (++holdersIndex < holdersLength) { +
33463 if (isUncurried || argsIndex < argsLength) { +
33464 result[offset + holders[holdersIndex]] = args[argsIndex++]; +
33465 } +
33466 } +
33467 return result; +
33468 } +
33469 +
33470 /** +
33471 * Copies the values of `source` to `array`. +
33472 * +
33473 * @private +
33474 * @param {Array} source The array to copy values from. +
33475 * @param {Array} [array=[]] The array to copy values to. +
33476 * @returns {Array} Returns `array`. +
33477 */ +
33478 function copyArray(source, array) { +
33479 var index = -1, +
33480 length = source.length; +
33481 +
33482 array || (array = Array(length)); +
33483 while (++index < length) { +
33484 array[index] = source[index]; +
33485 } +
33486 return array; +
33487 } +
33488 +
33489 /** +
33490 * Copies properties of `source` to `object`. +
33491 * +
33492 * @private +
33493 * @param {Object} source The object to copy properties from. +
33494 * @param {Array} props The property identifiers to copy. +
33495 * @param {Object} [object={}] The object to copy properties to. +
33496 * @param {Function} [customizer] The function to customize copied values. +
33497 * @returns {Object} Returns `object`. +
33498 */ +
33499 function copyObject(source, props, object, customizer) { +
33500 var isNew = !object; +
33501 object || (object = {}); +
33502 +
33503 var index = -1, +
33504 length = props.length; +
33505 +
33506 while (++index < length) { +
33507 var key = props[index]; +
33508 +
33509 var newValue = customizer +
33510 ? customizer(object[key], source[key], key, object, source) +
33511 : undefined; +
33512 +
33513 if (newValue === undefined) { +
33514 newValue = source[key]; +
33515 } +
33516 if (isNew) { +
33517 baseAssignValue(object, key, newValue); +
33518 } else { +
33519 assignValue(object, key, newValue); +
33520 } +
33521 } +
33522 return object; +
33523 } +
33524 +
33525 /** +
33526 * Copies own symbols of `source` to `object`. +
33527 * +
33528 * @private +
33529 * @param {Object} source The object to copy symbols from. +
33530 * @param {Object} [object={}] The object to copy symbols to. +
33531 * @returns {Object} Returns `object`. +
33532 */ +
33533 function copySymbols(source, object) { +
33534 return copyObject(source, getSymbols(source), object); +
33535 } +
33536 +
33537 /** +
33538 * Copies own and inherited symbols of `source` to `object`. +
33539 * +
33540 * @private +
33541 * @param {Object} source The object to copy symbols from. +
33542 * @param {Object} [object={}] The object to copy symbols to. +
33543 * @returns {Object} Returns `object`. +
33544 */ +
33545 function copySymbolsIn(source, object) { +
33546 return copyObject(source, getSymbolsIn(source), object); +
33547 } +
33548 +
33549 /** +
33550 * Creates a function like `_.groupBy`. +
33551 * +
33552 * @private +
33553 * @param {Function} setter The function to set accumulator values. +
33554 * @param {Function} [initializer] The accumulator object initializer. +
33555 * @returns {Function} Returns the new aggregator function. +
33556 */ +
33557 function createAggregator(setter, initializer) { +
33558 return function(collection, iteratee) { +
33559 var func = isArray(collection) ? arrayAggregator : baseAggregator, +
33560 accumulator = initializer ? initializer() : {}; +
33561 +
33562 return func(collection, setter, getIteratee(iteratee, 2), accumulator); +
33563 }; +
33564 } +
33565 +
33566 /** +
33567 * Creates a function like `_.assign`. +
33568 * +
33569 * @private +
33570 * @param {Function} assigner The function to assign values. +
33571 * @returns {Function} Returns the new assigner function. +
33572 */ +
33573 function createAssigner(assigner) { +
33574 return baseRest(function(object, sources) { +
33575 var index = -1, +
33576 length = sources.length, +
33577 customizer = length > 1 ? sources[length - 1] : undefined, +
33578 guard = length > 2 ? sources[2] : undefined; +
33579 +
33580 customizer = (assigner.length > 3 && typeof customizer == 'function') +
33581 ? (length--, customizer) +
33582 : undefined; +
33583 +
33584 if (guard && isIterateeCall(sources[0], sources[1], guard)) { +
33585 customizer = length < 3 ? undefined : customizer; +
33586 length = 1; +
33587 } +
33588 object = Object(object); +
33589 while (++index < length) { +
33590 var source = sources[index]; +
33591 if (source) { +
33592 assigner(object, source, index, customizer); +
33593 } +
33594 } +
33595 return object; +
33596 }); +
33597 } +
33598 +
33599 /** +
33600 * Creates a `baseEach` or `baseEachRight` function. +
33601 * +
33602 * @private +
33603 * @param {Function} eachFunc The function to iterate over a collection. +
33604 * @param {boolean} [fromRight] Specify iterating from right to left. +
33605 * @returns {Function} Returns the new base function. +
33606 */ +
33607 function createBaseEach(eachFunc, fromRight) { +
33608 return function(collection, iteratee) { +
33609 if (collection == null) { +
33610 return collection; +
33611 } +
33612 if (!isArrayLike(collection)) { +
33613 return eachFunc(collection, iteratee); +
33614 } +
33615 var length = collection.length, +
33616 index = fromRight ? length : -1, +
33617 iterable = Object(collection); +
33618 +
33619 while ((fromRight ? index-- : ++index < length)) { +
33620 if (iteratee(iterable[index], index, iterable) === false) { +
33621 break; +
33622 } +
33623 } +
33624 return collection; +
33625 }; +
33626 } +
33627 +
33628 /** +
33629 * Creates a base function for methods like `_.forIn` and `_.forOwn`. +
33630 * +
33631 * @private +
33632 * @param {boolean} [fromRight] Specify iterating from right to left. +
33633 * @returns {Function} Returns the new base function. +
33634 */ +
33635 function createBaseFor(fromRight) { +
33636 return function(object, iteratee, keysFunc) { +
33637 var index = -1, +
33638 iterable = Object(object), +
33639 props = keysFunc(object), +
33640 length = props.length; +
33641 +
33642 while (length--) { +
33643 var key = props[fromRight ? length : ++index]; +
33644 if (iteratee(iterable[key], key, iterable) === false) { +
33645 break; +
33646 } +
33647 } +
33648 return object; +
33649 }; +
33650 } +
33651 +
33652 /** +
33653 * Creates a function that wraps `func` to invoke it with the optional `this` +
33654 * binding of `thisArg`. +
33655 * +
33656 * @private +
33657 * @param {Function} func The function to wrap. +
33658 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
33659 * @param {*} [thisArg] The `this` binding of `func`. +
33660 * @returns {Function} Returns the new wrapped function. +
33661 */ +
33662 function createBind(func, bitmask, thisArg) { +
33663 var isBind = bitmask & WRAP_BIND_FLAG, +
33664 Ctor = createCtor(func); +
33665 +
33666 function wrapper() { +
33667 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
33668 return fn.apply(isBind ? thisArg : this, arguments); +
33669 } +
33670 return wrapper; +
33671 } +
33672 +
33673 /** +
33674 * Creates a function like `_.lowerFirst`. +
33675 * +
33676 * @private +
33677 * @param {string} methodName The name of the `String` case method to use. +
33678 * @returns {Function} Returns the new case function. +
33679 */ +
33680 function createCaseFirst(methodName) { +
33681 return function(string) { +
33682 string = toString(string); +
33683 +
33684 var strSymbols = hasUnicode(string) +
33685 ? stringToArray(string) +
33686 : undefined; +
33687 +
33688 var chr = strSymbols +
33689 ? strSymbols[0] +
33690 : string.charAt(0); +
33691 +
33692 var trailing = strSymbols +
33693 ? castSlice(strSymbols, 1).join('') +
33694 : string.slice(1); +
33695 +
33696 return chr[methodName]() + trailing; +
33697 }; +
33698 } +
33699 +
33700 /** +
33701 * Creates a function like `_.camelCase`. +
33702 * +
33703 * @private +
33704 * @param {Function} callback The function to combine each word. +
33705 * @returns {Function} Returns the new compounder function. +
33706 */ +
33707 function createCompounder(callback) { +
33708 return function(string) { +
33709 return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); +
33710 }; +
33711 } +
33712 +
33713 /** +
33714 * Creates a function that produces an instance of `Ctor` regardless of +
33715 * whether it was invoked as part of a `new` expression or by `call` or `apply`. +
33716 * +
33717 * @private +
33718 * @param {Function} Ctor The constructor to wrap. +
33719 * @returns {Function} Returns the new wrapped function. +
33720 */ +
33721 function createCtor(Ctor) { +
33722 return function() { +
33723 // Use a `switch` statement to work with class constructors. See +
33724 // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist +
33725 // for more details. +
33726 var args = arguments; +
33727 switch (args.length) { +
33728 case 0: return new Ctor; +
33729 case 1: return new Ctor(args[0]); +
33730 case 2: return new Ctor(args[0], args[1]); +
33731 case 3: return new Ctor(args[0], args[1], args[2]); +
33732 case 4: return new Ctor(args[0], args[1], args[2], args[3]); +
33733 case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); +
33734 case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); +
33735 case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); +
33736 } +
33737 var thisBinding = baseCreate(Ctor.prototype), +
33738 result = Ctor.apply(thisBinding, args); +
33739 +
33740 // Mimic the constructor's `return` behavior. +
33741 // See https://es5.github.io/#x13.2.2 for more details. +
33742 return isObject(result) ? result : thisBinding; +
33743 }; +
33744 } +
33745 +
33746 /** +
33747 * Creates a function that wraps `func` to enable currying. +
33748 * +
33749 * @private +
33750 * @param {Function} func The function to wrap. +
33751 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
33752 * @param {number} arity The arity of `func`. +
33753 * @returns {Function} Returns the new wrapped function. +
33754 */ +
33755 function createCurry(func, bitmask, arity) { +
33756 var Ctor = createCtor(func); +
33757 +
33758 function wrapper() { +
33759 var length = arguments.length, +
33760 args = Array(length), +
33761 index = length, +
33762 placeholder = getHolder(wrapper); +
33763 +
33764 while (index--) { +
33765 args[index] = arguments[index]; +
33766 } +
33767 var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) +
33768 ? [] +
33769 : replaceHolders(args, placeholder); +
33770 +
33771 length -= holders.length; +
33772 if (length < arity) { +
33773 return createRecurry( +
33774 func, bitmask, createHybrid, wrapper.placeholder, undefined, +
33775 args, holders, undefined, undefined, arity - length); +
33776 } +
33777 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
33778 return apply(fn, this, args); +
33779 } +
33780 return wrapper; +
33781 } +
33782 +
33783 /** +
33784 * Creates a `_.find` or `_.findLast` function. +
33785 * +
33786 * @private +
33787 * @param {Function} findIndexFunc The function to find the collection index. +
33788 * @returns {Function} Returns the new find function. +
33789 */ +
33790 function createFind(findIndexFunc) { +
33791 return function(collection, predicate, fromIndex) { +
33792 var iterable = Object(collection); +
33793 if (!isArrayLike(collection)) { +
33794 var iteratee = getIteratee(predicate, 3); +
33795 collection = keys(collection); +
33796 predicate = function(key) { return iteratee(iterable[key], key, iterable); }; +
33797 } +
33798 var index = findIndexFunc(collection, predicate, fromIndex); +
33799 return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; +
33800 }; +
33801 } +
33802 +
33803 /** +
33804 * Creates a `_.flow` or `_.flowRight` function. +
33805 * +
33806 * @private +
33807 * @param {boolean} [fromRight] Specify iterating from right to left. +
33808 * @returns {Function} Returns the new flow function. +
33809 */ +
33810 function createFlow(fromRight) { +
33811 return flatRest(function(funcs) { +
33812 var length = funcs.length, +
33813 index = length, +
33814 prereq = LodashWrapper.prototype.thru; +
33815 +
33816 if (fromRight) { +
33817 funcs.reverse(); +
33818 } +
33819 while (index--) { +
33820 var func = funcs[index]; +
33821 if (typeof func != 'function') { +
33822 throw new TypeError(FUNC_ERROR_TEXT); +
33823 } +
33824 if (prereq && !wrapper && getFuncName(func) == 'wrapper') { +
33825 var wrapper = new LodashWrapper([], true); +
33826 } +
33827 } +
33828 index = wrapper ? index : length; +
33829 while (++index < length) { +
33830 func = funcs[index]; +
33831 +
33832 var funcName = getFuncName(func), +
33833 data = funcName == 'wrapper' ? getData(func) : undefined; +
33834 +
33835 if (data && isLaziable(data[0]) && +
33836 data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && +
33837 !data[4].length && data[9] == 1 +
33838 ) { +
33839 wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); +
33840 } else { +
33841 wrapper = (func.length == 1 && isLaziable(func)) +
33842 ? wrapper[funcName]() +
33843 : wrapper.thru(func); +
33844 } +
33845 } +
33846 return function() { +
33847 var args = arguments, +
33848 value = args[0]; +
33849 +
33850 if (wrapper && args.length == 1 && isArray(value)) { +
33851 return wrapper.plant(value).value(); +
33852 } +
33853 var index = 0, +
33854 result = length ? funcs[index].apply(this, args) : value; +
33855 +
33856 while (++index < length) { +
33857 result = funcs[index].call(this, result); +
33858 } +
33859 return result; +
33860 }; +
33861 }); +
33862 } +
33863 +
33864 /** +
33865 * Creates a function that wraps `func` to invoke it with optional `this` +
33866 * binding of `thisArg`, partial application, and currying. +
33867 * +
33868 * @private +
33869 * @param {Function|string} func The function or method name to wrap. +
33870 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
33871 * @param {*} [thisArg] The `this` binding of `func`. +
33872 * @param {Array} [partials] The arguments to prepend to those provided to +
33873 * the new function. +
33874 * @param {Array} [holders] The `partials` placeholder indexes. +
33875 * @param {Array} [partialsRight] The arguments to append to those provided +
33876 * to the new function. +
33877 * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. +
33878 * @param {Array} [argPos] The argument positions of the new function. +
33879 * @param {number} [ary] The arity cap of `func`. +
33880 * @param {number} [arity] The arity of `func`. +
33881 * @returns {Function} Returns the new wrapped function. +
33882 */ +
33883 function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { +
33884 var isAry = bitmask & WRAP_ARY_FLAG, +
33885 isBind = bitmask & WRAP_BIND_FLAG, +
33886 isBindKey = bitmask & WRAP_BIND_KEY_FLAG, +
33887 isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), +
33888 isFlip = bitmask & WRAP_FLIP_FLAG, +
33889 Ctor = isBindKey ? undefined : createCtor(func); +
33890 +
33891 function wrapper() { +
33892 var length = arguments.length, +
33893 args = Array(length), +
33894 index = length; +
33895 +
33896 while (index--) { +
33897 args[index] = arguments[index]; +
33898 } +
33899 if (isCurried) { +
33900 var placeholder = getHolder(wrapper), +
33901 holdersCount = countHolders(args, placeholder); +
33902 } +
33903 if (partials) { +
33904 args = composeArgs(args, partials, holders, isCurried); +
33905 } +
33906 if (partialsRight) { +
33907 args = composeArgsRight(args, partialsRight, holdersRight, isCurried); +
33908 } +
33909 length -= holdersCount; +
33910 if (isCurried && length < arity) { +
33911 var newHolders = replaceHolders(args, placeholder); +
33912 return createRecurry( +
33913 func, bitmask, createHybrid, wrapper.placeholder, thisArg, +
33914 args, newHolders, argPos, ary, arity - length +
33915 ); +
33916 } +
33917 var thisBinding = isBind ? thisArg : this, +
33918 fn = isBindKey ? thisBinding[func] : func; +
33919 +
33920 length = args.length; +
33921 if (argPos) { +
33922 args = reorder(args, argPos); +
33923 } else if (isFlip && length > 1) { +
33924 args.reverse(); +
33925 } +
33926 if (isAry && ary < length) { +
33927 args.length = ary; +
33928 } +
33929 if (this && this !== root && this instanceof wrapper) { +
33930 fn = Ctor || createCtor(fn); +
33931 } +
33932 return fn.apply(thisBinding, args); +
33933 } +
33934 return wrapper; +
33935 } +
33936 +
33937 /** +
33938 * Creates a function like `_.invertBy`. +
33939 * +
33940 * @private +
33941 * @param {Function} setter The function to set accumulator values. +
33942 * @param {Function} toIteratee The function to resolve iteratees. +
33943 * @returns {Function} Returns the new inverter function. +
33944 */ +
33945 function createInverter(setter, toIteratee) { +
33946 return function(object, iteratee) { +
33947 return baseInverter(object, setter, toIteratee(iteratee), {}); +
33948 }; +
33949 } +
33950 +
33951 /** +
33952 * Creates a function that performs a mathematical operation on two values. +
33953 * +
33954 * @private +
33955 * @param {Function} operator The function to perform the operation. +
33956 * @param {number} [defaultValue] The value used for `undefined` arguments. +
33957 * @returns {Function} Returns the new mathematical operation function. +
33958 */ +
33959 function createMathOperation(operator, defaultValue) { +
33960 return function(value, other) { +
33961 var result; +
33962 if (value === undefined && other === undefined) { +
33963 return defaultValue; +
33964 } +
33965 if (value !== undefined) { +
33966 result = value; +
33967 } +
33968 if (other !== undefined) { +
33969 if (result === undefined) { +
33970 return other; +
33971 } +
33972 if (typeof value == 'string' || typeof other == 'string') { +
33973 value = baseToString(value); +
33974 other = baseToString(other); +
33975 } else { +
33976 value = baseToNumber(value); +
33977 other = baseToNumber(other); +
33978 } +
33979 result = operator(value, other); +
33980 } +
33981 return result; +
33982 }; +
33983 } +
33984 +
33985 /** +
33986 * Creates a function like `_.over`. +
33987 * +
33988 * @private +
33989 * @param {Function} arrayFunc The function to iterate over iteratees. +
33990 * @returns {Function} Returns the new over function. +
33991 */ +
33992 function createOver(arrayFunc) { +
33993 return flatRest(function(iteratees) { +
33994 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); +
33995 return baseRest(function(args) { +
33996 var thisArg = this; +
33997 return arrayFunc(iteratees, function(iteratee) { +
33998 return apply(iteratee, thisArg, args); +
33999 }); +
34000 }); +
34001 }); +
34002 } +
34003 +
34004 /** +
34005 * Creates the padding for `string` based on `length`. The `chars` string +
34006 * is truncated if the number of characters exceeds `length`. +
34007 * +
34008 * @private +
34009 * @param {number} length The padding length. +
34010 * @param {string} [chars=' '] The string used as padding. +
34011 * @returns {string} Returns the padding for `string`. +
34012 */ +
34013 function createPadding(length, chars) { +
34014 chars = chars === undefined ? ' ' : baseToString(chars); +
34015 +
34016 var charsLength = chars.length; +
34017 if (charsLength < 2) { +
34018 return charsLength ? baseRepeat(chars, length) : chars; +
34019 } +
34020 var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); +
34021 return hasUnicode(chars) +
34022 ? castSlice(stringToArray(result), 0, length).join('') +
34023 : result.slice(0, length); +
34024 } +
34025 +
34026 /** +
34027 * Creates a function that wraps `func` to invoke it with the `this` binding +
34028 * of `thisArg` and `partials` prepended to the arguments it receives. +
34029 * +
34030 * @private +
34031 * @param {Function} func The function to wrap. +
34032 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
34033 * @param {*} thisArg The `this` binding of `func`. +
34034 * @param {Array} partials The arguments to prepend to those provided to +
34035 * the new function. +
34036 * @returns {Function} Returns the new wrapped function. +
34037 */ +
34038 function createPartial(func, bitmask, thisArg, partials) { +
34039 var isBind = bitmask & WRAP_BIND_FLAG, +
34040 Ctor = createCtor(func); +
34041 +
34042 function wrapper() { +
34043 var argsIndex = -1, +
34044 argsLength = arguments.length, +
34045 leftIndex = -1, +
34046 leftLength = partials.length, +
34047 args = Array(leftLength + argsLength), +
34048 fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
34049 +
34050 while (++leftIndex < leftLength) { +
34051 args[leftIndex] = partials[leftIndex]; +
34052 } +
34053 while (argsLength--) { +
34054 args[leftIndex++] = arguments[++argsIndex]; +
34055 } +
34056 return apply(fn, isBind ? thisArg : this, args); +
34057 } +
34058 return wrapper; +
34059 } +
34060 +
34061 /** +
34062 * Creates a `_.range` or `_.rangeRight` function. +
34063 * +
34064 * @private +
34065 * @param {boolean} [fromRight] Specify iterating from right to left. +
34066 * @returns {Function} Returns the new range function. +
34067 */ +
34068 function createRange(fromRight) { +
34069 return function(start, end, step) { +
34070 if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { +
34071 end = step = undefined; +
34072 } +
34073 // Ensure the sign of `-0` is preserved. +
34074 start = toFinite(start); +
34075 if (end === undefined) { +
34076 end = start; +
34077 start = 0; +
34078 } else { +
34079 end = toFinite(end); +
34080 } +
34081 step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); +
34082 return baseRange(start, end, step, fromRight); +
34083 }; +
34084 } +
34085 +
34086 /** +
34087 * Creates a function that performs a relational operation on two values. +
34088 * +
34089 * @private +
34090 * @param {Function} operator The function to perform the operation. +
34091 * @returns {Function} Returns the new relational operation function. +
34092 */ +
34093 function createRelationalOperation(operator) { +
34094 return function(value, other) { +
34095 if (!(typeof value == 'string' && typeof other == 'string')) { +
34096 value = toNumber(value); +
34097 other = toNumber(other); +
34098 } +
34099 return operator(value, other); +
34100 }; +
34101 } +
34102 +
34103 /** +
34104 * Creates a function that wraps `func` to continue currying. +
34105 * +
34106 * @private +
34107 * @param {Function} func The function to wrap. +
34108 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
34109 * @param {Function} wrapFunc The function to create the `func` wrapper. +
34110 * @param {*} placeholder The placeholder value. +
34111 * @param {*} [thisArg] The `this` binding of `func`. +
34112 * @param {Array} [partials] The arguments to prepend to those provided to +
34113 * the new function. +
34114 * @param {Array} [holders] The `partials` placeholder indexes. +
34115 * @param {Array} [argPos] The argument positions of the new function. +
34116 * @param {number} [ary] The arity cap of `func`. +
34117 * @param {number} [arity] The arity of `func`. +
34118 * @returns {Function} Returns the new wrapped function. +
34119 */ +
34120 function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { +
34121 var isCurry = bitmask & WRAP_CURRY_FLAG, +
34122 newHolders = isCurry ? holders : undefined, +
34123 newHoldersRight = isCurry ? undefined : holders, +
34124 newPartials = isCurry ? partials : undefined, +
34125 newPartialsRight = isCurry ? undefined : partials; +
34126 +
34127 bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); +
34128 bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); +
34129 +
34130 if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { +
34131 bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); +
34132 } +
34133 var newData = [ +
34134 func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, +
34135 newHoldersRight, argPos, ary, arity +
34136 ]; +
34137 +
34138 var result = wrapFunc.apply(undefined, newData); +
34139 if (isLaziable(func)) { +
34140 setData(result, newData); +
34141 } +
34142 result.placeholder = placeholder; +
34143 return setWrapToString(result, func, bitmask); +
34144 } +
34145 +
34146 /** +
34147 * Creates a function like `_.round`. +
34148 * +
34149 * @private +
34150 * @param {string} methodName The name of the `Math` method to use when rounding. +
34151 * @returns {Function} Returns the new round function. +
34152 */ +
34153 function createRound(methodName) { +
34154 var func = Math[methodName]; +
34155 return function(number, precision) { +
34156 number = toNumber(number); +
34157 precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); +
34158 if (precision) { +
34159 // Shift with exponential notation to avoid floating-point issues. +
34160 // See [MDN](https://mdn.io/round#Examples) for more details. +
34161 var pair = (toString(number) + 'e').split('e'), +
34162 value = func(pair[0] + 'e' + (+pair[1] + precision)); +
34163 +
34164 pair = (toString(value) + 'e').split('e'); +
34165 return +(pair[0] + 'e' + (+pair[1] - precision)); +
34166 } +
34167 return func(number); +
34168 }; +
34169 } +
34170 +
34171 /** +
34172 * Creates a set object of `values`. +
34173 * +
34174 * @private +
34175 * @param {Array} values The values to add to the set. +
34176 * @returns {Object} Returns the new set. +
34177 */ +
34178 var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { +
34179 return new Set(values); +
34180 }; +
34181 +
34182 /** +
34183 * Creates a `_.toPairs` or `_.toPairsIn` function. +
34184 * +
34185 * @private +
34186 * @param {Function} keysFunc The function to get the keys of a given object. +
34187 * @returns {Function} Returns the new pairs function. +
34188 */ +
34189 function createToPairs(keysFunc) { +
34190 return function(object) { +
34191 var tag = getTag(object); +
34192 if (tag == mapTag) { +
34193 return mapToArray(object); +
34194 } +
34195 if (tag == setTag) { +
34196 return setToPairs(object); +
34197 } +
34198 return baseToPairs(object, keysFunc(object)); +
34199 }; +
34200 } +
34201 +
34202 /** +
34203 * Creates a function that either curries or invokes `func` with optional +
34204 * `this` binding and partially applied arguments. +
34205 * +
34206 * @private +
34207 * @param {Function|string} func The function or method name to wrap. +
34208 * @param {number} bitmask The bitmask flags. +
34209 * 1 - `_.bind` +
34210 * 2 - `_.bindKey` +
34211 * 4 - `_.curry` or `_.curryRight` of a bound function +
34212 * 8 - `_.curry` +
34213 * 16 - `_.curryRight` +
34214 * 32 - `_.partial` +
34215 * 64 - `_.partialRight` +
34216 * 128 - `_.rearg` +
34217 * 256 - `_.ary` +
34218 * 512 - `_.flip` +
34219 * @param {*} [thisArg] The `this` binding of `func`. +
34220 * @param {Array} [partials] The arguments to be partially applied. +
34221 * @param {Array} [holders] The `partials` placeholder indexes. +
34222 * @param {Array} [argPos] The argument positions of the new function. +
34223 * @param {number} [ary] The arity cap of `func`. +
34224 * @param {number} [arity] The arity of `func`. +
34225 * @returns {Function} Returns the new wrapped function. +
34226 */ +
34227 function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { +
34228 var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; +
34229 if (!isBindKey && typeof func != 'function') { +
34230 throw new TypeError(FUNC_ERROR_TEXT); +
34231 } +
34232 var length = partials ? partials.length : 0; +
34233 if (!length) { +
34234 bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); +
34235 partials = holders = undefined; +
34236 } +
34237 ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); +
34238 arity = arity === undefined ? arity : toInteger(arity); +
34239 length -= holders ? holders.length : 0; +
34240 +
34241 if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { +
34242 var partialsRight = partials, +
34243 holdersRight = holders; +
34244 +
34245 partials = holders = undefined; +
34246 } +
34247 var data = isBindKey ? undefined : getData(func); +
34248 +
34249 var newData = [ +
34250 func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, +
34251 argPos, ary, arity +
34252 ]; +
34253 +
34254 if (data) { +
34255 mergeData(newData, data); +
34256 } +
34257 func = newData[0]; +
34258 bitmask = newData[1]; +
34259 thisArg = newData[2]; +
34260 partials = newData[3]; +
34261 holders = newData[4]; +
34262 arity = newData[9] = newData[9] === undefined +
34263 ? (isBindKey ? 0 : func.length) +
34264 : nativeMax(newData[9] - length, 0); +
34265 +
34266 if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { +
34267 bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); +
34268 } +
34269 if (!bitmask || bitmask == WRAP_BIND_FLAG) { +
34270 var result = createBind(func, bitmask, thisArg); +
34271 } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { +
34272 result = createCurry(func, bitmask, arity); +
34273 } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { +
34274 result = createPartial(func, bitmask, thisArg, partials); +
34275 } else { +
34276 result = createHybrid.apply(undefined, newData); +
34277 } +
34278 var setter = data ? baseSetData : setData; +
34279 return setWrapToString(setter(result, newData), func, bitmask); +
34280 } +
34281 +
34282 /** +
34283 * Used by `_.defaults` to customize its `_.assignIn` use to assign properties +
34284 * of source objects to the destination object for all destination properties +
34285 * that resolve to `undefined`. +
34286 * +
34287 * @private +
34288 * @param {*} objValue The destination value. +
34289 * @param {*} srcValue The source value. +
34290 * @param {string} key The key of the property to assign. +
34291 * @param {Object} object The parent object of `objValue`. +
34292 * @returns {*} Returns the value to assign. +
34293 */ +
34294 function customDefaultsAssignIn(objValue, srcValue, key, object) { +
34295 if (objValue === undefined || +
34296 (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { +
34297 return srcValue; +
34298 } +
34299 return objValue; +
34300 } +
34301 +
34302 /** +
34303 * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source +
34304 * objects into destination objects that are passed thru. +
34305 * +
34306 * @private +
34307 * @param {*} objValue The destination value. +
34308 * @param {*} srcValue The source value. +
34309 * @param {string} key The key of the property to merge. +
34310 * @param {Object} object The parent object of `objValue`. +
34311 * @param {Object} source The parent object of `srcValue`. +
34312 * @param {Object} [stack] Tracks traversed source values and their merged +
34313 * counterparts. +
34314 * @returns {*} Returns the value to assign. +
34315 */ +
34316 function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { +
34317 if (isObject(objValue) && isObject(srcValue)) { +
34318 // Recursively merge objects and arrays (susceptible to call stack limits). +
34319 stack.set(srcValue, objValue); +
34320 baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); +
34321 stack['delete'](srcValue); +
34322 } +
34323 return objValue; +
34324 } +
34325 +
34326 /** +
34327 * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain +
34328 * objects. +
34329 * +
34330 * @private +
34331 * @param {*} value The value to inspect. +
34332 * @param {string} key The key of the property to inspect. +
34333 * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. +
34334 */ +
34335 function customOmitClone(value) { +
34336 return isPlainObject(value) ? undefined : value; +
34337 } +
34338 +
34339 /** +
34340 * A specialized version of `baseIsEqualDeep` for arrays with support for +
34341 * partial deep comparisons. +
34342 * +
34343 * @private +
34344 * @param {Array} array The array to compare. +
34345 * @param {Array} other The other array to compare. +
34346 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
34347 * @param {Function} customizer The function to customize comparisons. +
34348 * @param {Function} equalFunc The function to determine equivalents of values. +
34349 * @param {Object} stack Tracks traversed `array` and `other` objects. +
34350 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. +
34351 */ +
34352 function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { +
34353 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +
34354 arrLength = array.length, +
34355 othLength = other.length; +
34356 +
34357 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { +
34358 return false; +
34359 } +
34360 // Assume cyclic values are equal. +
34361 var stacked = stack.get(array); +
34362 if (stacked && stack.get(other)) { +
34363 return stacked == other; +
34364 } +
34365 var index = -1, +
34366 result = true, +
34367 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; +
34368 +
34369 stack.set(array, other); +
34370 stack.set(other, array); +
34371 +
34372 // Ignore non-index properties. +
34373 while (++index < arrLength) { +
34374 var arrValue = array[index], +
34375 othValue = other[index]; +
34376 +
34377 if (customizer) { +
34378 var compared = isPartial +
34379 ? customizer(othValue, arrValue, index, other, array, stack) +
34380 : customizer(arrValue, othValue, index, array, other, stack); +
34381 } +
34382 if (compared !== undefined) { +
34383 if (compared) { +
34384 continue; +
34385 } +
34386 result = false; +
34387 break; +
34388 } +
34389 // Recursively compare arrays (susceptible to call stack limits). +
34390 if (seen) { +
34391 if (!arraySome(other, function(othValue, othIndex) { +
34392 if (!cacheHas(seen, othIndex) && +
34393 (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { +
34394 return seen.push(othIndex); +
34395 } +
34396 })) { +
34397 result = false; +
34398 break; +
34399 } +
34400 } else if (!( +
34401 arrValue === othValue || +
34402 equalFunc(arrValue, othValue, bitmask, customizer, stack) +
34403 )) { +
34404 result = false; +
34405 break; +
34406 } +
34407 } +
34408 stack['delete'](array); +
34409 stack['delete'](other); +
34410 return result; +
34411 } +
34412 +
34413 /** +
34414 * A specialized version of `baseIsEqualDeep` for comparing objects of +
34415 * the same `toStringTag`. +
34416 * +
34417 * **Note:** This function only supports comparing values with tags of +
34418 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. +
34419 * +
34420 * @private +
34421 * @param {Object} object The object to compare. +
34422 * @param {Object} other The other object to compare. +
34423 * @param {string} tag The `toStringTag` of the objects to compare. +
34424 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
34425 * @param {Function} customizer The function to customize comparisons. +
34426 * @param {Function} equalFunc The function to determine equivalents of values. +
34427 * @param {Object} stack Tracks traversed `object` and `other` objects. +
34428 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
34429 */ +
34430 function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { +
34431 switch (tag) { +
34432 case dataViewTag: +
34433 if ((object.byteLength != other.byteLength) || +
34434 (object.byteOffset != other.byteOffset)) { +
34435 return false; +
34436 } +
34437 object = object.buffer; +
34438 other = other.buffer; +
34439 +
34440 case arrayBufferTag: +
34441 if ((object.byteLength != other.byteLength) || +
34442 !equalFunc(new Uint8Array(object), new Uint8Array(other))) { +
34443 return false; +
34444 } +
34445 return true; +
34446 +
34447 case boolTag: +
34448 case dateTag: +
34449 case numberTag: +
34450 // Coerce booleans to `1` or `0` and dates to milliseconds. +
34451 // Invalid dates are coerced to `NaN`. +
34452 return eq(+object, +other); +
34453 +
34454 case errorTag: +
34455 return object.name == other.name && object.message == other.message; +
34456 +
34457 case regexpTag: +
34458 case stringTag: +
34459 // Coerce regexes to strings and treat strings, primitives and objects, +
34460 // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring +
34461 // for more details. +
34462 return object == (other + ''); +
34463 +
34464 case mapTag: +
34465 var convert = mapToArray; +
34466 +
34467 case setTag: +
34468 var isPartial = bitmask & COMPARE_PARTIAL_FLAG; +
34469 convert || (convert = setToArray); +
34470 +
34471 if (object.size != other.size && !isPartial) { +
34472 return false; +
34473 } +
34474 // Assume cyclic values are equal. +
34475 var stacked = stack.get(object); +
34476 if (stacked) { +
34477 return stacked == other; +
34478 } +
34479 bitmask |= COMPARE_UNORDERED_FLAG; +
34480 +
34481 // Recursively compare objects (susceptible to call stack limits). +
34482 stack.set(object, other); +
34483 var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); +
34484 stack['delete'](object); +
34485 return result; +
34486 +
34487 case symbolTag: +
34488 if (symbolValueOf) { +
34489 return symbolValueOf.call(object) == symbolValueOf.call(other); +
34490 } +
34491 } +
34492 return false; +
34493 } +
34494 +
34495 /** +
34496 * A specialized version of `baseIsEqualDeep` for objects with support for +
34497 * partial deep comparisons. +
34498 * +
34499 * @private +
34500 * @param {Object} object The object to compare. +
34501 * @param {Object} other The other object to compare. +
34502 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
34503 * @param {Function} customizer The function to customize comparisons. +
34504 * @param {Function} equalFunc The function to determine equivalents of values. +
34505 * @param {Object} stack Tracks traversed `object` and `other` objects. +
34506 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
34507 */ +
34508 function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { +
34509 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +
34510 objProps = getAllKeys(object), +
34511 objLength = objProps.length, +
34512 othProps = getAllKeys(other), +
34513 othLength = othProps.length; +
34514 +
34515 if (objLength != othLength && !isPartial) { +
34516 return false; +
34517 } +
34518 var index = objLength; +
34519 while (index--) { +
34520 var key = objProps[index]; +
34521 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { +
34522 return false; +
34523 } +
34524 } +
34525 // Assume cyclic values are equal. +
34526 var stacked = stack.get(object); +
34527 if (stacked && stack.get(other)) { +
34528 return stacked == other; +
34529 } +
34530 var result = true; +
34531 stack.set(object, other); +
34532 stack.set(other, object); +
34533 +
34534 var skipCtor = isPartial; +
34535 while (++index < objLength) { +
34536 key = objProps[index]; +
34537 var objValue = object[key], +
34538 othValue = other[key]; +
34539 +
34540 if (customizer) { +
34541 var compared = isPartial +
34542 ? customizer(othValue, objValue, key, other, object, stack) +
34543 : customizer(objValue, othValue, key, object, other, stack); +
34544 } +
34545 // Recursively compare objects (susceptible to call stack limits). +
34546 if (!(compared === undefined +
34547 ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) +
34548 : compared +
34549 )) { +
34550 result = false; +
34551 break; +
34552 } +
34553 skipCtor || (skipCtor = key == 'constructor'); +
34554 } +
34555 if (result && !skipCtor) { +
34556 var objCtor = object.constructor, +
34557 othCtor = other.constructor; +
34558 +
34559 // Non `Object` object instances with different constructors are not equal. +
34560 if (objCtor != othCtor && +
34561 ('constructor' in object && 'constructor' in other) && +
34562 !(typeof objCtor == 'function' && objCtor instanceof objCtor && +
34563 typeof othCtor == 'function' && othCtor instanceof othCtor)) { +
34564 result = false; +
34565 } +
34566 } +
34567 stack['delete'](object); +
34568 stack['delete'](other); +
34569 return result; +
34570 } +
34571 +
34572 /** +
34573 * A specialized version of `baseRest` which flattens the rest array. +
34574 * +
34575 * @private +
34576 * @param {Function} func The function to apply a rest parameter to. +
34577 * @returns {Function} Returns the new function. +
34578 */ +
34579 function flatRest(func) { +
34580 return setToString(overRest(func, undefined, flatten), func + ''); +
34581 } +
34582 +
34583 /** +
34584 * Creates an array of own enumerable property names and symbols of `object`. +
34585 * +
34586 * @private +
34587 * @param {Object} object The object to query. +
34588 * @returns {Array} Returns the array of property names and symbols. +
34589 */ +
34590 function getAllKeys(object) { +
34591 return baseGetAllKeys(object, keys, getSymbols); +
34592 } +
34593 +
34594 /** +
34595 * Creates an array of own and inherited enumerable property names and +
34596 * symbols of `object`. +
34597 * +
34598 * @private +
34599 * @param {Object} object The object to query. +
34600 * @returns {Array} Returns the array of property names and symbols. +
34601 */ +
34602 function getAllKeysIn(object) { +
34603 return baseGetAllKeys(object, keysIn, getSymbolsIn); +
34604 } +
34605 +
34606 /** +
34607 * Gets metadata for `func`. +
34608 * +
34609 * @private +
34610 * @param {Function} func The function to query. +
34611 * @returns {*} Returns the metadata for `func`. +
34612 */ +
34613 var getData = !metaMap ? noop : function(func) { +
34614 return metaMap.get(func); +
34615 }; +
34616 +
34617 /** +
34618 * Gets the name of `func`. +
34619 * +
34620 * @private +
34621 * @param {Function} func The function to query. +
34622 * @returns {string} Returns the function name. +
34623 */ +
34624 function getFuncName(func) { +
34625 var result = (func.name + ''), +
34626 array = realNames[result], +
34627 length = hasOwnProperty.call(realNames, result) ? array.length : 0; +
34628 +
34629 while (length--) { +
34630 var data = array[length], +
34631 otherFunc = data.func; +
34632 if (otherFunc == null || otherFunc == func) { +
34633 return data.name; +
34634 } +
34635 } +
34636 return result; +
34637 } +
34638 +
34639 /** +
34640 * Gets the argument placeholder value for `func`. +
34641 * +
34642 * @private +
34643 * @param {Function} func The function to inspect. +
34644 * @returns {*} Returns the placeholder value. +
34645 */ +
34646 function getHolder(func) { +
34647 var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; +
34648 return object.placeholder; +
34649 } +
34650 +
34651 /** +
34652 * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, +
34653 * this function returns the custom method, otherwise it returns `baseIteratee`. +
34654 * If arguments are provided, the chosen function is invoked with them and +
34655 * its result is returned. +
34656 * +
34657 * @private +
34658 * @param {*} [value] The value to convert to an iteratee. +
34659 * @param {number} [arity] The arity of the created iteratee. +
34660 * @returns {Function} Returns the chosen function or its result. +
34661 */ +
34662 function getIteratee() { +
34663 var result = lodash.iteratee || iteratee; +
34664 result = result === iteratee ? baseIteratee : result; +
34665 return arguments.length ? result(arguments[0], arguments[1]) : result; +
34666 } +
34667 +
34668 /** +
34669 * Gets the data for `map`. +
34670 * +
34671 * @private +
34672 * @param {Object} map The map to query. +
34673 * @param {string} key The reference key. +
34674 * @returns {*} Returns the map data. +
34675 */ +
34676 function getMapData(map, key) { +
34677 var data = map.__data__; +
34678 return isKeyable(key) +
34679 ? data[typeof key == 'string' ? 'string' : 'hash'] +
34680 : data.map; +
34681 } +
34682 +
34683 /** +
34684 * Gets the property names, values, and compare flags of `object`. +
34685 * +
34686 * @private +
34687 * @param {Object} object The object to query. +
34688 * @returns {Array} Returns the match data of `object`. +
34689 */ +
34690 function getMatchData(object) { +
34691 var result = keys(object), +
34692 length = result.length; +
34693 +
34694 while (length--) { +
34695 var key = result[length], +
34696 value = object[key]; +
34697 +
34698 result[length] = [key, value, isStrictComparable(value)]; +
34699 } +
34700 return result; +
34701 } +
34702 +
34703 /** +
34704 * Gets the native function at `key` of `object`. +
34705 * +
34706 * @private +
34707 * @param {Object} object The object to query. +
34708 * @param {string} key The key of the method to get. +
34709 * @returns {*} Returns the function if it's native, else `undefined`. +
34710 */ +
34711 function getNative(object, key) { +
34712 var value = getValue(object, key); +
34713 return baseIsNative(value) ? value : undefined; +
34714 } +
34715 +
34716 /** +
34717 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. +
34718 * +
34719 * @private +
34720 * @param {*} value The value to query. +
34721 * @returns {string} Returns the raw `toStringTag`. +
34722 */ +
34723 function getRawTag(value) { +
34724 var isOwn = hasOwnProperty.call(value, symToStringTag), +
34725 tag = value[symToStringTag]; +
34726 +
34727 try { +
34728 value[symToStringTag] = undefined; +
34729 var unmasked = true; +
34730 } catch (e) {} +
34731 +
34732 var result = nativeObjectToString.call(value); +
34733 if (unmasked) { +
34734 if (isOwn) { +
34735 value[symToStringTag] = tag; +
34736 } else { +
34737 delete value[symToStringTag]; +
34738 } +
34739 } +
34740 return result; +
34741 } +
34742 +
34743 /** +
34744 * Creates an array of the own enumerable symbols of `object`. +
34745 * +
34746 * @private +
34747 * @param {Object} object The object to query. +
34748 * @returns {Array} Returns the array of symbols. +
34749 */ +
34750 var getSymbols = !nativeGetSymbols ? stubArray : function(object) { +
34751 if (object == null) { +
34752 return []; +
34753 } +
34754 object = Object(object); +
34755 return arrayFilter(nativeGetSymbols(object), function(symbol) { +
34756 return propertyIsEnumerable.call(object, symbol); +
34757 }); +
34758 }; +
34759 +
34760 /** +
34761 * Creates an array of the own and inherited enumerable symbols of `object`. +
34762 * +
34763 * @private +
34764 * @param {Object} object The object to query. +
34765 * @returns {Array} Returns the array of symbols. +
34766 */ +
34767 var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { +
34768 var result = []; +
34769 while (object) { +
34770 arrayPush(result, getSymbols(object)); +
34771 object = getPrototype(object); +
34772 } +
34773 return result; +
34774 }; +
34775 +
34776 /** +
34777 * Gets the `toStringTag` of `value`. +
34778 * +
34779 * @private +
34780 * @param {*} value The value to query. +
34781 * @returns {string} Returns the `toStringTag`. +
34782 */ +
34783 var getTag = baseGetTag; +
34784 +
34785 // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +
34786 if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || +
34787 (Map && getTag(new Map) != mapTag) || +
34788 (Promise && getTag(Promise.resolve()) != promiseTag) || +
34789 (Set && getTag(new Set) != setTag) || +
34790 (WeakMap && getTag(new WeakMap) != weakMapTag)) { +
34791 getTag = function(value) { +
34792 var result = baseGetTag(value), +
34793 Ctor = result == objectTag ? value.constructor : undefined, +
34794 ctorString = Ctor ? toSource(Ctor) : ''; +
34795 +
34796 if (ctorString) { +
34797 switch (ctorString) { +
34798 case dataViewCtorString: return dataViewTag; +
34799 case mapCtorString: return mapTag; +
34800 case promiseCtorString: return promiseTag; +
34801 case setCtorString: return setTag; +
34802 case weakMapCtorString: return weakMapTag; +
34803 } +
34804 } +
34805 return result; +
34806 }; +
34807 } +
34808 +
34809 /** +
34810 * Gets the view, applying any `transforms` to the `start` and `end` positions. +
34811 * +
34812 * @private +
34813 * @param {number} start The start of the view. +
34814 * @param {number} end The end of the view. +
34815 * @param {Array} transforms The transformations to apply to the view. +
34816 * @returns {Object} Returns an object containing the `start` and `end` +
34817 * positions of the view. +
34818 */ +
34819 function getView(start, end, transforms) { +
34820 var index = -1, +
34821 length = transforms.length; +
34822 +
34823 while (++index < length) { +
34824 var data = transforms[index], +
34825 size = data.size; +
34826 +
34827 switch (data.type) { +
34828 case 'drop': start += size; break; +
34829 case 'dropRight': end -= size; break; +
34830 case 'take': end = nativeMin(end, start + size); break; +
34831 case 'takeRight': start = nativeMax(start, end - size); break; +
34832 } +
34833 } +
34834 return { 'start': start, 'end': end }; +
34835 } +
34836 +
34837 /** +
34838 * Extracts wrapper details from the `source` body comment. +
34839 * +
34840 * @private +
34841 * @param {string} source The source to inspect. +
34842 * @returns {Array} Returns the wrapper details. +
34843 */ +
34844 function getWrapDetails(source) { +
34845 var match = source.match(reWrapDetails); +
34846 return match ? match[1].split(reSplitDetails) : []; +
34847 } +
34848 +
34849 /** +
34850 * Checks if `path` exists on `object`. +
34851 * +
34852 * @private +
34853 * @param {Object} object The object to query. +
34854 * @param {Array|string} path The path to check. +
34855 * @param {Function} hasFunc The function to check properties. +
34856 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
34857 */ +
34858 function hasPath(object, path, hasFunc) { +
34859 path = castPath(path, object); +
34860 +
34861 var index = -1, +
34862 length = path.length, +
34863 result = false; +
34864 +
34865 while (++index < length) { +
34866 var key = toKey(path[index]); +
34867 if (!(result = object != null && hasFunc(object, key))) { +
34868 break; +
34869 } +
34870 object = object[key]; +
34871 } +
34872 if (result || ++index != length) { +
34873 return result; +
34874 } +
34875 length = object == null ? 0 : object.length; +
34876 return !!length && isLength(length) && isIndex(key, length) && +
34877 (isArray(object) || isArguments(object)); +
34878 } +
34879 +
34880 /** +
34881 * Initializes an array clone. +
34882 * +
34883 * @private +
34884 * @param {Array} array The array to clone. +
34885 * @returns {Array} Returns the initialized clone. +
34886 */ +
34887 function initCloneArray(array) { +
34888 var length = array.length, +
34889 result = new array.constructor(length); +
34890 +
34891 // Add properties assigned by `RegExp#exec`. +
34892 if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { +
34893 result.index = array.index; +
34894 result.input = array.input; +
34895 } +
34896 return result; +
34897 } +
34898 +
34899 /** +
34900 * Initializes an object clone. +
34901 * +
34902 * @private +
34903 * @param {Object} object The object to clone. +
34904 * @returns {Object} Returns the initialized clone. +
34905 */ +
34906 function initCloneObject(object) { +
34907 return (typeof object.constructor == 'function' && !isPrototype(object)) +
34908 ? baseCreate(getPrototype(object)) +
34909 : {}; +
34910 } +
34911 +
34912 /** +
34913 * Initializes an object clone based on its `toStringTag`. +
34914 * +
34915 * **Note:** This function only supports cloning values with tags of +
34916 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. +
34917 * +
34918 * @private +
34919 * @param {Object} object The object to clone. +
34920 * @param {string} tag The `toStringTag` of the object to clone. +
34921 * @param {boolean} [isDeep] Specify a deep clone. +
34922 * @returns {Object} Returns the initialized clone. +
34923 */ +
34924 function initCloneByTag(object, tag, isDeep) { +
34925 var Ctor = object.constructor; +
34926 switch (tag) { +
34927 case arrayBufferTag: +
34928 return cloneArrayBuffer(object); +
34929 +
34930 case boolTag: +
34931 case dateTag: +
34932 return new Ctor(+object); +
34933 +
34934 case dataViewTag: +
34935 return cloneDataView(object, isDeep); +
34936 +
34937 case float32Tag: case float64Tag: +
34938 case int8Tag: case int16Tag: case int32Tag: +
34939 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: +
34940 return cloneTypedArray(object, isDeep); +
34941 +
34942 case mapTag: +
34943 return new Ctor; +
34944 +
34945 case numberTag: +
34946 case stringTag: +
34947 return new Ctor(object); +
34948 +
34949 case regexpTag: +
34950 return cloneRegExp(object); +
34951 +
34952 case setTag: +
34953 return new Ctor; +
34954 +
34955 case symbolTag: +
34956 return cloneSymbol(object); +
34957 } +
34958 } +
34959 +
34960 /** +
34961 * Inserts wrapper `details` in a comment at the top of the `source` body. +
34962 * +
34963 * @private +
34964 * @param {string} source The source to modify. +
34965 * @returns {Array} details The details to insert. +
34966 * @returns {string} Returns the modified source. +
34967 */ +
34968 function insertWrapDetails(source, details) { +
34969 var length = details.length; +
34970 if (!length) { +
34971 return source; +
34972 } +
34973 var lastIndex = length - 1; +
34974 details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; +
34975 details = details.join(length > 2 ? ', ' : ' '); +
34976 return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); +
34977 } +
34978 +
34979 /** +
34980 * Checks if `value` is a flattenable `arguments` object or array. +
34981 * +
34982 * @private +
34983 * @param {*} value The value to check. +
34984 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. +
34985 */ +
34986 function isFlattenable(value) { +
34987 return isArray(value) || isArguments(value) || +
34988 !!(spreadableSymbol && value && value[spreadableSymbol]); +
34989 } +
34990 +
34991 /** +
34992 * Checks if `value` is a valid array-like index. +
34993 * +
34994 * @private +
34995 * @param {*} value The value to check. +
34996 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. +
34997 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. +
34998 */ +
34999 function isIndex(value, length) { +
35000 var type = typeof value; +
35001 length = length == null ? MAX_SAFE_INTEGER : length; +
35002 +
35003 return !!length && +
35004 (type == 'number' || +
35005 (type != 'symbol' && reIsUint.test(value))) && +
35006 (value > -1 && value % 1 == 0 && value < length); +
35007 } +
35008 +
35009 /** +
35010 * Checks if the given arguments are from an iteratee call. +
35011 * +
35012 * @private +
35013 * @param {*} value The potential iteratee value argument. +
35014 * @param {*} index The potential iteratee index or key argument. +
35015 * @param {*} object The potential iteratee object argument. +
35016 * @returns {boolean} Returns `true` if the arguments are from an iteratee call, +
35017 * else `false`. +
35018 */ +
35019 function isIterateeCall(value, index, object) { +
35020 if (!isObject(object)) { +
35021 return false; +
35022 } +
35023 var type = typeof index; +
35024 if (type == 'number' +
35025 ? (isArrayLike(object) && isIndex(index, object.length)) +
35026 : (type == 'string' && index in object) +
35027 ) { +
35028 return eq(object[index], value); +
35029 } +
35030 return false; +
35031 } +
35032 +
35033 /** +
35034 * Checks if `value` is a property name and not a property path. +
35035 * +
35036 * @private +
35037 * @param {*} value The value to check. +
35038 * @param {Object} [object] The object to query keys on. +
35039 * @returns {boolean} Returns `true` if `value` is a property name, else `false`. +
35040 */ +
35041 function isKey(value, object) { +
35042 if (isArray(value)) { +
35043 return false; +
35044 } +
35045 var type = typeof value; +
35046 if (type == 'number' || type == 'symbol' || type == 'boolean' || +
35047 value == null || isSymbol(value)) { +
35048 return true; +
35049 } +
35050 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || +
35051 (object != null && value in Object(object)); +
35052 } +
35053 +
35054 /** +
35055 * Checks if `value` is suitable for use as unique object key. +
35056 * +
35057 * @private +
35058 * @param {*} value The value to check. +
35059 * @returns {boolean} Returns `true` if `value` is suitable, else `false`. +
35060 */ +
35061 function isKeyable(value) { +
35062 var type = typeof value; +
35063 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') +
35064 ? (value !== '__proto__') +
35065 : (value === null); +
35066 } +
35067 +
35068 /** +
35069 * Checks if `func` has a lazy counterpart. +
35070 * +
35071 * @private +
35072 * @param {Function} func The function to check. +
35073 * @returns {boolean} Returns `true` if `func` has a lazy counterpart, +
35074 * else `false`. +
35075 */ +
35076 function isLaziable(func) { +
35077 var funcName = getFuncName(func), +
35078 other = lodash[funcName]; +
35079 +
35080 if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { +
35081 return false; +
35082 } +
35083 if (func === other) { +
35084 return true; +
35085 } +
35086 var data = getData(other); +
35087 return !!data && func === data[0]; +
35088 } +
35089 +
35090 /** +
35091 * Checks if `func` has its source masked. +
35092 * +
35093 * @private +
35094 * @param {Function} func The function to check. +
35095 * @returns {boolean} Returns `true` if `func` is masked, else `false`. +
35096 */ +
35097 function isMasked(func) { +
35098 return !!maskSrcKey && (maskSrcKey in func); +
35099 } +
35100 +
35101 /** +
35102 * Checks if `func` is capable of being masked. +
35103 * +
35104 * @private +
35105 * @param {*} value The value to check. +
35106 * @returns {boolean} Returns `true` if `func` is maskable, else `false`. +
35107 */ +
35108 var isMaskable = coreJsData ? isFunction : stubFalse; +
35109 +
35110 /** +
35111 * Checks if `value` is likely a prototype object. +
35112 * +
35113 * @private +
35114 * @param {*} value The value to check. +
35115 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. +
35116 */ +
35117 function isPrototype(value) { +
35118 var Ctor = value && value.constructor, +
35119 proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; +
35120 +
35121 return value === proto; +
35122 } +
35123 +
35124 /** +
35125 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. +
35126 * +
35127 * @private +
35128 * @param {*} value The value to check. +
35129 * @returns {boolean} Returns `true` if `value` if suitable for strict +
35130 * equality comparisons, else `false`. +
35131 */ +
35132 function isStrictComparable(value) { +
35133 return value === value && !isObject(value); +
35134 } +
35135 +
35136 /** +
35137 * A specialized version of `matchesProperty` for source values suitable +
35138 * for strict equality comparisons, i.e. `===`. +
35139 * +
35140 * @private +
35141 * @param {string} key The key of the property to get. +
35142 * @param {*} srcValue The value to match. +
35143 * @returns {Function} Returns the new spec function. +
35144 */ +
35145 function matchesStrictComparable(key, srcValue) { +
35146 return function(object) { +
35147 if (object == null) { +
35148 return false; +
35149 } +
35150 return object[key] === srcValue && +
35151 (srcValue !== undefined || (key in Object(object))); +
35152 }; +
35153 } +
35154 +
35155 /** +
35156 * A specialized version of `_.memoize` which clears the memoized function's +
35157 * cache when it exceeds `MAX_MEMOIZE_SIZE`. +
35158 * +
35159 * @private +
35160 * @param {Function} func The function to have its output memoized. +
35161 * @returns {Function} Returns the new memoized function. +
35162 */ +
35163 function memoizeCapped(func) { +
35164 var result = memoize(func, function(key) { +
35165 if (cache.size === MAX_MEMOIZE_SIZE) { +
35166 cache.clear(); +
35167 } +
35168 return key; +
35169 }); +
35170 +
35171 var cache = result.cache; +
35172 return result; +
35173 } +
35174 +
35175 /** +
35176 * Merges the function metadata of `source` into `data`. +
35177 * +
35178 * Merging metadata reduces the number of wrappers used to invoke a function. +
35179 * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` +
35180 * may be applied regardless of execution order. Methods like `_.ary` and +
35181 * `_.rearg` modify function arguments, making the order in which they are +
35182 * executed important, preventing the merging of metadata. However, we make +
35183 * an exception for a safe combined case where curried functions have `_.ary` +
35184 * and or `_.rearg` applied. +
35185 * +
35186 * @private +
35187 * @param {Array} data The destination metadata. +
35188 * @param {Array} source The source metadata. +
35189 * @returns {Array} Returns `data`. +
35190 */ +
35191 function mergeData(data, source) { +
35192 var bitmask = data[1], +
35193 srcBitmask = source[1], +
35194 newBitmask = bitmask | srcBitmask, +
35195 isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); +
35196 +
35197 var isCombo = +
35198 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || +
35199 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || +
35200 ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); +
35201 +
35202 // Exit early if metadata can't be merged. +
35203 if (!(isCommon || isCombo)) { +
35204 return data; +
35205 } +
35206 // Use source `thisArg` if available. +
35207 if (srcBitmask & WRAP_BIND_FLAG) { +
35208 data[2] = source[2]; +
35209 // Set when currying a bound function. +
35210 newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; +
35211 } +
35212 // Compose partial arguments. +
35213 var value = source[3]; +
35214 if (value) { +
35215 var partials = data[3]; +
35216 data[3] = partials ? composeArgs(partials, value, source[4]) : value; +
35217 data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; +
35218 } +
35219 // Compose partial right arguments. +
35220 value = source[5]; +
35221 if (value) { +
35222 partials = data[5]; +
35223 data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; +
35224 data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; +
35225 } +
35226 // Use source `argPos` if available. +
35227 value = source[7]; +
35228 if (value) { +
35229 data[7] = value; +
35230 } +
35231 // Use source `ary` if it's smaller. +
35232 if (srcBitmask & WRAP_ARY_FLAG) { +
35233 data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); +
35234 } +
35235 // Use source `arity` if one is not provided. +
35236 if (data[9] == null) { +
35237 data[9] = source[9]; +
35238 } +
35239 // Use source `func` and merge bitmasks. +
35240 data[0] = source[0]; +
35241 data[1] = newBitmask; +
35242 +
35243 return data; +
35244 } +
35245 +
35246 /** +
35247 * This function is like +
35248 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +
35249 * except that it includes inherited enumerable properties. +
35250 * +
35251 * @private +
35252 * @param {Object} object The object to query. +
35253 * @returns {Array} Returns the array of property names. +
35254 */ +
35255 function nativeKeysIn(object) { +
35256 var result = []; +
35257 if (object != null) { +
35258 for (var key in Object(object)) { +
35259 result.push(key); +
35260 } +
35261 } +
35262 return result; +
35263 } +
35264 +
35265 /** +
35266 * Converts `value` to a string using `Object.prototype.toString`. +
35267 * +
35268 * @private +
35269 * @param {*} value The value to convert. +
35270 * @returns {string} Returns the converted string. +
35271 */ +
35272 function objectToString(value) { +
35273 return nativeObjectToString.call(value); +
35274 } +
35275 +
35276 /** +
35277 * A specialized version of `baseRest` which transforms the rest array. +
35278 * +
35279 * @private +
35280 * @param {Function} func The function to apply a rest parameter to. +
35281 * @param {number} [start=func.length-1] The start position of the rest parameter. +
35282 * @param {Function} transform The rest array transform. +
35283 * @returns {Function} Returns the new function. +
35284 */ +
35285 function overRest(func, start, transform) { +
35286 start = nativeMax(start === undefined ? (func.length - 1) : start, 0); +
35287 return function() { +
35288 var args = arguments, +
35289 index = -1, +
35290 length = nativeMax(args.length - start, 0), +
35291 array = Array(length); +
35292 +
35293 while (++index < length) { +
35294 array[index] = args[start + index]; +
35295 } +
35296 index = -1; +
35297 var otherArgs = Array(start + 1); +
35298 while (++index < start) { +
35299 otherArgs[index] = args[index]; +
35300 } +
35301 otherArgs[start] = transform(array); +
35302 return apply(func, this, otherArgs); +
35303 }; +
35304 } +
35305 +
35306 /** +
35307 * Gets the parent value at `path` of `object`. +
35308 * +
35309 * @private +
35310 * @param {Object} object The object to query. +
35311 * @param {Array} path The path to get the parent value of. +
35312 * @returns {*} Returns the parent value. +
35313 */ +
35314 function parent(object, path) { +
35315 return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); +
35316 } +
35317 +
35318 /** +
35319 * Reorder `array` according to the specified indexes where the element at +
35320 * the first index is assigned as the first element, the element at +
35321 * the second index is assigned as the second element, and so on. +
35322 * +
35323 * @private +
35324 * @param {Array} array The array to reorder. +
35325 * @param {Array} indexes The arranged array indexes. +
35326 * @returns {Array} Returns `array`. +
35327 */ +
35328 function reorder(array, indexes) { +
35329 var arrLength = array.length, +
35330 length = nativeMin(indexes.length, arrLength), +
35331 oldArray = copyArray(array); +
35332 +
35333 while (length--) { +
35334 var index = indexes[length]; +
35335 array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; +
35336 } +
35337 return array; +
35338 } +
35339 +
35340 /** +
35341 * Sets metadata for `func`. +
35342 * +
35343 * **Note:** If this function becomes hot, i.e. is invoked a lot in a short +
35344 * period of time, it will trip its breaker and transition to an identity +
35345 * function to avoid garbage collection pauses in V8. See +
35346 * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) +
35347 * for more details. +
35348 * +
35349 * @private +
35350 * @param {Function} func The function to associate metadata with. +
35351 * @param {*} data The metadata. +
35352 * @returns {Function} Returns `func`. +
35353 */ +
35354 var setData = shortOut(baseSetData); +
35355 +
35356 /** +
35357 * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). +
35358 * +
35359 * @private +
35360 * @param {Function} func The function to delay. +
35361 * @param {number} wait The number of milliseconds to delay invocation. +
35362 * @returns {number|Object} Returns the timer id or timeout object. +
35363 */ +
35364 var setTimeout = ctxSetTimeout || function(func, wait) { +
35365 return root.setTimeout(func, wait); +
35366 }; +
35367 +
35368 /** +
35369 * Sets the `toString` method of `func` to return `string`. +
35370 * +
35371 * @private +
35372 * @param {Function} func The function to modify. +
35373 * @param {Function} string The `toString` result. +
35374 * @returns {Function} Returns `func`. +
35375 */ +
35376 var setToString = shortOut(baseSetToString); +
35377 +
35378 /** +
35379 * Sets the `toString` method of `wrapper` to mimic the source of `reference` +
35380 * with wrapper details in a comment at the top of the source body. +
35381 * +
35382 * @private +
35383 * @param {Function} wrapper The function to modify. +
35384 * @param {Function} reference The reference function. +
35385 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
35386 * @returns {Function} Returns `wrapper`. +
35387 */ +
35388 function setWrapToString(wrapper, reference, bitmask) { +
35389 var source = (reference + ''); +
35390 return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); +
35391 } +
35392 +
35393 /** +
35394 * Creates a function that'll short out and invoke `identity` instead +
35395 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` +
35396 * milliseconds. +
35397 * +
35398 * @private +
35399 * @param {Function} func The function to restrict. +
35400 * @returns {Function} Returns the new shortable function. +
35401 */ +
35402 function shortOut(func) { +
35403 var count = 0, +
35404 lastCalled = 0; +
35405 +
35406 return function() { +
35407 var stamp = nativeNow(), +
35408 remaining = HOT_SPAN - (stamp - lastCalled); +
35409 +
35410 lastCalled = stamp; +
35411 if (remaining > 0) { +
35412 if (++count >= HOT_COUNT) { +
35413 return arguments[0]; +
35414 } +
35415 } else { +
35416 count = 0; +
35417 } +
35418 return func.apply(undefined, arguments); +
35419 }; +
35420 } +
35421 +
35422 /** +
35423 * A specialized version of `_.shuffle` which mutates and sets the size of `array`. +
35424 * +
35425 * @private +
35426 * @param {Array} array The array to shuffle. +
35427 * @param {number} [size=array.length] The size of `array`. +
35428 * @returns {Array} Returns `array`. +
35429 */ +
35430 function shuffleSelf(array, size) { +
35431 var index = -1, +
35432 length = array.length, +
35433 lastIndex = length - 1; +
35434 +
35435 size = size === undefined ? length : size; +
35436 while (++index < size) { +
35437 var rand = baseRandom(index, lastIndex), +
35438 value = array[rand]; +
35439 +
35440 array[rand] = array[index]; +
35441 array[index] = value; +
35442 } +
35443 array.length = size; +
35444 return array; +
35445 } +
35446 +
35447 /** +
35448 * Converts `string` to a property path array. +
35449 * +
35450 * @private +
35451 * @param {string} string The string to convert. +
35452 * @returns {Array} Returns the property path array. +
35453 */ +
35454 var stringToPath = memoizeCapped(function(string) { +
35455 var result = []; +
35456 if (string.charCodeAt(0) === 46 /* . */) { +
35457 result.push(''); +
35458 } +
35459 string.replace(rePropName, function(match, number, quote, subString) { +
35460 result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); +
35461 }); +
35462 return result; +
35463 }); +
35464 +
35465 /** +
35466 * Converts `value` to a string key if it's not a string or symbol. +
35467 * +
35468 * @private +
35469 * @param {*} value The value to inspect. +
35470 * @returns {string|symbol} Returns the key. +
35471 */ +
35472 function toKey(value) { +
35473 if (typeof value == 'string' || isSymbol(value)) { +
35474 return value; +
35475 } +
35476 var result = (value + ''); +
35477 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +
35478 } +
35479 +
35480 /** +
35481 * Converts `func` to its source code. +
35482 * +
35483 * @private +
35484 * @param {Function} func The function to convert. +
35485 * @returns {string} Returns the source code. +
35486 */ +
35487 function toSource(func) { +
35488 if (func != null) { +
35489 try { +
35490 return funcToString.call(func); +
35491 } catch (e) {} +
35492 try { +
35493 return (func + ''); +
35494 } catch (e) {} +
35495 } +
35496 return ''; +
35497 } +
35498 +
35499 /** +
35500 * Updates wrapper `details` based on `bitmask` flags. +
35501 * +
35502 * @private +
35503 * @returns {Array} details The details to modify. +
35504 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
35505 * @returns {Array} Returns `details`. +
35506 */ +
35507 function updateWrapDetails(details, bitmask) { +
35508 arrayEach(wrapFlags, function(pair) { +
35509 var value = '_.' + pair[0]; +
35510 if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { +
35511 details.push(value); +
35512 } +
35513 }); +
35514 return details.sort(); +
35515 } +
35516 +
35517 /** +
35518 * Creates a clone of `wrapper`. +
35519 * +
35520 * @private +
35521 * @param {Object} wrapper The wrapper to clone. +
35522 * @returns {Object} Returns the cloned wrapper. +
35523 */ +
35524 function wrapperClone(wrapper) { +
35525 if (wrapper instanceof LazyWrapper) { +
35526 return wrapper.clone(); +
35527 } +
35528 var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); +
35529 result.__actions__ = copyArray(wrapper.__actions__); +
35530 result.__index__ = wrapper.__index__; +
35531 result.__values__ = wrapper.__values__; +
35532 return result; +
35533 } +
35534 +
35535 /*------------------------------------------------------------------------*/ +
35536 +
35537 /** +
35538 * Creates an array of elements split into groups the length of `size`. +
35539 * If `array` can't be split evenly, the final chunk will be the remaining +
35540 * elements. +
35541 * +
35542 * @static +
35543 * @memberOf _ +
35544 * @since 3.0.0 +
35545 * @category Array +
35546 * @param {Array} array The array to process. +
35547 * @param {number} [size=1] The length of each chunk +
35548 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
35549 * @returns {Array} Returns the new array of chunks. +
35550 * @example +
35551 * +
35552 * _.chunk(['a', 'b', 'c', 'd'], 2); +
35553 * // => [['a', 'b'], ['c', 'd']] +
35554 * +
35555 * _.chunk(['a', 'b', 'c', 'd'], 3); +
35556 * // => [['a', 'b', 'c'], ['d']] +
35557 */ +
35558 function chunk(array, size, guard) { +
35559 if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { +
35560 size = 1; +
35561 } else { +
35562 size = nativeMax(toInteger(size), 0); +
35563 } +
35564 var length = array == null ? 0 : array.length; +
35565 if (!length || size < 1) { +
35566 return []; +
35567 } +
35568 var index = 0, +
35569 resIndex = 0, +
35570 result = Array(nativeCeil(length / size)); +
35571 +
35572 while (index < length) { +
35573 result[resIndex++] = baseSlice(array, index, (index += size)); +
35574 } +
35575 return result; +
35576 } +
35577 +
35578 /** +
35579 * Creates an array with all falsey values removed. The values `false`, `null`, +
35580 * `0`, `""`, `undefined`, and `NaN` are falsey. +
35581 * +
35582 * @static +
35583 * @memberOf _ +
35584 * @since 0.1.0 +
35585 * @category Array +
35586 * @param {Array} array The array to compact. +
35587 * @returns {Array} Returns the new array of filtered values. +
35588 * @example +
35589 * +
35590 * _.compact([0, 1, false, 2, '', 3]); +
35591 * // => [1, 2, 3] +
35592 */ +
35593 function compact(array) { +
35594 var index = -1, +
35595 length = array == null ? 0 : array.length, +
35596 resIndex = 0, +
35597 result = []; +
35598 +
35599 while (++index < length) { +
35600 var value = array[index]; +
35601 if (value) { +
35602 result[resIndex++] = value; +
35603 } +
35604 } +
35605 return result; +
35606 } +
35607 +
35608 /** +
35609 * Creates a new array concatenating `array` with any additional arrays +
35610 * and/or values. +
35611 * +
35612 * @static +
35613 * @memberOf _ +
35614 * @since 4.0.0 +
35615 * @category Array +
35616 * @param {Array} array The array to concatenate. +
35617 * @param {...*} [values] The values to concatenate. +
35618 * @returns {Array} Returns the new concatenated array. +
35619 * @example +
35620 * +
35621 * var array = [1]; +
35622 * var other = _.concat(array, 2, [3], [[4]]); +
35623 * +
35624 * console.log(other); +
35625 * // => [1, 2, 3, [4]] +
35626 * +
35627 * console.log(array); +
35628 * // => [1] +
35629 */ +
35630 function concat() { +
35631 var length = arguments.length; +
35632 if (!length) { +
35633 return []; +
35634 } +
35635 var args = Array(length - 1), +
35636 array = arguments[0], +
35637 index = length; +
35638 +
35639 while (index--) { +
35640 args[index - 1] = arguments[index]; +
35641 } +
35642 return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); +
35643 } +
35644 +
35645 /** +
35646 * Creates an array of `array` values not included in the other given arrays +
35647 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
35648 * for equality comparisons. The order and references of result values are +
35649 * determined by the first array. +
35650 * +
35651 * **Note:** Unlike `_.pullAll`, this method returns a new array. +
35652 * +
35653 * @static +
35654 * @memberOf _ +
35655 * @since 0.1.0 +
35656 * @category Array +
35657 * @param {Array} array The array to inspect. +
35658 * @param {...Array} [values] The values to exclude. +
35659 * @returns {Array} Returns the new array of filtered values. +
35660 * @see _.without, _.xor +
35661 * @example +
35662 * +
35663 * _.difference([2, 1], [2, 3]); +
35664 * // => [1] +
35665 */ +
35666 var difference = baseRest(function(array, values) { +
35667 return isArrayLikeObject(array) +
35668 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) +
35669 : []; +
35670 }); +
35671 +
35672 /** +
35673 * This method is like `_.difference` except that it accepts `iteratee` which +
35674 * is invoked for each element of `array` and `values` to generate the criterion +
35675 * by which they're compared. The order and references of result values are +
35676 * determined by the first array. The iteratee is invoked with one argument: +
35677 * (value). +
35678 * +
35679 * **Note:** Unlike `_.pullAllBy`, this method returns a new array. +
35680 * +
35681 * @static +
35682 * @memberOf _ +
35683 * @since 4.0.0 +
35684 * @category Array +
35685 * @param {Array} array The array to inspect. +
35686 * @param {...Array} [values] The values to exclude. +
35687 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
35688 * @returns {Array} Returns the new array of filtered values. +
35689 * @example +
35690 * +
35691 * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
35692 * // => [1.2] +
35693 * +
35694 * // The `_.property` iteratee shorthand. +
35695 * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); +
35696 * // => [{ 'x': 2 }] +
35697 */ +
35698 var differenceBy = baseRest(function(array, values) { +
35699 var iteratee = last(values); +
35700 if (isArrayLikeObject(iteratee)) { +
35701 iteratee = undefined; +
35702 } +
35703 return isArrayLikeObject(array) +
35704 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) +
35705 : []; +
35706 }); +
35707 +
35708 /** +
35709 * This method is like `_.difference` except that it accepts `comparator` +
35710 * which is invoked to compare elements of `array` to `values`. The order and +
35711 * references of result values are determined by the first array. The comparator +
35712 * is invoked with two arguments: (arrVal, othVal). +
35713 * +
35714 * **Note:** Unlike `_.pullAllWith`, this method returns a new array. +
35715 * +
35716 * @static +
35717 * @memberOf _ +
35718 * @since 4.0.0 +
35719 * @category Array +
35720 * @param {Array} array The array to inspect. +
35721 * @param {...Array} [values] The values to exclude. +
35722 * @param {Function} [comparator] The comparator invoked per element. +
35723 * @returns {Array} Returns the new array of filtered values. +
35724 * @example +
35725 * +
35726 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
35727 * +
35728 * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); +
35729 * // => [{ 'x': 2, 'y': 1 }] +
35730 */ +
35731 var differenceWith = baseRest(function(array, values) { +
35732 var comparator = last(values); +
35733 if (isArrayLikeObject(comparator)) { +
35734 comparator = undefined; +
35735 } +
35736 return isArrayLikeObject(array) +
35737 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) +
35738 : []; +
35739 }); +
35740 +
35741 /** +
35742 * Creates a slice of `array` with `n` elements dropped from the beginning. +
35743 * +
35744 * @static +
35745 * @memberOf _ +
35746 * @since 0.5.0 +
35747 * @category Array +
35748 * @param {Array} array The array to query. +
35749 * @param {number} [n=1] The number of elements to drop. +
35750 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
35751 * @returns {Array} Returns the slice of `array`. +
35752 * @example +
35753 * +
35754 * _.drop([1, 2, 3]); +
35755 * // => [2, 3] +
35756 * +
35757 * _.drop([1, 2, 3], 2); +
35758 * // => [3] +
35759 * +
35760 * _.drop([1, 2, 3], 5); +
35761 * // => [] +
35762 * +
35763 * _.drop([1, 2, 3], 0); +
35764 * // => [1, 2, 3] +
35765 */ +
35766 function drop(array, n, guard) { +
35767 var length = array == null ? 0 : array.length; +
35768 if (!length) { +
35769 return []; +
35770 } +
35771 n = (guard || n === undefined) ? 1 : toInteger(n); +
35772 return baseSlice(array, n < 0 ? 0 : n, length); +
35773 } +
35774 +
35775 /** +
35776 * Creates a slice of `array` with `n` elements dropped from the end. +
35777 * +
35778 * @static +
35779 * @memberOf _ +
35780 * @since 3.0.0 +
35781 * @category Array +
35782 * @param {Array} array The array to query. +
35783 * @param {number} [n=1] The number of elements to drop. +
35784 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
35785 * @returns {Array} Returns the slice of `array`. +
35786 * @example +
35787 * +
35788 * _.dropRight([1, 2, 3]); +
35789 * // => [1, 2] +
35790 * +
35791 * _.dropRight([1, 2, 3], 2); +
35792 * // => [1] +
35793 * +
35794 * _.dropRight([1, 2, 3], 5); +
35795 * // => [] +
35796 * +
35797 * _.dropRight([1, 2, 3], 0); +
35798 * // => [1, 2, 3] +
35799 */ +
35800 function dropRight(array, n, guard) { +
35801 var length = array == null ? 0 : array.length; +
35802 if (!length) { +
35803 return []; +
35804 } +
35805 n = (guard || n === undefined) ? 1 : toInteger(n); +
35806 n = length - n; +
35807 return baseSlice(array, 0, n < 0 ? 0 : n); +
35808 } +
35809 +
35810 /** +
35811 * Creates a slice of `array` excluding elements dropped from the end. +
35812 * Elements are dropped until `predicate` returns falsey. The predicate is +
35813 * invoked with three arguments: (value, index, array). +
35814 * +
35815 * @static +
35816 * @memberOf _ +
35817 * @since 3.0.0 +
35818 * @category Array +
35819 * @param {Array} array The array to query. +
35820 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
35821 * @returns {Array} Returns the slice of `array`. +
35822 * @example +
35823 * +
35824 * var users = [ +
35825 * { 'user': 'barney', 'active': true }, +
35826 * { 'user': 'fred', 'active': false }, +
35827 * { 'user': 'pebbles', 'active': false } +
35828 * ]; +
35829 * +
35830 * _.dropRightWhile(users, function(o) { return !o.active; }); +
35831 * // => objects for ['barney'] +
35832 * +
35833 * // The `_.matches` iteratee shorthand. +
35834 * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); +
35835 * // => objects for ['barney', 'fred'] +
35836 * +
35837 * // The `_.matchesProperty` iteratee shorthand. +
35838 * _.dropRightWhile(users, ['active', false]); +
35839 * // => objects for ['barney'] +
35840 * +
35841 * // The `_.property` iteratee shorthand. +
35842 * _.dropRightWhile(users, 'active'); +
35843 * // => objects for ['barney', 'fred', 'pebbles'] +
35844 */ +
35845 function dropRightWhile(array, predicate) { +
35846 return (array && array.length) +
35847 ? baseWhile(array, getIteratee(predicate, 3), true, true) +
35848 : []; +
35849 } +
35850 +
35851 /** +
35852 * Creates a slice of `array` excluding elements dropped from the beginning. +
35853 * Elements are dropped until `predicate` returns falsey. The predicate is +
35854 * invoked with three arguments: (value, index, array). +
35855 * +
35856 * @static +
35857 * @memberOf _ +
35858 * @since 3.0.0 +
35859 * @category Array +
35860 * @param {Array} array The array to query. +
35861 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
35862 * @returns {Array} Returns the slice of `array`. +
35863 * @example +
35864 * +
35865 * var users = [ +
35866 * { 'user': 'barney', 'active': false }, +
35867 * { 'user': 'fred', 'active': false }, +
35868 * { 'user': 'pebbles', 'active': true } +
35869 * ]; +
35870 * +
35871 * _.dropWhile(users, function(o) { return !o.active; }); +
35872 * // => objects for ['pebbles'] +
35873 * +
35874 * // The `_.matches` iteratee shorthand. +
35875 * _.dropWhile(users, { 'user': 'barney', 'active': false }); +
35876 * // => objects for ['fred', 'pebbles'] +
35877 * +
35878 * // The `_.matchesProperty` iteratee shorthand. +
35879 * _.dropWhile(users, ['active', false]); +
35880 * // => objects for ['pebbles'] +
35881 * +
35882 * // The `_.property` iteratee shorthand. +
35883 * _.dropWhile(users, 'active'); +
35884 * // => objects for ['barney', 'fred', 'pebbles'] +
35885 */ +
35886 function dropWhile(array, predicate) { +
35887 return (array && array.length) +
35888 ? baseWhile(array, getIteratee(predicate, 3), true) +
35889 : []; +
35890 } +
35891 +
35892 /** +
35893 * Fills elements of `array` with `value` from `start` up to, but not +
35894 * including, `end`. +
35895 * +
35896 * **Note:** This method mutates `array`. +
35897 * +
35898 * @static +
35899 * @memberOf _ +
35900 * @since 3.2.0 +
35901 * @category Array +
35902 * @param {Array} array The array to fill. +
35903 * @param {*} value The value to fill `array` with. +
35904 * @param {number} [start=0] The start position. +
35905 * @param {number} [end=array.length] The end position. +
35906 * @returns {Array} Returns `array`. +
35907 * @example +
35908 * +
35909 * var array = [1, 2, 3]; +
35910 * +
35911 * _.fill(array, 'a'); +
35912 * console.log(array); +
35913 * // => ['a', 'a', 'a'] +
35914 * +
35915 * _.fill(Array(3), 2); +
35916 * // => [2, 2, 2] +
35917 * +
35918 * _.fill([4, 6, 8, 10], '*', 1, 3); +
35919 * // => [4, '*', '*', 10] +
35920 */ +
35921 function fill(array, value, start, end) { +
35922 var length = array == null ? 0 : array.length; +
35923 if (!length) { +
35924 return []; +
35925 } +
35926 if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { +
35927 start = 0; +
35928 end = length; +
35929 } +
35930 return baseFill(array, value, start, end); +
35931 } +
35932 +
35933 /** +
35934 * This method is like `_.find` except that it returns the index of the first +
35935 * element `predicate` returns truthy for instead of the element itself. +
35936 * +
35937 * @static +
35938 * @memberOf _ +
35939 * @since 1.1.0 +
35940 * @category Array +
35941 * @param {Array} array The array to inspect. +
35942 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
35943 * @param {number} [fromIndex=0] The index to search from. +
35944 * @returns {number} Returns the index of the found element, else `-1`. +
35945 * @example +
35946 * +
35947 * var users = [ +
35948 * { 'user': 'barney', 'active': false }, +
35949 * { 'user': 'fred', 'active': false }, +
35950 * { 'user': 'pebbles', 'active': true } +
35951 * ]; +
35952 * +
35953 * _.findIndex(users, function(o) { return o.user == 'barney'; }); +
35954 * // => 0 +
35955 * +
35956 * // The `_.matches` iteratee shorthand. +
35957 * _.findIndex(users, { 'user': 'fred', 'active': false }); +
35958 * // => 1 +
35959 * +
35960 * // The `_.matchesProperty` iteratee shorthand. +
35961 * _.findIndex(users, ['active', false]); +
35962 * // => 0 +
35963 * +
35964 * // The `_.property` iteratee shorthand. +
35965 * _.findIndex(users, 'active'); +
35966 * // => 2 +
35967 */ +
35968 function findIndex(array, predicate, fromIndex) { +
35969 var length = array == null ? 0 : array.length; +
35970 if (!length) { +
35971 return -1; +
35972 } +
35973 var index = fromIndex == null ? 0 : toInteger(fromIndex); +
35974 if (index < 0) { +
35975 index = nativeMax(length + index, 0); +
35976 } +
35977 return baseFindIndex(array, getIteratee(predicate, 3), index); +
35978 } +
35979 +
35980 /** +
35981 * This method is like `_.findIndex` except that it iterates over elements +
35982 * of `collection` from right to left. +
35983 * +
35984 * @static +
35985 * @memberOf _ +
35986 * @since 2.0.0 +
35987 * @category Array +
35988 * @param {Array} array The array to inspect. +
35989 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
35990 * @param {number} [fromIndex=array.length-1] The index to search from. +
35991 * @returns {number} Returns the index of the found element, else `-1`. +
35992 * @example +
35993 * +
35994 * var users = [ +
35995 * { 'user': 'barney', 'active': true }, +
35996 * { 'user': 'fred', 'active': false }, +
35997 * { 'user': 'pebbles', 'active': false } +
35998 * ]; +
35999 * +
36000 * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); +
36001 * // => 2 +
36002 * +
36003 * // The `_.matches` iteratee shorthand. +
36004 * _.findLastIndex(users, { 'user': 'barney', 'active': true }); +
36005 * // => 0 +
36006 * +
36007 * // The `_.matchesProperty` iteratee shorthand. +
36008 * _.findLastIndex(users, ['active', false]); +
36009 * // => 2 +
36010 * +
36011 * // The `_.property` iteratee shorthand. +
36012 * _.findLastIndex(users, 'active'); +
36013 * // => 0 +
36014 */ +
36015 function findLastIndex(array, predicate, fromIndex) { +
36016 var length = array == null ? 0 : array.length; +
36017 if (!length) { +
36018 return -1; +
36019 } +
36020 var index = length - 1; +
36021 if (fromIndex !== undefined) { +
36022 index = toInteger(fromIndex); +
36023 index = fromIndex < 0 +
36024 ? nativeMax(length + index, 0) +
36025 : nativeMin(index, length - 1); +
36026 } +
36027 return baseFindIndex(array, getIteratee(predicate, 3), index, true); +
36028 } +
36029 +
36030 /** +
36031 * Flattens `array` a single level deep. +
36032 * +
36033 * @static +
36034 * @memberOf _ +
36035 * @since 0.1.0 +
36036 * @category Array +
36037 * @param {Array} array The array to flatten. +
36038 * @returns {Array} Returns the new flattened array. +
36039 * @example +
36040 * +
36041 * _.flatten([1, [2, [3, [4]], 5]]); +
36042 * // => [1, 2, [3, [4]], 5] +
36043 */ +
36044 function flatten(array) { +
36045 var length = array == null ? 0 : array.length; +
36046 return length ? baseFlatten(array, 1) : []; +
36047 } +
36048 +
36049 /** +
36050 * Recursively flattens `array`. +
36051 * +
36052 * @static +
36053 * @memberOf _ +
36054 * @since 3.0.0 +
36055 * @category Array +
36056 * @param {Array} array The array to flatten. +
36057 * @returns {Array} Returns the new flattened array. +
36058 * @example +
36059 * +
36060 * _.flattenDeep([1, [2, [3, [4]], 5]]); +
36061 * // => [1, 2, 3, 4, 5] +
36062 */ +
36063 function flattenDeep(array) { +
36064 var length = array == null ? 0 : array.length; +
36065 return length ? baseFlatten(array, INFINITY) : []; +
36066 } +
36067 +
36068 /** +
36069 * Recursively flatten `array` up to `depth` times. +
36070 * +
36071 * @static +
36072 * @memberOf _ +
36073 * @since 4.4.0 +
36074 * @category Array +
36075 * @param {Array} array The array to flatten. +
36076 * @param {number} [depth=1] The maximum recursion depth. +
36077 * @returns {Array} Returns the new flattened array. +
36078 * @example +
36079 * +
36080 * var array = [1, [2, [3, [4]], 5]]; +
36081 * +
36082 * _.flattenDepth(array, 1); +
36083 * // => [1, 2, [3, [4]], 5] +
36084 * +
36085 * _.flattenDepth(array, 2); +
36086 * // => [1, 2, 3, [4], 5] +
36087 */ +
36088 function flattenDepth(array, depth) { +
36089 var length = array == null ? 0 : array.length; +
36090 if (!length) { +
36091 return []; +
36092 } +
36093 depth = depth === undefined ? 1 : toInteger(depth); +
36094 return baseFlatten(array, depth); +
36095 } +
36096 +
36097 /** +
36098 * The inverse of `_.toPairs`; this method returns an object composed +
36099 * from key-value `pairs`. +
36100 * +
36101 * @static +
36102 * @memberOf _ +
36103 * @since 4.0.0 +
36104 * @category Array +
36105 * @param {Array} pairs The key-value pairs. +
36106 * @returns {Object} Returns the new object. +
36107 * @example +
36108 * +
36109 * _.fromPairs([['a', 1], ['b', 2]]); +
36110 * // => { 'a': 1, 'b': 2 } +
36111 */ +
36112 function fromPairs(pairs) { +
36113 var index = -1, +
36114 length = pairs == null ? 0 : pairs.length, +
36115 result = {}; +
36116 +
36117 while (++index < length) { +
36118 var pair = pairs[index]; +
36119 result[pair[0]] = pair[1]; +
36120 } +
36121 return result; +
36122 } +
36123 +
36124 /** +
36125 * Gets the first element of `array`. +
36126 * +
36127 * @static +
36128 * @memberOf _ +
36129 * @since 0.1.0 +
36130 * @alias first +
36131 * @category Array +
36132 * @param {Array} array The array to query. +
36133 * @returns {*} Returns the first element of `array`. +
36134 * @example +
36135 * +
36136 * _.head([1, 2, 3]); +
36137 * // => 1 +
36138 * +
36139 * _.head([]); +
36140 * // => undefined +
36141 */ +
36142 function head(array) { +
36143 return (array && array.length) ? array[0] : undefined; +
36144 } +
36145 +
36146 /** +
36147 * Gets the index at which the first occurrence of `value` is found in `array` +
36148 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
36149 * for equality comparisons. If `fromIndex` is negative, it's used as the +
36150 * offset from the end of `array`. +
36151 * +
36152 * @static +
36153 * @memberOf _ +
36154 * @since 0.1.0 +
36155 * @category Array +
36156 * @param {Array} array The array to inspect. +
36157 * @param {*} value The value to search for. +
36158 * @param {number} [fromIndex=0] The index to search from. +
36159 * @returns {number} Returns the index of the matched value, else `-1`. +
36160 * @example +
36161 * +
36162 * _.indexOf([1, 2, 1, 2], 2); +
36163 * // => 1 +
36164 * +
36165 * // Search from the `fromIndex`. +
36166 * _.indexOf([1, 2, 1, 2], 2, 2); +
36167 * // => 3 +
36168 */ +
36169 function indexOf(array, value, fromIndex) { +
36170 var length = array == null ? 0 : array.length; +
36171 if (!length) { +
36172 return -1; +
36173 } +
36174 var index = fromIndex == null ? 0 : toInteger(fromIndex); +
36175 if (index < 0) { +
36176 index = nativeMax(length + index, 0); +
36177 } +
36178 return baseIndexOf(array, value, index); +
36179 } +
36180 +
36181 /** +
36182 * Gets all but the last element of `array`. +
36183 * +
36184 * @static +
36185 * @memberOf _ +
36186 * @since 0.1.0 +
36187 * @category Array +
36188 * @param {Array} array The array to query. +
36189 * @returns {Array} Returns the slice of `array`. +
36190 * @example +
36191 * +
36192 * _.initial([1, 2, 3]); +
36193 * // => [1, 2] +
36194 */ +
36195 function initial(array) { +
36196 var length = array == null ? 0 : array.length; +
36197 return length ? baseSlice(array, 0, -1) : []; +
36198 } +
36199 +
36200 /** +
36201 * Creates an array of unique values that are included in all given arrays +
36202 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
36203 * for equality comparisons. The order and references of result values are +
36204 * determined by the first array. +
36205 * +
36206 * @static +
36207 * @memberOf _ +
36208 * @since 0.1.0 +
36209 * @category Array +
36210 * @param {...Array} [arrays] The arrays to inspect. +
36211 * @returns {Array} Returns the new array of intersecting values. +
36212 * @example +
36213 * +
36214 * _.intersection([2, 1], [2, 3]); +
36215 * // => [2] +
36216 */ +
36217 var intersection = baseRest(function(arrays) { +
36218 var mapped = arrayMap(arrays, castArrayLikeObject); +
36219 return (mapped.length && mapped[0] === arrays[0]) +
36220 ? baseIntersection(mapped) +
36221 : []; +
36222 }); +
36223 +
36224 /** +
36225 * This method is like `_.intersection` except that it accepts `iteratee` +
36226 * which is invoked for each element of each `arrays` to generate the criterion +
36227 * by which they're compared. The order and references of result values are +
36228 * determined by the first array. The iteratee is invoked with one argument: +
36229 * (value). +
36230 * +
36231 * @static +
36232 * @memberOf _ +
36233 * @since 4.0.0 +
36234 * @category Array +
36235 * @param {...Array} [arrays] The arrays to inspect. +
36236 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
36237 * @returns {Array} Returns the new array of intersecting values. +
36238 * @example +
36239 * +
36240 * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
36241 * // => [2.1] +
36242 * +
36243 * // The `_.property` iteratee shorthand. +
36244 * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
36245 * // => [{ 'x': 1 }] +
36246 */ +
36247 var intersectionBy = baseRest(function(arrays) { +
36248 var iteratee = last(arrays), +
36249 mapped = arrayMap(arrays, castArrayLikeObject); +
36250 +
36251 if (iteratee === last(mapped)) { +
36252 iteratee = undefined; +
36253 } else { +
36254 mapped.pop(); +
36255 } +
36256 return (mapped.length && mapped[0] === arrays[0]) +
36257 ? baseIntersection(mapped, getIteratee(iteratee, 2)) +
36258 : []; +
36259 }); +
36260 +
36261 /** +
36262 * This method is like `_.intersection` except that it accepts `comparator` +
36263 * which is invoked to compare elements of `arrays`. The order and references +
36264 * of result values are determined by the first array. The comparator is +
36265 * invoked with two arguments: (arrVal, othVal). +
36266 * +
36267 * @static +
36268 * @memberOf _ +
36269 * @since 4.0.0 +
36270 * @category Array +
36271 * @param {...Array} [arrays] The arrays to inspect. +
36272 * @param {Function} [comparator] The comparator invoked per element. +
36273 * @returns {Array} Returns the new array of intersecting values. +
36274 * @example +
36275 * +
36276 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
36277 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
36278 * +
36279 * _.intersectionWith(objects, others, _.isEqual); +
36280 * // => [{ 'x': 1, 'y': 2 }] +
36281 */ +
36282 var intersectionWith = baseRest(function(arrays) { +
36283 var comparator = last(arrays), +
36284 mapped = arrayMap(arrays, castArrayLikeObject); +
36285 +
36286 comparator = typeof comparator == 'function' ? comparator : undefined; +
36287 if (comparator) { +
36288 mapped.pop(); +
36289 } +
36290 return (mapped.length && mapped[0] === arrays[0]) +
36291 ? baseIntersection(mapped, undefined, comparator) +
36292 : []; +
36293 }); +
36294 +
36295 /** +
36296 * Converts all elements in `array` into a string separated by `separator`. +
36297 * +
36298 * @static +
36299 * @memberOf _ +
36300 * @since 4.0.0 +
36301 * @category Array +
36302 * @param {Array} array The array to convert. +
36303 * @param {string} [separator=','] The element separator. +
36304 * @returns {string} Returns the joined string. +
36305 * @example +
36306 * +
36307 * _.join(['a', 'b', 'c'], '~'); +
36308 * // => 'a~b~c' +
36309 */ +
36310 function join(array, separator) { +
36311 return array == null ? '' : nativeJoin.call(array, separator); +
36312 } +
36313 +
36314 /** +
36315 * Gets the last element of `array`. +
36316 * +
36317 * @static +
36318 * @memberOf _ +
36319 * @since 0.1.0 +
36320 * @category Array +
36321 * @param {Array} array The array to query. +
36322 * @returns {*} Returns the last element of `array`. +
36323 * @example +
36324 * +
36325 * _.last([1, 2, 3]); +
36326 * // => 3 +
36327 */ +
36328 function last(array) { +
36329 var length = array == null ? 0 : array.length; +
36330 return length ? array[length - 1] : undefined; +
36331 } +
36332 +
36333 /** +
36334 * This method is like `_.indexOf` except that it iterates over elements of +
36335 * `array` from right to left. +
36336 * +
36337 * @static +
36338 * @memberOf _ +
36339 * @since 0.1.0 +
36340 * @category Array +
36341 * @param {Array} array The array to inspect. +
36342 * @param {*} value The value to search for. +
36343 * @param {number} [fromIndex=array.length-1] The index to search from. +
36344 * @returns {number} Returns the index of the matched value, else `-1`. +
36345 * @example +
36346 * +
36347 * _.lastIndexOf([1, 2, 1, 2], 2); +
36348 * // => 3 +
36349 * +
36350 * // Search from the `fromIndex`. +
36351 * _.lastIndexOf([1, 2, 1, 2], 2, 2); +
36352 * // => 1 +
36353 */ +
36354 function lastIndexOf(array, value, fromIndex) { +
36355 var length = array == null ? 0 : array.length; +
36356 if (!length) { +
36357 return -1; +
36358 } +
36359 var index = length; +
36360 if (fromIndex !== undefined) { +
36361 index = toInteger(fromIndex); +
36362 index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); +
36363 } +
36364 return value === value +
36365 ? strictLastIndexOf(array, value, index) +
36366 : baseFindIndex(array, baseIsNaN, index, true); +
36367 } +
36368 +
36369 /** +
36370 * Gets the element at index `n` of `array`. If `n` is negative, the nth +
36371 * element from the end is returned. +
36372 * +
36373 * @static +
36374 * @memberOf _ +
36375 * @since 4.11.0 +
36376 * @category Array +
36377 * @param {Array} array The array to query. +
36378 * @param {number} [n=0] The index of the element to return. +
36379 * @returns {*} Returns the nth element of `array`. +
36380 * @example +
36381 * +
36382 * var array = ['a', 'b', 'c', 'd']; +
36383 * +
36384 * _.nth(array, 1); +
36385 * // => 'b' +
36386 * +
36387 * _.nth(array, -2); +
36388 * // => 'c'; +
36389 */ +
36390 function nth(array, n) { +
36391 return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; +
36392 } +
36393 +
36394 /** +
36395 * Removes all given values from `array` using +
36396 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
36397 * for equality comparisons. +
36398 * +
36399 * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` +
36400 * to remove elements from an array by predicate. +
36401 * +
36402 * @static +
36403 * @memberOf _ +
36404 * @since 2.0.0 +
36405 * @category Array +
36406 * @param {Array} array The array to modify. +
36407 * @param {...*} [values] The values to remove. +
36408 * @returns {Array} Returns `array`. +
36409 * @example +
36410 * +
36411 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +
36412 * +
36413 * _.pull(array, 'a', 'c'); +
36414 * console.log(array); +
36415 * // => ['b', 'b'] +
36416 */ +
36417 var pull = baseRest(pullAll); +
36418 +
36419 /** +
36420 * This method is like `_.pull` except that it accepts an array of values to remove. +
36421 * +
36422 * **Note:** Unlike `_.difference`, this method mutates `array`. +
36423 * +
36424 * @static +
36425 * @memberOf _ +
36426 * @since 4.0.0 +
36427 * @category Array +
36428 * @param {Array} array The array to modify. +
36429 * @param {Array} values The values to remove. +
36430 * @returns {Array} Returns `array`. +
36431 * @example +
36432 * +
36433 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +
36434 * +
36435 * _.pullAll(array, ['a', 'c']); +
36436 * console.log(array); +
36437 * // => ['b', 'b'] +
36438 */ +
36439 function pullAll(array, values) { +
36440 return (array && array.length && values && values.length) +
36441 ? basePullAll(array, values) +
36442 : array; +
36443 } +
36444 +
36445 /** +
36446 * This method is like `_.pullAll` except that it accepts `iteratee` which is +
36447 * invoked for each element of `array` and `values` to generate the criterion +
36448 * by which they're compared. The iteratee is invoked with one argument: (value). +
36449 * +
36450 * **Note:** Unlike `_.differenceBy`, this method mutates `array`. +
36451 * +
36452 * @static +
36453 * @memberOf _ +
36454 * @since 4.0.0 +
36455 * @category Array +
36456 * @param {Array} array The array to modify. +
36457 * @param {Array} values The values to remove. +
36458 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
36459 * @returns {Array} Returns `array`. +
36460 * @example +
36461 * +
36462 * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; +
36463 * +
36464 * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); +
36465 * console.log(array); +
36466 * // => [{ 'x': 2 }] +
36467 */ +
36468 function pullAllBy(array, values, iteratee) { +
36469 return (array && array.length && values && values.length) +
36470 ? basePullAll(array, values, getIteratee(iteratee, 2)) +
36471 : array; +
36472 } +
36473 +
36474 /** +
36475 * This method is like `_.pullAll` except that it accepts `comparator` which +
36476 * is invoked to compare elements of `array` to `values`. The comparator is +
36477 * invoked with two arguments: (arrVal, othVal). +
36478 * +
36479 * **Note:** Unlike `_.differenceWith`, this method mutates `array`. +
36480 * +
36481 * @static +
36482 * @memberOf _ +
36483 * @since 4.6.0 +
36484 * @category Array +
36485 * @param {Array} array The array to modify. +
36486 * @param {Array} values The values to remove. +
36487 * @param {Function} [comparator] The comparator invoked per element. +
36488 * @returns {Array} Returns `array`. +
36489 * @example +
36490 * +
36491 * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; +
36492 * +
36493 * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); +
36494 * console.log(array); +
36495 * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] +
36496 */ +
36497 function pullAllWith(array, values, comparator) { +
36498 return (array && array.length && values && values.length) +
36499 ? basePullAll(array, values, undefined, comparator) +
36500 : array; +
36501 } +
36502 +
36503 /** +
36504 * Removes elements from `array` corresponding to `indexes` and returns an +
36505 * array of removed elements. +
36506 * +
36507 * **Note:** Unlike `_.at`, this method mutates `array`. +
36508 * +
36509 * @static +
36510 * @memberOf _ +
36511 * @since 3.0.0 +
36512 * @category Array +
36513 * @param {Array} array The array to modify. +
36514 * @param {...(number|number[])} [indexes] The indexes of elements to remove. +
36515 * @returns {Array} Returns the new array of removed elements. +
36516 * @example +
36517 * +
36518 * var array = ['a', 'b', 'c', 'd']; +
36519 * var pulled = _.pullAt(array, [1, 3]); +
36520 * +
36521 * console.log(array); +
36522 * // => ['a', 'c'] +
36523 * +
36524 * console.log(pulled); +
36525 * // => ['b', 'd'] +
36526 */ +
36527 var pullAt = flatRest(function(array, indexes) { +
36528 var length = array == null ? 0 : array.length, +
36529 result = baseAt(array, indexes); +
36530 +
36531 basePullAt(array, arrayMap(indexes, function(index) { +
36532 return isIndex(index, length) ? +index : index; +
36533 }).sort(compareAscending)); +
36534 +
36535 return result; +
36536 }); +
36537 +
36538 /** +
36539 * Removes all elements from `array` that `predicate` returns truthy for +
36540 * and returns an array of the removed elements. The predicate is invoked +
36541 * with three arguments: (value, index, array). +
36542 * +
36543 * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` +
36544 * to pull elements from an array by value. +
36545 * +
36546 * @static +
36547 * @memberOf _ +
36548 * @since 2.0.0 +
36549 * @category Array +
36550 * @param {Array} array The array to modify. +
36551 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
36552 * @returns {Array} Returns the new array of removed elements. +
36553 * @example +
36554 * +
36555 * var array = [1, 2, 3, 4]; +
36556 * var evens = _.remove(array, function(n) { +
36557 * return n % 2 == 0; +
36558 * }); +
36559 * +
36560 * console.log(array); +
36561 * // => [1, 3] +
36562 * +
36563 * console.log(evens); +
36564 * // => [2, 4] +
36565 */ +
36566 function remove(array, predicate) { +
36567 var result = []; +
36568 if (!(array && array.length)) { +
36569 return result; +
36570 } +
36571 var index = -1, +
36572 indexes = [], +
36573 length = array.length; +
36574 +
36575 predicate = getIteratee(predicate, 3); +
36576 while (++index < length) { +
36577 var value = array[index]; +
36578 if (predicate(value, index, array)) { +
36579 result.push(value); +
36580 indexes.push(index); +
36581 } +
36582 } +
36583 basePullAt(array, indexes); +
36584 return result; +
36585 } +
36586 +
36587 /** +
36588 * Reverses `array` so that the first element becomes the last, the second +
36589 * element becomes the second to last, and so on. +
36590 * +
36591 * **Note:** This method mutates `array` and is based on +
36592 * [`Array#reverse`](https://mdn.io/Array/reverse). +
36593 * +
36594 * @static +
36595 * @memberOf _ +
36596 * @since 4.0.0 +
36597 * @category Array +
36598 * @param {Array} array The array to modify. +
36599 * @returns {Array} Returns `array`. +
36600 * @example +
36601 * +
36602 * var array = [1, 2, 3]; +
36603 * +
36604 * _.reverse(array); +
36605 * // => [3, 2, 1] +
36606 * +
36607 * console.log(array); +
36608 * // => [3, 2, 1] +
36609 */ +
36610 function reverse(array) { +
36611 return array == null ? array : nativeReverse.call(array); +
36612 } +
36613 +
36614 /** +
36615 * Creates a slice of `array` from `start` up to, but not including, `end`. +
36616 * +
36617 * **Note:** This method is used instead of +
36618 * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are +
36619 * returned. +
36620 * +
36621 * @static +
36622 * @memberOf _ +
36623 * @since 3.0.0 +
36624 * @category Array +
36625 * @param {Array} array The array to slice. +
36626 * @param {number} [start=0] The start position. +
36627 * @param {number} [end=array.length] The end position. +
36628 * @returns {Array} Returns the slice of `array`. +
36629 */ +
36630 function slice(array, start, end) { +
36631 var length = array == null ? 0 : array.length; +
36632 if (!length) { +
36633 return []; +
36634 } +
36635 if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { +
36636 start = 0; +
36637 end = length; +
36638 } +
36639 else { +
36640 start = start == null ? 0 : toInteger(start); +
36641 end = end === undefined ? length : toInteger(end); +
36642 } +
36643 return baseSlice(array, start, end); +
36644 } +
36645 +
36646 /** +
36647 * Uses a binary search to determine the lowest index at which `value` +
36648 * should be inserted into `array` in order to maintain its sort order. +
36649 * +
36650 * @static +
36651 * @memberOf _ +
36652 * @since 0.1.0 +
36653 * @category Array +
36654 * @param {Array} array The sorted array to inspect. +
36655 * @param {*} value The value to evaluate. +
36656 * @returns {number} Returns the index at which `value` should be inserted +
36657 * into `array`. +
36658 * @example +
36659 * +
36660 * _.sortedIndex([30, 50], 40); +
36661 * // => 1 +
36662 */ +
36663 function sortedIndex(array, value) { +
36664 return baseSortedIndex(array, value); +
36665 } +
36666 +
36667 /** +
36668 * This method is like `_.sortedIndex` except that it accepts `iteratee` +
36669 * which is invoked for `value` and each element of `array` to compute their +
36670 * sort ranking. The iteratee is invoked with one argument: (value). +
36671 * +
36672 * @static +
36673 * @memberOf _ +
36674 * @since 4.0.0 +
36675 * @category Array +
36676 * @param {Array} array The sorted array to inspect. +
36677 * @param {*} value The value to evaluate. +
36678 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
36679 * @returns {number} Returns the index at which `value` should be inserted +
36680 * into `array`. +
36681 * @example +
36682 * +
36683 * var objects = [{ 'x': 4 }, { 'x': 5 }]; +
36684 * +
36685 * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +
36686 * // => 0 +
36687 * +
36688 * // The `_.property` iteratee shorthand. +
36689 * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); +
36690 * // => 0 +
36691 */ +
36692 function sortedIndexBy(array, value, iteratee) { +
36693 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); +
36694 } +
36695 +
36696 /** +
36697 * This method is like `_.indexOf` except that it performs a binary +
36698 * search on a sorted `array`. +
36699 * +
36700 * @static +
36701 * @memberOf _ +
36702 * @since 4.0.0 +
36703 * @category Array +
36704 * @param {Array} array The array to inspect. +
36705 * @param {*} value The value to search for. +
36706 * @returns {number} Returns the index of the matched value, else `-1`. +
36707 * @example +
36708 * +
36709 * _.sortedIndexOf([4, 5, 5, 5, 6], 5); +
36710 * // => 1 +
36711 */ +
36712 function sortedIndexOf(array, value) { +
36713 var length = array == null ? 0 : array.length; +
36714 if (length) { +
36715 var index = baseSortedIndex(array, value); +
36716 if (index < length && eq(array[index], value)) { +
36717 return index; +
36718 } +
36719 } +
36720 return -1; +
36721 } +
36722 +
36723 /** +
36724 * This method is like `_.sortedIndex` except that it returns the highest +
36725 * index at which `value` should be inserted into `array` in order to +
36726 * maintain its sort order. +
36727 * +
36728 * @static +
36729 * @memberOf _ +
36730 * @since 3.0.0 +
36731 * @category Array +
36732 * @param {Array} array The sorted array to inspect. +
36733 * @param {*} value The value to evaluate. +
36734 * @returns {number} Returns the index at which `value` should be inserted +
36735 * into `array`. +
36736 * @example +
36737 * +
36738 * _.sortedLastIndex([4, 5, 5, 5, 6], 5); +
36739 * // => 4 +
36740 */ +
36741 function sortedLastIndex(array, value) { +
36742 return baseSortedIndex(array, value, true); +
36743 } +
36744 +
36745 /** +
36746 * This method is like `_.sortedLastIndex` except that it accepts `iteratee` +
36747 * which is invoked for `value` and each element of `array` to compute their +
36748 * sort ranking. The iteratee is invoked with one argument: (value). +
36749 * +
36750 * @static +
36751 * @memberOf _ +
36752 * @since 4.0.0 +
36753 * @category Array +
36754 * @param {Array} array The sorted array to inspect. +
36755 * @param {*} value The value to evaluate. +
36756 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
36757 * @returns {number} Returns the index at which `value` should be inserted +
36758 * into `array`. +
36759 * @example +
36760 * +
36761 * var objects = [{ 'x': 4 }, { 'x': 5 }]; +
36762 * +
36763 * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +
36764 * // => 1 +
36765 * +
36766 * // The `_.property` iteratee shorthand. +
36767 * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); +
36768 * // => 1 +
36769 */ +
36770 function sortedLastIndexBy(array, value, iteratee) { +
36771 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); +
36772 } +
36773 +
36774 /** +
36775 * This method is like `_.lastIndexOf` except that it performs a binary +
36776 * search on a sorted `array`. +
36777 * +
36778 * @static +
36779 * @memberOf _ +
36780 * @since 4.0.0 +
36781 * @category Array +
36782 * @param {Array} array The array to inspect. +
36783 * @param {*} value The value to search for. +
36784 * @returns {number} Returns the index of the matched value, else `-1`. +
36785 * @example +
36786 * +
36787 * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); +
36788 * // => 3 +
36789 */ +
36790 function sortedLastIndexOf(array, value) { +
36791 var length = array == null ? 0 : array.length; +
36792 if (length) { +
36793 var index = baseSortedIndex(array, value, true) - 1; +
36794 if (eq(array[index], value)) { +
36795 return index; +
36796 } +
36797 } +
36798 return -1; +
36799 } +
36800 +
36801 /** +
36802 * This method is like `_.uniq` except that it's designed and optimized +
36803 * for sorted arrays. +
36804 * +
36805 * @static +
36806 * @memberOf _ +
36807 * @since 4.0.0 +
36808 * @category Array +
36809 * @param {Array} array The array to inspect. +
36810 * @returns {Array} Returns the new duplicate free array. +
36811 * @example +
36812 * +
36813 * _.sortedUniq([1, 1, 2]); +
36814 * // => [1, 2] +
36815 */ +
36816 function sortedUniq(array) { +
36817 return (array && array.length) +
36818 ? baseSortedUniq(array) +
36819 : []; +
36820 } +
36821 +
36822 /** +
36823 * This method is like `_.uniqBy` except that it's designed and optimized +
36824 * for sorted arrays. +
36825 * +
36826 * @static +
36827 * @memberOf _ +
36828 * @since 4.0.0 +
36829 * @category Array +
36830 * @param {Array} array The array to inspect. +
36831 * @param {Function} [iteratee] The iteratee invoked per element. +
36832 * @returns {Array} Returns the new duplicate free array. +
36833 * @example +
36834 * +
36835 * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); +
36836 * // => [1.1, 2.3] +
36837 */ +
36838 function sortedUniqBy(array, iteratee) { +
36839 return (array && array.length) +
36840 ? baseSortedUniq(array, getIteratee(iteratee, 2)) +
36841 : []; +
36842 } +
36843 +
36844 /** +
36845 * Gets all but the first element of `array`. +
36846 * +
36847 * @static +
36848 * @memberOf _ +
36849 * @since 4.0.0 +
36850 * @category Array +
36851 * @param {Array} array The array to query. +
36852 * @returns {Array} Returns the slice of `array`. +
36853 * @example +
36854 * +
36855 * _.tail([1, 2, 3]); +
36856 * // => [2, 3] +
36857 */ +
36858 function tail(array) { +
36859 var length = array == null ? 0 : array.length; +
36860 return length ? baseSlice(array, 1, length) : []; +
36861 } +
36862 +
36863 /** +
36864 * Creates a slice of `array` with `n` elements taken from the beginning. +
36865 * +
36866 * @static +
36867 * @memberOf _ +
36868 * @since 0.1.0 +
36869 * @category Array +
36870 * @param {Array} array The array to query. +
36871 * @param {number} [n=1] The number of elements to take. +
36872 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
36873 * @returns {Array} Returns the slice of `array`. +
36874 * @example +
36875 * +
36876 * _.take([1, 2, 3]); +
36877 * // => [1] +
36878 * +
36879 * _.take([1, 2, 3], 2); +
36880 * // => [1, 2] +
36881 * +
36882 * _.take([1, 2, 3], 5); +
36883 * // => [1, 2, 3] +
36884 * +
36885 * _.take([1, 2, 3], 0); +
36886 * // => [] +
36887 */ +
36888 function take(array, n, guard) { +
36889 if (!(array && array.length)) { +
36890 return []; +
36891 } +
36892 n = (guard || n === undefined) ? 1 : toInteger(n); +
36893 return baseSlice(array, 0, n < 0 ? 0 : n); +
36894 } +
36895 +
36896 /** +
36897 * Creates a slice of `array` with `n` elements taken from the end. +
36898 * +
36899 * @static +
36900 * @memberOf _ +
36901 * @since 3.0.0 +
36902 * @category Array +
36903 * @param {Array} array The array to query. +
36904 * @param {number} [n=1] The number of elements to take. +
36905 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
36906 * @returns {Array} Returns the slice of `array`. +
36907 * @example +
36908 * +
36909 * _.takeRight([1, 2, 3]); +
36910 * // => [3] +
36911 * +
36912 * _.takeRight([1, 2, 3], 2); +
36913 * // => [2, 3] +
36914 * +
36915 * _.takeRight([1, 2, 3], 5); +
36916 * // => [1, 2, 3] +
36917 * +
36918 * _.takeRight([1, 2, 3], 0); +
36919 * // => [] +
36920 */ +
36921 function takeRight(array, n, guard) { +
36922 var length = array == null ? 0 : array.length; +
36923 if (!length) { +
36924 return []; +
36925 } +
36926 n = (guard || n === undefined) ? 1 : toInteger(n); +
36927 n = length - n; +
36928 return baseSlice(array, n < 0 ? 0 : n, length); +
36929 } +
36930 +
36931 /** +
36932 * Creates a slice of `array` with elements taken from the end. Elements are +
36933 * taken until `predicate` returns falsey. The predicate is invoked with +
36934 * three arguments: (value, index, array). +
36935 * +
36936 * @static +
36937 * @memberOf _ +
36938 * @since 3.0.0 +
36939 * @category Array +
36940 * @param {Array} array The array to query. +
36941 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
36942 * @returns {Array} Returns the slice of `array`. +
36943 * @example +
36944 * +
36945 * var users = [ +
36946 * { 'user': 'barney', 'active': true }, +
36947 * { 'user': 'fred', 'active': false }, +
36948 * { 'user': 'pebbles', 'active': false } +
36949 * ]; +
36950 * +
36951 * _.takeRightWhile(users, function(o) { return !o.active; }); +
36952 * // => objects for ['fred', 'pebbles'] +
36953 * +
36954 * // The `_.matches` iteratee shorthand. +
36955 * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); +
36956 * // => objects for ['pebbles'] +
36957 * +
36958 * // The `_.matchesProperty` iteratee shorthand. +
36959 * _.takeRightWhile(users, ['active', false]); +
36960 * // => objects for ['fred', 'pebbles'] +
36961 * +
36962 * // The `_.property` iteratee shorthand. +
36963 * _.takeRightWhile(users, 'active'); +
36964 * // => [] +
36965 */ +
36966 function takeRightWhile(array, predicate) { +
36967 return (array && array.length) +
36968 ? baseWhile(array, getIteratee(predicate, 3), false, true) +
36969 : []; +
36970 } +
36971 +
36972 /** +
36973 * Creates a slice of `array` with elements taken from the beginning. Elements +
36974 * are taken until `predicate` returns falsey. The predicate is invoked with +
36975 * three arguments: (value, index, array). +
36976 * +
36977 * @static +
36978 * @memberOf _ +
36979 * @since 3.0.0 +
36980 * @category Array +
36981 * @param {Array} array The array to query. +
36982 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
36983 * @returns {Array} Returns the slice of `array`. +
36984 * @example +
36985 * +
36986 * var users = [ +
36987 * { 'user': 'barney', 'active': false }, +
36988 * { 'user': 'fred', 'active': false }, +
36989 * { 'user': 'pebbles', 'active': true } +
36990 * ]; +
36991 * +
36992 * _.takeWhile(users, function(o) { return !o.active; }); +
36993 * // => objects for ['barney', 'fred'] +
36994 * +
36995 * // The `_.matches` iteratee shorthand. +
36996 * _.takeWhile(users, { 'user': 'barney', 'active': false }); +
36997 * // => objects for ['barney'] +
36998 * +
36999 * // The `_.matchesProperty` iteratee shorthand. +
37000 * _.takeWhile(users, ['active', false]); +
37001 * // => objects for ['barney', 'fred'] +
37002 * +
37003 * // The `_.property` iteratee shorthand. +
37004 * _.takeWhile(users, 'active'); +
37005 * // => [] +
37006 */ +
37007 function takeWhile(array, predicate) { +
37008 return (array && array.length) +
37009 ? baseWhile(array, getIteratee(predicate, 3)) +
37010 : []; +
37011 } +
37012 +
37013 /** +
37014 * Creates an array of unique values, in order, from all given arrays using +
37015 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
37016 * for equality comparisons. +
37017 * +
37018 * @static +
37019 * @memberOf _ +
37020 * @since 0.1.0 +
37021 * @category Array +
37022 * @param {...Array} [arrays] The arrays to inspect. +
37023 * @returns {Array} Returns the new array of combined values. +
37024 * @example +
37025 * +
37026 * _.union([2], [1, 2]); +
37027 * // => [2, 1] +
37028 */ +
37029 var union = baseRest(function(arrays) { +
37030 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); +
37031 }); +
37032 +
37033 /** +
37034 * This method is like `_.union` except that it accepts `iteratee` which is +
37035 * invoked for each element of each `arrays` to generate the criterion by +
37036 * which uniqueness is computed. Result values are chosen from the first +
37037 * array in which the value occurs. The iteratee is invoked with one argument: +
37038 * (value). +
37039 * +
37040 * @static +
37041 * @memberOf _ +
37042 * @since 4.0.0 +
37043 * @category Array +
37044 * @param {...Array} [arrays] The arrays to inspect. +
37045 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
37046 * @returns {Array} Returns the new array of combined values. +
37047 * @example +
37048 * +
37049 * _.unionBy([2.1], [1.2, 2.3], Math.floor); +
37050 * // => [2.1, 1.2] +
37051 * +
37052 * // The `_.property` iteratee shorthand. +
37053 * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
37054 * // => [{ 'x': 1 }, { 'x': 2 }] +
37055 */ +
37056 var unionBy = baseRest(function(arrays) { +
37057 var iteratee = last(arrays); +
37058 if (isArrayLikeObject(iteratee)) { +
37059 iteratee = undefined; +
37060 } +
37061 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); +
37062 }); +
37063 +
37064 /** +
37065 * This method is like `_.union` except that it accepts `comparator` which +
37066 * is invoked to compare elements of `arrays`. Result values are chosen from +
37067 * the first array in which the value occurs. The comparator is invoked +
37068 * with two arguments: (arrVal, othVal). +
37069 * +
37070 * @static +
37071 * @memberOf _ +
37072 * @since 4.0.0 +
37073 * @category Array +
37074 * @param {...Array} [arrays] The arrays to inspect. +
37075 * @param {Function} [comparator] The comparator invoked per element. +
37076 * @returns {Array} Returns the new array of combined values. +
37077 * @example +
37078 * +
37079 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
37080 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
37081 * +
37082 * _.unionWith(objects, others, _.isEqual); +
37083 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +
37084 */ +
37085 var unionWith = baseRest(function(arrays) { +
37086 var comparator = last(arrays); +
37087 comparator = typeof comparator == 'function' ? comparator : undefined; +
37088 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); +
37089 }); +
37090 +
37091 /** +
37092 * Creates a duplicate-free version of an array, using +
37093 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
37094 * for equality comparisons, in which only the first occurrence of each element +
37095 * is kept. The order of result values is determined by the order they occur +
37096 * in the array. +
37097 * +
37098 * @static +
37099 * @memberOf _ +
37100 * @since 0.1.0 +
37101 * @category Array +
37102 * @param {Array} array The array to inspect. +
37103 * @returns {Array} Returns the new duplicate free array. +
37104 * @example +
37105 * +
37106 * _.uniq([2, 1, 2]); +
37107 * // => [2, 1] +
37108 */ +
37109 function uniq(array) { +
37110 return (array && array.length) ? baseUniq(array) : []; +
37111 } +
37112 +
37113 /** +
37114 * This method is like `_.uniq` except that it accepts `iteratee` which is +
37115 * invoked for each element in `array` to generate the criterion by which +
37116 * uniqueness is computed. The order of result values is determined by the +
37117 * order they occur in the array. The iteratee is invoked with one argument: +
37118 * (value). +
37119 * +
37120 * @static +
37121 * @memberOf _ +
37122 * @since 4.0.0 +
37123 * @category Array +
37124 * @param {Array} array The array to inspect. +
37125 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
37126 * @returns {Array} Returns the new duplicate free array. +
37127 * @example +
37128 * +
37129 * _.uniqBy([2.1, 1.2, 2.3], Math.floor); +
37130 * // => [2.1, 1.2] +
37131 * +
37132 * // The `_.property` iteratee shorthand. +
37133 * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); +
37134 * // => [{ 'x': 1 }, { 'x': 2 }] +
37135 */ +
37136 function uniqBy(array, iteratee) { +
37137 return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; +
37138 } +
37139 +
37140 /** +
37141 * This method is like `_.uniq` except that it accepts `comparator` which +
37142 * is invoked to compare elements of `array`. The order of result values is +
37143 * determined by the order they occur in the array.The comparator is invoked +
37144 * with two arguments: (arrVal, othVal). +
37145 * +
37146 * @static +
37147 * @memberOf _ +
37148 * @since 4.0.0 +
37149 * @category Array +
37150 * @param {Array} array The array to inspect. +
37151 * @param {Function} [comparator] The comparator invoked per element. +
37152 * @returns {Array} Returns the new duplicate free array. +
37153 * @example +
37154 * +
37155 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
37156 * +
37157 * _.uniqWith(objects, _.isEqual); +
37158 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] +
37159 */ +
37160 function uniqWith(array, comparator) { +
37161 comparator = typeof comparator == 'function' ? comparator : undefined; +
37162 return (array && array.length) ? baseUniq(array, undefined, comparator) : []; +
37163 } +
37164 +
37165 /** +
37166 * This method is like `_.zip` except that it accepts an array of grouped +
37167 * elements and creates an array regrouping the elements to their pre-zip +
37168 * configuration. +
37169 * +
37170 * @static +
37171 * @memberOf _ +
37172 * @since 1.2.0 +
37173 * @category Array +
37174 * @param {Array} array The array of grouped elements to process. +
37175 * @returns {Array} Returns the new array of regrouped elements. +
37176 * @example +
37177 * +
37178 * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); +
37179 * // => [['a', 1, true], ['b', 2, false]] +
37180 * +
37181 * _.unzip(zipped); +
37182 * // => [['a', 'b'], [1, 2], [true, false]] +
37183 */ +
37184 function unzip(array) { +
37185 if (!(array && array.length)) { +
37186 return []; +
37187 } +
37188 var length = 0; +
37189 array = arrayFilter(array, function(group) { +
37190 if (isArrayLikeObject(group)) { +
37191 length = nativeMax(group.length, length); +
37192 return true; +
37193 } +
37194 }); +
37195 return baseTimes(length, function(index) { +
37196 return arrayMap(array, baseProperty(index)); +
37197 }); +
37198 } +
37199 +
37200 /** +
37201 * This method is like `_.unzip` except that it accepts `iteratee` to specify +
37202 * how regrouped values should be combined. The iteratee is invoked with the +
37203 * elements of each group: (...group). +
37204 * +
37205 * @static +
37206 * @memberOf _ +
37207 * @since 3.8.0 +
37208 * @category Array +
37209 * @param {Array} array The array of grouped elements to process. +
37210 * @param {Function} [iteratee=_.identity] The function to combine +
37211 * regrouped values. +
37212 * @returns {Array} Returns the new array of regrouped elements. +
37213 * @example +
37214 * +
37215 * var zipped = _.zip([1, 2], [10, 20], [100, 200]); +
37216 * // => [[1, 10, 100], [2, 20, 200]] +
37217 * +
37218 * _.unzipWith(zipped, _.add); +
37219 * // => [3, 30, 300] +
37220 */ +
37221 function unzipWith(array, iteratee) { +
37222 if (!(array && array.length)) { +
37223 return []; +
37224 } +
37225 var result = unzip(array); +
37226 if (iteratee == null) { +
37227 return result; +
37228 } +
37229 return arrayMap(result, function(group) { +
37230 return apply(iteratee, undefined, group); +
37231 }); +
37232 } +
37233 +
37234 /** +
37235 * Creates an array excluding all given values using +
37236 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
37237 * for equality comparisons. +
37238 * +
37239 * **Note:** Unlike `_.pull`, this method returns a new array. +
37240 * +
37241 * @static +
37242 * @memberOf _ +
37243 * @since 0.1.0 +
37244 * @category Array +
37245 * @param {Array} array The array to inspect. +
37246 * @param {...*} [values] The values to exclude. +
37247 * @returns {Array} Returns the new array of filtered values. +
37248 * @see _.difference, _.xor +
37249 * @example +
37250 * +
37251 * _.without([2, 1, 2, 3], 1, 2); +
37252 * // => [3] +
37253 */ +
37254 var without = baseRest(function(array, values) { +
37255 return isArrayLikeObject(array) +
37256 ? baseDifference(array, values) +
37257 : []; +
37258 }); +
37259 +
37260 /** +
37261 * Creates an array of unique values that is the +
37262 * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) +
37263 * of the given arrays. The order of result values is determined by the order +
37264 * they occur in the arrays. +
37265 * +
37266 * @static +
37267 * @memberOf _ +
37268 * @since 2.4.0 +
37269 * @category Array +
37270 * @param {...Array} [arrays] The arrays to inspect. +
37271 * @returns {Array} Returns the new array of filtered values. +
37272 * @see _.difference, _.without +
37273 * @example +
37274 * +
37275 * _.xor([2, 1], [2, 3]); +
37276 * // => [1, 3] +
37277 */ +
37278 var xor = baseRest(function(arrays) { +
37279 return baseXor(arrayFilter(arrays, isArrayLikeObject)); +
37280 }); +
37281 +
37282 /** +
37283 * This method is like `_.xor` except that it accepts `iteratee` which is +
37284 * invoked for each element of each `arrays` to generate the criterion by +
37285 * which by which they're compared. The order of result values is determined +
37286 * by the order they occur in the arrays. The iteratee is invoked with one +
37287 * argument: (value). +
37288 * +
37289 * @static +
37290 * @memberOf _ +
37291 * @since 4.0.0 +
37292 * @category Array +
37293 * @param {...Array} [arrays] The arrays to inspect. +
37294 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
37295 * @returns {Array} Returns the new array of filtered values. +
37296 * @example +
37297 * +
37298 * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
37299 * // => [1.2, 3.4] +
37300 * +
37301 * // The `_.property` iteratee shorthand. +
37302 * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
37303 * // => [{ 'x': 2 }] +
37304 */ +
37305 var xorBy = baseRest(function(arrays) { +
37306 var iteratee = last(arrays); +
37307 if (isArrayLikeObject(iteratee)) { +
37308 iteratee = undefined; +
37309 } +
37310 return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); +
37311 }); +
37312 +
37313 /** +
37314 * This method is like `_.xor` except that it accepts `comparator` which is +
37315 * invoked to compare elements of `arrays`. The order of result values is +
37316 * determined by the order they occur in the arrays. The comparator is invoked +
37317 * with two arguments: (arrVal, othVal). +
37318 * +
37319 * @static +
37320 * @memberOf _ +
37321 * @since 4.0.0 +
37322 * @category Array +
37323 * @param {...Array} [arrays] The arrays to inspect. +
37324 * @param {Function} [comparator] The comparator invoked per element. +
37325 * @returns {Array} Returns the new array of filtered values. +
37326 * @example +
37327 * +
37328 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
37329 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
37330 * +
37331 * _.xorWith(objects, others, _.isEqual); +
37332 * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +
37333 */ +
37334 var xorWith = baseRest(function(arrays) { +
37335 var comparator = last(arrays); +
37336 comparator = typeof comparator == 'function' ? comparator : undefined; +
37337 return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); +
37338 }); +
37339 +
37340 /** +
37341 * Creates an array of grouped elements, the first of which contains the +
37342 * first elements of the given arrays, the second of which contains the +
37343 * second elements of the given arrays, and so on. +
37344 * +
37345 * @static +
37346 * @memberOf _ +
37347 * @since 0.1.0 +
37348 * @category Array +
37349 * @param {...Array} [arrays] The arrays to process. +
37350 * @returns {Array} Returns the new array of grouped elements. +
37351 * @example +
37352 * +
37353 * _.zip(['a', 'b'], [1, 2], [true, false]); +
37354 * // => [['a', 1, true], ['b', 2, false]] +
37355 */ +
37356 var zip = baseRest(unzip); +
37357 +
37358 /** +
37359 * This method is like `_.fromPairs` except that it accepts two arrays, +
37360 * one of property identifiers and one of corresponding values. +
37361 * +
37362 * @static +
37363 * @memberOf _ +
37364 * @since 0.4.0 +
37365 * @category Array +
37366 * @param {Array} [props=[]] The property identifiers. +
37367 * @param {Array} [values=[]] The property values. +
37368 * @returns {Object} Returns the new object. +
37369 * @example +
37370 * +
37371 * _.zipObject(['a', 'b'], [1, 2]); +
37372 * // => { 'a': 1, 'b': 2 } +
37373 */ +
37374 function zipObject(props, values) { +
37375 return baseZipObject(props || [], values || [], assignValue); +
37376 } +
37377 +
37378 /** +
37379 * This method is like `_.zipObject` except that it supports property paths. +
37380 * +
37381 * @static +
37382 * @memberOf _ +
37383 * @since 4.1.0 +
37384 * @category Array +
37385 * @param {Array} [props=[]] The property identifiers. +
37386 * @param {Array} [values=[]] The property values. +
37387 * @returns {Object} Returns the new object. +
37388 * @example +
37389 * +
37390 * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); +
37391 * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } +
37392 */ +
37393 function zipObjectDeep(props, values) { +
37394 return baseZipObject(props || [], values || [], baseSet); +
37395 } +
37396 +
37397 /** +
37398 * This method is like `_.zip` except that it accepts `iteratee` to specify +
37399 * how grouped values should be combined. The iteratee is invoked with the +
37400 * elements of each group: (...group). +
37401 * +
37402 * @static +
37403 * @memberOf _ +
37404 * @since 3.8.0 +
37405 * @category Array +
37406 * @param {...Array} [arrays] The arrays to process. +
37407 * @param {Function} [iteratee=_.identity] The function to combine +
37408 * grouped values. +
37409 * @returns {Array} Returns the new array of grouped elements. +
37410 * @example +
37411 * +
37412 * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { +
37413 * return a + b + c; +
37414 * }); +
37415 * // => [111, 222] +
37416 */ +
37417 var zipWith = baseRest(function(arrays) { +
37418 var length = arrays.length, +
37419 iteratee = length > 1 ? arrays[length - 1] : undefined; +
37420 +
37421 iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; +
37422 return unzipWith(arrays, iteratee); +
37423 }); +
37424 +
37425 /*------------------------------------------------------------------------*/ +
37426 +
37427 /** +
37428 * Creates a `lodash` wrapper instance that wraps `value` with explicit method +
37429 * chain sequences enabled. The result of such sequences must be unwrapped +
37430 * with `_#value`. +
37431 * +
37432 * @static +
37433 * @memberOf _ +
37434 * @since 1.3.0 +
37435 * @category Seq +
37436 * @param {*} value The value to wrap. +
37437 * @returns {Object} Returns the new `lodash` wrapper instance. +
37438 * @example +
37439 * +
37440 * var users = [ +
37441 * { 'user': 'barney', 'age': 36 }, +
37442 * { 'user': 'fred', 'age': 40 }, +
37443 * { 'user': 'pebbles', 'age': 1 } +
37444 * ]; +
37445 * +
37446 * var youngest = _ +
37447 * .chain(users) +
37448 * .sortBy('age') +
37449 * .map(function(o) { +
37450 * return o.user + ' is ' + o.age; +
37451 * }) +
37452 * .head() +
37453 * .value(); +
37454 * // => 'pebbles is 1' +
37455 */ +
37456 function chain(value) { +
37457 var result = lodash(value); +
37458 result.__chain__ = true; +
37459 return result; +
37460 } +
37461 +
37462 /** +
37463 * This method invokes `interceptor` and returns `value`. The interceptor +
37464 * is invoked with one argument; (value). The purpose of this method is to +
37465 * "tap into" a method chain sequence in order to modify intermediate results. +
37466 * +
37467 * @static +
37468 * @memberOf _ +
37469 * @since 0.1.0 +
37470 * @category Seq +
37471 * @param {*} value The value to provide to `interceptor`. +
37472 * @param {Function} interceptor The function to invoke. +
37473 * @returns {*} Returns `value`. +
37474 * @example +
37475 * +
37476 * _([1, 2, 3]) +
37477 * .tap(function(array) { +
37478 * // Mutate input array. +
37479 * array.pop(); +
37480 * }) +
37481 * .reverse() +
37482 * .value(); +
37483 * // => [2, 1] +
37484 */ +
37485 function tap(value, interceptor) { +
37486 interceptor(value); +
37487 return value; +
37488 } +
37489 +
37490 /** +
37491 * This method is like `_.tap` except that it returns the result of `interceptor`. +
37492 * The purpose of this method is to "pass thru" values replacing intermediate +
37493 * results in a method chain sequence. +
37494 * +
37495 * @static +
37496 * @memberOf _ +
37497 * @since 3.0.0 +
37498 * @category Seq +
37499 * @param {*} value The value to provide to `interceptor`. +
37500 * @param {Function} interceptor The function to invoke. +
37501 * @returns {*} Returns the result of `interceptor`. +
37502 * @example +
37503 * +
37504 * _(' abc ') +
37505 * .chain() +
37506 * .trim() +
37507 * .thru(function(value) { +
37508 * return [value]; +
37509 * }) +
37510 * .value(); +
37511 * // => ['abc'] +
37512 */ +
37513 function thru(value, interceptor) { +
37514 return interceptor(value); +
37515 } +
37516 +
37517 /** +
37518 * This method is the wrapper version of `_.at`. +
37519 * +
37520 * @name at +
37521 * @memberOf _ +
37522 * @since 1.0.0 +
37523 * @category Seq +
37524 * @param {...(string|string[])} [paths] The property paths to pick. +
37525 * @returns {Object} Returns the new `lodash` wrapper instance. +
37526 * @example +
37527 * +
37528 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +
37529 * +
37530 * _(object).at(['a[0].b.c', 'a[1]']).value(); +
37531 * // => [3, 4] +
37532 */ +
37533 var wrapperAt = flatRest(function(paths) { +
37534 var length = paths.length, +
37535 start = length ? paths[0] : 0, +
37536 value = this.__wrapped__, +
37537 interceptor = function(object) { return baseAt(object, paths); }; +
37538 +
37539 if (length > 1 || this.__actions__.length || +
37540 !(value instanceof LazyWrapper) || !isIndex(start)) { +
37541 return this.thru(interceptor); +
37542 } +
37543 value = value.slice(start, +start + (length ? 1 : 0)); +
37544 value.__actions__.push({ +
37545 'func': thru, +
37546 'args': [interceptor], +
37547 'thisArg': undefined +
37548 }); +
37549 return new LodashWrapper(value, this.__chain__).thru(function(array) { +
37550 if (length && !array.length) { +
37551 array.push(undefined); +
37552 } +
37553 return array; +
37554 }); +
37555 }); +
37556 +
37557 /** +
37558 * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. +
37559 * +
37560 * @name chain +
37561 * @memberOf _ +
37562 * @since 0.1.0 +
37563 * @category Seq +
37564 * @returns {Object} Returns the new `lodash` wrapper instance. +
37565 * @example +
37566 * +
37567 * var users = [ +
37568 * { 'user': 'barney', 'age': 36 }, +
37569 * { 'user': 'fred', 'age': 40 } +
37570 * ]; +
37571 * +
37572 * // A sequence without explicit chaining. +
37573 * _(users).head(); +
37574 * // => { 'user': 'barney', 'age': 36 } +
37575 * +
37576 * // A sequence with explicit chaining. +
37577 * _(users) +
37578 * .chain() +
37579 * .head() +
37580 * .pick('user') +
37581 * .value(); +
37582 * // => { 'user': 'barney' } +
37583 */ +
37584 function wrapperChain() { +
37585 return chain(this); +
37586 } +
37587 +
37588 /** +
37589 * Executes the chain sequence and returns the wrapped result. +
37590 * +
37591 * @name commit +
37592 * @memberOf _ +
37593 * @since 3.2.0 +
37594 * @category Seq +
37595 * @returns {Object} Returns the new `lodash` wrapper instance. +
37596 * @example +
37597 * +
37598 * var array = [1, 2]; +
37599 * var wrapped = _(array).push(3); +
37600 * +
37601 * console.log(array); +
37602 * // => [1, 2] +
37603 * +
37604 * wrapped = wrapped.commit(); +
37605 * console.log(array); +
37606 * // => [1, 2, 3] +
37607 * +
37608 * wrapped.last(); +
37609 * // => 3 +
37610 * +
37611 * console.log(array); +
37612 * // => [1, 2, 3] +
37613 */ +
37614 function wrapperCommit() { +
37615 return new LodashWrapper(this.value(), this.__chain__); +
37616 } +
37617 +
37618 /** +
37619 * Gets the next value on a wrapped object following the +
37620 * [iterator protocol](https://mdn.io/iteration_protocols#iterator). +
37621 * +
37622 * @name next +
37623 * @memberOf _ +
37624 * @since 4.0.0 +
37625 * @category Seq +
37626 * @returns {Object} Returns the next iterator value. +
37627 * @example +
37628 * +
37629 * var wrapped = _([1, 2]); +
37630 * +
37631 * wrapped.next(); +
37632 * // => { 'done': false, 'value': 1 } +
37633 * +
37634 * wrapped.next(); +
37635 * // => { 'done': false, 'value': 2 } +
37636 * +
37637 * wrapped.next(); +
37638 * // => { 'done': true, 'value': undefined } +
37639 */ +
37640 function wrapperNext() { +
37641 if (this.__values__ === undefined) { +
37642 this.__values__ = toArray(this.value()); +
37643 } +
37644 var done = this.__index__ >= this.__values__.length, +
37645 value = done ? undefined : this.__values__[this.__index__++]; +
37646 +
37647 return { 'done': done, 'value': value }; +
37648 } +
37649 +
37650 /** +
37651 * Enables the wrapper to be iterable. +
37652 * +
37653 * @name Symbol.iterator +
37654 * @memberOf _ +
37655 * @since 4.0.0 +
37656 * @category Seq +
37657 * @returns {Object} Returns the wrapper object. +
37658 * @example +
37659 * +
37660 * var wrapped = _([1, 2]); +
37661 * +
37662 * wrapped[Symbol.iterator]() === wrapped; +
37663 * // => true +
37664 * +
37665 * Array.from(wrapped); +
37666 * // => [1, 2] +
37667 */ +
37668 function wrapperToIterator() { +
37669 return this; +
37670 } +
37671 +
37672 /** +
37673 * Creates a clone of the chain sequence planting `value` as the wrapped value. +
37674 * +
37675 * @name plant +
37676 * @memberOf _ +
37677 * @since 3.2.0 +
37678 * @category Seq +
37679 * @param {*} value The value to plant. +
37680 * @returns {Object} Returns the new `lodash` wrapper instance. +
37681 * @example +
37682 * +
37683 * function square(n) { +
37684 * return n * n; +
37685 * } +
37686 * +
37687 * var wrapped = _([1, 2]).map(square); +
37688 * var other = wrapped.plant([3, 4]); +
37689 * +
37690 * other.value(); +
37691 * // => [9, 16] +
37692 * +
37693 * wrapped.value(); +
37694 * // => [1, 4] +
37695 */ +
37696 function wrapperPlant(value) { +
37697 var result, +
37698 parent = this; +
37699 +
37700 while (parent instanceof baseLodash) { +
37701 var clone = wrapperClone(parent); +
37702 clone.__index__ = 0; +
37703 clone.__values__ = undefined; +
37704 if (result) { +
37705 previous.__wrapped__ = clone; +
37706 } else { +
37707 result = clone; +
37708 } +
37709 var previous = clone; +
37710 parent = parent.__wrapped__; +
37711 } +
37712 previous.__wrapped__ = value; +
37713 return result; +
37714 } +
37715 +
37716 /** +
37717 * This method is the wrapper version of `_.reverse`. +
37718 * +
37719 * **Note:** This method mutates the wrapped array. +
37720 * +
37721 * @name reverse +
37722 * @memberOf _ +
37723 * @since 0.1.0 +
37724 * @category Seq +
37725 * @returns {Object} Returns the new `lodash` wrapper instance. +
37726 * @example +
37727 * +
37728 * var array = [1, 2, 3]; +
37729 * +
37730 * _(array).reverse().value() +
37731 * // => [3, 2, 1] +
37732 * +
37733 * console.log(array); +
37734 * // => [3, 2, 1] +
37735 */ +
37736 function wrapperReverse() { +
37737 var value = this.__wrapped__; +
37738 if (value instanceof LazyWrapper) { +
37739 var wrapped = value; +
37740 if (this.__actions__.length) { +
37741 wrapped = new LazyWrapper(this); +
37742 } +
37743 wrapped = wrapped.reverse(); +
37744 wrapped.__actions__.push({ +
37745 'func': thru, +
37746 'args': [reverse], +
37747 'thisArg': undefined +
37748 }); +
37749 return new LodashWrapper(wrapped, this.__chain__); +
37750 } +
37751 return this.thru(reverse); +
37752 } +
37753 +
37754 /** +
37755 * Executes the chain sequence to resolve the unwrapped value. +
37756 * +
37757 * @name value +
37758 * @memberOf _ +
37759 * @since 0.1.0 +
37760 * @alias toJSON, valueOf +
37761 * @category Seq +
37762 * @returns {*} Returns the resolved unwrapped value. +
37763 * @example +
37764 * +
37765 * _([1, 2, 3]).value(); +
37766 * // => [1, 2, 3] +
37767 */ +
37768 function wrapperValue() { +
37769 return baseWrapperValue(this.__wrapped__, this.__actions__); +
37770 } +
37771 +
37772 /*------------------------------------------------------------------------*/ +
37773 +
37774 /** +
37775 * Creates an object composed of keys generated from the results of running +
37776 * each element of `collection` thru `iteratee`. The corresponding value of +
37777 * each key is the number of times the key was returned by `iteratee`. The +
37778 * iteratee is invoked with one argument: (value). +
37779 * +
37780 * @static +
37781 * @memberOf _ +
37782 * @since 0.5.0 +
37783 * @category Collection +
37784 * @param {Array|Object} collection The collection to iterate over. +
37785 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
37786 * @returns {Object} Returns the composed aggregate object. +
37787 * @example +
37788 * +
37789 * _.countBy([6.1, 4.2, 6.3], Math.floor); +
37790 * // => { '4': 1, '6': 2 } +
37791 * +
37792 * // The `_.property` iteratee shorthand. +
37793 * _.countBy(['one', 'two', 'three'], 'length'); +
37794 * // => { '3': 2, '5': 1 } +
37795 */ +
37796 var countBy = createAggregator(function(result, value, key) { +
37797 if (hasOwnProperty.call(result, key)) { +
37798 ++result[key]; +
37799 } else { +
37800 baseAssignValue(result, key, 1); +
37801 } +
37802 }); +
37803 +
37804 /** +
37805 * Checks if `predicate` returns truthy for **all** elements of `collection`. +
37806 * Iteration is stopped once `predicate` returns falsey. The predicate is +
37807 * invoked with three arguments: (value, index|key, collection). +
37808 * +
37809 * **Note:** This method returns `true` for +
37810 * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because +
37811 * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of +
37812 * elements of empty collections. +
37813 * +
37814 * @static +
37815 * @memberOf _ +
37816 * @since 0.1.0 +
37817 * @category Collection +
37818 * @param {Array|Object} collection The collection to iterate over. +
37819 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
37820 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
37821 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
37822 * else `false`. +
37823 * @example +
37824 * +
37825 * _.every([true, 1, null, 'yes'], Boolean); +
37826 * // => false +
37827 * +
37828 * var users = [ +
37829 * { 'user': 'barney', 'age': 36, 'active': false }, +
37830 * { 'user': 'fred', 'age': 40, 'active': false } +
37831 * ]; +
37832 * +
37833 * // The `_.matches` iteratee shorthand. +
37834 * _.every(users, { 'user': 'barney', 'active': false }); +
37835 * // => false +
37836 * +
37837 * // The `_.matchesProperty` iteratee shorthand. +
37838 * _.every(users, ['active', false]); +
37839 * // => true +
37840 * +
37841 * // The `_.property` iteratee shorthand. +
37842 * _.every(users, 'active'); +
37843 * // => false +
37844 */ +
37845 function every(collection, predicate, guard) { +
37846 var func = isArray(collection) ? arrayEvery : baseEvery; +
37847 if (guard && isIterateeCall(collection, predicate, guard)) { +
37848 predicate = undefined; +
37849 } +
37850 return func(collection, getIteratee(predicate, 3)); +
37851 } +
37852 +
37853 /** +
37854 * Iterates over elements of `collection`, returning an array of all elements +
37855 * `predicate` returns truthy for. The predicate is invoked with three +
37856 * arguments: (value, index|key, collection). +
37857 * +
37858 * **Note:** Unlike `_.remove`, this method returns a new array. +
37859 * +
37860 * @static +
37861 * @memberOf _ +
37862 * @since 0.1.0 +
37863 * @category Collection +
37864 * @param {Array|Object} collection The collection to iterate over. +
37865 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
37866 * @returns {Array} Returns the new filtered array. +
37867 * @see _.reject +
37868 * @example +
37869 * +
37870 * var users = [ +
37871 * { 'user': 'barney', 'age': 36, 'active': true }, +
37872 * { 'user': 'fred', 'age': 40, 'active': false } +
37873 * ]; +
37874 * +
37875 * _.filter(users, function(o) { return !o.active; }); +
37876 * // => objects for ['fred'] +
37877 * +
37878 * // The `_.matches` iteratee shorthand. +
37879 * _.filter(users, { 'age': 36, 'active': true }); +
37880 * // => objects for ['barney'] +
37881 * +
37882 * // The `_.matchesProperty` iteratee shorthand. +
37883 * _.filter(users, ['active', false]); +
37884 * // => objects for ['fred'] +
37885 * +
37886 * // The `_.property` iteratee shorthand. +
37887 * _.filter(users, 'active'); +
37888 * // => objects for ['barney'] +
37889 */ +
37890 function filter(collection, predicate) { +
37891 var func = isArray(collection) ? arrayFilter : baseFilter; +
37892 return func(collection, getIteratee(predicate, 3)); +
37893 } +
37894 +
37895 /** +
37896 * Iterates over elements of `collection`, returning the first element +
37897 * `predicate` returns truthy for. The predicate is invoked with three +
37898 * arguments: (value, index|key, collection). +
37899 * +
37900 * @static +
37901 * @memberOf _ +
37902 * @since 0.1.0 +
37903 * @category Collection +
37904 * @param {Array|Object} collection The collection to inspect. +
37905 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
37906 * @param {number} [fromIndex=0] The index to search from. +
37907 * @returns {*} Returns the matched element, else `undefined`. +
37908 * @example +
37909 * +
37910 * var users = [ +
37911 * { 'user': 'barney', 'age': 36, 'active': true }, +
37912 * { 'user': 'fred', 'age': 40, 'active': false }, +
37913 * { 'user': 'pebbles', 'age': 1, 'active': true } +
37914 * ]; +
37915 * +
37916 * _.find(users, function(o) { return o.age < 40; }); +
37917 * // => object for 'barney' +
37918 * +
37919 * // The `_.matches` iteratee shorthand. +
37920 * _.find(users, { 'age': 1, 'active': true }); +
37921 * // => object for 'pebbles' +
37922 * +
37923 * // The `_.matchesProperty` iteratee shorthand. +
37924 * _.find(users, ['active', false]); +
37925 * // => object for 'fred' +
37926 * +
37927 * // The `_.property` iteratee shorthand. +
37928 * _.find(users, 'active'); +
37929 * // => object for 'barney' +
37930 */ +
37931 var find = createFind(findIndex); +
37932 +
37933 /** +
37934 * This method is like `_.find` except that it iterates over elements of +
37935 * `collection` from right to left. +
37936 * +
37937 * @static +
37938 * @memberOf _ +
37939 * @since 2.0.0 +
37940 * @category Collection +
37941 * @param {Array|Object} collection The collection to inspect. +
37942 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
37943 * @param {number} [fromIndex=collection.length-1] The index to search from. +
37944 * @returns {*} Returns the matched element, else `undefined`. +
37945 * @example +
37946 * +
37947 * _.findLast([1, 2, 3, 4], function(n) { +
37948 * return n % 2 == 1; +
37949 * }); +
37950 * // => 3 +
37951 */ +
37952 var findLast = createFind(findLastIndex); +
37953 +
37954 /** +
37955 * Creates a flattened array of values by running each element in `collection` +
37956 * thru `iteratee` and flattening the mapped results. The iteratee is invoked +
37957 * with three arguments: (value, index|key, collection). +
37958 * +
37959 * @static +
37960 * @memberOf _ +
37961 * @since 4.0.0 +
37962 * @category Collection +
37963 * @param {Array|Object} collection The collection to iterate over. +
37964 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
37965 * @returns {Array} Returns the new flattened array. +
37966 * @example +
37967 * +
37968 * function duplicate(n) { +
37969 * return [n, n]; +
37970 * } +
37971 * +
37972 * _.flatMap([1, 2], duplicate); +
37973 * // => [1, 1, 2, 2] +
37974 */ +
37975 function flatMap(collection, iteratee) { +
37976 return baseFlatten(map(collection, iteratee), 1); +
37977 } +
37978 +
37979 /** +
37980 * This method is like `_.flatMap` except that it recursively flattens the +
37981 * mapped results. +
37982 * +
37983 * @static +
37984 * @memberOf _ +
37985 * @since 4.7.0 +
37986 * @category Collection +
37987 * @param {Array|Object} collection The collection to iterate over. +
37988 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
37989 * @returns {Array} Returns the new flattened array. +
37990 * @example +
37991 * +
37992 * function duplicate(n) { +
37993 * return [[[n, n]]]; +
37994 * } +
37995 * +
37996 * _.flatMapDeep([1, 2], duplicate); +
37997 * // => [1, 1, 2, 2] +
37998 */ +
37999 function flatMapDeep(collection, iteratee) { +
38000 return baseFlatten(map(collection, iteratee), INFINITY); +
38001 } +
38002 +
38003 /** +
38004 * This method is like `_.flatMap` except that it recursively flattens the +
38005 * mapped results up to `depth` times. +
38006 * +
38007 * @static +
38008 * @memberOf _ +
38009 * @since 4.7.0 +
38010 * @category Collection +
38011 * @param {Array|Object} collection The collection to iterate over. +
38012 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
38013 * @param {number} [depth=1] The maximum recursion depth. +
38014 * @returns {Array} Returns the new flattened array. +
38015 * @example +
38016 * +
38017 * function duplicate(n) { +
38018 * return [[[n, n]]]; +
38019 * } +
38020 * +
38021 * _.flatMapDepth([1, 2], duplicate, 2); +
38022 * // => [[1, 1], [2, 2]] +
38023 */ +
38024 function flatMapDepth(collection, iteratee, depth) { +
38025 depth = depth === undefined ? 1 : toInteger(depth); +
38026 return baseFlatten(map(collection, iteratee), depth); +
38027 } +
38028 +
38029 /** +
38030 * Iterates over elements of `collection` and invokes `iteratee` for each element. +
38031 * The iteratee is invoked with three arguments: (value, index|key, collection). +
38032 * Iteratee functions may exit iteration early by explicitly returning `false`. +
38033 * +
38034 * **Note:** As with other "Collections" methods, objects with a "length" +
38035 * property are iterated like arrays. To avoid this behavior use `_.forIn` +
38036 * or `_.forOwn` for object iteration. +
38037 * +
38038 * @static +
38039 * @memberOf _ +
38040 * @since 0.1.0 +
38041 * @alias each +
38042 * @category Collection +
38043 * @param {Array|Object} collection The collection to iterate over. +
38044 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
38045 * @returns {Array|Object} Returns `collection`. +
38046 * @see _.forEachRight +
38047 * @example +
38048 * +
38049 * _.forEach([1, 2], function(value) { +
38050 * console.log(value); +
38051 * }); +
38052 * // => Logs `1` then `2`. +
38053 * +
38054 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { +
38055 * console.log(key); +
38056 * }); +
38057 * // => Logs 'a' then 'b' (iteration order is not guaranteed). +
38058 */ +
38059 function forEach(collection, iteratee) { +
38060 var func = isArray(collection) ? arrayEach : baseEach; +
38061 return func(collection, getIteratee(iteratee, 3)); +
38062 } +
38063 +
38064 /** +
38065 * This method is like `_.forEach` except that it iterates over elements of +
38066 * `collection` from right to left. +
38067 * +
38068 * @static +
38069 * @memberOf _ +
38070 * @since 2.0.0 +
38071 * @alias eachRight +
38072 * @category Collection +
38073 * @param {Array|Object} collection The collection to iterate over. +
38074 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
38075 * @returns {Array|Object} Returns `collection`. +
38076 * @see _.forEach +
38077 * @example +
38078 * +
38079 * _.forEachRight([1, 2], function(value) { +
38080 * console.log(value); +
38081 * }); +
38082 * // => Logs `2` then `1`. +
38083 */ +
38084 function forEachRight(collection, iteratee) { +
38085 var func = isArray(collection) ? arrayEachRight : baseEachRight; +
38086 return func(collection, getIteratee(iteratee, 3)); +
38087 } +
38088 +
38089 /** +
38090 * Creates an object composed of keys generated from the results of running +
38091 * each element of `collection` thru `iteratee`. The order of grouped values +
38092 * is determined by the order they occur in `collection`. The corresponding +
38093 * value of each key is an array of elements responsible for generating the +
38094 * key. The iteratee is invoked with one argument: (value). +
38095 * +
38096 * @static +
38097 * @memberOf _ +
38098 * @since 0.1.0 +
38099 * @category Collection +
38100 * @param {Array|Object} collection The collection to iterate over. +
38101 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
38102 * @returns {Object} Returns the composed aggregate object. +
38103 * @example +
38104 * +
38105 * _.groupBy([6.1, 4.2, 6.3], Math.floor); +
38106 * // => { '4': [4.2], '6': [6.1, 6.3] } +
38107 * +
38108 * // The `_.property` iteratee shorthand. +
38109 * _.groupBy(['one', 'two', 'three'], 'length'); +
38110 * // => { '3': ['one', 'two'], '5': ['three'] } +
38111 */ +
38112 var groupBy = createAggregator(function(result, value, key) { +
38113 if (hasOwnProperty.call(result, key)) { +
38114 result[key].push(value); +
38115 } else { +
38116 baseAssignValue(result, key, [value]); +
38117 } +
38118 }); +
38119 +
38120 /** +
38121 * Checks if `value` is in `collection`. If `collection` is a string, it's +
38122 * checked for a substring of `value`, otherwise +
38123 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
38124 * is used for equality comparisons. If `fromIndex` is negative, it's used as +
38125 * the offset from the end of `collection`. +
38126 * +
38127 * @static +
38128 * @memberOf _ +
38129 * @since 0.1.0 +
38130 * @category Collection +
38131 * @param {Array|Object|string} collection The collection to inspect. +
38132 * @param {*} value The value to search for. +
38133 * @param {number} [fromIndex=0] The index to search from. +
38134 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +
38135 * @returns {boolean} Returns `true` if `value` is found, else `false`. +
38136 * @example +
38137 * +
38138 * _.includes([1, 2, 3], 1); +
38139 * // => true +
38140 * +
38141 * _.includes([1, 2, 3], 1, 2); +
38142 * // => false +
38143 * +
38144 * _.includes({ 'a': 1, 'b': 2 }, 1); +
38145 * // => true +
38146 * +
38147 * _.includes('abcd', 'bc'); +
38148 * // => true +
38149 */ +
38150 function includes(collection, value, fromIndex, guard) { +
38151 collection = isArrayLike(collection) ? collection : values(collection); +
38152 fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; +
38153 +
38154 var length = collection.length; +
38155 if (fromIndex < 0) { +
38156 fromIndex = nativeMax(length + fromIndex, 0); +
38157 } +
38158 return isString(collection) +
38159 ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) +
38160 : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +
38161 } +
38162 +
38163 /** +
38164 * Invokes the method at `path` of each element in `collection`, returning +
38165 * an array of the results of each invoked method. Any additional arguments +
38166 * are provided to each invoked method. If `path` is a function, it's invoked +
38167 * for, and `this` bound to, each element in `collection`. +
38168 * +
38169 * @static +
38170 * @memberOf _ +
38171 * @since 4.0.0 +
38172 * @category Collection +
38173 * @param {Array|Object} collection The collection to iterate over. +
38174 * @param {Array|Function|string} path The path of the method to invoke or +
38175 * the function invoked per iteration. +
38176 * @param {...*} [args] The arguments to invoke each method with. +
38177 * @returns {Array} Returns the array of results. +
38178 * @example +
38179 * +
38180 * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); +
38181 * // => [[1, 5, 7], [1, 2, 3]] +
38182 * +
38183 * _.invokeMap([123, 456], String.prototype.split, ''); +
38184 * // => [['1', '2', '3'], ['4', '5', '6']] +
38185 */ +
38186 var invokeMap = baseRest(function(collection, path, args) { +
38187 var index = -1, +
38188 isFunc = typeof path == 'function', +
38189 result = isArrayLike(collection) ? Array(collection.length) : []; +
38190 +
38191 baseEach(collection, function(value) { +
38192 result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); +
38193 }); +
38194 return result; +
38195 }); +
38196 +
38197 /** +
38198 * Creates an object composed of keys generated from the results of running +
38199 * each element of `collection` thru `iteratee`. The corresponding value of +
38200 * each key is the last element responsible for generating the key. The +
38201 * iteratee is invoked with one argument: (value). +
38202 * +
38203 * @static +
38204 * @memberOf _ +
38205 * @since 4.0.0 +
38206 * @category Collection +
38207 * @param {Array|Object} collection The collection to iterate over. +
38208 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
38209 * @returns {Object} Returns the composed aggregate object. +
38210 * @example +
38211 * +
38212 * var array = [ +
38213 * { 'dir': 'left', 'code': 97 }, +
38214 * { 'dir': 'right', 'code': 100 } +
38215 * ]; +
38216 * +
38217 * _.keyBy(array, function(o) { +
38218 * return String.fromCharCode(o.code); +
38219 * }); +
38220 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } +
38221 * +
38222 * _.keyBy(array, 'dir'); +
38223 * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } +
38224 */ +
38225 var keyBy = createAggregator(function(result, value, key) { +
38226 baseAssignValue(result, key, value); +
38227 }); +
38228 +
38229 /** +
38230 * Creates an array of values by running each element in `collection` thru +
38231 * `iteratee`. The iteratee is invoked with three arguments: +
38232 * (value, index|key, collection). +
38233 * +
38234 * Many lodash methods are guarded to work as iteratees for methods like +
38235 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. +
38236 * +
38237 * The guarded methods are: +
38238 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, +
38239 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, +
38240 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, +
38241 * `template`, `trim`, `trimEnd`, `trimStart`, and `words` +
38242 * +
38243 * @static +
38244 * @memberOf _ +
38245 * @since 0.1.0 +
38246 * @category Collection +
38247 * @param {Array|Object} collection The collection to iterate over. +
38248 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
38249 * @returns {Array} Returns the new mapped array. +
38250 * @example +
38251 * +
38252 * function square(n) { +
38253 * return n * n; +
38254 * } +
38255 * +
38256 * _.map([4, 8], square); +
38257 * // => [16, 64] +
38258 * +
38259 * _.map({ 'a': 4, 'b': 8 }, square); +
38260 * // => [16, 64] (iteration order is not guaranteed) +
38261 * +
38262 * var users = [ +
38263 * { 'user': 'barney' }, +
38264 * { 'user': 'fred' } +
38265 * ]; +
38266 * +
38267 * // The `_.property` iteratee shorthand. +
38268 * _.map(users, 'user'); +
38269 * // => ['barney', 'fred'] +
38270 */ +
38271 function map(collection, iteratee) { +
38272 var func = isArray(collection) ? arrayMap : baseMap; +
38273 return func(collection, getIteratee(iteratee, 3)); +
38274 } +
38275 +
38276 /** +
38277 * This method is like `_.sortBy` except that it allows specifying the sort +
38278 * orders of the iteratees to sort by. If `orders` is unspecified, all values +
38279 * are sorted in ascending order. Otherwise, specify an order of "desc" for +
38280 * descending or "asc" for ascending sort order of corresponding values. +
38281 * +
38282 * @static +
38283 * @memberOf _ +
38284 * @since 4.0.0 +
38285 * @category Collection +
38286 * @param {Array|Object} collection The collection to iterate over. +
38287 * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] +
38288 * The iteratees to sort by. +
38289 * @param {string[]} [orders] The sort orders of `iteratees`. +
38290 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +
38291 * @returns {Array} Returns the new sorted array. +
38292 * @example +
38293 * +
38294 * var users = [ +
38295 * { 'user': 'fred', 'age': 48 }, +
38296 * { 'user': 'barney', 'age': 34 }, +
38297 * { 'user': 'fred', 'age': 40 }, +
38298 * { 'user': 'barney', 'age': 36 } +
38299 * ]; +
38300 * +
38301 * // Sort by `user` in ascending order and by `age` in descending order. +
38302 * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); +
38303 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] +
38304 */ +
38305 function orderBy(collection, iteratees, orders, guard) { +
38306 if (collection == null) { +
38307 return []; +
38308 } +
38309 if (!isArray(iteratees)) { +
38310 iteratees = iteratees == null ? [] : [iteratees]; +
38311 } +
38312 orders = guard ? undefined : orders; +
38313 if (!isArray(orders)) { +
38314 orders = orders == null ? [] : [orders]; +
38315 } +
38316 return baseOrderBy(collection, iteratees, orders); +
38317 } +
38318 +
38319 /** +
38320 * Creates an array of elements split into two groups, the first of which +
38321 * contains elements `predicate` returns truthy for, the second of which +
38322 * contains elements `predicate` returns falsey for. The predicate is +
38323 * invoked with one argument: (value). +
38324 * +
38325 * @static +
38326 * @memberOf _ +
38327 * @since 3.0.0 +
38328 * @category Collection +
38329 * @param {Array|Object} collection The collection to iterate over. +
38330 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
38331 * @returns {Array} Returns the array of grouped elements. +
38332 * @example +
38333 * +
38334 * var users = [ +
38335 * { 'user': 'barney', 'age': 36, 'active': false }, +
38336 * { 'user': 'fred', 'age': 40, 'active': true }, +
38337 * { 'user': 'pebbles', 'age': 1, 'active': false } +
38338 * ]; +
38339 * +
38340 * _.partition(users, function(o) { return o.active; }); +
38341 * // => objects for [['fred'], ['barney', 'pebbles']] +
38342 * +
38343 * // The `_.matches` iteratee shorthand. +
38344 * _.partition(users, { 'age': 1, 'active': false }); +
38345 * // => objects for [['pebbles'], ['barney', 'fred']] +
38346 * +
38347 * // The `_.matchesProperty` iteratee shorthand. +
38348 * _.partition(users, ['active', false]); +
38349 * // => objects for [['barney', 'pebbles'], ['fred']] +
38350 * +
38351 * // The `_.property` iteratee shorthand. +
38352 * _.partition(users, 'active'); +
38353 * // => objects for [['fred'], ['barney', 'pebbles']] +
38354 */ +
38355 var partition = createAggregator(function(result, value, key) { +
38356 result[key ? 0 : 1].push(value); +
38357 }, function() { return [[], []]; }); +
38358 +
38359 /** +
38360 * Reduces `collection` to a value which is the accumulated result of running +
38361 * each element in `collection` thru `iteratee`, where each successive +
38362 * invocation is supplied the return value of the previous. If `accumulator` +
38363 * is not given, the first element of `collection` is used as the initial +
38364 * value. The iteratee is invoked with four arguments: +
38365 * (accumulator, value, index|key, collection). +
38366 * +
38367 * Many lodash methods are guarded to work as iteratees for methods like +
38368 * `_.reduce`, `_.reduceRight`, and `_.transform`. +
38369 * +
38370 * The guarded methods are: +
38371 * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, +
38372 * and `sortBy` +
38373 * +
38374 * @static +
38375 * @memberOf _ +
38376 * @since 0.1.0 +
38377 * @category Collection +
38378 * @param {Array|Object} collection The collection to iterate over. +
38379 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
38380 * @param {*} [accumulator] The initial value. +
38381 * @returns {*} Returns the accumulated value. +
38382 * @see _.reduceRight +
38383 * @example +
38384 * +
38385 * _.reduce([1, 2], function(sum, n) { +
38386 * return sum + n; +
38387 * }, 0); +
38388 * // => 3 +
38389 * +
38390 * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +
38391 * (result[value] || (result[value] = [])).push(key); +
38392 * return result; +
38393 * }, {}); +
38394 * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) +
38395 */ +
38396 function reduce(collection, iteratee, accumulator) { +
38397 var func = isArray(collection) ? arrayReduce : baseReduce, +
38398 initAccum = arguments.length < 3; +
38399 +
38400 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); +
38401 } +
38402 +
38403 /** +
38404 * This method is like `_.reduce` except that it iterates over elements of +
38405 * `collection` from right to left. +
38406 * +
38407 * @static +
38408 * @memberOf _ +
38409 * @since 0.1.0 +
38410 * @category Collection +
38411 * @param {Array|Object} collection The collection to iterate over. +
38412 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
38413 * @param {*} [accumulator] The initial value. +
38414 * @returns {*} Returns the accumulated value. +
38415 * @see _.reduce +
38416 * @example +
38417 * +
38418 * var array = [[0, 1], [2, 3], [4, 5]]; +
38419 * +
38420 * _.reduceRight(array, function(flattened, other) { +
38421 * return flattened.concat(other); +
38422 * }, []); +
38423 * // => [4, 5, 2, 3, 0, 1] +
38424 */ +
38425 function reduceRight(collection, iteratee, accumulator) { +
38426 var func = isArray(collection) ? arrayReduceRight : baseReduce, +
38427 initAccum = arguments.length < 3; +
38428 +
38429 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); +
38430 } +
38431 +
38432 /** +
38433 * The opposite of `_.filter`; this method returns the elements of `collection` +
38434 * that `predicate` does **not** return truthy for. +
38435 * +
38436 * @static +
38437 * @memberOf _ +
38438 * @since 0.1.0 +
38439 * @category Collection +
38440 * @param {Array|Object} collection The collection to iterate over. +
38441 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
38442 * @returns {Array} Returns the new filtered array. +
38443 * @see _.filter +
38444 * @example +
38445 * +
38446 * var users = [ +
38447 * { 'user': 'barney', 'age': 36, 'active': false }, +
38448 * { 'user': 'fred', 'age': 40, 'active': true } +
38449 * ]; +
38450 * +
38451 * _.reject(users, function(o) { return !o.active; }); +
38452 * // => objects for ['fred'] +
38453 * +
38454 * // The `_.matches` iteratee shorthand. +
38455 * _.reject(users, { 'age': 40, 'active': true }); +
38456 * // => objects for ['barney'] +
38457 * +
38458 * // The `_.matchesProperty` iteratee shorthand. +
38459 * _.reject(users, ['active', false]); +
38460 * // => objects for ['fred'] +
38461 * +
38462 * // The `_.property` iteratee shorthand. +
38463 * _.reject(users, 'active'); +
38464 * // => objects for ['barney'] +
38465 */ +
38466 function reject(collection, predicate) { +
38467 var func = isArray(collection) ? arrayFilter : baseFilter; +
38468 return func(collection, negate(getIteratee(predicate, 3))); +
38469 } +
38470 +
38471 /** +
38472 * Gets a random element from `collection`. +
38473 * +
38474 * @static +
38475 * @memberOf _ +
38476 * @since 2.0.0 +
38477 * @category Collection +
38478 * @param {Array|Object} collection The collection to sample. +
38479 * @returns {*} Returns the random element. +
38480 * @example +
38481 * +
38482 * _.sample([1, 2, 3, 4]); +
38483 * // => 2 +
38484 */ +
38485 function sample(collection) { +
38486 var func = isArray(collection) ? arraySample : baseSample; +
38487 return func(collection); +
38488 } +
38489 +
38490 /** +
38491 * Gets `n` random elements at unique keys from `collection` up to the +
38492 * size of `collection`. +
38493 * +
38494 * @static +
38495 * @memberOf _ +
38496 * @since 4.0.0 +
38497 * @category Collection +
38498 * @param {Array|Object} collection The collection to sample. +
38499 * @param {number} [n=1] The number of elements to sample. +
38500 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
38501 * @returns {Array} Returns the random elements. +
38502 * @example +
38503 * +
38504 * _.sampleSize([1, 2, 3], 2); +
38505 * // => [3, 1] +
38506 * +
38507 * _.sampleSize([1, 2, 3], 4); +
38508 * // => [2, 3, 1] +
38509 */ +
38510 function sampleSize(collection, n, guard) { +
38511 if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { +
38512 n = 1; +
38513 } else { +
38514 n = toInteger(n); +
38515 } +
38516 var func = isArray(collection) ? arraySampleSize : baseSampleSize; +
38517 return func(collection, n); +
38518 } +
38519 +
38520 /** +
38521 * Creates an array of shuffled values, using a version of the +
38522 * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). +
38523 * +
38524 * @static +
38525 * @memberOf _ +
38526 * @since 0.1.0 +
38527 * @category Collection +
38528 * @param {Array|Object} collection The collection to shuffle. +
38529 * @returns {Array} Returns the new shuffled array. +
38530 * @example +
38531 * +
38532 * _.shuffle([1, 2, 3, 4]); +
38533 * // => [4, 1, 3, 2] +
38534 */ +
38535 function shuffle(collection) { +
38536 var func = isArray(collection) ? arrayShuffle : baseShuffle; +
38537 return func(collection); +
38538 } +
38539 +
38540 /** +
38541 * Gets the size of `collection` by returning its length for array-like +
38542 * values or the number of own enumerable string keyed properties for objects. +
38543 * +
38544 * @static +
38545 * @memberOf _ +
38546 * @since 0.1.0 +
38547 * @category Collection +
38548 * @param {Array|Object|string} collection The collection to inspect. +
38549 * @returns {number} Returns the collection size. +
38550 * @example +
38551 * +
38552 * _.size([1, 2, 3]); +
38553 * // => 3 +
38554 * +
38555 * _.size({ 'a': 1, 'b': 2 }); +
38556 * // => 2 +
38557 * +
38558 * _.size('pebbles'); +
38559 * // => 7 +
38560 */ +
38561 function size(collection) { +
38562 if (collection == null) { +
38563 return 0; +
38564 } +
38565 if (isArrayLike(collection)) { +
38566 return isString(collection) ? stringSize(collection) : collection.length; +
38567 } +
38568 var tag = getTag(collection); +
38569 if (tag == mapTag || tag == setTag) { +
38570 return collection.size; +
38571 } +
38572 return baseKeys(collection).length; +
38573 } +
38574 +
38575 /** +
38576 * Checks if `predicate` returns truthy for **any** element of `collection`. +
38577 * Iteration is stopped once `predicate` returns truthy. The predicate is +
38578 * invoked with three arguments: (value, index|key, collection). +
38579 * +
38580 * @static +
38581 * @memberOf _ +
38582 * @since 0.1.0 +
38583 * @category Collection +
38584 * @param {Array|Object} collection The collection to iterate over. +
38585 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
38586 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
38587 * @returns {boolean} Returns `true` if any element passes the predicate check, +
38588 * else `false`. +
38589 * @example +
38590 * +
38591 * _.some([null, 0, 'yes', false], Boolean); +
38592 * // => true +
38593 * +
38594 * var users = [ +
38595 * { 'user': 'barney', 'active': true }, +
38596 * { 'user': 'fred', 'active': false } +
38597 * ]; +
38598 * +
38599 * // The `_.matches` iteratee shorthand. +
38600 * _.some(users, { 'user': 'barney', 'active': false }); +
38601 * // => false +
38602 * +
38603 * // The `_.matchesProperty` iteratee shorthand. +
38604 * _.some(users, ['active', false]); +
38605 * // => true +
38606 * +
38607 * // The `_.property` iteratee shorthand. +
38608 * _.some(users, 'active'); +
38609 * // => true +
38610 */ +
38611 function some(collection, predicate, guard) { +
38612 var func = isArray(collection) ? arraySome : baseSome; +
38613 if (guard && isIterateeCall(collection, predicate, guard)) { +
38614 predicate = undefined; +
38615 } +
38616 return func(collection, getIteratee(predicate, 3)); +
38617 } +
38618 +
38619 /** +
38620 * Creates an array of elements, sorted in ascending order by the results of +
38621 * running each element in a collection thru each iteratee. This method +
38622 * performs a stable sort, that is, it preserves the original sort order of +
38623 * equal elements. The iteratees are invoked with one argument: (value). +
38624 * +
38625 * @static +
38626 * @memberOf _ +
38627 * @since 0.1.0 +
38628 * @category Collection +
38629 * @param {Array|Object} collection The collection to iterate over. +
38630 * @param {...(Function|Function[])} [iteratees=[_.identity]] +
38631 * The iteratees to sort by. +
38632 * @returns {Array} Returns the new sorted array. +
38633 * @example +
38634 * +
38635 * var users = [ +
38636 * { 'user': 'fred', 'age': 48 }, +
38637 * { 'user': 'barney', 'age': 36 }, +
38638 * { 'user': 'fred', 'age': 40 }, +
38639 * { 'user': 'barney', 'age': 34 } +
38640 * ]; +
38641 * +
38642 * _.sortBy(users, [function(o) { return o.user; }]); +
38643 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] +
38644 * +
38645 * _.sortBy(users, ['user', 'age']); +
38646 * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] +
38647 */ +
38648 var sortBy = baseRest(function(collection, iteratees) { +
38649 if (collection == null) { +
38650 return []; +
38651 } +
38652 var length = iteratees.length; +
38653 if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { +
38654 iteratees = []; +
38655 } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { +
38656 iteratees = [iteratees[0]]; +
38657 } +
38658 return baseOrderBy(collection, baseFlatten(iteratees, 1), []); +
38659 }); +
38660 +
38661 /*------------------------------------------------------------------------*/ +
38662 +
38663 /** +
38664 * Gets the timestamp of the number of milliseconds that have elapsed since +
38665 * the Unix epoch (1 January 1970 00:00:00 UTC). +
38666 * +
38667 * @static +
38668 * @memberOf _ +
38669 * @since 2.4.0 +
38670 * @category Date +
38671 * @returns {number} Returns the timestamp. +
38672 * @example +
38673 * +
38674 * _.defer(function(stamp) { +
38675 * console.log(_.now() - stamp); +
38676 * }, _.now()); +
38677 * // => Logs the number of milliseconds it took for the deferred invocation. +
38678 */ +
38679 var now = ctxNow || function() { +
38680 return root.Date.now(); +
38681 }; +
38682 +
38683 /*------------------------------------------------------------------------*/ +
38684 +
38685 /** +
38686 * The opposite of `_.before`; this method creates a function that invokes +
38687 * `func` once it's called `n` or more times. +
38688 * +
38689 * @static +
38690 * @memberOf _ +
38691 * @since 0.1.0 +
38692 * @category Function +
38693 * @param {number} n The number of calls before `func` is invoked. +
38694 * @param {Function} func The function to restrict. +
38695 * @returns {Function} Returns the new restricted function. +
38696 * @example +
38697 * +
38698 * var saves = ['profile', 'settings']; +
38699 * +
38700 * var done = _.after(saves.length, function() { +
38701 * console.log('done saving!'); +
38702 * }); +
38703 * +
38704 * _.forEach(saves, function(type) { +
38705 * asyncSave({ 'type': type, 'complete': done }); +
38706 * }); +
38707 * // => Logs 'done saving!' after the two async saves have completed. +
38708 */ +
38709 function after(n, func) { +
38710 if (typeof func != 'function') { +
38711 throw new TypeError(FUNC_ERROR_TEXT); +
38712 } +
38713 n = toInteger(n); +
38714 return function() { +
38715 if (--n < 1) { +
38716 return func.apply(this, arguments); +
38717 } +
38718 }; +
38719 } +
38720 +
38721 /** +
38722 * Creates a function that invokes `func`, with up to `n` arguments, +
38723 * ignoring any additional arguments. +
38724 * +
38725 * @static +
38726 * @memberOf _ +
38727 * @since 3.0.0 +
38728 * @category Function +
38729 * @param {Function} func The function to cap arguments for. +
38730 * @param {number} [n=func.length] The arity cap. +
38731 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
38732 * @returns {Function} Returns the new capped function. +
38733 * @example +
38734 * +
38735 * _.map(['6', '8', '10'], _.ary(parseInt, 1)); +
38736 * // => [6, 8, 10] +
38737 */ +
38738 function ary(func, n, guard) { +
38739 n = guard ? undefined : n; +
38740 n = (func && n == null) ? func.length : n; +
38741 return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); +
38742 } +
38743 +
38744 /** +
38745 * Creates a function that invokes `func`, with the `this` binding and arguments +
38746 * of the created function, while it's called less than `n` times. Subsequent +
38747 * calls to the created function return the result of the last `func` invocation. +
38748 * +
38749 * @static +
38750 * @memberOf _ +
38751 * @since 3.0.0 +
38752 * @category Function +
38753 * @param {number} n The number of calls at which `func` is no longer invoked. +
38754 * @param {Function} func The function to restrict. +
38755 * @returns {Function} Returns the new restricted function. +
38756 * @example +
38757 * +
38758 * jQuery(element).on('click', _.before(5, addContactToList)); +
38759 * // => Allows adding up to 4 contacts to the list. +
38760 */ +
38761 function before(n, func) { +
38762 var result; +
38763 if (typeof func != 'function') { +
38764 throw new TypeError(FUNC_ERROR_TEXT); +
38765 } +
38766 n = toInteger(n); +
38767 return function() { +
38768 if (--n > 0) { +
38769 result = func.apply(this, arguments); +
38770 } +
38771 if (n <= 1) { +
38772 func = undefined; +
38773 } +
38774 return result; +
38775 }; +
38776 } +
38777 +
38778 /** +
38779 * Creates a function that invokes `func` with the `this` binding of `thisArg` +
38780 * and `partials` prepended to the arguments it receives. +
38781 * +
38782 * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, +
38783 * may be used as a placeholder for partially applied arguments. +
38784 * +
38785 * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" +
38786 * property of bound functions. +
38787 * +
38788 * @static +
38789 * @memberOf _ +
38790 * @since 0.1.0 +
38791 * @category Function +
38792 * @param {Function} func The function to bind. +
38793 * @param {*} thisArg The `this` binding of `func`. +
38794 * @param {...*} [partials] The arguments to be partially applied. +
38795 * @returns {Function} Returns the new bound function. +
38796 * @example +
38797 * +
38798 * function greet(greeting, punctuation) { +
38799 * return greeting + ' ' + this.user + punctuation; +
38800 * } +
38801 * +
38802 * var object = { 'user': 'fred' }; +
38803 * +
38804 * var bound = _.bind(greet, object, 'hi'); +
38805 * bound('!'); +
38806 * // => 'hi fred!' +
38807 * +
38808 * // Bound with placeholders. +
38809 * var bound = _.bind(greet, object, _, '!'); +
38810 * bound('hi'); +
38811 * // => 'hi fred!' +
38812 */ +
38813 var bind = baseRest(function(func, thisArg, partials) { +
38814 var bitmask = WRAP_BIND_FLAG; +
38815 if (partials.length) { +
38816 var holders = replaceHolders(partials, getHolder(bind)); +
38817 bitmask |= WRAP_PARTIAL_FLAG; +
38818 } +
38819 return createWrap(func, bitmask, thisArg, partials, holders); +
38820 }); +
38821 +
38822 /** +
38823 * Creates a function that invokes the method at `object[key]` with `partials` +
38824 * prepended to the arguments it receives. +
38825 * +
38826 * This method differs from `_.bind` by allowing bound functions to reference +
38827 * methods that may be redefined or don't yet exist. See +
38828 * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) +
38829 * for more details. +
38830 * +
38831 * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic +
38832 * builds, may be used as a placeholder for partially applied arguments. +
38833 * +
38834 * @static +
38835 * @memberOf _ +
38836 * @since 0.10.0 +
38837 * @category Function +
38838 * @param {Object} object The object to invoke the method on. +
38839 * @param {string} key The key of the method. +
38840 * @param {...*} [partials] The arguments to be partially applied. +
38841 * @returns {Function} Returns the new bound function. +
38842 * @example +
38843 * +
38844 * var object = { +
38845 * 'user': 'fred', +
38846 * 'greet': function(greeting, punctuation) { +
38847 * return greeting + ' ' + this.user + punctuation; +
38848 * } +
38849 * }; +
38850 * +
38851 * var bound = _.bindKey(object, 'greet', 'hi'); +
38852 * bound('!'); +
38853 * // => 'hi fred!' +
38854 * +
38855 * object.greet = function(greeting, punctuation) { +
38856 * return greeting + 'ya ' + this.user + punctuation; +
38857 * }; +
38858 * +
38859 * bound('!'); +
38860 * // => 'hiya fred!' +
38861 * +
38862 * // Bound with placeholders. +
38863 * var bound = _.bindKey(object, 'greet', _, '!'); +
38864 * bound('hi'); +
38865 * // => 'hiya fred!' +
38866 */ +
38867 var bindKey = baseRest(function(object, key, partials) { +
38868 var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; +
38869 if (partials.length) { +
38870 var holders = replaceHolders(partials, getHolder(bindKey)); +
38871 bitmask |= WRAP_PARTIAL_FLAG; +
38872 } +
38873 return createWrap(key, bitmask, object, partials, holders); +
38874 }); +
38875 +
38876 /** +
38877 * Creates a function that accepts arguments of `func` and either invokes +
38878 * `func` returning its result, if at least `arity` number of arguments have +
38879 * been provided, or returns a function that accepts the remaining `func` +
38880 * arguments, and so on. The arity of `func` may be specified if `func.length` +
38881 * is not sufficient. +
38882 * +
38883 * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, +
38884 * may be used as a placeholder for provided arguments. +
38885 * +
38886 * **Note:** This method doesn't set the "length" property of curried functions. +
38887 * +
38888 * @static +
38889 * @memberOf _ +
38890 * @since 2.0.0 +
38891 * @category Function +
38892 * @param {Function} func The function to curry. +
38893 * @param {number} [arity=func.length] The arity of `func`. +
38894 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
38895 * @returns {Function} Returns the new curried function. +
38896 * @example +
38897 * +
38898 * var abc = function(a, b, c) { +
38899 * return [a, b, c]; +
38900 * }; +
38901 * +
38902 * var curried = _.curry(abc); +
38903 * +
38904 * curried(1)(2)(3); +
38905 * // => [1, 2, 3] +
38906 * +
38907 * curried(1, 2)(3); +
38908 * // => [1, 2, 3] +
38909 * +
38910 * curried(1, 2, 3); +
38911 * // => [1, 2, 3] +
38912 * +
38913 * // Curried with placeholders. +
38914 * curried(1)(_, 3)(2); +
38915 * // => [1, 2, 3] +
38916 */ +
38917 function curry(func, arity, guard) { +
38918 arity = guard ? undefined : arity; +
38919 var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +
38920 result.placeholder = curry.placeholder; +
38921 return result; +
38922 } +
38923 +
38924 /** +
38925 * This method is like `_.curry` except that arguments are applied to `func` +
38926 * in the manner of `_.partialRight` instead of `_.partial`. +
38927 * +
38928 * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic +
38929 * builds, may be used as a placeholder for provided arguments. +
38930 * +
38931 * **Note:** This method doesn't set the "length" property of curried functions. +
38932 * +
38933 * @static +
38934 * @memberOf _ +
38935 * @since 3.0.0 +
38936 * @category Function +
38937 * @param {Function} func The function to curry. +
38938 * @param {number} [arity=func.length] The arity of `func`. +
38939 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
38940 * @returns {Function} Returns the new curried function. +
38941 * @example +
38942 * +
38943 * var abc = function(a, b, c) { +
38944 * return [a, b, c]; +
38945 * }; +
38946 * +
38947 * var curried = _.curryRight(abc); +
38948 * +
38949 * curried(3)(2)(1); +
38950 * // => [1, 2, 3] +
38951 * +
38952 * curried(2, 3)(1); +
38953 * // => [1, 2, 3] +
38954 * +
38955 * curried(1, 2, 3); +
38956 * // => [1, 2, 3] +
38957 * +
38958 * // Curried with placeholders. +
38959 * curried(3)(1, _)(2); +
38960 * // => [1, 2, 3] +
38961 */ +
38962 function curryRight(func, arity, guard) { +
38963 arity = guard ? undefined : arity; +
38964 var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +
38965 result.placeholder = curryRight.placeholder; +
38966 return result; +
38967 } +
38968 +
38969 /** +
38970 * Creates a debounced function that delays invoking `func` until after `wait` +
38971 * milliseconds have elapsed since the last time the debounced function was +
38972 * invoked. The debounced function comes with a `cancel` method to cancel +
38973 * delayed `func` invocations and a `flush` method to immediately invoke them. +
38974 * Provide `options` to indicate whether `func` should be invoked on the +
38975 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked +
38976 * with the last arguments provided to the debounced function. Subsequent +
38977 * calls to the debounced function return the result of the last `func` +
38978 * invocation. +
38979 * +
38980 * **Note:** If `leading` and `trailing` options are `true`, `func` is +
38981 * invoked on the trailing edge of the timeout only if the debounced function +
38982 * is invoked more than once during the `wait` timeout. +
38983 * +
38984 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +
38985 * until to the next tick, similar to `setTimeout` with a timeout of `0`. +
38986 * +
38987 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +
38988 * for details over the differences between `_.debounce` and `_.throttle`. +
38989 * +
38990 * @static +
38991 * @memberOf _ +
38992 * @since 0.1.0 +
38993 * @category Function +
38994 * @param {Function} func The function to debounce. +
38995 * @param {number} [wait=0] The number of milliseconds to delay. +
38996 * @param {Object} [options={}] The options object. +
38997 * @param {boolean} [options.leading=false] +
38998 * Specify invoking on the leading edge of the timeout. +
38999 * @param {number} [options.maxWait] +
39000 * The maximum time `func` is allowed to be delayed before it's invoked. +
39001 * @param {boolean} [options.trailing=true] +
39002 * Specify invoking on the trailing edge of the timeout. +
39003 * @returns {Function} Returns the new debounced function. +
39004 * @example +
39005 * +
39006 * // Avoid costly calculations while the window size is in flux. +
39007 * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); +
39008 * +
39009 * // Invoke `sendMail` when clicked, debouncing subsequent calls. +
39010 * jQuery(element).on('click', _.debounce(sendMail, 300, { +
39011 * 'leading': true, +
39012 * 'trailing': false +
39013 * })); +
39014 * +
39015 * // Ensure `batchLog` is invoked once after 1 second of debounced calls. +
39016 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); +
39017 * var source = new EventSource('/stream'); +
39018 * jQuery(source).on('message', debounced); +
39019 * +
39020 * // Cancel the trailing debounced invocation. +
39021 * jQuery(window).on('popstate', debounced.cancel); +
39022 */ +
39023 function debounce(func, wait, options) { +
39024 var lastArgs, +
39025 lastThis, +
39026 maxWait, +
39027 result, +
39028 timerId, +
39029 lastCallTime, +
39030 lastInvokeTime = 0, +
39031 leading = false, +
39032 maxing = false, +
39033 trailing = true; +
39034 +
39035 if (typeof func != 'function') { +
39036 throw new TypeError(FUNC_ERROR_TEXT); +
39037 } +
39038 wait = toNumber(wait) || 0; +
39039 if (isObject(options)) { +
39040 leading = !!options.leading; +
39041 maxing = 'maxWait' in options; +
39042 maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; +
39043 trailing = 'trailing' in options ? !!options.trailing : trailing; +
39044 } +
39045 +
39046 function invokeFunc(time) { +
39047 var args = lastArgs, +
39048 thisArg = lastThis; +
39049 +
39050 lastArgs = lastThis = undefined; +
39051 lastInvokeTime = time; +
39052 result = func.apply(thisArg, args); +
39053 return result; +
39054 } +
39055 +
39056 function leadingEdge(time) { +
39057 // Reset any `maxWait` timer. +
39058 lastInvokeTime = time; +
39059 // Start the timer for the trailing edge. +
39060 timerId = setTimeout(timerExpired, wait); +
39061 // Invoke the leading edge. +
39062 return leading ? invokeFunc(time) : result; +
39063 } +
39064 +
39065 function remainingWait(time) { +
39066 var timeSinceLastCall = time - lastCallTime, +
39067 timeSinceLastInvoke = time - lastInvokeTime, +
39068 timeWaiting = wait - timeSinceLastCall; +
39069 +
39070 return maxing +
39071 ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) +
39072 : timeWaiting; +
39073 } +
39074 +
39075 function shouldInvoke(time) { +
39076 var timeSinceLastCall = time - lastCallTime, +
39077 timeSinceLastInvoke = time - lastInvokeTime; +
39078 +
39079 // Either this is the first call, activity has stopped and we're at the +
39080 // trailing edge, the system time has gone backwards and we're treating +
39081 // it as the trailing edge, or we've hit the `maxWait` limit. +
39082 return (lastCallTime === undefined || (timeSinceLastCall >= wait) || +
39083 (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); +
39084 } +
39085 +
39086 function timerExpired() { +
39087 var time = now(); +
39088 if (shouldInvoke(time)) { +
39089 return trailingEdge(time); +
39090 } +
39091 // Restart the timer. +
39092 timerId = setTimeout(timerExpired, remainingWait(time)); +
39093 } +
39094 +
39095 function trailingEdge(time) { +
39096 timerId = undefined; +
39097 +
39098 // Only invoke if we have `lastArgs` which means `func` has been +
39099 // debounced at least once. +
39100 if (trailing && lastArgs) { +
39101 return invokeFunc(time); +
39102 } +
39103 lastArgs = lastThis = undefined; +
39104 return result; +
39105 } +
39106 +
39107 function cancel() { +
39108 if (timerId !== undefined) { +
39109 clearTimeout(timerId); +
39110 } +
39111 lastInvokeTime = 0; +
39112 lastArgs = lastCallTime = lastThis = timerId = undefined; +
39113 } +
39114 +
39115 function flush() { +
39116 return timerId === undefined ? result : trailingEdge(now()); +
39117 } +
39118 +
39119 function debounced() { +
39120 var time = now(), +
39121 isInvoking = shouldInvoke(time); +
39122 +
39123 lastArgs = arguments; +
39124 lastThis = this; +
39125 lastCallTime = time; +
39126 +
39127 if (isInvoking) { +
39128 if (timerId === undefined) { +
39129 return leadingEdge(lastCallTime); +
39130 } +
39131 if (maxing) { +
39132 // Handle invocations in a tight loop. +
39133 timerId = setTimeout(timerExpired, wait); +
39134 return invokeFunc(lastCallTime); +
39135 } +
39136 } +
39137 if (timerId === undefined) { +
39138 timerId = setTimeout(timerExpired, wait); +
39139 } +
39140 return result; +
39141 } +
39142 debounced.cancel = cancel; +
39143 debounced.flush = flush; +
39144 return debounced; +
39145 } +
39146 +
39147 /** +
39148 * Defers invoking the `func` until the current call stack has cleared. Any +
39149 * additional arguments are provided to `func` when it's invoked. +
39150 * +
39151 * @static +
39152 * @memberOf _ +
39153 * @since 0.1.0 +
39154 * @category Function +
39155 * @param {Function} func The function to defer. +
39156 * @param {...*} [args] The arguments to invoke `func` with. +
39157 * @returns {number} Returns the timer id. +
39158 * @example +
39159 * +
39160 * _.defer(function(text) { +
39161 * console.log(text); +
39162 * }, 'deferred'); +
39163 * // => Logs 'deferred' after one millisecond. +
39164 */ +
39165 var defer = baseRest(function(func, args) { +
39166 return baseDelay(func, 1, args); +
39167 }); +
39168 +
39169 /** +
39170 * Invokes `func` after `wait` milliseconds. Any additional arguments are +
39171 * provided to `func` when it's invoked. +
39172 * +
39173 * @static +
39174 * @memberOf _ +
39175 * @since 0.1.0 +
39176 * @category Function +
39177 * @param {Function} func The function to delay. +
39178 * @param {number} wait The number of milliseconds to delay invocation. +
39179 * @param {...*} [args] The arguments to invoke `func` with. +
39180 * @returns {number} Returns the timer id. +
39181 * @example +
39182 * +
39183 * _.delay(function(text) { +
39184 * console.log(text); +
39185 * }, 1000, 'later'); +
39186 * // => Logs 'later' after one second. +
39187 */ +
39188 var delay = baseRest(function(func, wait, args) { +
39189 return baseDelay(func, toNumber(wait) || 0, args); +
39190 }); +
39191 +
39192 /** +
39193 * Creates a function that invokes `func` with arguments reversed. +
39194 * +
39195 * @static +
39196 * @memberOf _ +
39197 * @since 4.0.0 +
39198 * @category Function +
39199 * @param {Function} func The function to flip arguments for. +
39200 * @returns {Function} Returns the new flipped function. +
39201 * @example +
39202 * +
39203 * var flipped = _.flip(function() { +
39204 * return _.toArray(arguments); +
39205 * }); +
39206 * +
39207 * flipped('a', 'b', 'c', 'd'); +
39208 * // => ['d', 'c', 'b', 'a'] +
39209 */ +
39210 function flip(func) { +
39211 return createWrap(func, WRAP_FLIP_FLAG); +
39212 } +
39213 +
39214 /** +
39215 * Creates a function that memoizes the result of `func`. If `resolver` is +
39216 * provided, it determines the cache key for storing the result based on the +
39217 * arguments provided to the memoized function. By default, the first argument +
39218 * provided to the memoized function is used as the map cache key. The `func` +
39219 * is invoked with the `this` binding of the memoized function. +
39220 * +
39221 * **Note:** The cache is exposed as the `cache` property on the memoized +
39222 * function. Its creation may be customized by replacing the `_.memoize.Cache` +
39223 * constructor with one whose instances implement the +
39224 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) +
39225 * method interface of `clear`, `delete`, `get`, `has`, and `set`. +
39226 * +
39227 * @static +
39228 * @memberOf _ +
39229 * @since 0.1.0 +
39230 * @category Function +
39231 * @param {Function} func The function to have its output memoized. +
39232 * @param {Function} [resolver] The function to resolve the cache key. +
39233 * @returns {Function} Returns the new memoized function. +
39234 * @example +
39235 * +
39236 * var object = { 'a': 1, 'b': 2 }; +
39237 * var other = { 'c': 3, 'd': 4 }; +
39238 * +
39239 * var values = _.memoize(_.values); +
39240 * values(object); +
39241 * // => [1, 2] +
39242 * +
39243 * values(other); +
39244 * // => [3, 4] +
39245 * +
39246 * object.a = 2; +
39247 * values(object); +
39248 * // => [1, 2] +
39249 * +
39250 * // Modify the result cache. +
39251 * values.cache.set(object, ['a', 'b']); +
39252 * values(object); +
39253 * // => ['a', 'b'] +
39254 * +
39255 * // Replace `_.memoize.Cache`. +
39256 * _.memoize.Cache = WeakMap; +
39257 */ +
39258 function memoize(func, resolver) { +
39259 if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { +
39260 throw new TypeError(FUNC_ERROR_TEXT); +
39261 } +
39262 var memoized = function() { +
39263 var args = arguments, +
39264 key = resolver ? resolver.apply(this, args) : args[0], +
39265 cache = memoized.cache; +
39266 +
39267 if (cache.has(key)) { +
39268 return cache.get(key); +
39269 } +
39270 var result = func.apply(this, args); +
39271 memoized.cache = cache.set(key, result) || cache; +
39272 return result; +
39273 }; +
39274 memoized.cache = new (memoize.Cache || MapCache); +
39275 return memoized; +
39276 } +
39277 +
39278 // Expose `MapCache`. +
39279 memoize.Cache = MapCache; +
39280 +
39281 /** +
39282 * Creates a function that negates the result of the predicate `func`. The +
39283 * `func` predicate is invoked with the `this` binding and arguments of the +
39284 * created function. +
39285 * +
39286 * @static +
39287 * @memberOf _ +
39288 * @since 3.0.0 +
39289 * @category Function +
39290 * @param {Function} predicate The predicate to negate. +
39291 * @returns {Function} Returns the new negated function. +
39292 * @example +
39293 * +
39294 * function isEven(n) { +
39295 * return n % 2 == 0; +
39296 * } +
39297 * +
39298 * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); +
39299 * // => [1, 3, 5] +
39300 */ +
39301 function negate(predicate) { +
39302 if (typeof predicate != 'function') { +
39303 throw new TypeError(FUNC_ERROR_TEXT); +
39304 } +
39305 return function() { +
39306 var args = arguments; +
39307 switch (args.length) { +
39308 case 0: return !predicate.call(this); +
39309 case 1: return !predicate.call(this, args[0]); +
39310 case 2: return !predicate.call(this, args[0], args[1]); +
39311 case 3: return !predicate.call(this, args[0], args[1], args[2]); +
39312 } +
39313 return !predicate.apply(this, args); +
39314 }; +
39315 } +
39316 +
39317 /** +
39318 * Creates a function that is restricted to invoking `func` once. Repeat calls +
39319 * to the function return the value of the first invocation. The `func` is +
39320 * invoked with the `this` binding and arguments of the created function. +
39321 * +
39322 * @static +
39323 * @memberOf _ +
39324 * @since 0.1.0 +
39325 * @category Function +
39326 * @param {Function} func The function to restrict. +
39327 * @returns {Function} Returns the new restricted function. +
39328 * @example +
39329 * +
39330 * var initialize = _.once(createApplication); +
39331 * initialize(); +
39332 * initialize(); +
39333 * // => `createApplication` is invoked once +
39334 */ +
39335 function once(func) { +
39336 return before(2, func); +
39337 } +
39338 +
39339 /** +
39340 * Creates a function that invokes `func` with its arguments transformed. +
39341 * +
39342 * @static +
39343 * @since 4.0.0 +
39344 * @memberOf _ +
39345 * @category Function +
39346 * @param {Function} func The function to wrap. +
39347 * @param {...(Function|Function[])} [transforms=[_.identity]] +
39348 * The argument transforms. +
39349 * @returns {Function} Returns the new function. +
39350 * @example +
39351 * +
39352 * function doubled(n) { +
39353 * return n * 2; +
39354 * } +
39355 * +
39356 * function square(n) { +
39357 * return n * n; +
39358 * } +
39359 * +
39360 * var func = _.overArgs(function(x, y) { +
39361 * return [x, y]; +
39362 * }, [square, doubled]); +
39363 * +
39364 * func(9, 3); +
39365 * // => [81, 6] +
39366 * +
39367 * func(10, 5); +
39368 * // => [100, 10] +
39369 */ +
39370 var overArgs = castRest(function(func, transforms) { +
39371 transforms = (transforms.length == 1 && isArray(transforms[0])) +
39372 ? arrayMap(transforms[0], baseUnary(getIteratee())) +
39373 : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); +
39374 +
39375 var funcsLength = transforms.length; +
39376 return baseRest(function(args) { +
39377 var index = -1, +
39378 length = nativeMin(args.length, funcsLength); +
39379 +
39380 while (++index < length) { +
39381 args[index] = transforms[index].call(this, args[index]); +
39382 } +
39383 return apply(func, this, args); +
39384 }); +
39385 }); +
39386 +
39387 /** +
39388 * Creates a function that invokes `func` with `partials` prepended to the +
39389 * arguments it receives. This method is like `_.bind` except it does **not** +
39390 * alter the `this` binding. +
39391 * +
39392 * The `_.partial.placeholder` value, which defaults to `_` in monolithic +
39393 * builds, may be used as a placeholder for partially applied arguments. +
39394 * +
39395 * **Note:** This method doesn't set the "length" property of partially +
39396 * applied functions. +
39397 * +
39398 * @static +
39399 * @memberOf _ +
39400 * @since 0.2.0 +
39401 * @category Function +
39402 * @param {Function} func The function to partially apply arguments to. +
39403 * @param {...*} [partials] The arguments to be partially applied. +
39404 * @returns {Function} Returns the new partially applied function. +
39405 * @example +
39406 * +
39407 * function greet(greeting, name) { +
39408 * return greeting + ' ' + name; +
39409 * } +
39410 * +
39411 * var sayHelloTo = _.partial(greet, 'hello'); +
39412 * sayHelloTo('fred'); +
39413 * // => 'hello fred' +
39414 * +
39415 * // Partially applied with placeholders. +
39416 * var greetFred = _.partial(greet, _, 'fred'); +
39417 * greetFred('hi'); +
39418 * // => 'hi fred' +
39419 */ +
39420 var partial = baseRest(function(func, partials) { +
39421 var holders = replaceHolders(partials, getHolder(partial)); +
39422 return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); +
39423 }); +
39424 +
39425 /** +
39426 * This method is like `_.partial` except that partially applied arguments +
39427 * are appended to the arguments it receives. +
39428 * +
39429 * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic +
39430 * builds, may be used as a placeholder for partially applied arguments. +
39431 * +
39432 * **Note:** This method doesn't set the "length" property of partially +
39433 * applied functions. +
39434 * +
39435 * @static +
39436 * @memberOf _ +
39437 * @since 1.0.0 +
39438 * @category Function +
39439 * @param {Function} func The function to partially apply arguments to. +
39440 * @param {...*} [partials] The arguments to be partially applied. +
39441 * @returns {Function} Returns the new partially applied function. +
39442 * @example +
39443 * +
39444 * function greet(greeting, name) { +
39445 * return greeting + ' ' + name; +
39446 * } +
39447 * +
39448 * var greetFred = _.partialRight(greet, 'fred'); +
39449 * greetFred('hi'); +
39450 * // => 'hi fred' +
39451 * +
39452 * // Partially applied with placeholders. +
39453 * var sayHelloTo = _.partialRight(greet, 'hello', _); +
39454 * sayHelloTo('fred'); +
39455 * // => 'hello fred' +
39456 */ +
39457 var partialRight = baseRest(function(func, partials) { +
39458 var holders = replaceHolders(partials, getHolder(partialRight)); +
39459 return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); +
39460 }); +
39461 +
39462 /** +
39463 * Creates a function that invokes `func` with arguments arranged according +
39464 * to the specified `indexes` where the argument value at the first index is +
39465 * provided as the first argument, the argument value at the second index is +
39466 * provided as the second argument, and so on. +
39467 * +
39468 * @static +
39469 * @memberOf _ +
39470 * @since 3.0.0 +
39471 * @category Function +
39472 * @param {Function} func The function to rearrange arguments for. +
39473 * @param {...(number|number[])} indexes The arranged argument indexes. +
39474 * @returns {Function} Returns the new function. +
39475 * @example +
39476 * +
39477 * var rearged = _.rearg(function(a, b, c) { +
39478 * return [a, b, c]; +
39479 * }, [2, 0, 1]); +
39480 * +
39481 * rearged('b', 'c', 'a') +
39482 * // => ['a', 'b', 'c'] +
39483 */ +
39484 var rearg = flatRest(function(func, indexes) { +
39485 return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); +
39486 }); +
39487 +
39488 /** +
39489 * Creates a function that invokes `func` with the `this` binding of the +
39490 * created function and arguments from `start` and beyond provided as +
39491 * an array. +
39492 * +
39493 * **Note:** This method is based on the +
39494 * [rest parameter](https://mdn.io/rest_parameters). +
39495 * +
39496 * @static +
39497 * @memberOf _ +
39498 * @since 4.0.0 +
39499 * @category Function +
39500 * @param {Function} func The function to apply a rest parameter to. +
39501 * @param {number} [start=func.length-1] The start position of the rest parameter. +
39502 * @returns {Function} Returns the new function. +
39503 * @example +
39504 * +
39505 * var say = _.rest(function(what, names) { +
39506 * return what + ' ' + _.initial(names).join(', ') + +
39507 * (_.size(names) > 1 ? ', & ' : '') + _.last(names); +
39508 * }); +
39509 * +
39510 * say('hello', 'fred', 'barney', 'pebbles'); +
39511 * // => 'hello fred, barney, & pebbles' +
39512 */ +
39513 function rest(func, start) { +
39514 if (typeof func != 'function') { +
39515 throw new TypeError(FUNC_ERROR_TEXT); +
39516 } +
39517 start = start === undefined ? start : toInteger(start); +
39518 return baseRest(func, start); +
39519 } +
39520 +
39521 /** +
39522 * Creates a function that invokes `func` with the `this` binding of the +
39523 * create function and an array of arguments much like +
39524 * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). +
39525 * +
39526 * **Note:** This method is based on the +
39527 * [spread operator](https://mdn.io/spread_operator). +
39528 * +
39529 * @static +
39530 * @memberOf _ +
39531 * @since 3.2.0 +
39532 * @category Function +
39533 * @param {Function} func The function to spread arguments over. +
39534 * @param {number} [start=0] The start position of the spread. +
39535 * @returns {Function} Returns the new function. +
39536 * @example +
39537 * +
39538 * var say = _.spread(function(who, what) { +
39539 * return who + ' says ' + what; +
39540 * }); +
39541 * +
39542 * say(['fred', 'hello']); +
39543 * // => 'fred says hello' +
39544 * +
39545 * var numbers = Promise.all([ +
39546 * Promise.resolve(40), +
39547 * Promise.resolve(36) +
39548 * ]); +
39549 * +
39550 * numbers.then(_.spread(function(x, y) { +
39551 * return x + y; +
39552 * })); +
39553 * // => a Promise of 76 +
39554 */ +
39555 function spread(func, start) { +
39556 if (typeof func != 'function') { +
39557 throw new TypeError(FUNC_ERROR_TEXT); +
39558 } +
39559 start = start == null ? 0 : nativeMax(toInteger(start), 0); +
39560 return baseRest(function(args) { +
39561 var array = args[start], +
39562 otherArgs = castSlice(args, 0, start); +
39563 +
39564 if (array) { +
39565 arrayPush(otherArgs, array); +
39566 } +
39567 return apply(func, this, otherArgs); +
39568 }); +
39569 } +
39570 +
39571 /** +
39572 * Creates a throttled function that only invokes `func` at most once per +
39573 * every `wait` milliseconds. The throttled function comes with a `cancel` +
39574 * method to cancel delayed `func` invocations and a `flush` method to +
39575 * immediately invoke them. Provide `options` to indicate whether `func` +
39576 * should be invoked on the leading and/or trailing edge of the `wait` +
39577 * timeout. The `func` is invoked with the last arguments provided to the +
39578 * throttled function. Subsequent calls to the throttled function return the +
39579 * result of the last `func` invocation. +
39580 * +
39581 * **Note:** If `leading` and `trailing` options are `true`, `func` is +
39582 * invoked on the trailing edge of the timeout only if the throttled function +
39583 * is invoked more than once during the `wait` timeout. +
39584 * +
39585 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +
39586 * until to the next tick, similar to `setTimeout` with a timeout of `0`. +
39587 * +
39588 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +
39589 * for details over the differences between `_.throttle` and `_.debounce`. +
39590 * +
39591 * @static +
39592 * @memberOf _ +
39593 * @since 0.1.0 +
39594 * @category Function +
39595 * @param {Function} func The function to throttle. +
39596 * @param {number} [wait=0] The number of milliseconds to throttle invocations to. +
39597 * @param {Object} [options={}] The options object. +
39598 * @param {boolean} [options.leading=true] +
39599 * Specify invoking on the leading edge of the timeout. +
39600 * @param {boolean} [options.trailing=true] +
39601 * Specify invoking on the trailing edge of the timeout. +
39602 * @returns {Function} Returns the new throttled function. +
39603 * @example +
39604 * +
39605 * // Avoid excessively updating the position while scrolling. +
39606 * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); +
39607 * +
39608 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. +
39609 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); +
39610 * jQuery(element).on('click', throttled); +
39611 * +
39612 * // Cancel the trailing throttled invocation. +
39613 * jQuery(window).on('popstate', throttled.cancel); +
39614 */ +
39615 function throttle(func, wait, options) { +
39616 var leading = true, +
39617 trailing = true; +
39618 +
39619 if (typeof func != 'function') { +
39620 throw new TypeError(FUNC_ERROR_TEXT); +
39621 } +
39622 if (isObject(options)) { +
39623 leading = 'leading' in options ? !!options.leading : leading; +
39624 trailing = 'trailing' in options ? !!options.trailing : trailing; +
39625 } +
39626 return debounce(func, wait, { +
39627 'leading': leading, +
39628 'maxWait': wait, +
39629 'trailing': trailing +
39630 }); +
39631 } +
39632 +
39633 /** +
39634 * Creates a function that accepts up to one argument, ignoring any +
39635 * additional arguments. +
39636 * +
39637 * @static +
39638 * @memberOf _ +
39639 * @since 4.0.0 +
39640 * @category Function +
39641 * @param {Function} func The function to cap arguments for. +
39642 * @returns {Function} Returns the new capped function. +
39643 * @example +
39644 * +
39645 * _.map(['6', '8', '10'], _.unary(parseInt)); +
39646 * // => [6, 8, 10] +
39647 */ +
39648 function unary(func) { +
39649 return ary(func, 1); +
39650 } +
39651 +
39652 /** +
39653 * Creates a function that provides `value` to `wrapper` as its first +
39654 * argument. Any additional arguments provided to the function are appended +
39655 * to those provided to the `wrapper`. The wrapper is invoked with the `this` +
39656 * binding of the created function. +
39657 * +
39658 * @static +
39659 * @memberOf _ +
39660 * @since 0.1.0 +
39661 * @category Function +
39662 * @param {*} value The value to wrap. +
39663 * @param {Function} [wrapper=identity] The wrapper function. +
39664 * @returns {Function} Returns the new function. +
39665 * @example +
39666 * +
39667 * var p = _.wrap(_.escape, function(func, text) { +
39668 * return '<p>' + func(text) + '</p>'; +
39669 * }); +
39670 * +
39671 * p('fred, barney, & pebbles'); +
39672 * // => '<p>fred, barney, &amp; pebbles</p>' +
39673 */ +
39674 function wrap(value, wrapper) { +
39675 return partial(castFunction(wrapper), value); +
39676 } +
39677 +
39678 /*------------------------------------------------------------------------*/ +
39679 +
39680 /** +
39681 * Casts `value` as an array if it's not one. +
39682 * +
39683 * @static +
39684 * @memberOf _ +
39685 * @since 4.4.0 +
39686 * @category Lang +
39687 * @param {*} value The value to inspect. +
39688 * @returns {Array} Returns the cast array. +
39689 * @example +
39690 * +
39691 * _.castArray(1); +
39692 * // => [1] +
39693 * +
39694 * _.castArray({ 'a': 1 }); +
39695 * // => [{ 'a': 1 }] +
39696 * +
39697 * _.castArray('abc'); +
39698 * // => ['abc'] +
39699 * +
39700 * _.castArray(null); +
39701 * // => [null] +
39702 * +
39703 * _.castArray(undefined); +
39704 * // => [undefined] +
39705 * +
39706 * _.castArray(); +
39707 * // => [] +
39708 * +
39709 * var array = [1, 2, 3]; +
39710 * console.log(_.castArray(array) === array); +
39711 * // => true +
39712 */ +
39713 function castArray() { +
39714 if (!arguments.length) { +
39715 return []; +
39716 } +
39717 var value = arguments[0]; +
39718 return isArray(value) ? value : [value]; +
39719 } +
39720 +
39721 /** +
39722 * Creates a shallow clone of `value`. +
39723 * +
39724 * **Note:** This method is loosely based on the +
39725 * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) +
39726 * and supports cloning arrays, array buffers, booleans, date objects, maps, +
39727 * numbers, `Object` objects, regexes, sets, strings, symbols, and typed +
39728 * arrays. The own enumerable properties of `arguments` objects are cloned +
39729 * as plain objects. An empty object is returned for uncloneable values such +
39730 * as error objects, functions, DOM nodes, and WeakMaps. +
39731 * +
39732 * @static +
39733 * @memberOf _ +
39734 * @since 0.1.0 +
39735 * @category Lang +
39736 * @param {*} value The value to clone. +
39737 * @returns {*} Returns the cloned value. +
39738 * @see _.cloneDeep +
39739 * @example +
39740 * +
39741 * var objects = [{ 'a': 1 }, { 'b': 2 }]; +
39742 * +
39743 * var shallow = _.clone(objects); +
39744 * console.log(shallow[0] === objects[0]); +
39745 * // => true +
39746 */ +
39747 function clone(value) { +
39748 return baseClone(value, CLONE_SYMBOLS_FLAG); +
39749 } +
39750 +
39751 /** +
39752 * This method is like `_.clone` except that it accepts `customizer` which +
39753 * is invoked to produce the cloned value. If `customizer` returns `undefined`, +
39754 * cloning is handled by the method instead. The `customizer` is invoked with +
39755 * up to four arguments; (value [, index|key, object, stack]). +
39756 * +
39757 * @static +
39758 * @memberOf _ +
39759 * @since 4.0.0 +
39760 * @category Lang +
39761 * @param {*} value The value to clone. +
39762 * @param {Function} [customizer] The function to customize cloning. +
39763 * @returns {*} Returns the cloned value. +
39764 * @see _.cloneDeepWith +
39765 * @example +
39766 * +
39767 * function customizer(value) { +
39768 * if (_.isElement(value)) { +
39769 * return value.cloneNode(false); +
39770 * } +
39771 * } +
39772 * +
39773 * var el = _.cloneWith(document.body, customizer); +
39774 * +
39775 * console.log(el === document.body); +
39776 * // => false +
39777 * console.log(el.nodeName); +
39778 * // => 'BODY' +
39779 * console.log(el.childNodes.length); +
39780 * // => 0 +
39781 */ +
39782 function cloneWith(value, customizer) { +
39783 customizer = typeof customizer == 'function' ? customizer : undefined; +
39784 return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); +
39785 } +
39786 +
39787 /** +
39788 * This method is like `_.clone` except that it recursively clones `value`. +
39789 * +
39790 * @static +
39791 * @memberOf _ +
39792 * @since 1.0.0 +
39793 * @category Lang +
39794 * @param {*} value The value to recursively clone. +
39795 * @returns {*} Returns the deep cloned value. +
39796 * @see _.clone +
39797 * @example +
39798 * +
39799 * var objects = [{ 'a': 1 }, { 'b': 2 }]; +
39800 * +
39801 * var deep = _.cloneDeep(objects); +
39802 * console.log(deep[0] === objects[0]); +
39803 * // => false +
39804 */ +
39805 function cloneDeep(value) { +
39806 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +
39807 } +
39808 +
39809 /** +
39810 * This method is like `_.cloneWith` except that it recursively clones `value`. +
39811 * +
39812 * @static +
39813 * @memberOf _ +
39814 * @since 4.0.0 +
39815 * @category Lang +
39816 * @param {*} value The value to recursively clone. +
39817 * @param {Function} [customizer] The function to customize cloning. +
39818 * @returns {*} Returns the deep cloned value. +
39819 * @see _.cloneWith +
39820 * @example +
39821 * +
39822 * function customizer(value) { +
39823 * if (_.isElement(value)) { +
39824 * return value.cloneNode(true); +
39825 * } +
39826 * } +
39827 * +
39828 * var el = _.cloneDeepWith(document.body, customizer); +
39829 * +
39830 * console.log(el === document.body); +
39831 * // => false +
39832 * console.log(el.nodeName); +
39833 * // => 'BODY' +
39834 * console.log(el.childNodes.length); +
39835 * // => 20 +
39836 */ +
39837 function cloneDeepWith(value, customizer) { +
39838 customizer = typeof customizer == 'function' ? customizer : undefined; +
39839 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); +
39840 } +
39841 +
39842 /** +
39843 * Checks if `object` conforms to `source` by invoking the predicate +
39844 * properties of `source` with the corresponding property values of `object`. +
39845 * +
39846 * **Note:** This method is equivalent to `_.conforms` when `source` is +
39847 * partially applied. +
39848 * +
39849 * @static +
39850 * @memberOf _ +
39851 * @since 4.14.0 +
39852 * @category Lang +
39853 * @param {Object} object The object to inspect. +
39854 * @param {Object} source The object of property predicates to conform to. +
39855 * @returns {boolean} Returns `true` if `object` conforms, else `false`. +
39856 * @example +
39857 * +
39858 * var object = { 'a': 1, 'b': 2 }; +
39859 * +
39860 * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); +
39861 * // => true +
39862 * +
39863 * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); +
39864 * // => false +
39865 */ +
39866 function conformsTo(object, source) { +
39867 return source == null || baseConformsTo(object, source, keys(source)); +
39868 } +
39869 +
39870 /** +
39871 * Performs a +
39872 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
39873 * comparison between two values to determine if they are equivalent. +
39874 * +
39875 * @static +
39876 * @memberOf _ +
39877 * @since 4.0.0 +
39878 * @category Lang +
39879 * @param {*} value The value to compare. +
39880 * @param {*} other The other value to compare. +
39881 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
39882 * @example +
39883 * +
39884 * var object = { 'a': 1 }; +
39885 * var other = { 'a': 1 }; +
39886 * +
39887 * _.eq(object, object); +
39888 * // => true +
39889 * +
39890 * _.eq(object, other); +
39891 * // => false +
39892 * +
39893 * _.eq('a', 'a'); +
39894 * // => true +
39895 * +
39896 * _.eq('a', Object('a')); +
39897 * // => false +
39898 * +
39899 * _.eq(NaN, NaN); +
39900 * // => true +
39901 */ +
39902 function eq(value, other) { +
39903 return value === other || (value !== value && other !== other); +
39904 } +
39905 +
39906 /** +
39907 * Checks if `value` is greater than `other`. +
39908 * +
39909 * @static +
39910 * @memberOf _ +
39911 * @since 3.9.0 +
39912 * @category Lang +
39913 * @param {*} value The value to compare. +
39914 * @param {*} other The other value to compare. +
39915 * @returns {boolean} Returns `true` if `value` is greater than `other`, +
39916 * else `false`. +
39917 * @see _.lt +
39918 * @example +
39919 * +
39920 * _.gt(3, 1); +
39921 * // => true +
39922 * +
39923 * _.gt(3, 3); +
39924 * // => false +
39925 * +
39926 * _.gt(1, 3); +
39927 * // => false +
39928 */ +
39929 var gt = createRelationalOperation(baseGt); +
39930 +
39931 /** +
39932 * Checks if `value` is greater than or equal to `other`. +
39933 * +
39934 * @static +
39935 * @memberOf _ +
39936 * @since 3.9.0 +
39937 * @category Lang +
39938 * @param {*} value The value to compare. +
39939 * @param {*} other The other value to compare. +
39940 * @returns {boolean} Returns `true` if `value` is greater than or equal to +
39941 * `other`, else `false`. +
39942 * @see _.lte +
39943 * @example +
39944 * +
39945 * _.gte(3, 1); +
39946 * // => true +
39947 * +
39948 * _.gte(3, 3); +
39949 * // => true +
39950 * +
39951 * _.gte(1, 3); +
39952 * // => false +
39953 */ +
39954 var gte = createRelationalOperation(function(value, other) { +
39955 return value >= other; +
39956 }); +
39957 +
39958 /** +
39959 * Checks if `value` is likely an `arguments` object. +
39960 * +
39961 * @static +
39962 * @memberOf _ +
39963 * @since 0.1.0 +
39964 * @category Lang +
39965 * @param {*} value The value to check. +
39966 * @returns {boolean} Returns `true` if `value` is an `arguments` object, +
39967 * else `false`. +
39968 * @example +
39969 * +
39970 * _.isArguments(function() { return arguments; }()); +
39971 * // => true +
39972 * +
39973 * _.isArguments([1, 2, 3]); +
39974 * // => false +
39975 */ +
39976 var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { +
39977 return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && +
39978 !propertyIsEnumerable.call(value, 'callee'); +
39979 }; +
39980 +
39981 /** +
39982 * Checks if `value` is classified as an `Array` object. +
39983 * +
39984 * @static +
39985 * @memberOf _ +
39986 * @since 0.1.0 +
39987 * @category Lang +
39988 * @param {*} value The value to check. +
39989 * @returns {boolean} Returns `true` if `value` is an array, else `false`. +
39990 * @example +
39991 * +
39992 * _.isArray([1, 2, 3]); +
39993 * // => true +
39994 * +
39995 * _.isArray(document.body.children); +
39996 * // => false +
39997 * +
39998 * _.isArray('abc'); +
39999 * // => false +
40000 * +
40001 * _.isArray(_.noop); +
40002 * // => false +
40003 */ +
40004 var isArray = Array.isArray; +
40005 +
40006 /** +
40007 * Checks if `value` is classified as an `ArrayBuffer` object. +
40008 * +
40009 * @static +
40010 * @memberOf _ +
40011 * @since 4.3.0 +
40012 * @category Lang +
40013 * @param {*} value The value to check. +
40014 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +
40015 * @example +
40016 * +
40017 * _.isArrayBuffer(new ArrayBuffer(2)); +
40018 * // => true +
40019 * +
40020 * _.isArrayBuffer(new Array(2)); +
40021 * // => false +
40022 */ +
40023 var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; +
40024 +
40025 /** +
40026 * Checks if `value` is array-like. A value is considered array-like if it's +
40027 * not a function and has a `value.length` that's an integer greater than or +
40028 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. +
40029 * +
40030 * @static +
40031 * @memberOf _ +
40032 * @since 4.0.0 +
40033 * @category Lang +
40034 * @param {*} value The value to check. +
40035 * @returns {boolean} Returns `true` if `value` is array-like, else `false`. +
40036 * @example +
40037 * +
40038 * _.isArrayLike([1, 2, 3]); +
40039 * // => true +
40040 * +
40041 * _.isArrayLike(document.body.children); +
40042 * // => true +
40043 * +
40044 * _.isArrayLike('abc'); +
40045 * // => true +
40046 * +
40047 * _.isArrayLike(_.noop); +
40048 * // => false +
40049 */ +
40050 function isArrayLike(value) { +
40051 return value != null && isLength(value.length) && !isFunction(value); +
40052 } +
40053 +
40054 /** +
40055 * This method is like `_.isArrayLike` except that it also checks if `value` +
40056 * is an object. +
40057 * +
40058 * @static +
40059 * @memberOf _ +
40060 * @since 4.0.0 +
40061 * @category Lang +
40062 * @param {*} value The value to check. +
40063 * @returns {boolean} Returns `true` if `value` is an array-like object, +
40064 * else `false`. +
40065 * @example +
40066 * +
40067 * _.isArrayLikeObject([1, 2, 3]); +
40068 * // => true +
40069 * +
40070 * _.isArrayLikeObject(document.body.children); +
40071 * // => true +
40072 * +
40073 * _.isArrayLikeObject('abc'); +
40074 * // => false +
40075 * +
40076 * _.isArrayLikeObject(_.noop); +
40077 * // => false +
40078 */ +
40079 function isArrayLikeObject(value) { +
40080 return isObjectLike(value) && isArrayLike(value); +
40081 } +
40082 +
40083 /** +
40084 * Checks if `value` is classified as a boolean primitive or object. +
40085 * +
40086 * @static +
40087 * @memberOf _ +
40088 * @since 0.1.0 +
40089 * @category Lang +
40090 * @param {*} value The value to check. +
40091 * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. +
40092 * @example +
40093 * +
40094 * _.isBoolean(false); +
40095 * // => true +
40096 * +
40097 * _.isBoolean(null); +
40098 * // => false +
40099 */ +
40100 function isBoolean(value) { +
40101 return value === true || value === false || +
40102 (isObjectLike(value) && baseGetTag(value) == boolTag); +
40103 } +
40104 +
40105 /** +
40106 * Checks if `value` is a buffer. +
40107 * +
40108 * @static +
40109 * @memberOf _ +
40110 * @since 4.3.0 +
40111 * @category Lang +
40112 * @param {*} value The value to check. +
40113 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. +
40114 * @example +
40115 * +
40116 * _.isBuffer(new Buffer(2)); +
40117 * // => true +
40118 * +
40119 * _.isBuffer(new Uint8Array(2)); +
40120 * // => false +
40121 */ +
40122 var isBuffer = nativeIsBuffer || stubFalse; +
40123 +
40124 /** +
40125 * Checks if `value` is classified as a `Date` object. +
40126 * +
40127 * @static +
40128 * @memberOf _ +
40129 * @since 0.1.0 +
40130 * @category Lang +
40131 * @param {*} value The value to check. +
40132 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +
40133 * @example +
40134 * +
40135 * _.isDate(new Date); +
40136 * // => true +
40137 * +
40138 * _.isDate('Mon April 23 2012'); +
40139 * // => false +
40140 */ +
40141 var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; +
40142 +
40143 /** +
40144 * Checks if `value` is likely a DOM element. +
40145 * +
40146 * @static +
40147 * @memberOf _ +
40148 * @since 0.1.0 +
40149 * @category Lang +
40150 * @param {*} value The value to check. +
40151 * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. +
40152 * @example +
40153 * +
40154 * _.isElement(document.body); +
40155 * // => true +
40156 * +
40157 * _.isElement('<body>'); +
40158 * // => false +
40159 */ +
40160 function isElement(value) { +
40161 return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); +
40162 } +
40163 +
40164 /** +
40165 * Checks if `value` is an empty object, collection, map, or set. +
40166 * +
40167 * Objects are considered empty if they have no own enumerable string keyed +
40168 * properties. +
40169 * +
40170 * Array-like values such as `arguments` objects, arrays, buffers, strings, or +
40171 * jQuery-like collections are considered empty if they have a `length` of `0`. +
40172 * Similarly, maps and sets are considered empty if they have a `size` of `0`. +
40173 * +
40174 * @static +
40175 * @memberOf _ +
40176 * @since 0.1.0 +
40177 * @category Lang +
40178 * @param {*} value The value to check. +
40179 * @returns {boolean} Returns `true` if `value` is empty, else `false`. +
40180 * @example +
40181 * +
40182 * _.isEmpty(null); +
40183 * // => true +
40184 * +
40185 * _.isEmpty(true); +
40186 * // => true +
40187 * +
40188 * _.isEmpty(1); +
40189 * // => true +
40190 * +
40191 * _.isEmpty([1, 2, 3]); +
40192 * // => false +
40193 * +
40194 * _.isEmpty({ 'a': 1 }); +
40195 * // => false +
40196 */ +
40197 function isEmpty(value) { +
40198 if (value == null) { +
40199 return true; +
40200 } +
40201 if (isArrayLike(value) && +
40202 (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || +
40203 isBuffer(value) || isTypedArray(value) || isArguments(value))) { +
40204 return !value.length; +
40205 } +
40206 var tag = getTag(value); +
40207 if (tag == mapTag || tag == setTag) { +
40208 return !value.size; +
40209 } +
40210 if (isPrototype(value)) { +
40211 return !baseKeys(value).length; +
40212 } +
40213 for (var key in value) { +
40214 if (hasOwnProperty.call(value, key)) { +
40215 return false; +
40216 } +
40217 } +
40218 return true; +
40219 } +
40220 +
40221 /** +
40222 * Performs a deep comparison between two values to determine if they are +
40223 * equivalent. +
40224 * +
40225 * **Note:** This method supports comparing arrays, array buffers, booleans, +
40226 * date objects, error objects, maps, numbers, `Object` objects, regexes, +
40227 * sets, strings, symbols, and typed arrays. `Object` objects are compared +
40228 * by their own, not inherited, enumerable properties. Functions and DOM +
40229 * nodes are compared by strict equality, i.e. `===`. +
40230 * +
40231 * @static +
40232 * @memberOf _ +
40233 * @since 0.1.0 +
40234 * @category Lang +
40235 * @param {*} value The value to compare. +
40236 * @param {*} other The other value to compare. +
40237 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
40238 * @example +
40239 * +
40240 * var object = { 'a': 1 }; +
40241 * var other = { 'a': 1 }; +
40242 * +
40243 * _.isEqual(object, other); +
40244 * // => true +
40245 * +
40246 * object === other; +
40247 * // => false +
40248 */ +
40249 function isEqual(value, other) { +
40250 return baseIsEqual(value, other); +
40251 } +
40252 +
40253 /** +
40254 * This method is like `_.isEqual` except that it accepts `customizer` which +
40255 * is invoked to compare values. If `customizer` returns `undefined`, comparisons +
40256 * are handled by the method instead. The `customizer` is invoked with up to +
40257 * six arguments: (objValue, othValue [, index|key, object, other, stack]). +
40258 * +
40259 * @static +
40260 * @memberOf _ +
40261 * @since 4.0.0 +
40262 * @category Lang +
40263 * @param {*} value The value to compare. +
40264 * @param {*} other The other value to compare. +
40265 * @param {Function} [customizer] The function to customize comparisons. +
40266 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
40267 * @example +
40268 * +
40269 * function isGreeting(value) { +
40270 * return /^h(?:i|ello)$/.test(value); +
40271 * } +
40272 * +
40273 * function customizer(objValue, othValue) { +
40274 * if (isGreeting(objValue) && isGreeting(othValue)) { +
40275 * return true; +
40276 * } +
40277 * } +
40278 * +
40279 * var array = ['hello', 'goodbye']; +
40280 * var other = ['hi', 'goodbye']; +
40281 * +
40282 * _.isEqualWith(array, other, customizer); +
40283 * // => true +
40284 */ +
40285 function isEqualWith(value, other, customizer) { +
40286 customizer = typeof customizer == 'function' ? customizer : undefined; +
40287 var result = customizer ? customizer(value, other) : undefined; +
40288 return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; +
40289 } +
40290 +
40291 /** +
40292 * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, +
40293 * `SyntaxError`, `TypeError`, or `URIError` object. +
40294 * +
40295 * @static +
40296 * @memberOf _ +
40297 * @since 3.0.0 +
40298 * @category Lang +
40299 * @param {*} value The value to check. +
40300 * @returns {boolean} Returns `true` if `value` is an error object, else `false`. +
40301 * @example +
40302 * +
40303 * _.isError(new Error); +
40304 * // => true +
40305 * +
40306 * _.isError(Error); +
40307 * // => false +
40308 */ +
40309 function isError(value) { +
40310 if (!isObjectLike(value)) { +
40311 return false; +
40312 } +
40313 var tag = baseGetTag(value); +
40314 return tag == errorTag || tag == domExcTag || +
40315 (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); +
40316 } +
40317 +
40318 /** +
40319 * Checks if `value` is a finite primitive number. +
40320 * +
40321 * **Note:** This method is based on +
40322 * [`Number.isFinite`](https://mdn.io/Number/isFinite). +
40323 * +
40324 * @static +
40325 * @memberOf _ +
40326 * @since 0.1.0 +
40327 * @category Lang +
40328 * @param {*} value The value to check. +
40329 * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. +
40330 * @example +
40331 * +
40332 * _.isFinite(3); +
40333 * // => true +
40334 * +
40335 * _.isFinite(Number.MIN_VALUE); +
40336 * // => true +
40337 * +
40338 * _.isFinite(Infinity); +
40339 * // => false +
40340 * +
40341 * _.isFinite('3'); +
40342 * // => false +
40343 */ +
40344 function isFinite(value) { +
40345 return typeof value == 'number' && nativeIsFinite(value); +
40346 } +
40347 +
40348 /** +
40349 * Checks if `value` is classified as a `Function` object. +
40350 * +
40351 * @static +
40352 * @memberOf _ +
40353 * @since 0.1.0 +
40354 * @category Lang +
40355 * @param {*} value The value to check. +
40356 * @returns {boolean} Returns `true` if `value` is a function, else `false`. +
40357 * @example +
40358 * +
40359 * _.isFunction(_); +
40360 * // => true +
40361 * +
40362 * _.isFunction(/abc/); +
40363 * // => false +
40364 */ +
40365 function isFunction(value) { +
40366 if (!isObject(value)) { +
40367 return false; +
40368 } +
40369 // The use of `Object#toString` avoids issues with the `typeof` operator +
40370 // in Safari 9 which returns 'object' for typed arrays and other constructors. +
40371 var tag = baseGetTag(value); +
40372 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +
40373 } +
40374 +
40375 /** +
40376 * Checks if `value` is an integer. +
40377 * +
40378 * **Note:** This method is based on +
40379 * [`Number.isInteger`](https://mdn.io/Number/isInteger). +
40380 * +
40381 * @static +
40382 * @memberOf _ +
40383 * @since 4.0.0 +
40384 * @category Lang +
40385 * @param {*} value The value to check. +
40386 * @returns {boolean} Returns `true` if `value` is an integer, else `false`. +
40387 * @example +
40388 * +
40389 * _.isInteger(3); +
40390 * // => true +
40391 * +
40392 * _.isInteger(Number.MIN_VALUE); +
40393 * // => false +
40394 * +
40395 * _.isInteger(Infinity); +
40396 * // => false +
40397 * +
40398 * _.isInteger('3'); +
40399 * // => false +
40400 */ +
40401 function isInteger(value) { +
40402 return typeof value == 'number' && value == toInteger(value); +
40403 } +
40404 +
40405 /** +
40406 * Checks if `value` is a valid array-like length. +
40407 * +
40408 * **Note:** This method is loosely based on +
40409 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +
40410 * +
40411 * @static +
40412 * @memberOf _ +
40413 * @since 4.0.0 +
40414 * @category Lang +
40415 * @param {*} value The value to check. +
40416 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. +
40417 * @example +
40418 * +
40419 * _.isLength(3); +
40420 * // => true +
40421 * +
40422 * _.isLength(Number.MIN_VALUE); +
40423 * // => false +
40424 * +
40425 * _.isLength(Infinity); +
40426 * // => false +
40427 * +
40428 * _.isLength('3'); +
40429 * // => false +
40430 */ +
40431 function isLength(value) { +
40432 return typeof value == 'number' && +
40433 value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +
40434 } +
40435 +
40436 /** +
40437 * Checks if `value` is the +
40438 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) +
40439 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) +
40440 * +
40441 * @static +
40442 * @memberOf _ +
40443 * @since 0.1.0 +
40444 * @category Lang +
40445 * @param {*} value The value to check. +
40446 * @returns {boolean} Returns `true` if `value` is an object, else `false`. +
40447 * @example +
40448 * +
40449 * _.isObject({}); +
40450 * // => true +
40451 * +
40452 * _.isObject([1, 2, 3]); +
40453 * // => true +
40454 * +
40455 * _.isObject(_.noop); +
40456 * // => true +
40457 * +
40458 * _.isObject(null); +
40459 * // => false +
40460 */ +
40461 function isObject(value) { +
40462 var type = typeof value; +
40463 return value != null && (type == 'object' || type == 'function'); +
40464 } +
40465 +
40466 /** +
40467 * Checks if `value` is object-like. A value is object-like if it's not `null` +
40468 * and has a `typeof` result of "object". +
40469 * +
40470 * @static +
40471 * @memberOf _ +
40472 * @since 4.0.0 +
40473 * @category Lang +
40474 * @param {*} value The value to check. +
40475 * @returns {boolean} Returns `true` if `value` is object-like, else `false`. +
40476 * @example +
40477 * +
40478 * _.isObjectLike({}); +
40479 * // => true +
40480 * +
40481 * _.isObjectLike([1, 2, 3]); +
40482 * // => true +
40483 * +
40484 * _.isObjectLike(_.noop); +
40485 * // => false +
40486 * +
40487 * _.isObjectLike(null); +
40488 * // => false +
40489 */ +
40490 function isObjectLike(value) { +
40491 return value != null && typeof value == 'object'; +
40492 } +
40493 +
40494 /** +
40495 * Checks if `value` is classified as a `Map` object. +
40496 * +
40497 * @static +
40498 * @memberOf _ +
40499 * @since 4.3.0 +
40500 * @category Lang +
40501 * @param {*} value The value to check. +
40502 * @returns {boolean} Returns `true` if `value` is a map, else `false`. +
40503 * @example +
40504 * +
40505 * _.isMap(new Map); +
40506 * // => true +
40507 * +
40508 * _.isMap(new WeakMap); +
40509 * // => false +
40510 */ +
40511 var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; +
40512 +
40513 /** +
40514 * Performs a partial deep comparison between `object` and `source` to +
40515 * determine if `object` contains equivalent property values. +
40516 * +
40517 * **Note:** This method is equivalent to `_.matches` when `source` is +
40518 * partially applied. +
40519 * +
40520 * Partial comparisons will match empty array and empty object `source` +
40521 * values against any array or object value, respectively. See `_.isEqual` +
40522 * for a list of supported value comparisons. +
40523 * +
40524 * @static +
40525 * @memberOf _ +
40526 * @since 3.0.0 +
40527 * @category Lang +
40528 * @param {Object} object The object to inspect. +
40529 * @param {Object} source The object of property values to match. +
40530 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
40531 * @example +
40532 * +
40533 * var object = { 'a': 1, 'b': 2 }; +
40534 * +
40535 * _.isMatch(object, { 'b': 2 }); +
40536 * // => true +
40537 * +
40538 * _.isMatch(object, { 'b': 1 }); +
40539 * // => false +
40540 */ +
40541 function isMatch(object, source) { +
40542 return object === source || baseIsMatch(object, source, getMatchData(source)); +
40543 } +
40544 +
40545 /** +
40546 * This method is like `_.isMatch` except that it accepts `customizer` which +
40547 * is invoked to compare values. If `customizer` returns `undefined`, comparisons +
40548 * are handled by the method instead. The `customizer` is invoked with five +
40549 * arguments: (objValue, srcValue, index|key, object, source). +
40550 * +
40551 * @static +
40552 * @memberOf _ +
40553 * @since 4.0.0 +
40554 * @category Lang +
40555 * @param {Object} object The object to inspect. +
40556 * @param {Object} source The object of property values to match. +
40557 * @param {Function} [customizer] The function to customize comparisons. +
40558 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
40559 * @example +
40560 * +
40561 * function isGreeting(value) { +
40562 * return /^h(?:i|ello)$/.test(value); +
40563 * } +
40564 * +
40565 * function customizer(objValue, srcValue) { +
40566 * if (isGreeting(objValue) && isGreeting(srcValue)) { +
40567 * return true; +
40568 * } +
40569 * } +
40570 * +
40571 * var object = { 'greeting': 'hello' }; +
40572 * var source = { 'greeting': 'hi' }; +
40573 * +
40574 * _.isMatchWith(object, source, customizer); +
40575 * // => true +
40576 */ +
40577 function isMatchWith(object, source, customizer) { +
40578 customizer = typeof customizer == 'function' ? customizer : undefined; +
40579 return baseIsMatch(object, source, getMatchData(source), customizer); +
40580 } +
40581 +
40582 /** +
40583 * Checks if `value` is `NaN`. +
40584 * +
40585 * **Note:** This method is based on +
40586 * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as +
40587 * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for +
40588 * `undefined` and other non-number values. +
40589 * +
40590 * @static +
40591 * @memberOf _ +
40592 * @since 0.1.0 +
40593 * @category Lang +
40594 * @param {*} value The value to check. +
40595 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +
40596 * @example +
40597 * +
40598 * _.isNaN(NaN); +
40599 * // => true +
40600 * +
40601 * _.isNaN(new Number(NaN)); +
40602 * // => true +
40603 * +
40604 * isNaN(undefined); +
40605 * // => true +
40606 * +
40607 * _.isNaN(undefined); +
40608 * // => false +
40609 */ +
40610 function isNaN(value) { +
40611 // An `NaN` primitive is the only value that is not equal to itself. +
40612 // Perform the `toStringTag` check first to avoid errors with some +
40613 // ActiveX objects in IE. +
40614 return isNumber(value) && value != +value; +
40615 } +
40616 +
40617 /** +
40618 * Checks if `value` is a pristine native function. +
40619 * +
40620 * **Note:** This method can't reliably detect native functions in the presence +
40621 * of the core-js package because core-js circumvents this kind of detection. +
40622 * Despite multiple requests, the core-js maintainer has made it clear: any +
40623 * attempt to fix the detection will be obstructed. As a result, we're left +
40624 * with little choice but to throw an error. Unfortunately, this also affects +
40625 * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), +
40626 * which rely on core-js. +
40627 * +
40628 * @static +
40629 * @memberOf _ +
40630 * @since 3.0.0 +
40631 * @category Lang +
40632 * @param {*} value The value to check. +
40633 * @returns {boolean} Returns `true` if `value` is a native function, +
40634 * else `false`. +
40635 * @example +
40636 * +
40637 * _.isNative(Array.prototype.push); +
40638 * // => true +
40639 * +
40640 * _.isNative(_); +
40641 * // => false +
40642 */ +
40643 function isNative(value) { +
40644 if (isMaskable(value)) { +
40645 throw new Error(CORE_ERROR_TEXT); +
40646 } +
40647 return baseIsNative(value); +
40648 } +
40649 +
40650 /** +
40651 * Checks if `value` is `null`. +
40652 * +
40653 * @static +
40654 * @memberOf _ +
40655 * @since 0.1.0 +
40656 * @category Lang +
40657 * @param {*} value The value to check. +
40658 * @returns {boolean} Returns `true` if `value` is `null`, else `false`. +
40659 * @example +
40660 * +
40661 * _.isNull(null); +
40662 * // => true +
40663 * +
40664 * _.isNull(void 0); +
40665 * // => false +
40666 */ +
40667 function isNull(value) { +
40668 return value === null; +
40669 } +
40670 +
40671 /** +
40672 * Checks if `value` is `null` or `undefined`. +
40673 * +
40674 * @static +
40675 * @memberOf _ +
40676 * @since 4.0.0 +
40677 * @category Lang +
40678 * @param {*} value The value to check. +
40679 * @returns {boolean} Returns `true` if `value` is nullish, else `false`. +
40680 * @example +
40681 * +
40682 * _.isNil(null); +
40683 * // => true +
40684 * +
40685 * _.isNil(void 0); +
40686 * // => true +
40687 * +
40688 * _.isNil(NaN); +
40689 * // => false +
40690 */ +
40691 function isNil(value) { +
40692 return value == null; +
40693 } +
40694 +
40695 /** +
40696 * Checks if `value` is classified as a `Number` primitive or object. +
40697 * +
40698 * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are +
40699 * classified as numbers, use the `_.isFinite` method. +
40700 * +
40701 * @static +
40702 * @memberOf _ +
40703 * @since 0.1.0 +
40704 * @category Lang +
40705 * @param {*} value The value to check. +
40706 * @returns {boolean} Returns `true` if `value` is a number, else `false`. +
40707 * @example +
40708 * +
40709 * _.isNumber(3); +
40710 * // => true +
40711 * +
40712 * _.isNumber(Number.MIN_VALUE); +
40713 * // => true +
40714 * +
40715 * _.isNumber(Infinity); +
40716 * // => true +
40717 * +
40718 * _.isNumber('3'); +
40719 * // => false +
40720 */ +
40721 function isNumber(value) { +
40722 return typeof value == 'number' || +
40723 (isObjectLike(value) && baseGetTag(value) == numberTag); +
40724 } +
40725 +
40726 /** +
40727 * Checks if `value` is a plain object, that is, an object created by the +
40728 * `Object` constructor or one with a `[[Prototype]]` of `null`. +
40729 * +
40730 * @static +
40731 * @memberOf _ +
40732 * @since 0.8.0 +
40733 * @category Lang +
40734 * @param {*} value The value to check. +
40735 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. +
40736 * @example +
40737 * +
40738 * function Foo() { +
40739 * this.a = 1; +
40740 * } +
40741 * +
40742 * _.isPlainObject(new Foo); +
40743 * // => false +
40744 * +
40745 * _.isPlainObject([1, 2, 3]); +
40746 * // => false +
40747 * +
40748 * _.isPlainObject({ 'x': 0, 'y': 0 }); +
40749 * // => true +
40750 * +
40751 * _.isPlainObject(Object.create(null)); +
40752 * // => true +
40753 */ +
40754 function isPlainObject(value) { +
40755 if (!isObjectLike(value) || baseGetTag(value) != objectTag) { +
40756 return false; +
40757 } +
40758 var proto = getPrototype(value); +
40759 if (proto === null) { +
40760 return true; +
40761 } +
40762 var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; +
40763 return typeof Ctor == 'function' && Ctor instanceof Ctor && +
40764 funcToString.call(Ctor) == objectCtorString; +
40765 } +
40766 +
40767 /** +
40768 * Checks if `value` is classified as a `RegExp` object. +
40769 * +
40770 * @static +
40771 * @memberOf _ +
40772 * @since 0.1.0 +
40773 * @category Lang +
40774 * @param {*} value The value to check. +
40775 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +
40776 * @example +
40777 * +
40778 * _.isRegExp(/abc/); +
40779 * // => true +
40780 * +
40781 * _.isRegExp('/abc/'); +
40782 * // => false +
40783 */ +
40784 var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; +
40785 +
40786 /** +
40787 * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 +
40788 * double precision number which isn't the result of a rounded unsafe integer. +
40789 * +
40790 * **Note:** This method is based on +
40791 * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). +
40792 * +
40793 * @static +
40794 * @memberOf _ +
40795 * @since 4.0.0 +
40796 * @category Lang +
40797 * @param {*} value The value to check. +
40798 * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. +
40799 * @example +
40800 * +
40801 * _.isSafeInteger(3); +
40802 * // => true +
40803 * +
40804 * _.isSafeInteger(Number.MIN_VALUE); +
40805 * // => false +
40806 * +
40807 * _.isSafeInteger(Infinity); +
40808 * // => false +
40809 * +
40810 * _.isSafeInteger('3'); +
40811 * // => false +
40812 */ +
40813 function isSafeInteger(value) { +
40814 return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +
40815 } +
40816 +
40817 /** +
40818 * Checks if `value` is classified as a `Set` object. +
40819 * +
40820 * @static +
40821 * @memberOf _ +
40822 * @since 4.3.0 +
40823 * @category Lang +
40824 * @param {*} value The value to check. +
40825 * @returns {boolean} Returns `true` if `value` is a set, else `false`. +
40826 * @example +
40827 * +
40828 * _.isSet(new Set); +
40829 * // => true +
40830 * +
40831 * _.isSet(new WeakSet); +
40832 * // => false +
40833 */ +
40834 var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; +
40835 +
40836 /** +
40837 * Checks if `value` is classified as a `String` primitive or object. +
40838 * +
40839 * @static +
40840 * @since 0.1.0 +
40841 * @memberOf _ +
40842 * @category Lang +
40843 * @param {*} value The value to check. +
40844 * @returns {boolean} Returns `true` if `value` is a string, else `false`. +
40845 * @example +
40846 * +
40847 * _.isString('abc'); +
40848 * // => true +
40849 * +
40850 * _.isString(1); +
40851 * // => false +
40852 */ +
40853 function isString(value) { +
40854 return typeof value == 'string' || +
40855 (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +
40856 } +
40857 +
40858 /** +
40859 * Checks if `value` is classified as a `Symbol` primitive or object. +
40860 * +
40861 * @static +
40862 * @memberOf _ +
40863 * @since 4.0.0 +
40864 * @category Lang +
40865 * @param {*} value The value to check. +
40866 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. +
40867 * @example +
40868 * +
40869 * _.isSymbol(Symbol.iterator); +
40870 * // => true +
40871 * +
40872 * _.isSymbol('abc'); +
40873 * // => false +
40874 */ +
40875 function isSymbol(value) { +
40876 return typeof value == 'symbol' || +
40877 (isObjectLike(value) && baseGetTag(value) == symbolTag); +
40878 } +
40879 +
40880 /** +
40881 * Checks if `value` is classified as a typed array. +
40882 * +
40883 * @static +
40884 * @memberOf _ +
40885 * @since 3.0.0 +
40886 * @category Lang +
40887 * @param {*} value The value to check. +
40888 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +
40889 * @example +
40890 * +
40891 * _.isTypedArray(new Uint8Array); +
40892 * // => true +
40893 * +
40894 * _.isTypedArray([]); +
40895 * // => false +
40896 */ +
40897 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; +
40898 +
40899 /** +
40900 * Checks if `value` is `undefined`. +
40901 * +
40902 * @static +
40903 * @since 0.1.0 +
40904 * @memberOf _ +
40905 * @category Lang +
40906 * @param {*} value The value to check. +
40907 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. +
40908 * @example +
40909 * +
40910 * _.isUndefined(void 0); +
40911 * // => true +
40912 * +
40913 * _.isUndefined(null); +
40914 * // => false +
40915 */ +
40916 function isUndefined(value) { +
40917 return value === undefined; +
40918 } +
40919 +
40920 /** +
40921 * Checks if `value` is classified as a `WeakMap` object. +
40922 * +
40923 * @static +
40924 * @memberOf _ +
40925 * @since 4.3.0 +
40926 * @category Lang +
40927 * @param {*} value The value to check. +
40928 * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. +
40929 * @example +
40930 * +
40931 * _.isWeakMap(new WeakMap); +
40932 * // => true +
40933 * +
40934 * _.isWeakMap(new Map); +
40935 * // => false +
40936 */ +
40937 function isWeakMap(value) { +
40938 return isObjectLike(value) && getTag(value) == weakMapTag; +
40939 } +
40940 +
40941 /** +
40942 * Checks if `value` is classified as a `WeakSet` object. +
40943 * +
40944 * @static +
40945 * @memberOf _ +
40946 * @since 4.3.0 +
40947 * @category Lang +
40948 * @param {*} value The value to check. +
40949 * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. +
40950 * @example +
40951 * +
40952 * _.isWeakSet(new WeakSet); +
40953 * // => true +
40954 * +
40955 * _.isWeakSet(new Set); +
40956 * // => false +
40957 */ +
40958 function isWeakSet(value) { +
40959 return isObjectLike(value) && baseGetTag(value) == weakSetTag; +
40960 } +
40961 +
40962 /** +
40963 * Checks if `value` is less than `other`. +
40964 * +
40965 * @static +
40966 * @memberOf _ +
40967 * @since 3.9.0 +
40968 * @category Lang +
40969 * @param {*} value The value to compare. +
40970 * @param {*} other The other value to compare. +
40971 * @returns {boolean} Returns `true` if `value` is less than `other`, +
40972 * else `false`. +
40973 * @see _.gt +
40974 * @example +
40975 * +
40976 * _.lt(1, 3); +
40977 * // => true +
40978 * +
40979 * _.lt(3, 3); +
40980 * // => false +
40981 * +
40982 * _.lt(3, 1); +
40983 * // => false +
40984 */ +
40985 var lt = createRelationalOperation(baseLt); +
40986 +
40987 /** +
40988 * Checks if `value` is less than or equal to `other`. +
40989 * +
40990 * @static +
40991 * @memberOf _ +
40992 * @since 3.9.0 +
40993 * @category Lang +
40994 * @param {*} value The value to compare. +
40995 * @param {*} other The other value to compare. +
40996 * @returns {boolean} Returns `true` if `value` is less than or equal to +
40997 * `other`, else `false`. +
40998 * @see _.gte +
40999 * @example +
41000 * +
41001 * _.lte(1, 3); +
41002 * // => true +
41003 * +
41004 * _.lte(3, 3); +
41005 * // => true +
41006 * +
41007 * _.lte(3, 1); +
41008 * // => false +
41009 */ +
41010 var lte = createRelationalOperation(function(value, other) { +
41011 return value <= other; +
41012 }); +
41013 +
41014 /** +
41015 * Converts `value` to an array. +
41016 * +
41017 * @static +
41018 * @since 0.1.0 +
41019 * @memberOf _ +
41020 * @category Lang +
41021 * @param {*} value The value to convert. +
41022 * @returns {Array} Returns the converted array. +
41023 * @example +
41024 * +
41025 * _.toArray({ 'a': 1, 'b': 2 }); +
41026 * // => [1, 2] +
41027 * +
41028 * _.toArray('abc'); +
41029 * // => ['a', 'b', 'c'] +
41030 * +
41031 * _.toArray(1); +
41032 * // => [] +
41033 * +
41034 * _.toArray(null); +
41035 * // => [] +
41036 */ +
41037 function toArray(value) { +
41038 if (!value) { +
41039 return []; +
41040 } +
41041 if (isArrayLike(value)) { +
41042 return isString(value) ? stringToArray(value) : copyArray(value); +
41043 } +
41044 if (symIterator && value[symIterator]) { +
41045 return iteratorToArray(value[symIterator]()); +
41046 } +
41047 var tag = getTag(value), +
41048 func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); +
41049 +
41050 return func(value); +
41051 } +
41052 +
41053 /** +
41054 * Converts `value` to a finite number. +
41055 * +
41056 * @static +
41057 * @memberOf _ +
41058 * @since 4.12.0 +
41059 * @category Lang +
41060 * @param {*} value The value to convert. +
41061 * @returns {number} Returns the converted number. +
41062 * @example +
41063 * +
41064 * _.toFinite(3.2); +
41065 * // => 3.2 +
41066 * +
41067 * _.toFinite(Number.MIN_VALUE); +
41068 * // => 5e-324 +
41069 * +
41070 * _.toFinite(Infinity); +
41071 * // => 1.7976931348623157e+308 +
41072 * +
41073 * _.toFinite('3.2'); +
41074 * // => 3.2 +
41075 */ +
41076 function toFinite(value) { +
41077 if (!value) { +
41078 return value === 0 ? value : 0; +
41079 } +
41080 value = toNumber(value); +
41081 if (value === INFINITY || value === -INFINITY) { +
41082 var sign = (value < 0 ? -1 : 1); +
41083 return sign * MAX_INTEGER; +
41084 } +
41085 return value === value ? value : 0; +
41086 } +
41087 +
41088 /** +
41089 * Converts `value` to an integer. +
41090 * +
41091 * **Note:** This method is loosely based on +
41092 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). +
41093 * +
41094 * @static +
41095 * @memberOf _ +
41096 * @since 4.0.0 +
41097 * @category Lang +
41098 * @param {*} value The value to convert. +
41099 * @returns {number} Returns the converted integer. +
41100 * @example +
41101 * +
41102 * _.toInteger(3.2); +
41103 * // => 3 +
41104 * +
41105 * _.toInteger(Number.MIN_VALUE); +
41106 * // => 0 +
41107 * +
41108 * _.toInteger(Infinity); +
41109 * // => 1.7976931348623157e+308 +
41110 * +
41111 * _.toInteger('3.2'); +
41112 * // => 3 +
41113 */ +
41114 function toInteger(value) { +
41115 var result = toFinite(value), +
41116 remainder = result % 1; +
41117 +
41118 return result === result ? (remainder ? result - remainder : result) : 0; +
41119 } +
41120 +
41121 /** +
41122 * Converts `value` to an integer suitable for use as the length of an +
41123 * array-like object. +
41124 * +
41125 * **Note:** This method is based on +
41126 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +
41127 * +
41128 * @static +
41129 * @memberOf _ +
41130 * @since 4.0.0 +
41131 * @category Lang +
41132 * @param {*} value The value to convert. +
41133 * @returns {number} Returns the converted integer. +
41134 * @example +
41135 * +
41136 * _.toLength(3.2); +
41137 * // => 3 +
41138 * +
41139 * _.toLength(Number.MIN_VALUE); +
41140 * // => 0 +
41141 * +
41142 * _.toLength(Infinity); +
41143 * // => 4294967295 +
41144 * +
41145 * _.toLength('3.2'); +
41146 * // => 3 +
41147 */ +
41148 function toLength(value) { +
41149 return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; +
41150 } +
41151 +
41152 /** +
41153 * Converts `value` to a number. +
41154 * +
41155 * @static +
41156 * @memberOf _ +
41157 * @since 4.0.0 +
41158 * @category Lang +
41159 * @param {*} value The value to process. +
41160 * @returns {number} Returns the number. +
41161 * @example +
41162 * +
41163 * _.toNumber(3.2); +
41164 * // => 3.2 +
41165 * +
41166 * _.toNumber(Number.MIN_VALUE); +
41167 * // => 5e-324 +
41168 * +
41169 * _.toNumber(Infinity); +
41170 * // => Infinity +
41171 * +
41172 * _.toNumber('3.2'); +
41173 * // => 3.2 +
41174 */ +
41175 function toNumber(value) { +
41176 if (typeof value == 'number') { +
41177 return value; +
41178 } +
41179 if (isSymbol(value)) { +
41180 return NAN; +
41181 } +
41182 if (isObject(value)) { +
41183 var other = typeof value.valueOf == 'function' ? value.valueOf() : value; +
41184 value = isObject(other) ? (other + '') : other; +
41185 } +
41186 if (typeof value != 'string') { +
41187 return value === 0 ? value : +value; +
41188 } +
41189 value = value.replace(reTrim, ''); +
41190 var isBinary = reIsBinary.test(value); +
41191 return (isBinary || reIsOctal.test(value)) +
41192 ? freeParseInt(value.slice(2), isBinary ? 2 : 8) +
41193 : (reIsBadHex.test(value) ? NAN : +value); +
41194 } +
41195 +
41196 /** +
41197 * Converts `value` to a plain object flattening inherited enumerable string +
41198 * keyed properties of `value` to own properties of the plain object. +
41199 * +
41200 * @static +
41201 * @memberOf _ +
41202 * @since 3.0.0 +
41203 * @category Lang +
41204 * @param {*} value The value to convert. +
41205 * @returns {Object} Returns the converted plain object. +
41206 * @example +
41207 * +
41208 * function Foo() { +
41209 * this.b = 2; +
41210 * } +
41211 * +
41212 * Foo.prototype.c = 3; +
41213 * +
41214 * _.assign({ 'a': 1 }, new Foo); +
41215 * // => { 'a': 1, 'b': 2 } +
41216 * +
41217 * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); +
41218 * // => { 'a': 1, 'b': 2, 'c': 3 } +
41219 */ +
41220 function toPlainObject(value) { +
41221 return copyObject(value, keysIn(value)); +
41222 } +
41223 +
41224 /** +
41225 * Converts `value` to a safe integer. A safe integer can be compared and +
41226 * represented correctly. +
41227 * +
41228 * @static +
41229 * @memberOf _ +
41230 * @since 4.0.0 +
41231 * @category Lang +
41232 * @param {*} value The value to convert. +
41233 * @returns {number} Returns the converted integer. +
41234 * @example +
41235 * +
41236 * _.toSafeInteger(3.2); +
41237 * // => 3 +
41238 * +
41239 * _.toSafeInteger(Number.MIN_VALUE); +
41240 * // => 0 +
41241 * +
41242 * _.toSafeInteger(Infinity); +
41243 * // => 9007199254740991 +
41244 * +
41245 * _.toSafeInteger('3.2'); +
41246 * // => 3 +
41247 */ +
41248 function toSafeInteger(value) { +
41249 return value +
41250 ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) +
41251 : (value === 0 ? value : 0); +
41252 } +
41253 +
41254 /** +
41255 * Converts `value` to a string. An empty string is returned for `null` +
41256 * and `undefined` values. The sign of `-0` is preserved. +
41257 * +
41258 * @static +
41259 * @memberOf _ +
41260 * @since 4.0.0 +
41261 * @category Lang +
41262 * @param {*} value The value to convert. +
41263 * @returns {string} Returns the converted string. +
41264 * @example +
41265 * +
41266 * _.toString(null); +
41267 * // => '' +
41268 * +
41269 * _.toString(-0); +
41270 * // => '-0' +
41271 * +
41272 * _.toString([1, 2, 3]); +
41273 * // => '1,2,3' +
41274 */ +
41275 function toString(value) { +
41276 return value == null ? '' : baseToString(value); +
41277 } +
41278 +
41279 /*------------------------------------------------------------------------*/ +
41280 +
41281 /** +
41282 * Assigns own enumerable string keyed properties of source objects to the +
41283 * destination object. Source objects are applied from left to right. +
41284 * Subsequent sources overwrite property assignments of previous sources. +
41285 * +
41286 * **Note:** This method mutates `object` and is loosely based on +
41287 * [`Object.assign`](https://mdn.io/Object/assign). +
41288 * +
41289 * @static +
41290 * @memberOf _ +
41291 * @since 0.10.0 +
41292 * @category Object +
41293 * @param {Object} object The destination object. +
41294 * @param {...Object} [sources] The source objects. +
41295 * @returns {Object} Returns `object`. +
41296 * @see _.assignIn +
41297 * @example +
41298 * +
41299 * function Foo() { +
41300 * this.a = 1; +
41301 * } +
41302 * +
41303 * function Bar() { +
41304 * this.c = 3; +
41305 * } +
41306 * +
41307 * Foo.prototype.b = 2; +
41308 * Bar.prototype.d = 4; +
41309 * +
41310 * _.assign({ 'a': 0 }, new Foo, new Bar); +
41311 * // => { 'a': 1, 'c': 3 } +
41312 */ +
41313 var assign = createAssigner(function(object, source) { +
41314 if (isPrototype(source) || isArrayLike(source)) { +
41315 copyObject(source, keys(source), object); +
41316 return; +
41317 } +
41318 for (var key in source) { +
41319 if (hasOwnProperty.call(source, key)) { +
41320 assignValue(object, key, source[key]); +
41321 } +
41322 } +
41323 }); +
41324 +
41325 /** +
41326 * This method is like `_.assign` except that it iterates over own and +
41327 * inherited source properties. +
41328 * +
41329 * **Note:** This method mutates `object`. +
41330 * +
41331 * @static +
41332 * @memberOf _ +
41333 * @since 4.0.0 +
41334 * @alias extend +
41335 * @category Object +
41336 * @param {Object} object The destination object. +
41337 * @param {...Object} [sources] The source objects. +
41338 * @returns {Object} Returns `object`. +
41339 * @see _.assign +
41340 * @example +
41341 * +
41342 * function Foo() { +
41343 * this.a = 1; +
41344 * } +
41345 * +
41346 * function Bar() { +
41347 * this.c = 3; +
41348 * } +
41349 * +
41350 * Foo.prototype.b = 2; +
41351 * Bar.prototype.d = 4; +
41352 * +
41353 * _.assignIn({ 'a': 0 }, new Foo, new Bar); +
41354 * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } +
41355 */ +
41356 var assignIn = createAssigner(function(object, source) { +
41357 copyObject(source, keysIn(source), object); +
41358 }); +
41359 +
41360 /** +
41361 * This method is like `_.assignIn` except that it accepts `customizer` +
41362 * which is invoked to produce the assigned values. If `customizer` returns +
41363 * `undefined`, assignment is handled by the method instead. The `customizer` +
41364 * is invoked with five arguments: (objValue, srcValue, key, object, source). +
41365 * +
41366 * **Note:** This method mutates `object`. +
41367 * +
41368 * @static +
41369 * @memberOf _ +
41370 * @since 4.0.0 +
41371 * @alias extendWith +
41372 * @category Object +
41373 * @param {Object} object The destination object. +
41374 * @param {...Object} sources The source objects. +
41375 * @param {Function} [customizer] The function to customize assigned values. +
41376 * @returns {Object} Returns `object`. +
41377 * @see _.assignWith +
41378 * @example +
41379 * +
41380 * function customizer(objValue, srcValue) { +
41381 * return _.isUndefined(objValue) ? srcValue : objValue; +
41382 * } +
41383 * +
41384 * var defaults = _.partialRight(_.assignInWith, customizer); +
41385 * +
41386 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
41387 * // => { 'a': 1, 'b': 2 } +
41388 */ +
41389 var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { +
41390 copyObject(source, keysIn(source), object, customizer); +
41391 }); +
41392 +
41393 /** +
41394 * This method is like `_.assign` except that it accepts `customizer` +
41395 * which is invoked to produce the assigned values. If `customizer` returns +
41396 * `undefined`, assignment is handled by the method instead. The `customizer` +
41397 * is invoked with five arguments: (objValue, srcValue, key, object, source). +
41398 * +
41399 * **Note:** This method mutates `object`. +
41400 * +
41401 * @static +
41402 * @memberOf _ +
41403 * @since 4.0.0 +
41404 * @category Object +
41405 * @param {Object} object The destination object. +
41406 * @param {...Object} sources The source objects. +
41407 * @param {Function} [customizer] The function to customize assigned values. +
41408 * @returns {Object} Returns `object`. +
41409 * @see _.assignInWith +
41410 * @example +
41411 * +
41412 * function customizer(objValue, srcValue) { +
41413 * return _.isUndefined(objValue) ? srcValue : objValue; +
41414 * } +
41415 * +
41416 * var defaults = _.partialRight(_.assignWith, customizer); +
41417 * +
41418 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
41419 * // => { 'a': 1, 'b': 2 } +
41420 */ +
41421 var assignWith = createAssigner(function(object, source, srcIndex, customizer) { +
41422 copyObject(source, keys(source), object, customizer); +
41423 }); +
41424 +
41425 /** +
41426 * Creates an array of values corresponding to `paths` of `object`. +
41427 * +
41428 * @static +
41429 * @memberOf _ +
41430 * @since 1.0.0 +
41431 * @category Object +
41432 * @param {Object} object The object to iterate over. +
41433 * @param {...(string|string[])} [paths] The property paths to pick. +
41434 * @returns {Array} Returns the picked values. +
41435 * @example +
41436 * +
41437 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +
41438 * +
41439 * _.at(object, ['a[0].b.c', 'a[1]']); +
41440 * // => [3, 4] +
41441 */ +
41442 var at = flatRest(baseAt); +
41443 +
41444 /** +
41445 * Creates an object that inherits from the `prototype` object. If a +
41446 * `properties` object is given, its own enumerable string keyed properties +
41447 * are assigned to the created object. +
41448 * +
41449 * @static +
41450 * @memberOf _ +
41451 * @since 2.3.0 +
41452 * @category Object +
41453 * @param {Object} prototype The object to inherit from. +
41454 * @param {Object} [properties] The properties to assign to the object. +
41455 * @returns {Object} Returns the new object. +
41456 * @example +
41457 * +
41458 * function Shape() { +
41459 * this.x = 0; +
41460 * this.y = 0; +
41461 * } +
41462 * +
41463 * function Circle() { +
41464 * Shape.call(this); +
41465 * } +
41466 * +
41467 * Circle.prototype = _.create(Shape.prototype, { +
41468 * 'constructor': Circle +
41469 * }); +
41470 * +
41471 * var circle = new Circle; +
41472 * circle instanceof Circle; +
41473 * // => true +
41474 * +
41475 * circle instanceof Shape; +
41476 * // => true +
41477 */ +
41478 function create(prototype, properties) { +
41479 var result = baseCreate(prototype); +
41480 return properties == null ? result : baseAssign(result, properties); +
41481 } +
41482 +
41483 /** +
41484 * Assigns own and inherited enumerable string keyed properties of source +
41485 * objects to the destination object for all destination properties that +
41486 * resolve to `undefined`. Source objects are applied from left to right. +
41487 * Once a property is set, additional values of the same property are ignored. +
41488 * +
41489 * **Note:** This method mutates `object`. +
41490 * +
41491 * @static +
41492 * @since 0.1.0 +
41493 * @memberOf _ +
41494 * @category Object +
41495 * @param {Object} object The destination object. +
41496 * @param {...Object} [sources] The source objects. +
41497 * @returns {Object} Returns `object`. +
41498 * @see _.defaultsDeep +
41499 * @example +
41500 * +
41501 * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
41502 * // => { 'a': 1, 'b': 2 } +
41503 */ +
41504 var defaults = baseRest(function(object, sources) { +
41505 object = Object(object); +
41506 +
41507 var index = -1; +
41508 var length = sources.length; +
41509 var guard = length > 2 ? sources[2] : undefined; +
41510 +
41511 if (guard && isIterateeCall(sources[0], sources[1], guard)) { +
41512 length = 1; +
41513 } +
41514 +
41515 while (++index < length) { +
41516 var source = sources[index]; +
41517 var props = keysIn(source); +
41518 var propsIndex = -1; +
41519 var propsLength = props.length; +
41520 +
41521 while (++propsIndex < propsLength) { +
41522 var key = props[propsIndex]; +
41523 var value = object[key]; +
41524 +
41525 if (value === undefined || +
41526 (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { +
41527 object[key] = source[key]; +
41528 } +
41529 } +
41530 } +
41531 +
41532 return object; +
41533 }); +
41534 +
41535 /** +
41536 * This method is like `_.defaults` except that it recursively assigns +
41537 * default properties. +
41538 * +
41539 * **Note:** This method mutates `object`. +
41540 * +
41541 * @static +
41542 * @memberOf _ +
41543 * @since 3.10.0 +
41544 * @category Object +
41545 * @param {Object} object The destination object. +
41546 * @param {...Object} [sources] The source objects. +
41547 * @returns {Object} Returns `object`. +
41548 * @see _.defaults +
41549 * @example +
41550 * +
41551 * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); +
41552 * // => { 'a': { 'b': 2, 'c': 3 } } +
41553 */ +
41554 var defaultsDeep = baseRest(function(args) { +
41555 args.push(undefined, customDefaultsMerge); +
41556 return apply(mergeWith, undefined, args); +
41557 }); +
41558 +
41559 /** +
41560 * This method is like `_.find` except that it returns the key of the first +
41561 * element `predicate` returns truthy for instead of the element itself. +
41562 * +
41563 * @static +
41564 * @memberOf _ +
41565 * @since 1.1.0 +
41566 * @category Object +
41567 * @param {Object} object The object to inspect. +
41568 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
41569 * @returns {string|undefined} Returns the key of the matched element, +
41570 * else `undefined`. +
41571 * @example +
41572 * +
41573 * var users = { +
41574 * 'barney': { 'age': 36, 'active': true }, +
41575 * 'fred': { 'age': 40, 'active': false }, +
41576 * 'pebbles': { 'age': 1, 'active': true } +
41577 * }; +
41578 * +
41579 * _.findKey(users, function(o) { return o.age < 40; }); +
41580 * // => 'barney' (iteration order is not guaranteed) +
41581 * +
41582 * // The `_.matches` iteratee shorthand. +
41583 * _.findKey(users, { 'age': 1, 'active': true }); +
41584 * // => 'pebbles' +
41585 * +
41586 * // The `_.matchesProperty` iteratee shorthand. +
41587 * _.findKey(users, ['active', false]); +
41588 * // => 'fred' +
41589 * +
41590 * // The `_.property` iteratee shorthand. +
41591 * _.findKey(users, 'active'); +
41592 * // => 'barney' +
41593 */ +
41594 function findKey(object, predicate) { +
41595 return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); +
41596 } +
41597 +
41598 /** +
41599 * This method is like `_.findKey` except that it iterates over elements of +
41600 * a collection in the opposite order. +
41601 * +
41602 * @static +
41603 * @memberOf _ +
41604 * @since 2.0.0 +
41605 * @category Object +
41606 * @param {Object} object The object to inspect. +
41607 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
41608 * @returns {string|undefined} Returns the key of the matched element, +
41609 * else `undefined`. +
41610 * @example +
41611 * +
41612 * var users = { +
41613 * 'barney': { 'age': 36, 'active': true }, +
41614 * 'fred': { 'age': 40, 'active': false }, +
41615 * 'pebbles': { 'age': 1, 'active': true } +
41616 * }; +
41617 * +
41618 * _.findLastKey(users, function(o) { return o.age < 40; }); +
41619 * // => returns 'pebbles' assuming `_.findKey` returns 'barney' +
41620 * +
41621 * // The `_.matches` iteratee shorthand. +
41622 * _.findLastKey(users, { 'age': 36, 'active': true }); +
41623 * // => 'barney' +
41624 * +
41625 * // The `_.matchesProperty` iteratee shorthand. +
41626 * _.findLastKey(users, ['active', false]); +
41627 * // => 'fred' +
41628 * +
41629 * // The `_.property` iteratee shorthand. +
41630 * _.findLastKey(users, 'active'); +
41631 * // => 'pebbles' +
41632 */ +
41633 function findLastKey(object, predicate) { +
41634 return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); +
41635 } +
41636 +
41637 /** +
41638 * Iterates over own and inherited enumerable string keyed properties of an +
41639 * object and invokes `iteratee` for each property. The iteratee is invoked +
41640 * with three arguments: (value, key, object). Iteratee functions may exit +
41641 * iteration early by explicitly returning `false`. +
41642 * +
41643 * @static +
41644 * @memberOf _ +
41645 * @since 0.3.0 +
41646 * @category Object +
41647 * @param {Object} object The object to iterate over. +
41648 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
41649 * @returns {Object} Returns `object`. +
41650 * @see _.forInRight +
41651 * @example +
41652 * +
41653 * function Foo() { +
41654 * this.a = 1; +
41655 * this.b = 2; +
41656 * } +
41657 * +
41658 * Foo.prototype.c = 3; +
41659 * +
41660 * _.forIn(new Foo, function(value, key) { +
41661 * console.log(key); +
41662 * }); +
41663 * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). +
41664 */ +
41665 function forIn(object, iteratee) { +
41666 return object == null +
41667 ? object +
41668 : baseFor(object, getIteratee(iteratee, 3), keysIn); +
41669 } +
41670 +
41671 /** +
41672 * This method is like `_.forIn` except that it iterates over properties of +
41673 * `object` in the opposite order. +
41674 * +
41675 * @static +
41676 * @memberOf _ +
41677 * @since 2.0.0 +
41678 * @category Object +
41679 * @param {Object} object The object to iterate over. +
41680 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
41681 * @returns {Object} Returns `object`. +
41682 * @see _.forIn +
41683 * @example +
41684 * +
41685 * function Foo() { +
41686 * this.a = 1; +
41687 * this.b = 2; +
41688 * } +
41689 * +
41690 * Foo.prototype.c = 3; +
41691 * +
41692 * _.forInRight(new Foo, function(value, key) { +
41693 * console.log(key); +
41694 * }); +
41695 * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. +
41696 */ +
41697 function forInRight(object, iteratee) { +
41698 return object == null +
41699 ? object +
41700 : baseForRight(object, getIteratee(iteratee, 3), keysIn); +
41701 } +
41702 +
41703 /** +
41704 * Iterates over own enumerable string keyed properties of an object and +
41705 * invokes `iteratee` for each property. The iteratee is invoked with three +
41706 * arguments: (value, key, object). Iteratee functions may exit iteration +
41707 * early by explicitly returning `false`. +
41708 * +
41709 * @static +
41710 * @memberOf _ +
41711 * @since 0.3.0 +
41712 * @category Object +
41713 * @param {Object} object The object to iterate over. +
41714 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
41715 * @returns {Object} Returns `object`. +
41716 * @see _.forOwnRight +
41717 * @example +
41718 * +
41719 * function Foo() { +
41720 * this.a = 1; +
41721 * this.b = 2; +
41722 * } +
41723 * +
41724 * Foo.prototype.c = 3; +
41725 * +
41726 * _.forOwn(new Foo, function(value, key) { +
41727 * console.log(key); +
41728 * }); +
41729 * // => Logs 'a' then 'b' (iteration order is not guaranteed). +
41730 */ +
41731 function forOwn(object, iteratee) { +
41732 return object && baseForOwn(object, getIteratee(iteratee, 3)); +
41733 } +
41734 +
41735 /** +
41736 * This method is like `_.forOwn` except that it iterates over properties of +
41737 * `object` in the opposite order. +
41738 * +
41739 * @static +
41740 * @memberOf _ +
41741 * @since 2.0.0 +
41742 * @category Object +
41743 * @param {Object} object The object to iterate over. +
41744 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
41745 * @returns {Object} Returns `object`. +
41746 * @see _.forOwn +
41747 * @example +
41748 * +
41749 * function Foo() { +
41750 * this.a = 1; +
41751 * this.b = 2; +
41752 * } +
41753 * +
41754 * Foo.prototype.c = 3; +
41755 * +
41756 * _.forOwnRight(new Foo, function(value, key) { +
41757 * console.log(key); +
41758 * }); +
41759 * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. +
41760 */ +
41761 function forOwnRight(object, iteratee) { +
41762 return object && baseForOwnRight(object, getIteratee(iteratee, 3)); +
41763 } +
41764 +
41765 /** +
41766 * Creates an array of function property names from own enumerable properties +
41767 * of `object`. +
41768 * +
41769 * @static +
41770 * @since 0.1.0 +
41771 * @memberOf _ +
41772 * @category Object +
41773 * @param {Object} object The object to inspect. +
41774 * @returns {Array} Returns the function names. +
41775 * @see _.functionsIn +
41776 * @example +
41777 * +
41778 * function Foo() { +
41779 * this.a = _.constant('a'); +
41780 * this.b = _.constant('b'); +
41781 * } +
41782 * +
41783 * Foo.prototype.c = _.constant('c'); +
41784 * +
41785 * _.functions(new Foo); +
41786 * // => ['a', 'b'] +
41787 */ +
41788 function functions(object) { +
41789 return object == null ? [] : baseFunctions(object, keys(object)); +
41790 } +
41791 +
41792 /** +
41793 * Creates an array of function property names from own and inherited +
41794 * enumerable properties of `object`. +
41795 * +
41796 * @static +
41797 * @memberOf _ +
41798 * @since 4.0.0 +
41799 * @category Object +
41800 * @param {Object} object The object to inspect. +
41801 * @returns {Array} Returns the function names. +
41802 * @see _.functions +
41803 * @example +
41804 * +
41805 * function Foo() { +
41806 * this.a = _.constant('a'); +
41807 * this.b = _.constant('b'); +
41808 * } +
41809 * +
41810 * Foo.prototype.c = _.constant('c'); +
41811 * +
41812 * _.functionsIn(new Foo); +
41813 * // => ['a', 'b', 'c'] +
41814 */ +
41815 function functionsIn(object) { +
41816 return object == null ? [] : baseFunctions(object, keysIn(object)); +
41817 } +
41818 +
41819 /** +
41820 * Gets the value at `path` of `object`. If the resolved value is +
41821 * `undefined`, the `defaultValue` is returned in its place. +
41822 * +
41823 * @static +
41824 * @memberOf _ +
41825 * @since 3.7.0 +
41826 * @category Object +
41827 * @param {Object} object The object to query. +
41828 * @param {Array|string} path The path of the property to get. +
41829 * @param {*} [defaultValue] The value returned for `undefined` resolved values. +
41830 * @returns {*} Returns the resolved value. +
41831 * @example +
41832 * +
41833 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
41834 * +
41835 * _.get(object, 'a[0].b.c'); +
41836 * // => 3 +
41837 * +
41838 * _.get(object, ['a', '0', 'b', 'c']); +
41839 * // => 3 +
41840 * +
41841 * _.get(object, 'a.b.c', 'default'); +
41842 * // => 'default' +
41843 */ +
41844 function get(object, path, defaultValue) { +
41845 var result = object == null ? undefined : baseGet(object, path); +
41846 return result === undefined ? defaultValue : result; +
41847 } +
41848 +
41849 /** +
41850 * Checks if `path` is a direct property of `object`. +
41851 * +
41852 * @static +
41853 * @since 0.1.0 +
41854 * @memberOf _ +
41855 * @category Object +
41856 * @param {Object} object The object to query. +
41857 * @param {Array|string} path The path to check. +
41858 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
41859 * @example +
41860 * +
41861 * var object = { 'a': { 'b': 2 } }; +
41862 * var other = _.create({ 'a': _.create({ 'b': 2 }) }); +
41863 * +
41864 * _.has(object, 'a'); +
41865 * // => true +
41866 * +
41867 * _.has(object, 'a.b'); +
41868 * // => true +
41869 * +
41870 * _.has(object, ['a', 'b']); +
41871 * // => true +
41872 * +
41873 * _.has(other, 'a'); +
41874 * // => false +
41875 */ +
41876 function has(object, path) { +
41877 return object != null && hasPath(object, path, baseHas); +
41878 } +
41879 +
41880 /** +
41881 * Checks if `path` is a direct or inherited property of `object`. +
41882 * +
41883 * @static +
41884 * @memberOf _ +
41885 * @since 4.0.0 +
41886 * @category Object +
41887 * @param {Object} object The object to query. +
41888 * @param {Array|string} path The path to check. +
41889 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
41890 * @example +
41891 * +
41892 * var object = _.create({ 'a': _.create({ 'b': 2 }) }); +
41893 * +
41894 * _.hasIn(object, 'a'); +
41895 * // => true +
41896 * +
41897 * _.hasIn(object, 'a.b'); +
41898 * // => true +
41899 * +
41900 * _.hasIn(object, ['a', 'b']); +
41901 * // => true +
41902 * +
41903 * _.hasIn(object, 'b'); +
41904 * // => false +
41905 */ +
41906 function hasIn(object, path) { +
41907 return object != null && hasPath(object, path, baseHasIn); +
41908 } +
41909 +
41910 /** +
41911 * Creates an object composed of the inverted keys and values of `object`. +
41912 * If `object` contains duplicate values, subsequent values overwrite +
41913 * property assignments of previous values. +
41914 * +
41915 * @static +
41916 * @memberOf _ +
41917 * @since 0.7.0 +
41918 * @category Object +
41919 * @param {Object} object The object to invert. +
41920 * @returns {Object} Returns the new inverted object. +
41921 * @example +
41922 * +
41923 * var object = { 'a': 1, 'b': 2, 'c': 1 }; +
41924 * +
41925 * _.invert(object); +
41926 * // => { '1': 'c', '2': 'b' } +
41927 */ +
41928 var invert = createInverter(function(result, value, key) { +
41929 if (value != null && +
41930 typeof value.toString != 'function') { +
41931 value = nativeObjectToString.call(value); +
41932 } +
41933 +
41934 result[value] = key; +
41935 }, constant(identity)); +
41936 +
41937 /** +
41938 * This method is like `_.invert` except that the inverted object is generated +
41939 * from the results of running each element of `object` thru `iteratee`. The +
41940 * corresponding inverted value of each inverted key is an array of keys +
41941 * responsible for generating the inverted value. The iteratee is invoked +
41942 * with one argument: (value). +
41943 * +
41944 * @static +
41945 * @memberOf _ +
41946 * @since 4.1.0 +
41947 * @category Object +
41948 * @param {Object} object The object to invert. +
41949 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
41950 * @returns {Object} Returns the new inverted object. +
41951 * @example +
41952 * +
41953 * var object = { 'a': 1, 'b': 2, 'c': 1 }; +
41954 * +
41955 * _.invertBy(object); +
41956 * // => { '1': ['a', 'c'], '2': ['b'] } +
41957 * +
41958 * _.invertBy(object, function(value) { +
41959 * return 'group' + value; +
41960 * }); +
41961 * // => { 'group1': ['a', 'c'], 'group2': ['b'] } +
41962 */ +
41963 var invertBy = createInverter(function(result, value, key) { +
41964 if (value != null && +
41965 typeof value.toString != 'function') { +
41966 value = nativeObjectToString.call(value); +
41967 } +
41968 +
41969 if (hasOwnProperty.call(result, value)) { +
41970 result[value].push(key); +
41971 } else { +
41972 result[value] = [key]; +
41973 } +
41974 }, getIteratee); +
41975 +
41976 /** +
41977 * Invokes the method at `path` of `object`. +
41978 * +
41979 * @static +
41980 * @memberOf _ +
41981 * @since 4.0.0 +
41982 * @category Object +
41983 * @param {Object} object The object to query. +
41984 * @param {Array|string} path The path of the method to invoke. +
41985 * @param {...*} [args] The arguments to invoke the method with. +
41986 * @returns {*} Returns the result of the invoked method. +
41987 * @example +
41988 * +
41989 * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; +
41990 * +
41991 * _.invoke(object, 'a[0].b.c.slice', 1, 3); +
41992 * // => [2, 3] +
41993 */ +
41994 var invoke = baseRest(baseInvoke); +
41995 +
41996 /** +
41997 * Creates an array of the own enumerable property names of `object`. +
41998 * +
41999 * **Note:** Non-object values are coerced to objects. See the +
42000 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +
42001 * for more details. +
42002 * +
42003 * @static +
42004 * @since 0.1.0 +
42005 * @memberOf _ +
42006 * @category Object +
42007 * @param {Object} object The object to query. +
42008 * @returns {Array} Returns the array of property names. +
42009 * @example +
42010 * +
42011 * function Foo() { +
42012 * this.a = 1; +
42013 * this.b = 2; +
42014 * } +
42015 * +
42016 * Foo.prototype.c = 3; +
42017 * +
42018 * _.keys(new Foo); +
42019 * // => ['a', 'b'] (iteration order is not guaranteed) +
42020 * +
42021 * _.keys('hi'); +
42022 * // => ['0', '1'] +
42023 */ +
42024 function keys(object) { +
42025 return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +
42026 } +
42027 +
42028 /** +
42029 * Creates an array of the own and inherited enumerable property names of `object`. +
42030 * +
42031 * **Note:** Non-object values are coerced to objects. +
42032 * +
42033 * @static +
42034 * @memberOf _ +
42035 * @since 3.0.0 +
42036 * @category Object +
42037 * @param {Object} object The object to query. +
42038 * @returns {Array} Returns the array of property names. +
42039 * @example +
42040 * +
42041 * function Foo() { +
42042 * this.a = 1; +
42043 * this.b = 2; +
42044 * } +
42045 * +
42046 * Foo.prototype.c = 3; +
42047 * +
42048 * _.keysIn(new Foo); +
42049 * // => ['a', 'b', 'c'] (iteration order is not guaranteed) +
42050 */ +
42051 function keysIn(object) { +
42052 return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +
42053 } +
42054 +
42055 /** +
42056 * The opposite of `_.mapValues`; this method creates an object with the +
42057 * same values as `object` and keys generated by running each own enumerable +
42058 * string keyed property of `object` thru `iteratee`. The iteratee is invoked +
42059 * with three arguments: (value, key, object). +
42060 * +
42061 * @static +
42062 * @memberOf _ +
42063 * @since 3.8.0 +
42064 * @category Object +
42065 * @param {Object} object The object to iterate over. +
42066 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
42067 * @returns {Object} Returns the new mapped object. +
42068 * @see _.mapValues +
42069 * @example +
42070 * +
42071 * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { +
42072 * return key + value; +
42073 * }); +
42074 * // => { 'a1': 1, 'b2': 2 } +
42075 */ +
42076 function mapKeys(object, iteratee) { +
42077 var result = {}; +
42078 iteratee = getIteratee(iteratee, 3); +
42079 +
42080 baseForOwn(object, function(value, key, object) { +
42081 baseAssignValue(result, iteratee(value, key, object), value); +
42082 }); +
42083 return result; +
42084 } +
42085 +
42086 /** +
42087 * Creates an object with the same keys as `object` and values generated +
42088 * by running each own enumerable string keyed property of `object` thru +
42089 * `iteratee`. The iteratee is invoked with three arguments: +
42090 * (value, key, object). +
42091 * +
42092 * @static +
42093 * @memberOf _ +
42094 * @since 2.4.0 +
42095 * @category Object +
42096 * @param {Object} object The object to iterate over. +
42097 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
42098 * @returns {Object} Returns the new mapped object. +
42099 * @see _.mapKeys +
42100 * @example +
42101 * +
42102 * var users = { +
42103 * 'fred': { 'user': 'fred', 'age': 40 }, +
42104 * 'pebbles': { 'user': 'pebbles', 'age': 1 } +
42105 * }; +
42106 * +
42107 * _.mapValues(users, function(o) { return o.age; }); +
42108 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +
42109 * +
42110 * // The `_.property` iteratee shorthand. +
42111 * _.mapValues(users, 'age'); +
42112 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +
42113 */ +
42114 function mapValues(object, iteratee) { +
42115 var result = {}; +
42116 iteratee = getIteratee(iteratee, 3); +
42117 +
42118 baseForOwn(object, function(value, key, object) { +
42119 baseAssignValue(result, key, iteratee(value, key, object)); +
42120 }); +
42121 return result; +
42122 } +
42123 +
42124 /** +
42125 * This method is like `_.assign` except that it recursively merges own and +
42126 * inherited enumerable string keyed properties of source objects into the +
42127 * destination object. Source properties that resolve to `undefined` are +
42128 * skipped if a destination value exists. Array and plain object properties +
42129 * are merged recursively. Other objects and value types are overridden by +
42130 * assignment. Source objects are applied from left to right. Subsequent +
42131 * sources overwrite property assignments of previous sources. +
42132 * +
42133 * **Note:** This method mutates `object`. +
42134 * +
42135 * @static +
42136 * @memberOf _ +
42137 * @since 0.5.0 +
42138 * @category Object +
42139 * @param {Object} object The destination object. +
42140 * @param {...Object} [sources] The source objects. +
42141 * @returns {Object} Returns `object`. +
42142 * @example +
42143 * +
42144 * var object = { +
42145 * 'a': [{ 'b': 2 }, { 'd': 4 }] +
42146 * }; +
42147 * +
42148 * var other = { +
42149 * 'a': [{ 'c': 3 }, { 'e': 5 }] +
42150 * }; +
42151 * +
42152 * _.merge(object, other); +
42153 * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } +
42154 */ +
42155 var merge = createAssigner(function(object, source, srcIndex) { +
42156 baseMerge(object, source, srcIndex); +
42157 }); +
42158 +
42159 /** +
42160 * This method is like `_.merge` except that it accepts `customizer` which +
42161 * is invoked to produce the merged values of the destination and source +
42162 * properties. If `customizer` returns `undefined`, merging is handled by the +
42163 * method instead. The `customizer` is invoked with six arguments: +
42164 * (objValue, srcValue, key, object, source, stack). +
42165 * +
42166 * **Note:** This method mutates `object`. +
42167 * +
42168 * @static +
42169 * @memberOf _ +
42170 * @since 4.0.0 +
42171 * @category Object +
42172 * @param {Object} object The destination object. +
42173 * @param {...Object} sources The source objects. +
42174 * @param {Function} customizer The function to customize assigned values. +
42175 * @returns {Object} Returns `object`. +
42176 * @example +
42177 * +
42178 * function customizer(objValue, srcValue) { +
42179 * if (_.isArray(objValue)) { +
42180 * return objValue.concat(srcValue); +
42181 * } +
42182 * } +
42183 * +
42184 * var object = { 'a': [1], 'b': [2] }; +
42185 * var other = { 'a': [3], 'b': [4] }; +
42186 * +
42187 * _.mergeWith(object, other, customizer); +
42188 * // => { 'a': [1, 3], 'b': [2, 4] } +
42189 */ +
42190 var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { +
42191 baseMerge(object, source, srcIndex, customizer); +
42192 }); +
42193 +
42194 /** +
42195 * The opposite of `_.pick`; this method creates an object composed of the +
42196 * own and inherited enumerable property paths of `object` that are not omitted. +
42197 * +
42198 * **Note:** This method is considerably slower than `_.pick`. +
42199 * +
42200 * @static +
42201 * @since 0.1.0 +
42202 * @memberOf _ +
42203 * @category Object +
42204 * @param {Object} object The source object. +
42205 * @param {...(string|string[])} [paths] The property paths to omit. +
42206 * @returns {Object} Returns the new object. +
42207 * @example +
42208 * +
42209 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
42210 * +
42211 * _.omit(object, ['a', 'c']); +
42212 * // => { 'b': '2' } +
42213 */ +
42214 var omit = flatRest(function(object, paths) { +
42215 var result = {}; +
42216 if (object == null) { +
42217 return result; +
42218 } +
42219 var isDeep = false; +
42220 paths = arrayMap(paths, function(path) { +
42221 path = castPath(path, object); +
42222 isDeep || (isDeep = path.length > 1); +
42223 return path; +
42224 }); +
42225 copyObject(object, getAllKeysIn(object), result); +
42226 if (isDeep) { +
42227 result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); +
42228 } +
42229 var length = paths.length; +
42230 while (length--) { +
42231 baseUnset(result, paths[length]); +
42232 } +
42233 return result; +
42234 }); +
42235 +
42236 /** +
42237 * The opposite of `_.pickBy`; this method creates an object composed of +
42238 * the own and inherited enumerable string keyed properties of `object` that +
42239 * `predicate` doesn't return truthy for. The predicate is invoked with two +
42240 * arguments: (value, key). +
42241 * +
42242 * @static +
42243 * @memberOf _ +
42244 * @since 4.0.0 +
42245 * @category Object +
42246 * @param {Object} object The source object. +
42247 * @param {Function} [predicate=_.identity] The function invoked per property. +
42248 * @returns {Object} Returns the new object. +
42249 * @example +
42250 * +
42251 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
42252 * +
42253 * _.omitBy(object, _.isNumber); +
42254 * // => { 'b': '2' } +
42255 */ +
42256 function omitBy(object, predicate) { +
42257 return pickBy(object, negate(getIteratee(predicate))); +
42258 } +
42259 +
42260 /** +
42261 * Creates an object composed of the picked `object` properties. +
42262 * +
42263 * @static +
42264 * @since 0.1.0 +
42265 * @memberOf _ +
42266 * @category Object +
42267 * @param {Object} object The source object. +
42268 * @param {...(string|string[])} [paths] The property paths to pick. +
42269 * @returns {Object} Returns the new object. +
42270 * @example +
42271 * +
42272 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
42273 * +
42274 * _.pick(object, ['a', 'c']); +
42275 * // => { 'a': 1, 'c': 3 } +
42276 */ +
42277 var pick = flatRest(function(object, paths) { +
42278 return object == null ? {} : basePick(object, paths); +
42279 }); +
42280 +
42281 /** +
42282 * Creates an object composed of the `object` properties `predicate` returns +
42283 * truthy for. The predicate is invoked with two arguments: (value, key). +
42284 * +
42285 * @static +
42286 * @memberOf _ +
42287 * @since 4.0.0 +
42288 * @category Object +
42289 * @param {Object} object The source object. +
42290 * @param {Function} [predicate=_.identity] The function invoked per property. +
42291 * @returns {Object} Returns the new object. +
42292 * @example +
42293 * +
42294 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
42295 * +
42296 * _.pickBy(object, _.isNumber); +
42297 * // => { 'a': 1, 'c': 3 } +
42298 */ +
42299 function pickBy(object, predicate) { +
42300 if (object == null) { +
42301 return {}; +
42302 } +
42303 var props = arrayMap(getAllKeysIn(object), function(prop) { +
42304 return [prop]; +
42305 }); +
42306 predicate = getIteratee(predicate); +
42307 return basePickBy(object, props, function(value, path) { +
42308 return predicate(value, path[0]); +
42309 }); +
42310 } +
42311 +
42312 /** +
42313 * This method is like `_.get` except that if the resolved value is a +
42314 * function it's invoked with the `this` binding of its parent object and +
42315 * its result is returned. +
42316 * +
42317 * @static +
42318 * @since 0.1.0 +
42319 * @memberOf _ +
42320 * @category Object +
42321 * @param {Object} object The object to query. +
42322 * @param {Array|string} path The path of the property to resolve. +
42323 * @param {*} [defaultValue] The value returned for `undefined` resolved values. +
42324 * @returns {*} Returns the resolved value. +
42325 * @example +
42326 * +
42327 * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; +
42328 * +
42329 * _.result(object, 'a[0].b.c1'); +
42330 * // => 3 +
42331 * +
42332 * _.result(object, 'a[0].b.c2'); +
42333 * // => 4 +
42334 * +
42335 * _.result(object, 'a[0].b.c3', 'default'); +
42336 * // => 'default' +
42337 * +
42338 * _.result(object, 'a[0].b.c3', _.constant('default')); +
42339 * // => 'default' +
42340 */ +
42341 function result(object, path, defaultValue) { +
42342 path = castPath(path, object); +
42343 +
42344 var index = -1, +
42345 length = path.length; +
42346 +
42347 // Ensure the loop is entered when path is empty. +
42348 if (!length) { +
42349 length = 1; +
42350 object = undefined; +
42351 } +
42352 while (++index < length) { +
42353 var value = object == null ? undefined : object[toKey(path[index])]; +
42354 if (value === undefined) { +
42355 index = length; +
42356 value = defaultValue; +
42357 } +
42358 object = isFunction(value) ? value.call(object) : value; +
42359 } +
42360 return object; +
42361 } +
42362 +
42363 /** +
42364 * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, +
42365 * it's created. Arrays are created for missing index properties while objects +
42366 * are created for all other missing properties. Use `_.setWith` to customize +
42367 * `path` creation. +
42368 * +
42369 * **Note:** This method mutates `object`. +
42370 * +
42371 * @static +
42372 * @memberOf _ +
42373 * @since 3.7.0 +
42374 * @category Object +
42375 * @param {Object} object The object to modify. +
42376 * @param {Array|string} path The path of the property to set. +
42377 * @param {*} value The value to set. +
42378 * @returns {Object} Returns `object`. +
42379 * @example +
42380 * +
42381 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
42382 * +
42383 * _.set(object, 'a[0].b.c', 4); +
42384 * console.log(object.a[0].b.c); +
42385 * // => 4 +
42386 * +
42387 * _.set(object, ['x', '0', 'y', 'z'], 5); +
42388 * console.log(object.x[0].y.z); +
42389 * // => 5 +
42390 */ +
42391 function set(object, path, value) { +
42392 return object == null ? object : baseSet(object, path, value); +
42393 } +
42394 +
42395 /** +
42396 * This method is like `_.set` except that it accepts `customizer` which is +
42397 * invoked to produce the objects of `path`. If `customizer` returns `undefined` +
42398 * path creation is handled by the method instead. The `customizer` is invoked +
42399 * with three arguments: (nsValue, key, nsObject). +
42400 * +
42401 * **Note:** This method mutates `object`. +
42402 * +
42403 * @static +
42404 * @memberOf _ +
42405 * @since 4.0.0 +
42406 * @category Object +
42407 * @param {Object} object The object to modify. +
42408 * @param {Array|string} path The path of the property to set. +
42409 * @param {*} value The value to set. +
42410 * @param {Function} [customizer] The function to customize assigned values. +
42411 * @returns {Object} Returns `object`. +
42412 * @example +
42413 * +
42414 * var object = {}; +
42415 * +
42416 * _.setWith(object, '[0][1]', 'a', Object); +
42417 * // => { '0': { '1': 'a' } } +
42418 */ +
42419 function setWith(object, path, value, customizer) { +
42420 customizer = typeof customizer == 'function' ? customizer : undefined; +
42421 return object == null ? object : baseSet(object, path, value, customizer); +
42422 } +
42423 +
42424 /** +
42425 * Creates an array of own enumerable string keyed-value pairs for `object` +
42426 * which can be consumed by `_.fromPairs`. If `object` is a map or set, its +
42427 * entries are returned. +
42428 * +
42429 * @static +
42430 * @memberOf _ +
42431 * @since 4.0.0 +
42432 * @alias entries +
42433 * @category Object +
42434 * @param {Object} object The object to query. +
42435 * @returns {Array} Returns the key-value pairs. +
42436 * @example +
42437 * +
42438 * function Foo() { +
42439 * this.a = 1; +
42440 * this.b = 2; +
42441 * } +
42442 * +
42443 * Foo.prototype.c = 3; +
42444 * +
42445 * _.toPairs(new Foo); +
42446 * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) +
42447 */ +
42448 var toPairs = createToPairs(keys); +
42449 +
42450 /** +
42451 * Creates an array of own and inherited enumerable string keyed-value pairs +
42452 * for `object` which can be consumed by `_.fromPairs`. If `object` is a map +
42453 * or set, its entries are returned. +
42454 * +
42455 * @static +
42456 * @memberOf _ +
42457 * @since 4.0.0 +
42458 * @alias entriesIn +
42459 * @category Object +
42460 * @param {Object} object The object to query. +
42461 * @returns {Array} Returns the key-value pairs. +
42462 * @example +
42463 * +
42464 * function Foo() { +
42465 * this.a = 1; +
42466 * this.b = 2; +
42467 * } +
42468 * +
42469 * Foo.prototype.c = 3; +
42470 * +
42471 * _.toPairsIn(new Foo); +
42472 * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) +
42473 */ +
42474 var toPairsIn = createToPairs(keysIn); +
42475 +
42476 /** +
42477 * An alternative to `_.reduce`; this method transforms `object` to a new +
42478 * `accumulator` object which is the result of running each of its own +
42479 * enumerable string keyed properties thru `iteratee`, with each invocation +
42480 * potentially mutating the `accumulator` object. If `accumulator` is not +
42481 * provided, a new object with the same `[[Prototype]]` will be used. The +
42482 * iteratee is invoked with four arguments: (accumulator, value, key, object). +
42483 * Iteratee functions may exit iteration early by explicitly returning `false`. +
42484 * +
42485 * @static +
42486 * @memberOf _ +
42487 * @since 1.3.0 +
42488 * @category Object +
42489 * @param {Object} object The object to iterate over. +
42490 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
42491 * @param {*} [accumulator] The custom accumulator value. +
42492 * @returns {*} Returns the accumulated value. +
42493 * @example +
42494 * +
42495 * _.transform([2, 3, 4], function(result, n) { +
42496 * result.push(n *= n); +
42497 * return n % 2 == 0; +
42498 * }, []); +
42499 * // => [4, 9] +
42500 * +
42501 * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +
42502 * (result[value] || (result[value] = [])).push(key); +
42503 * }, {}); +
42504 * // => { '1': ['a', 'c'], '2': ['b'] } +
42505 */ +
42506 function transform(object, iteratee, accumulator) { +
42507 var isArr = isArray(object), +
42508 isArrLike = isArr || isBuffer(object) || isTypedArray(object); +
42509 +
42510 iteratee = getIteratee(iteratee, 4); +
42511 if (accumulator == null) { +
42512 var Ctor = object && object.constructor; +
42513 if (isArrLike) { +
42514 accumulator = isArr ? new Ctor : []; +
42515 } +
42516 else if (isObject(object)) { +
42517 accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; +
42518 } +
42519 else { +
42520 accumulator = {}; +
42521 } +
42522 } +
42523 (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { +
42524 return iteratee(accumulator, value, index, object); +
42525 }); +
42526 return accumulator; +
42527 } +
42528 +
42529 /** +
42530 * Removes the property at `path` of `object`. +
42531 * +
42532 * **Note:** This method mutates `object`. +
42533 * +
42534 * @static +
42535 * @memberOf _ +
42536 * @since 4.0.0 +
42537 * @category Object +
42538 * @param {Object} object The object to modify. +
42539 * @param {Array|string} path The path of the property to unset. +
42540 * @returns {boolean} Returns `true` if the property is deleted, else `false`. +
42541 * @example +
42542 * +
42543 * var object = { 'a': [{ 'b': { 'c': 7 } }] }; +
42544 * _.unset(object, 'a[0].b.c'); +
42545 * // => true +
42546 * +
42547 * console.log(object); +
42548 * // => { 'a': [{ 'b': {} }] }; +
42549 * +
42550 * _.unset(object, ['a', '0', 'b', 'c']); +
42551 * // => true +
42552 * +
42553 * console.log(object); +
42554 * // => { 'a': [{ 'b': {} }] }; +
42555 */ +
42556 function unset(object, path) { +
42557 return object == null ? true : baseUnset(object, path); +
42558 } +
42559 +
42560 /** +
42561 * This method is like `_.set` except that accepts `updater` to produce the +
42562 * value to set. Use `_.updateWith` to customize `path` creation. The `updater` +
42563 * is invoked with one argument: (value). +
42564 * +
42565 * **Note:** This method mutates `object`. +
42566 * +
42567 * @static +
42568 * @memberOf _ +
42569 * @since 4.6.0 +
42570 * @category Object +
42571 * @param {Object} object The object to modify. +
42572 * @param {Array|string} path The path of the property to set. +
42573 * @param {Function} updater The function to produce the updated value. +
42574 * @returns {Object} Returns `object`. +
42575 * @example +
42576 * +
42577 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
42578 * +
42579 * _.update(object, 'a[0].b.c', function(n) { return n * n; }); +
42580 * console.log(object.a[0].b.c); +
42581 * // => 9 +
42582 * +
42583 * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); +
42584 * console.log(object.x[0].y.z); +
42585 * // => 0 +
42586 */ +
42587 function update(object, path, updater) { +
42588 return object == null ? object : baseUpdate(object, path, castFunction(updater)); +
42589 } +
42590 +
42591 /** +
42592 * This method is like `_.update` except that it accepts `customizer` which is +
42593 * invoked to produce the objects of `path`. If `customizer` returns `undefined` +
42594 * path creation is handled by the method instead. The `customizer` is invoked +
42595 * with three arguments: (nsValue, key, nsObject). +
42596 * +
42597 * **Note:** This method mutates `object`. +
42598 * +
42599 * @static +
42600 * @memberOf _ +
42601 * @since 4.6.0 +
42602 * @category Object +
42603 * @param {Object} object The object to modify. +
42604 * @param {Array|string} path The path of the property to set. +
42605 * @param {Function} updater The function to produce the updated value. +
42606 * @param {Function} [customizer] The function to customize assigned values. +
42607 * @returns {Object} Returns `object`. +
42608 * @example +
42609 * +
42610 * var object = {}; +
42611 * +
42612 * _.updateWith(object, '[0][1]', _.constant('a'), Object); +
42613 * // => { '0': { '1': 'a' } } +
42614 */ +
42615 function updateWith(object, path, updater, customizer) { +
42616 customizer = typeof customizer == 'function' ? customizer : undefined; +
42617 return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); +
42618 } +
42619 +
42620 /** +
42621 * Creates an array of the own enumerable string keyed property values of `object`. +
42622 * +
42623 * **Note:** Non-object values are coerced to objects. +
42624 * +
42625 * @static +
42626 * @since 0.1.0 +
42627 * @memberOf _ +
42628 * @category Object +
42629 * @param {Object} object The object to query. +
42630 * @returns {Array} Returns the array of property values. +
42631 * @example +
42632 * +
42633 * function Foo() { +
42634 * this.a = 1; +
42635 * this.b = 2; +
42636 * } +
42637 * +
42638 * Foo.prototype.c = 3; +
42639 * +
42640 * _.values(new Foo); +
42641 * // => [1, 2] (iteration order is not guaranteed) +
42642 * +
42643 * _.values('hi'); +
42644 * // => ['h', 'i'] +
42645 */ +
42646 function values(object) { +
42647 return object == null ? [] : baseValues(object, keys(object)); +
42648 } +
42649 +
42650 /** +
42651 * Creates an array of the own and inherited enumerable string keyed property +
42652 * values of `object`. +
42653 * +
42654 * **Note:** Non-object values are coerced to objects. +
42655 * +
42656 * @static +
42657 * @memberOf _ +
42658 * @since 3.0.0 +
42659 * @category Object +
42660 * @param {Object} object The object to query. +
42661 * @returns {Array} Returns the array of property values. +
42662 * @example +
42663 * +
42664 * function Foo() { +
42665 * this.a = 1; +
42666 * this.b = 2; +
42667 * } +
42668 * +
42669 * Foo.prototype.c = 3; +
42670 * +
42671 * _.valuesIn(new Foo); +
42672 * // => [1, 2, 3] (iteration order is not guaranteed) +
42673 */ +
42674 function valuesIn(object) { +
42675 return object == null ? [] : baseValues(object, keysIn(object)); +
42676 } +
42677 +
42678 /*------------------------------------------------------------------------*/ +
42679 +
42680 /** +
42681 * Clamps `number` within the inclusive `lower` and `upper` bounds. +
42682 * +
42683 * @static +
42684 * @memberOf _ +
42685 * @since 4.0.0 +
42686 * @category Number +
42687 * @param {number} number The number to clamp. +
42688 * @param {number} [lower] The lower bound. +
42689 * @param {number} upper The upper bound. +
42690 * @returns {number} Returns the clamped number. +
42691 * @example +
42692 * +
42693 * _.clamp(-10, -5, 5); +
42694 * // => -5 +
42695 * +
42696 * _.clamp(10, -5, 5); +
42697 * // => 5 +
42698 */ +
42699 function clamp(number, lower, upper) { +
42700 if (upper === undefined) { +
42701 upper = lower; +
42702 lower = undefined; +
42703 } +
42704 if (upper !== undefined) { +
42705 upper = toNumber(upper); +
42706 upper = upper === upper ? upper : 0; +
42707 } +
42708 if (lower !== undefined) { +
42709 lower = toNumber(lower); +
42710 lower = lower === lower ? lower : 0; +
42711 } +
42712 return baseClamp(toNumber(number), lower, upper); +
42713 } +
42714 +
42715 /** +
42716 * Checks if `n` is between `start` and up to, but not including, `end`. If +
42717 * `end` is not specified, it's set to `start` with `start` then set to `0`. +
42718 * If `start` is greater than `end` the params are swapped to support +
42719 * negative ranges. +
42720 * +
42721 * @static +
42722 * @memberOf _ +
42723 * @since 3.3.0 +
42724 * @category Number +
42725 * @param {number} number The number to check. +
42726 * @param {number} [start=0] The start of the range. +
42727 * @param {number} end The end of the range. +
42728 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +
42729 * @see _.range, _.rangeRight +
42730 * @example +
42731 * +
42732 * _.inRange(3, 2, 4); +
42733 * // => true +
42734 * +
42735 * _.inRange(4, 8); +
42736 * // => true +
42737 * +
42738 * _.inRange(4, 2); +
42739 * // => false +
42740 * +
42741 * _.inRange(2, 2); +
42742 * // => false +
42743 * +
42744 * _.inRange(1.2, 2); +
42745 * // => true +
42746 * +
42747 * _.inRange(5.2, 4); +
42748 * // => false +
42749 * +
42750 * _.inRange(-3, -2, -6); +
42751 * // => true +
42752 */ +
42753 function inRange(number, start, end) { +
42754 start = toFinite(start); +
42755 if (end === undefined) { +
42756 end = start; +
42757 start = 0; +
42758 } else { +
42759 end = toFinite(end); +
42760 } +
42761 number = toNumber(number); +
42762 return baseInRange(number, start, end); +
42763 } +
42764 +
42765 /** +
42766 * Produces a random number between the inclusive `lower` and `upper` bounds. +
42767 * If only one argument is provided a number between `0` and the given number +
42768 * is returned. If `floating` is `true`, or either `lower` or `upper` are +
42769 * floats, a floating-point number is returned instead of an integer. +
42770 * +
42771 * **Note:** JavaScript follows the IEEE-754 standard for resolving +
42772 * floating-point values which can produce unexpected results. +
42773 * +
42774 * @static +
42775 * @memberOf _ +
42776 * @since 0.7.0 +
42777 * @category Number +
42778 * @param {number} [lower=0] The lower bound. +
42779 * @param {number} [upper=1] The upper bound. +
42780 * @param {boolean} [floating] Specify returning a floating-point number. +
42781 * @returns {number} Returns the random number. +
42782 * @example +
42783 * +
42784 * _.random(0, 5); +
42785 * // => an integer between 0 and 5 +
42786 * +
42787 * _.random(5); +
42788 * // => also an integer between 0 and 5 +
42789 * +
42790 * _.random(5, true); +
42791 * // => a floating-point number between 0 and 5 +
42792 * +
42793 * _.random(1.2, 5.2); +
42794 * // => a floating-point number between 1.2 and 5.2 +
42795 */ +
42796 function random(lower, upper, floating) { +
42797 if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { +
42798 upper = floating = undefined; +
42799 } +
42800 if (floating === undefined) { +
42801 if (typeof upper == 'boolean') { +
42802 floating = upper; +
42803 upper = undefined; +
42804 } +
42805 else if (typeof lower == 'boolean') { +
42806 floating = lower; +
42807 lower = undefined; +
42808 } +
42809 } +
42810 if (lower === undefined && upper === undefined) { +
42811 lower = 0; +
42812 upper = 1; +
42813 } +
42814 else { +
42815 lower = toFinite(lower); +
42816 if (upper === undefined) { +
42817 upper = lower; +
42818 lower = 0; +
42819 } else { +
42820 upper = toFinite(upper); +
42821 } +
42822 } +
42823 if (lower > upper) { +
42824 var temp = lower; +
42825 lower = upper; +
42826 upper = temp; +
42827 } +
42828 if (floating || lower % 1 || upper % 1) { +
42829 var rand = nativeRandom(); +
42830 return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); +
42831 } +
42832 return baseRandom(lower, upper); +
42833 } +
42834 +
42835 /*------------------------------------------------------------------------*/ +
42836 +
42837 /** +
42838 * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). +
42839 * +
42840 * @static +
42841 * @memberOf _ +
42842 * @since 3.0.0 +
42843 * @category String +
42844 * @param {string} [string=''] The string to convert. +
42845 * @returns {string} Returns the camel cased string. +
42846 * @example +
42847 * +
42848 * _.camelCase('Foo Bar'); +
42849 * // => 'fooBar' +
42850 * +
42851 * _.camelCase('--foo-bar--'); +
42852 * // => 'fooBar' +
42853 * +
42854 * _.camelCase('__FOO_BAR__'); +
42855 * // => 'fooBar' +
42856 */ +
42857 var camelCase = createCompounder(function(result, word, index) { +
42858 word = word.toLowerCase(); +
42859 return result + (index ? capitalize(word) : word); +
42860 }); +
42861 +
42862 /** +
42863 * Converts the first character of `string` to upper case and the remaining +
42864 * to lower case. +
42865 * +
42866 * @static +
42867 * @memberOf _ +
42868 * @since 3.0.0 +
42869 * @category String +
42870 * @param {string} [string=''] The string to capitalize. +
42871 * @returns {string} Returns the capitalized string. +
42872 * @example +
42873 * +
42874 * _.capitalize('FRED'); +
42875 * // => 'Fred' +
42876 */ +
42877 function capitalize(string) { +
42878 return upperFirst(toString(string).toLowerCase()); +
42879 } +
42880 +
42881 /** +
42882 * Deburrs `string` by converting +
42883 * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) +
42884 * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) +
42885 * letters to basic Latin letters and removing +
42886 * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). +
42887 * +
42888 * @static +
42889 * @memberOf _ +
42890 * @since 3.0.0 +
42891 * @category String +
42892 * @param {string} [string=''] The string to deburr. +
42893 * @returns {string} Returns the deburred string. +
42894 * @example +
42895 * +
42896 * _.deburr('déjà vu'); +
42897 * // => 'deja vu' +
42898 */ +
42899 function deburr(string) { +
42900 string = toString(string); +
42901 return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +
42902 } +
42903 +
42904 /** +
42905 * Checks if `string` ends with the given target string. +
42906 * +
42907 * @static +
42908 * @memberOf _ +
42909 * @since 3.0.0 +
42910 * @category String +
42911 * @param {string} [string=''] The string to inspect. +
42912 * @param {string} [target] The string to search for. +
42913 * @param {number} [position=string.length] The position to search up to. +
42914 * @returns {boolean} Returns `true` if `string` ends with `target`, +
42915 * else `false`. +
42916 * @example +
42917 * +
42918 * _.endsWith('abc', 'c'); +
42919 * // => true +
42920 * +
42921 * _.endsWith('abc', 'b'); +
42922 * // => false +
42923 * +
42924 * _.endsWith('abc', 'b', 2); +
42925 * // => true +
42926 */ +
42927 function endsWith(string, target, position) { +
42928 string = toString(string); +
42929 target = baseToString(target); +
42930 +
42931 var length = string.length; +
42932 position = position === undefined +
42933 ? length +
42934 : baseClamp(toInteger(position), 0, length); +
42935 +
42936 var end = position; +
42937 position -= target.length; +
42938 return position >= 0 && string.slice(position, end) == target; +
42939 } +
42940 +
42941 /** +
42942 * Converts the characters "&", "<", ">", '"', and "'" in `string` to their +
42943 * corresponding HTML entities. +
42944 * +
42945 * **Note:** No other characters are escaped. To escape additional +
42946 * characters use a third-party library like [_he_](https://mths.be/he). +
42947 * +
42948 * Though the ">" character is escaped for symmetry, characters like +
42949 * ">" and "/" don't need escaping in HTML and have no special meaning +
42950 * unless they're part of a tag or unquoted attribute value. See +
42951 * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) +
42952 * (under "semi-related fun fact") for more details. +
42953 * +
42954 * When working with HTML you should always +
42955 * [quote attribute values](http://wonko.com/post/html-escaping) to reduce +
42956 * XSS vectors. +
42957 * +
42958 * @static +
42959 * @since 0.1.0 +
42960 * @memberOf _ +
42961 * @category String +
42962 * @param {string} [string=''] The string to escape. +
42963 * @returns {string} Returns the escaped string. +
42964 * @example +
42965 * +
42966 * _.escape('fred, barney, & pebbles'); +
42967 * // => 'fred, barney, &amp; pebbles' +
42968 */ +
42969 function escape(string) { +
42970 string = toString(string); +
42971 return (string && reHasUnescapedHtml.test(string)) +
42972 ? string.replace(reUnescapedHtml, escapeHtmlChar) +
42973 : string; +
42974 } +
42975 +
42976 /** +
42977 * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", +
42978 * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. +
42979 * +
42980 * @static +
42981 * @memberOf _ +
42982 * @since 3.0.0 +
42983 * @category String +
42984 * @param {string} [string=''] The string to escape. +
42985 * @returns {string} Returns the escaped string. +
42986 * @example +
42987 * +
42988 * _.escapeRegExp('[lodash](https://lodash.com/)'); +
42989 * // => '\[lodash\]\(https://lodash\.com/\)' +
42990 */ +
42991 function escapeRegExp(string) { +
42992 string = toString(string); +
42993 return (string && reHasRegExpChar.test(string)) +
42994 ? string.replace(reRegExpChar, '\\$&') +
42995 : string; +
42996 } +
42997 +
42998 /** +
42999 * Converts `string` to +
43000 * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). +
43001 * +
43002 * @static +
43003 * @memberOf _ +
43004 * @since 3.0.0 +
43005 * @category String +
43006 * @param {string} [string=''] The string to convert. +
43007 * @returns {string} Returns the kebab cased string. +
43008 * @example +
43009 * +
43010 * _.kebabCase('Foo Bar'); +
43011 * // => 'foo-bar' +
43012 * +
43013 * _.kebabCase('fooBar'); +
43014 * // => 'foo-bar' +
43015 * +
43016 * _.kebabCase('__FOO_BAR__'); +
43017 * // => 'foo-bar' +
43018 */ +
43019 var kebabCase = createCompounder(function(result, word, index) { +
43020 return result + (index ? '-' : '') + word.toLowerCase(); +
43021 }); +
43022 +
43023 /** +
43024 * Converts `string`, as space separated words, to lower case. +
43025 * +
43026 * @static +
43027 * @memberOf _ +
43028 * @since 4.0.0 +
43029 * @category String +
43030 * @param {string} [string=''] The string to convert. +
43031 * @returns {string} Returns the lower cased string. +
43032 * @example +
43033 * +
43034 * _.lowerCase('--Foo-Bar--'); +
43035 * // => 'foo bar' +
43036 * +
43037 * _.lowerCase('fooBar'); +
43038 * // => 'foo bar' +
43039 * +
43040 * _.lowerCase('__FOO_BAR__'); +
43041 * // => 'foo bar' +
43042 */ +
43043 var lowerCase = createCompounder(function(result, word, index) { +
43044 return result + (index ? ' ' : '') + word.toLowerCase(); +
43045 }); +
43046 +
43047 /** +
43048 * Converts the first character of `string` to lower case. +
43049 * +
43050 * @static +
43051 * @memberOf _ +
43052 * @since 4.0.0 +
43053 * @category String +
43054 * @param {string} [string=''] The string to convert. +
43055 * @returns {string} Returns the converted string. +
43056 * @example +
43057 * +
43058 * _.lowerFirst('Fred'); +
43059 * // => 'fred' +
43060 * +
43061 * _.lowerFirst('FRED'); +
43062 * // => 'fRED' +
43063 */ +
43064 var lowerFirst = createCaseFirst('toLowerCase'); +
43065 +
43066 /** +
43067 * Pads `string` on the left and right sides if it's shorter than `length`. +
43068 * Padding characters are truncated if they can't be evenly divided by `length`. +
43069 * +
43070 * @static +
43071 * @memberOf _ +
43072 * @since 3.0.0 +
43073 * @category String +
43074 * @param {string} [string=''] The string to pad. +
43075 * @param {number} [length=0] The padding length. +
43076 * @param {string} [chars=' '] The string used as padding. +
43077 * @returns {string} Returns the padded string. +
43078 * @example +
43079 * +
43080 * _.pad('abc', 8); +
43081 * // => ' abc ' +
43082 * +
43083 * _.pad('abc', 8, '_-'); +
43084 * // => '_-abc_-_' +
43085 * +
43086 * _.pad('abc', 3); +
43087 * // => 'abc' +
43088 */ +
43089 function pad(string, length, chars) { +
43090 string = toString(string); +
43091 length = toInteger(length); +
43092 +
43093 var strLength = length ? stringSize(string) : 0; +
43094 if (!length || strLength >= length) { +
43095 return string; +
43096 } +
43097 var mid = (length - strLength) / 2; +
43098 return ( +
43099 createPadding(nativeFloor(mid), chars) + +
43100 string + +
43101 createPadding(nativeCeil(mid), chars) +
43102 ); +
43103 } +
43104 +
43105 /** +
43106 * Pads `string` on the right side if it's shorter than `length`. Padding +
43107 * characters are truncated if they exceed `length`. +
43108 * +
43109 * @static +
43110 * @memberOf _ +
43111 * @since 4.0.0 +
43112 * @category String +
43113 * @param {string} [string=''] The string to pad. +
43114 * @param {number} [length=0] The padding length. +
43115 * @param {string} [chars=' '] The string used as padding. +
43116 * @returns {string} Returns the padded string. +
43117 * @example +
43118 * +
43119 * _.padEnd('abc', 6); +
43120 * // => 'abc ' +
43121 * +
43122 * _.padEnd('abc', 6, '_-'); +
43123 * // => 'abc_-_' +
43124 * +
43125 * _.padEnd('abc', 3); +
43126 * // => 'abc' +
43127 */ +
43128 function padEnd(string, length, chars) { +
43129 string = toString(string); +
43130 length = toInteger(length); +
43131 +
43132 var strLength = length ? stringSize(string) : 0; +
43133 return (length && strLength < length) +
43134 ? (string + createPadding(length - strLength, chars)) +
43135 : string; +
43136 } +
43137 +
43138 /** +
43139 * Pads `string` on the left side if it's shorter than `length`. Padding +
43140 * characters are truncated if they exceed `length`. +
43141 * +
43142 * @static +
43143 * @memberOf _ +
43144 * @since 4.0.0 +
43145 * @category String +
43146 * @param {string} [string=''] The string to pad. +
43147 * @param {number} [length=0] The padding length. +
43148 * @param {string} [chars=' '] The string used as padding. +
43149 * @returns {string} Returns the padded string. +
43150 * @example +
43151 * +
43152 * _.padStart('abc', 6); +
43153 * // => ' abc' +
43154 * +
43155 * _.padStart('abc', 6, '_-'); +
43156 * // => '_-_abc' +
43157 * +
43158 * _.padStart('abc', 3); +
43159 * // => 'abc' +
43160 */ +
43161 function padStart(string, length, chars) { +
43162 string = toString(string); +
43163 length = toInteger(length); +
43164 +
43165 var strLength = length ? stringSize(string) : 0; +
43166 return (length && strLength < length) +
43167 ? (createPadding(length - strLength, chars) + string) +
43168 : string; +
43169 } +
43170 +
43171 /** +
43172 * Converts `string` to an integer of the specified radix. If `radix` is +
43173 * `undefined` or `0`, a `radix` of `10` is used unless `value` is a +
43174 * hexadecimal, in which case a `radix` of `16` is used. +
43175 * +
43176 * **Note:** This method aligns with the +
43177 * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. +
43178 * +
43179 * @static +
43180 * @memberOf _ +
43181 * @since 1.1.0 +
43182 * @category String +
43183 * @param {string} string The string to convert. +
43184 * @param {number} [radix=10] The radix to interpret `value` by. +
43185 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
43186 * @returns {number} Returns the converted integer. +
43187 * @example +
43188 * +
43189 * _.parseInt('08'); +
43190 * // => 8 +
43191 * +
43192 * _.map(['6', '08', '10'], _.parseInt); +
43193 * // => [6, 8, 10] +
43194 */ +
43195 function parseInt(string, radix, guard) { +
43196 if (guard || radix == null) { +
43197 radix = 0; +
43198 } else if (radix) { +
43199 radix = +radix; +
43200 } +
43201 return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); +
43202 } +
43203 +
43204 /** +
43205 * Repeats the given string `n` times. +
43206 * +
43207 * @static +
43208 * @memberOf _ +
43209 * @since 3.0.0 +
43210 * @category String +
43211 * @param {string} [string=''] The string to repeat. +
43212 * @param {number} [n=1] The number of times to repeat the string. +
43213 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
43214 * @returns {string} Returns the repeated string. +
43215 * @example +
43216 * +
43217 * _.repeat('*', 3); +
43218 * // => '***' +
43219 * +
43220 * _.repeat('abc', 2); +
43221 * // => 'abcabc' +
43222 * +
43223 * _.repeat('abc', 0); +
43224 * // => '' +
43225 */ +
43226 function repeat(string, n, guard) { +
43227 if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { +
43228 n = 1; +
43229 } else { +
43230 n = toInteger(n); +
43231 } +
43232 return baseRepeat(toString(string), n); +
43233 } +
43234 +
43235 /** +
43236 * Replaces matches for `pattern` in `string` with `replacement`. +
43237 * +
43238 * **Note:** This method is based on +
43239 * [`String#replace`](https://mdn.io/String/replace). +
43240 * +
43241 * @static +
43242 * @memberOf _ +
43243 * @since 4.0.0 +
43244 * @category String +
43245 * @param {string} [string=''] The string to modify. +
43246 * @param {RegExp|string} pattern The pattern to replace. +
43247 * @param {Function|string} replacement The match replacement. +
43248 * @returns {string} Returns the modified string. +
43249 * @example +
43250 * +
43251 * _.replace('Hi Fred', 'Fred', 'Barney'); +
43252 * // => 'Hi Barney' +
43253 */ +
43254 function replace() { +
43255 var args = arguments, +
43256 string = toString(args[0]); +
43257 +
43258 return args.length < 3 ? string : string.replace(args[1], args[2]); +
43259 } +
43260 +
43261 /** +
43262 * Converts `string` to +
43263 * [snake case](https://en.wikipedia.org/wiki/Snake_case). +
43264 * +
43265 * @static +
43266 * @memberOf _ +
43267 * @since 3.0.0 +
43268 * @category String +
43269 * @param {string} [string=''] The string to convert. +
43270 * @returns {string} Returns the snake cased string. +
43271 * @example +
43272 * +
43273 * _.snakeCase('Foo Bar'); +
43274 * // => 'foo_bar' +
43275 * +
43276 * _.snakeCase('fooBar'); +
43277 * // => 'foo_bar' +
43278 * +
43279 * _.snakeCase('--FOO-BAR--'); +
43280 * // => 'foo_bar' +
43281 */ +
43282 var snakeCase = createCompounder(function(result, word, index) { +
43283 return result + (index ? '_' : '') + word.toLowerCase(); +
43284 }); +
43285 +
43286 /** +
43287 * Splits `string` by `separator`. +
43288 * +
43289 * **Note:** This method is based on +
43290 * [`String#split`](https://mdn.io/String/split). +
43291 * +
43292 * @static +
43293 * @memberOf _ +
43294 * @since 4.0.0 +
43295 * @category String +
43296 * @param {string} [string=''] The string to split. +
43297 * @param {RegExp|string} separator The separator pattern to split by. +
43298 * @param {number} [limit] The length to truncate results to. +
43299 * @returns {Array} Returns the string segments. +
43300 * @example +
43301 * +
43302 * _.split('a-b-c', '-', 2); +
43303 * // => ['a', 'b'] +
43304 */ +
43305 function split(string, separator, limit) { +
43306 if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { +
43307 separator = limit = undefined; +
43308 } +
43309 limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; +
43310 if (!limit) { +
43311 return []; +
43312 } +
43313 string = toString(string); +
43314 if (string && ( +
43315 typeof separator == 'string' || +
43316 (separator != null && !isRegExp(separator)) +
43317 )) { +
43318 separator = baseToString(separator); +
43319 if (!separator && hasUnicode(string)) { +
43320 return castSlice(stringToArray(string), 0, limit); +
43321 } +
43322 } +
43323 return string.split(separator, limit); +
43324 } +
43325 +
43326 /** +
43327 * Converts `string` to +
43328 * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). +
43329 * +
43330 * @static +
43331 * @memberOf _ +
43332 * @since 3.1.0 +
43333 * @category String +
43334 * @param {string} [string=''] The string to convert. +
43335 * @returns {string} Returns the start cased string. +
43336 * @example +
43337 * +
43338 * _.startCase('--foo-bar--'); +
43339 * // => 'Foo Bar' +
43340 * +
43341 * _.startCase('fooBar'); +
43342 * // => 'Foo Bar' +
43343 * +
43344 * _.startCase('__FOO_BAR__'); +
43345 * // => 'FOO BAR' +
43346 */ +
43347 var startCase = createCompounder(function(result, word, index) { +
43348 return result + (index ? ' ' : '') + upperFirst(word); +
43349 }); +
43350 +
43351 /** +
43352 * Checks if `string` starts with the given target string. +
43353 * +
43354 * @static +
43355 * @memberOf _ +
43356 * @since 3.0.0 +
43357 * @category String +
43358 * @param {string} [string=''] The string to inspect. +
43359 * @param {string} [target] The string to search for. +
43360 * @param {number} [position=0] The position to search from. +
43361 * @returns {boolean} Returns `true` if `string` starts with `target`, +
43362 * else `false`. +
43363 * @example +
43364 * +
43365 * _.startsWith('abc', 'a'); +
43366 * // => true +
43367 * +
43368 * _.startsWith('abc', 'b'); +
43369 * // => false +
43370 * +
43371 * _.startsWith('abc', 'b', 1); +
43372 * // => true +
43373 */ +
43374 function startsWith(string, target, position) { +
43375 string = toString(string); +
43376 position = position == null +
43377 ? 0 +
43378 : baseClamp(toInteger(position), 0, string.length); +
43379 +
43380 target = baseToString(target); +
43381 return string.slice(position, position + target.length) == target; +
43382 } +
43383 +
43384 /** +
43385 * Creates a compiled template function that can interpolate data properties +
43386 * in "interpolate" delimiters, HTML-escape interpolated data properties in +
43387 * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data +
43388 * properties may be accessed as free variables in the template. If a setting +
43389 * object is given, it takes precedence over `_.templateSettings` values. +
43390 * +
43391 * **Note:** In the development build `_.template` utilizes +
43392 * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) +
43393 * for easier debugging. +
43394 * +
43395 * For more information on precompiling templates see +
43396 * [lodash's custom builds documentation](https://lodash.com/custom-builds). +
43397 * +
43398 * For more information on Chrome extension sandboxes see +
43399 * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). +
43400 * +
43401 * @static +
43402 * @since 0.1.0 +
43403 * @memberOf _ +
43404 * @category String +
43405 * @param {string} [string=''] The template string. +
43406 * @param {Object} [options={}] The options object. +
43407 * @param {RegExp} [options.escape=_.templateSettings.escape] +
43408 * The HTML "escape" delimiter. +
43409 * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] +
43410 * The "evaluate" delimiter. +
43411 * @param {Object} [options.imports=_.templateSettings.imports] +
43412 * An object to import into the template as free variables. +
43413 * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] +
43414 * The "interpolate" delimiter. +
43415 * @param {string} [options.sourceURL='lodash.templateSources[n]'] +
43416 * The sourceURL of the compiled template. +
43417 * @param {string} [options.variable='obj'] +
43418 * The data object variable name. +
43419 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
43420 * @returns {Function} Returns the compiled template function. +
43421 * @example +
43422 * +
43423 * // Use the "interpolate" delimiter to create a compiled template. +
43424 * var compiled = _.template('hello <%= user %>!'); +
43425 * compiled({ 'user': 'fred' }); +
43426 * // => 'hello fred!' +
43427 * +
43428 * // Use the HTML "escape" delimiter to escape data property values. +
43429 * var compiled = _.template('<b><%- value %></b>'); +
43430 * compiled({ 'value': '<script>' }); +
43431 * // => '<b>&lt;script&gt;</b>' +
43432 * +
43433 * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. +
43434 * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); +
43435 * compiled({ 'users': ['fred', 'barney'] }); +
43436 * // => '<li>fred</li><li>barney</li>' +
43437 * +
43438 * // Use the internal `print` function in "evaluate" delimiters. +
43439 * var compiled = _.template('<% print("hello " + user); %>!'); +
43440 * compiled({ 'user': 'barney' }); +
43441 * // => 'hello barney!' +
43442 * +
43443 * // Use the ES template literal delimiter as an "interpolate" delimiter. +
43444 * // Disable support by replacing the "interpolate" delimiter. +
43445 * var compiled = _.template('hello ${ user }!'); +
43446 * compiled({ 'user': 'pebbles' }); +
43447 * // => 'hello pebbles!' +
43448 * +
43449 * // Use backslashes to treat delimiters as plain text. +
43450 * var compiled = _.template('<%= "\\<%- value %\\>" %>'); +
43451 * compiled({ 'value': 'ignored' }); +
43452 * // => '<%- value %>' +
43453 * +
43454 * // Use the `imports` option to import `jQuery` as `jq`. +
43455 * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; +
43456 * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); +
43457 * compiled({ 'users': ['fred', 'barney'] }); +
43458 * // => '<li>fred</li><li>barney</li>' +
43459 * +
43460 * // Use the `sourceURL` option to specify a custom sourceURL for the template. +
43461 * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); +
43462 * compiled(data); +
43463 * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. +
43464 * +
43465 * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. +
43466 * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); +
43467 * compiled.source; +
43468 * // => function(data) { +
43469 * // var __t, __p = ''; +
43470 * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; +
43471 * // return __p; +
43472 * // } +
43473 * +
43474 * // Use custom template delimiters. +
43475 * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; +
43476 * var compiled = _.template('hello {{ user }}!'); +
43477 * compiled({ 'user': 'mustache' }); +
43478 * // => 'hello mustache!' +
43479 * +
43480 * // Use the `source` property to inline compiled templates for meaningful +
43481 * // line numbers in error messages and stack traces. +
43482 * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ +
43483 * var JST = {\ +
43484 * "main": ' + _.template(mainText).source + '\ +
43485 * };\ +
43486 * '); +
43487 */ +
43488 function template(string, options, guard) { +
43489 // Based on John Resig's `tmpl` implementation +
43490 // (http://ejohn.org/blog/javascript-micro-templating/) +
43491 // and Laura Doktorova's doT.js (https://github.com/olado/doT). +
43492 var settings = lodash.templateSettings; +
43493 +
43494 if (guard && isIterateeCall(string, options, guard)) { +
43495 options = undefined; +
43496 } +
43497 string = toString(string); +
43498 options = assignInWith({}, options, settings, customDefaultsAssignIn); +
43499 +
43500 var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), +
43501 importsKeys = keys(imports), +
43502 importsValues = baseValues(imports, importsKeys); +
43503 +
43504 var isEscaping, +
43505 isEvaluating, +
43506 index = 0, +
43507 interpolate = options.interpolate || reNoMatch, +
43508 source = "__p += '"; +
43509 +
43510 // Compile the regexp to match each delimiter. +
43511 var reDelimiters = RegExp( +
43512 (options.escape || reNoMatch).source + '|' + +
43513 interpolate.source + '|' + +
43514 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + +
43515 (options.evaluate || reNoMatch).source + '|$' +
43516 , 'g'); +
43517 +
43518 // Use a sourceURL for easier debugging. +
43519 var sourceURL = '//# sourceURL=' + +
43520 ('sourceURL' in options +
43521 ? options.sourceURL +
43522 : ('lodash.templateSources[' + (++templateCounter) + ']') +
43523 ) + '\n'; +
43524 +
43525 string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { +
43526 interpolateValue || (interpolateValue = esTemplateValue); +
43527 +
43528 // Escape characters that can't be included in string literals. +
43529 source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); +
43530 +
43531 // Replace delimiters with snippets. +
43532 if (escapeValue) { +
43533 isEscaping = true; +
43534 source += "' +\n__e(" + escapeValue + ") +\n'"; +
43535 } +
43536 if (evaluateValue) { +
43537 isEvaluating = true; +
43538 source += "';\n" + evaluateValue + ";\n__p += '"; +
43539 } +
43540 if (interpolateValue) { +
43541 source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; +
43542 } +
43543 index = offset + match.length; +
43544 +
43545 // The JS engine embedded in Adobe products needs `match` returned in +
43546 // order to produce the correct `offset` value. +
43547 return match; +
43548 }); +
43549 +
43550 source += "';\n"; +
43551 +
43552 // If `variable` is not specified wrap a with-statement around the generated +
43553 // code to add the data object to the top of the scope chain. +
43554 var variable = options.variable; +
43555 if (!variable) { +
43556 source = 'with (obj) {\n' + source + '\n}\n'; +
43557 } +
43558 // Cleanup code by stripping empty strings. +
43559 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) +
43560 .replace(reEmptyStringMiddle, '$1') +
43561 .replace(reEmptyStringTrailing, '$1;'); +
43562 +
43563 // Frame code as the function body. +
43564 source = 'function(' + (variable || 'obj') + ') {\n' + +
43565 (variable +
43566 ? '' +
43567 : 'obj || (obj = {});\n' +
43568 ) + +
43569 "var __t, __p = ''" + +
43570 (isEscaping +
43571 ? ', __e = _.escape' +
43572 : '' +
43573 ) + +
43574 (isEvaluating +
43575 ? ', __j = Array.prototype.join;\n' + +
43576 "function print() { __p += __j.call(arguments, '') }\n" +
43577 : ';\n' +
43578 ) + +
43579 source + +
43580 'return __p\n}'; +
43581 +
43582 var result = attempt(function() { +
43583 return Function(importsKeys, sourceURL + 'return ' + source) +
43584 .apply(undefined, importsValues); +
43585 }); +
43586 +
43587 // Provide the compiled function's source by its `toString` method or +
43588 // the `source` property as a convenience for inlining compiled templates. +
43589 result.source = source; +
43590 if (isError(result)) { +
43591 throw result; +
43592 } +
43593 return result; +
43594 } +
43595 +
43596 /** +
43597 * Converts `string`, as a whole, to lower case just like +
43598 * [String#toLowerCase](https://mdn.io/toLowerCase). +
43599 * +
43600 * @static +
43601 * @memberOf _ +
43602 * @since 4.0.0 +
43603 * @category String +
43604 * @param {string} [string=''] The string to convert. +
43605 * @returns {string} Returns the lower cased string. +
43606 * @example +
43607 * +
43608 * _.toLower('--Foo-Bar--'); +
43609 * // => '--foo-bar--' +
43610 * +
43611 * _.toLower('fooBar'); +
43612 * // => 'foobar' +
43613 * +
43614 * _.toLower('__FOO_BAR__'); +
43615 * // => '__foo_bar__' +
43616 */ +
43617 function toLower(value) { +
43618 return toString(value).toLowerCase(); +
43619 } +
43620 +
43621 /** +
43622 * Converts `string`, as a whole, to upper case just like +
43623 * [String#toUpperCase](https://mdn.io/toUpperCase). +
43624 * +
43625 * @static +
43626 * @memberOf _ +
43627 * @since 4.0.0 +
43628 * @category String +
43629 * @param {string} [string=''] The string to convert. +
43630 * @returns {string} Returns the upper cased string. +
43631 * @example +
43632 * +
43633 * _.toUpper('--foo-bar--'); +
43634 * // => '--FOO-BAR--' +
43635 * +
43636 * _.toUpper('fooBar'); +
43637 * // => 'FOOBAR' +
43638 * +
43639 * _.toUpper('__foo_bar__'); +
43640 * // => '__FOO_BAR__' +
43641 */ +
43642 function toUpper(value) { +
43643 return toString(value).toUpperCase(); +
43644 } +
43645 +
43646 /** +
43647 * Removes leading and trailing whitespace or specified characters from `string`. +
43648 * +
43649 * @static +
43650 * @memberOf _ +
43651 * @since 3.0.0 +
43652 * @category String +
43653 * @param {string} [string=''] The string to trim. +
43654 * @param {string} [chars=whitespace] The characters to trim. +
43655 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
43656 * @returns {string} Returns the trimmed string. +
43657 * @example +
43658 * +
43659 * _.trim(' abc '); +
43660 * // => 'abc' +
43661 * +
43662 * _.trim('-_-abc-_-', '_-'); +
43663 * // => 'abc' +
43664 * +
43665 * _.map([' foo ', ' bar '], _.trim); +
43666 * // => ['foo', 'bar'] +
43667 */ +
43668 function trim(string, chars, guard) { +
43669 string = toString(string); +
43670 if (string && (guard || chars === undefined)) { +
43671 return string.replace(reTrim, ''); +
43672 } +
43673 if (!string || !(chars = baseToString(chars))) { +
43674 return string; +
43675 } +
43676 var strSymbols = stringToArray(string), +
43677 chrSymbols = stringToArray(chars), +
43678 start = charsStartIndex(strSymbols, chrSymbols), +
43679 end = charsEndIndex(strSymbols, chrSymbols) + 1; +
43680 +
43681 return castSlice(strSymbols, start, end).join(''); +
43682 } +
43683 +
43684 /** +
43685 * Removes trailing whitespace or specified characters from `string`. +
43686 * +
43687 * @static +
43688 * @memberOf _ +
43689 * @since 4.0.0 +
43690 * @category String +
43691 * @param {string} [string=''] The string to trim. +
43692 * @param {string} [chars=whitespace] The characters to trim. +
43693 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
43694 * @returns {string} Returns the trimmed string. +
43695 * @example +
43696 * +
43697 * _.trimEnd(' abc '); +
43698 * // => ' abc' +
43699 * +
43700 * _.trimEnd('-_-abc-_-', '_-'); +
43701 * // => '-_-abc' +
43702 */ +
43703 function trimEnd(string, chars, guard) { +
43704 string = toString(string); +
43705 if (string && (guard || chars === undefined)) { +
43706 return string.replace(reTrimEnd, ''); +
43707 } +
43708 if (!string || !(chars = baseToString(chars))) { +
43709 return string; +
43710 } +
43711 var strSymbols = stringToArray(string), +
43712 end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; +
43713 +
43714 return castSlice(strSymbols, 0, end).join(''); +
43715 } +
43716 +
43717 /** +
43718 * Removes leading whitespace or specified characters from `string`. +
43719 * +
43720 * @static +
43721 * @memberOf _ +
43722 * @since 4.0.0 +
43723 * @category String +
43724 * @param {string} [string=''] The string to trim. +
43725 * @param {string} [chars=whitespace] The characters to trim. +
43726 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
43727 * @returns {string} Returns the trimmed string. +
43728 * @example +
43729 * +
43730 * _.trimStart(' abc '); +
43731 * // => 'abc ' +
43732 * +
43733 * _.trimStart('-_-abc-_-', '_-'); +
43734 * // => 'abc-_-' +
43735 */ +
43736 function trimStart(string, chars, guard) { +
43737 string = toString(string); +
43738 if (string && (guard || chars === undefined)) { +
43739 return string.replace(reTrimStart, ''); +
43740 } +
43741 if (!string || !(chars = baseToString(chars))) { +
43742 return string; +
43743 } +
43744 var strSymbols = stringToArray(string), +
43745 start = charsStartIndex(strSymbols, stringToArray(chars)); +
43746 +
43747 return castSlice(strSymbols, start).join(''); +
43748 } +
43749 +
43750 /** +
43751 * Truncates `string` if it's longer than the given maximum string length. +
43752 * The last characters of the truncated string are replaced with the omission +
43753 * string which defaults to "...". +
43754 * +
43755 * @static +
43756 * @memberOf _ +
43757 * @since 4.0.0 +
43758 * @category String +
43759 * @param {string} [string=''] The string to truncate. +
43760 * @param {Object} [options={}] The options object. +
43761 * @param {number} [options.length=30] The maximum string length. +
43762 * @param {string} [options.omission='...'] The string to indicate text is omitted. +
43763 * @param {RegExp|string} [options.separator] The separator pattern to truncate to. +
43764 * @returns {string} Returns the truncated string. +
43765 * @example +
43766 * +
43767 * _.truncate('hi-diddly-ho there, neighborino'); +
43768 * // => 'hi-diddly-ho there, neighbo...' +
43769 * +
43770 * _.truncate('hi-diddly-ho there, neighborino', { +
43771 * 'length': 24, +
43772 * 'separator': ' ' +
43773 * }); +
43774 * // => 'hi-diddly-ho there,...' +
43775 * +
43776 * _.truncate('hi-diddly-ho there, neighborino', { +
43777 * 'length': 24, +
43778 * 'separator': /,? +/ +
43779 * }); +
43780 * // => 'hi-diddly-ho there...' +
43781 * +
43782 * _.truncate('hi-diddly-ho there, neighborino', { +
43783 * 'omission': ' [...]' +
43784 * }); +
43785 * // => 'hi-diddly-ho there, neig [...]' +
43786 */ +
43787 function truncate(string, options) { +
43788 var length = DEFAULT_TRUNC_LENGTH, +
43789 omission = DEFAULT_TRUNC_OMISSION; +
43790 +
43791 if (isObject(options)) { +
43792 var separator = 'separator' in options ? options.separator : separator; +
43793 length = 'length' in options ? toInteger(options.length) : length; +
43794 omission = 'omission' in options ? baseToString(options.omission) : omission; +
43795 } +
43796 string = toString(string); +
43797 +
43798 var strLength = string.length; +
43799 if (hasUnicode(string)) { +
43800 var strSymbols = stringToArray(string); +
43801 strLength = strSymbols.length; +
43802 } +
43803 if (length >= strLength) { +
43804 return string; +
43805 } +
43806 var end = length - stringSize(omission); +
43807 if (end < 1) { +
43808 return omission; +
43809 } +
43810 var result = strSymbols +
43811 ? castSlice(strSymbols, 0, end).join('') +
43812 : string.slice(0, end); +
43813 +
43814 if (separator === undefined) { +
43815 return result + omission; +
43816 } +
43817 if (strSymbols) { +
43818 end += (result.length - end); +
43819 } +
43820 if (isRegExp(separator)) { +
43821 if (string.slice(end).search(separator)) { +
43822 var match, +
43823 substring = result; +
43824 +
43825 if (!separator.global) { +
43826 separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); +
43827 } +
43828 separator.lastIndex = 0; +
43829 while ((match = separator.exec(substring))) { +
43830 var newEnd = match.index; +
43831 } +
43832 result = result.slice(0, newEnd === undefined ? end : newEnd); +
43833 } +
43834 } else if (string.indexOf(baseToString(separator), end) != end) { +
43835 var index = result.lastIndexOf(separator); +
43836 if (index > -1) { +
43837 result = result.slice(0, index); +
43838 } +
43839 } +
43840 return result + omission; +
43841 } +
43842 +
43843 /** +
43844 * The inverse of `_.escape`; this method converts the HTML entities +
43845 * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to +
43846 * their corresponding characters. +
43847 * +
43848 * **Note:** No other HTML entities are unescaped. To unescape additional +
43849 * HTML entities use a third-party library like [_he_](https://mths.be/he). +
43850 * +
43851 * @static +
43852 * @memberOf _ +
43853 * @since 0.6.0 +
43854 * @category String +
43855 * @param {string} [string=''] The string to unescape. +
43856 * @returns {string} Returns the unescaped string. +
43857 * @example +
43858 * +
43859 * _.unescape('fred, barney, &amp; pebbles'); +
43860 * // => 'fred, barney, & pebbles' +
43861 */ +
43862 function unescape(string) { +
43863 string = toString(string); +
43864 return (string && reHasEscapedHtml.test(string)) +
43865 ? string.replace(reEscapedHtml, unescapeHtmlChar) +
43866 : string; +
43867 } +
43868 +
43869 /** +
43870 * Converts `string`, as space separated words, to upper case. +
43871 * +
43872 * @static +
43873 * @memberOf _ +
43874 * @since 4.0.0 +
43875 * @category String +
43876 * @param {string} [string=''] The string to convert. +
43877 * @returns {string} Returns the upper cased string. +
43878 * @example +
43879 * +
43880 * _.upperCase('--foo-bar'); +
43881 * // => 'FOO BAR' +
43882 * +
43883 * _.upperCase('fooBar'); +
43884 * // => 'FOO BAR' +
43885 * +
43886 * _.upperCase('__foo_bar__'); +
43887 * // => 'FOO BAR' +
43888 */ +
43889 var upperCase = createCompounder(function(result, word, index) { +
43890 return result + (index ? ' ' : '') + word.toUpperCase(); +
43891 }); +
43892 +
43893 /** +
43894 * Converts the first character of `string` to upper case. +
43895 * +
43896 * @static +
43897 * @memberOf _ +
43898 * @since 4.0.0 +
43899 * @category String +
43900 * @param {string} [string=''] The string to convert. +
43901 * @returns {string} Returns the converted string. +
43902 * @example +
43903 * +
43904 * _.upperFirst('fred'); +
43905 * // => 'Fred' +
43906 * +
43907 * _.upperFirst('FRED'); +
43908 * // => 'FRED' +
43909 */ +
43910 var upperFirst = createCaseFirst('toUpperCase'); +
43911 +
43912 /** +
43913 * Splits `string` into an array of its words. +
43914 * +
43915 * @static +
43916 * @memberOf _ +
43917 * @since 3.0.0 +
43918 * @category String +
43919 * @param {string} [string=''] The string to inspect. +
43920 * @param {RegExp|string} [pattern] The pattern to match words. +
43921 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
43922 * @returns {Array} Returns the words of `string`. +
43923 * @example +
43924 * +
43925 * _.words('fred, barney, & pebbles'); +
43926 * // => ['fred', 'barney', 'pebbles'] +
43927 * +
43928 * _.words('fred, barney, & pebbles', /[^, ]+/g); +
43929 * // => ['fred', 'barney', '&', 'pebbles'] +
43930 */ +
43931 function words(string, pattern, guard) { +
43932 string = toString(string); +
43933 pattern = guard ? undefined : pattern; +
43934 +
43935 if (pattern === undefined) { +
43936 return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); +
43937 } +
43938 return string.match(pattern) || []; +
43939 } +
43940 +
43941 /*------------------------------------------------------------------------*/ +
43942 +
43943 /** +
43944 * Attempts to invoke `func`, returning either the result or the caught error +
43945 * object. Any additional arguments are provided to `func` when it's invoked. +
43946 * +
43947 * @static +
43948 * @memberOf _ +
43949 * @since 3.0.0 +
43950 * @category Util +
43951 * @param {Function} func The function to attempt. +
43952 * @param {...*} [args] The arguments to invoke `func` with. +
43953 * @returns {*} Returns the `func` result or error object. +
43954 * @example +
43955 * +
43956 * // Avoid throwing errors for invalid selectors. +
43957 * var elements = _.attempt(function(selector) { +
43958 * return document.querySelectorAll(selector); +
43959 * }, '>_>'); +
43960 * +
43961 * if (_.isError(elements)) { +
43962 * elements = []; +
43963 * } +
43964 */ +
43965 var attempt = baseRest(function(func, args) { +
43966 try { +
43967 return apply(func, undefined, args); +
43968 } catch (e) { +
43969 return isError(e) ? e : new Error(e); +
43970 } +
43971 }); +
43972 +
43973 /** +
43974 * Binds methods of an object to the object itself, overwriting the existing +
43975 * method. +
43976 * +
43977 * **Note:** This method doesn't set the "length" property of bound functions. +
43978 * +
43979 * @static +
43980 * @since 0.1.0 +
43981 * @memberOf _ +
43982 * @category Util +
43983 * @param {Object} object The object to bind and assign the bound methods to. +
43984 * @param {...(string|string[])} methodNames The object method names to bind. +
43985 * @returns {Object} Returns `object`. +
43986 * @example +
43987 * +
43988 * var view = { +
43989 * 'label': 'docs', +
43990 * 'click': function() { +
43991 * console.log('clicked ' + this.label); +
43992 * } +
43993 * }; +
43994 * +
43995 * _.bindAll(view, ['click']); +
43996 * jQuery(element).on('click', view.click); +
43997 * // => Logs 'clicked docs' when clicked. +
43998 */ +
43999 var bindAll = flatRest(function(object, methodNames) { +
44000 arrayEach(methodNames, function(key) { +
44001 key = toKey(key); +
44002 baseAssignValue(object, key, bind(object[key], object)); +
44003 }); +
44004 return object; +
44005 }); +
44006 +
44007 /** +
44008 * Creates a function that iterates over `pairs` and invokes the corresponding +
44009 * function of the first predicate to return truthy. The predicate-function +
44010 * pairs are invoked with the `this` binding and arguments of the created +
44011 * function. +
44012 * +
44013 * @static +
44014 * @memberOf _ +
44015 * @since 4.0.0 +
44016 * @category Util +
44017 * @param {Array} pairs The predicate-function pairs. +
44018 * @returns {Function} Returns the new composite function. +
44019 * @example +
44020 * +
44021 * var func = _.cond([ +
44022 * [_.matches({ 'a': 1 }), _.constant('matches A')], +
44023 * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], +
44024 * [_.stubTrue, _.constant('no match')] +
44025 * ]); +
44026 * +
44027 * func({ 'a': 1, 'b': 2 }); +
44028 * // => 'matches A' +
44029 * +
44030 * func({ 'a': 0, 'b': 1 }); +
44031 * // => 'matches B' +
44032 * +
44033 * func({ 'a': '1', 'b': '2' }); +
44034 * // => 'no match' +
44035 */ +
44036 function cond(pairs) { +
44037 var length = pairs == null ? 0 : pairs.length, +
44038 toIteratee = getIteratee(); +
44039 +
44040 pairs = !length ? [] : arrayMap(pairs, function(pair) { +
44041 if (typeof pair[1] != 'function') { +
44042 throw new TypeError(FUNC_ERROR_TEXT); +
44043 } +
44044 return [toIteratee(pair[0]), pair[1]]; +
44045 }); +
44046 +
44047 return baseRest(function(args) { +
44048 var index = -1; +
44049 while (++index < length) { +
44050 var pair = pairs[index]; +
44051 if (apply(pair[0], this, args)) { +
44052 return apply(pair[1], this, args); +
44053 } +
44054 } +
44055 }); +
44056 } +
44057 +
44058 /** +
44059 * Creates a function that invokes the predicate properties of `source` with +
44060 * the corresponding property values of a given object, returning `true` if +
44061 * all predicates return truthy, else `false`. +
44062 * +
44063 * **Note:** The created function is equivalent to `_.conformsTo` with +
44064 * `source` partially applied. +
44065 * +
44066 * @static +
44067 * @memberOf _ +
44068 * @since 4.0.0 +
44069 * @category Util +
44070 * @param {Object} source The object of property predicates to conform to. +
44071 * @returns {Function} Returns the new spec function. +
44072 * @example +
44073 * +
44074 * var objects = [ +
44075 * { 'a': 2, 'b': 1 }, +
44076 * { 'a': 1, 'b': 2 } +
44077 * ]; +
44078 * +
44079 * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); +
44080 * // => [{ 'a': 1, 'b': 2 }] +
44081 */ +
44082 function conforms(source) { +
44083 return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); +
44084 } +
44085 +
44086 /** +
44087 * Creates a function that returns `value`. +
44088 * +
44089 * @static +
44090 * @memberOf _ +
44091 * @since 2.4.0 +
44092 * @category Util +
44093 * @param {*} value The value to return from the new function. +
44094 * @returns {Function} Returns the new constant function. +
44095 * @example +
44096 * +
44097 * var objects = _.times(2, _.constant({ 'a': 1 })); +
44098 * +
44099 * console.log(objects); +
44100 * // => [{ 'a': 1 }, { 'a': 1 }] +
44101 * +
44102 * console.log(objects[0] === objects[1]); +
44103 * // => true +
44104 */ +
44105 function constant(value) { +
44106 return function() { +
44107 return value; +
44108 }; +
44109 } +
44110 +
44111 /** +
44112 * Checks `value` to determine whether a default value should be returned in +
44113 * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, +
44114 * or `undefined`. +
44115 * +
44116 * @static +
44117 * @memberOf _ +
44118 * @since 4.14.0 +
44119 * @category Util +
44120 * @param {*} value The value to check. +
44121 * @param {*} defaultValue The default value. +
44122 * @returns {*} Returns the resolved value. +
44123 * @example +
44124 * +
44125 * _.defaultTo(1, 10); +
44126 * // => 1 +
44127 * +
44128 * _.defaultTo(undefined, 10); +
44129 * // => 10 +
44130 */ +
44131 function defaultTo(value, defaultValue) { +
44132 return (value == null || value !== value) ? defaultValue : value; +
44133 } +
44134 +
44135 /** +
44136 * Creates a function that returns the result of invoking the given functions +
44137 * with the `this` binding of the created function, where each successive +
44138 * invocation is supplied the return value of the previous. +
44139 * +
44140 * @static +
44141 * @memberOf _ +
44142 * @since 3.0.0 +
44143 * @category Util +
44144 * @param {...(Function|Function[])} [funcs] The functions to invoke. +
44145 * @returns {Function} Returns the new composite function. +
44146 * @see _.flowRight +
44147 * @example +
44148 * +
44149 * function square(n) { +
44150 * return n * n; +
44151 * } +
44152 * +
44153 * var addSquare = _.flow([_.add, square]); +
44154 * addSquare(1, 2); +
44155 * // => 9 +
44156 */ +
44157 var flow = createFlow(); +
44158 +
44159 /** +
44160 * This method is like `_.flow` except that it creates a function that +
44161 * invokes the given functions from right to left. +
44162 * +
44163 * @static +
44164 * @since 3.0.0 +
44165 * @memberOf _ +
44166 * @category Util +
44167 * @param {...(Function|Function[])} [funcs] The functions to invoke. +
44168 * @returns {Function} Returns the new composite function. +
44169 * @see _.flow +
44170 * @example +
44171 * +
44172 * function square(n) { +
44173 * return n * n; +
44174 * } +
44175 * +
44176 * var addSquare = _.flowRight([square, _.add]); +
44177 * addSquare(1, 2); +
44178 * // => 9 +
44179 */ +
44180 var flowRight = createFlow(true); +
44181 +
44182 /** +
44183 * This method returns the first argument it receives. +
44184 * +
44185 * @static +
44186 * @since 0.1.0 +
44187 * @memberOf _ +
44188 * @category Util +
44189 * @param {*} value Any value. +
44190 * @returns {*} Returns `value`. +
44191 * @example +
44192 * +
44193 * var object = { 'a': 1 }; +
44194 * +
44195 * console.log(_.identity(object) === object); +
44196 * // => true +
44197 */ +
44198 function identity(value) { +
44199 return value; +
44200 } +
44201 +
44202 /** +
44203 * Creates a function that invokes `func` with the arguments of the created +
44204 * function. If `func` is a property name, the created function returns the +
44205 * property value for a given element. If `func` is an array or object, the +
44206 * created function returns `true` for elements that contain the equivalent +
44207 * source properties, otherwise it returns `false`. +
44208 * +
44209 * @static +
44210 * @since 4.0.0 +
44211 * @memberOf _ +
44212 * @category Util +
44213 * @param {*} [func=_.identity] The value to convert to a callback. +
44214 * @returns {Function} Returns the callback. +
44215 * @example +
44216 * +
44217 * var users = [ +
44218 * { 'user': 'barney', 'age': 36, 'active': true }, +
44219 * { 'user': 'fred', 'age': 40, 'active': false } +
44220 * ]; +
44221 * +
44222 * // The `_.matches` iteratee shorthand. +
44223 * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); +
44224 * // => [{ 'user': 'barney', 'age': 36, 'active': true }] +
44225 * +
44226 * // The `_.matchesProperty` iteratee shorthand. +
44227 * _.filter(users, _.iteratee(['user', 'fred'])); +
44228 * // => [{ 'user': 'fred', 'age': 40 }] +
44229 * +
44230 * // The `_.property` iteratee shorthand. +
44231 * _.map(users, _.iteratee('user')); +
44232 * // => ['barney', 'fred'] +
44233 * +
44234 * // Create custom iteratee shorthands. +
44235 * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { +
44236 * return !_.isRegExp(func) ? iteratee(func) : function(string) { +
44237 * return func.test(string); +
44238 * }; +
44239 * }); +
44240 * +
44241 * _.filter(['abc', 'def'], /ef/); +
44242 * // => ['def'] +
44243 */ +
44244 function iteratee(func) { +
44245 return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); +
44246 } +
44247 +
44248 /** +
44249 * Creates a function that performs a partial deep comparison between a given +
44250 * object and `source`, returning `true` if the given object has equivalent +
44251 * property values, else `false`. +
44252 * +
44253 * **Note:** The created function is equivalent to `_.isMatch` with `source` +
44254 * partially applied. +
44255 * +
44256 * Partial comparisons will match empty array and empty object `source` +
44257 * values against any array or object value, respectively. See `_.isEqual` +
44258 * for a list of supported value comparisons. +
44259 * +
44260 * @static +
44261 * @memberOf _ +
44262 * @since 3.0.0 +
44263 * @category Util +
44264 * @param {Object} source The object of property values to match. +
44265 * @returns {Function} Returns the new spec function. +
44266 * @example +
44267 * +
44268 * var objects = [ +
44269 * { 'a': 1, 'b': 2, 'c': 3 }, +
44270 * { 'a': 4, 'b': 5, 'c': 6 } +
44271 * ]; +
44272 * +
44273 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); +
44274 * // => [{ 'a': 4, 'b': 5, 'c': 6 }] +
44275 */ +
44276 function matches(source) { +
44277 return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); +
44278 } +
44279 +
44280 /** +
44281 * Creates a function that performs a partial deep comparison between the +
44282 * value at `path` of a given object to `srcValue`, returning `true` if the +
44283 * object value is equivalent, else `false`. +
44284 * +
44285 * **Note:** Partial comparisons will match empty array and empty object +
44286 * `srcValue` values against any array or object value, respectively. See +
44287 * `_.isEqual` for a list of supported value comparisons. +
44288 * +
44289 * @static +
44290 * @memberOf _ +
44291 * @since 3.2.0 +
44292 * @category Util +
44293 * @param {Array|string} path The path of the property to get. +
44294 * @param {*} srcValue The value to match. +
44295 * @returns {Function} Returns the new spec function. +
44296 * @example +
44297 * +
44298 * var objects = [ +
44299 * { 'a': 1, 'b': 2, 'c': 3 }, +
44300 * { 'a': 4, 'b': 5, 'c': 6 } +
44301 * ]; +
44302 * +
44303 * _.find(objects, _.matchesProperty('a', 4)); +
44304 * // => { 'a': 4, 'b': 5, 'c': 6 } +
44305 */ +
44306 function matchesProperty(path, srcValue) { +
44307 return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); +
44308 } +
44309 +
44310 /** +
44311 * Creates a function that invokes the method at `path` of a given object. +
44312 * Any additional arguments are provided to the invoked method. +
44313 * +
44314 * @static +
44315 * @memberOf _ +
44316 * @since 3.7.0 +
44317 * @category Util +
44318 * @param {Array|string} path The path of the method to invoke. +
44319 * @param {...*} [args] The arguments to invoke the method with. +
44320 * @returns {Function} Returns the new invoker function. +
44321 * @example +
44322 * +
44323 * var objects = [ +
44324 * { 'a': { 'b': _.constant(2) } }, +
44325 * { 'a': { 'b': _.constant(1) } } +
44326 * ]; +
44327 * +
44328 * _.map(objects, _.method('a.b')); +
44329 * // => [2, 1] +
44330 * +
44331 * _.map(objects, _.method(['a', 'b'])); +
44332 * // => [2, 1] +
44333 */ +
44334 var method = baseRest(function(path, args) { +
44335 return function(object) { +
44336 return baseInvoke(object, path, args); +
44337 }; +
44338 }); +
44339 +
44340 /** +
44341 * The opposite of `_.method`; this method creates a function that invokes +
44342 * the method at a given path of `object`. Any additional arguments are +
44343 * provided to the invoked method. +
44344 * +
44345 * @static +
44346 * @memberOf _ +
44347 * @since 3.7.0 +
44348 * @category Util +
44349 * @param {Object} object The object to query. +
44350 * @param {...*} [args] The arguments to invoke the method with. +
44351 * @returns {Function} Returns the new invoker function. +
44352 * @example +
44353 * +
44354 * var array = _.times(3, _.constant), +
44355 * object = { 'a': array, 'b': array, 'c': array }; +
44356 * +
44357 * _.map(['a[2]', 'c[0]'], _.methodOf(object)); +
44358 * // => [2, 0] +
44359 * +
44360 * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); +
44361 * // => [2, 0] +
44362 */ +
44363 var methodOf = baseRest(function(object, args) { +
44364 return function(path) { +
44365 return baseInvoke(object, path, args); +
44366 }; +
44367 }); +
44368 +
44369 /** +
44370 * Adds all own enumerable string keyed function properties of a source +
44371 * object to the destination object. If `object` is a function, then methods +
44372 * are added to its prototype as well. +
44373 * +
44374 * **Note:** Use `_.runInContext` to create a pristine `lodash` function to +
44375 * avoid conflicts caused by modifying the original. +
44376 * +
44377 * @static +
44378 * @since 0.1.0 +
44379 * @memberOf _ +
44380 * @category Util +
44381 * @param {Function|Object} [object=lodash] The destination object. +
44382 * @param {Object} source The object of functions to add. +
44383 * @param {Object} [options={}] The options object. +
44384 * @param {boolean} [options.chain=true] Specify whether mixins are chainable. +
44385 * @returns {Function|Object} Returns `object`. +
44386 * @example +
44387 * +
44388 * function vowels(string) { +
44389 * return _.filter(string, function(v) { +
44390 * return /[aeiou]/i.test(v); +
44391 * }); +
44392 * } +
44393 * +
44394 * _.mixin({ 'vowels': vowels }); +
44395 * _.vowels('fred'); +
44396 * // => ['e'] +
44397 * +
44398 * _('fred').vowels().value(); +
44399 * // => ['e'] +
44400 * +
44401 * _.mixin({ 'vowels': vowels }, { 'chain': false }); +
44402 * _('fred').vowels(); +
44403 * // => ['e'] +
44404 */ +
44405 function mixin(object, source, options) { +
44406 var props = keys(source), +
44407 methodNames = baseFunctions(source, props); +
44408 +
44409 if (options == null && +
44410 !(isObject(source) && (methodNames.length || !props.length))) { +
44411 options = source; +
44412 source = object; +
44413 object = this; +
44414 methodNames = baseFunctions(source, keys(source)); +
44415 } +
44416 var chain = !(isObject(options) && 'chain' in options) || !!options.chain, +
44417 isFunc = isFunction(object); +
44418 +
44419 arrayEach(methodNames, function(methodName) { +
44420 var func = source[methodName]; +
44421 object[methodName] = func; +
44422 if (isFunc) { +
44423 object.prototype[methodName] = function() { +
44424 var chainAll = this.__chain__; +
44425 if (chain || chainAll) { +
44426 var result = object(this.__wrapped__), +
44427 actions = result.__actions__ = copyArray(this.__actions__); +
44428 +
44429 actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); +
44430 result.__chain__ = chainAll; +
44431 return result; +
44432 } +
44433 return func.apply(object, arrayPush([this.value()], arguments)); +
44434 }; +
44435 } +
44436 }); +
44437 +
44438 return object; +
44439 } +
44440 +
44441 /** +
44442 * Reverts the `_` variable to its previous value and returns a reference to +
44443 * the `lodash` function. +
44444 * +
44445 * @static +
44446 * @since 0.1.0 +
44447 * @memberOf _ +
44448 * @category Util +
44449 * @returns {Function} Returns the `lodash` function. +
44450 * @example +
44451 * +
44452 * var lodash = _.noConflict(); +
44453 */ +
44454 function noConflict() { +
44455 if (root._ === this) { +
44456 root._ = oldDash; +
44457 } +
44458 return this; +
44459 } +
44460 +
44461 /** +
44462 * This method returns `undefined`. +
44463 * +
44464 * @static +
44465 * @memberOf _ +
44466 * @since 2.3.0 +
44467 * @category Util +
44468 * @example +
44469 * +
44470 * _.times(2, _.noop); +
44471 * // => [undefined, undefined] +
44472 */ +
44473 function noop() { +
44474 // No operation performed. +
44475 } +
44476 +
44477 /** +
44478 * Creates a function that gets the argument at index `n`. If `n` is negative, +
44479 * the nth argument from the end is returned. +
44480 * +
44481 * @static +
44482 * @memberOf _ +
44483 * @since 4.0.0 +
44484 * @category Util +
44485 * @param {number} [n=0] The index of the argument to return. +
44486 * @returns {Function} Returns the new pass-thru function. +
44487 * @example +
44488 * +
44489 * var func = _.nthArg(1); +
44490 * func('a', 'b', 'c', 'd'); +
44491 * // => 'b' +
44492 * +
44493 * var func = _.nthArg(-2); +
44494 * func('a', 'b', 'c', 'd'); +
44495 * // => 'c' +
44496 */ +
44497 function nthArg(n) { +
44498 n = toInteger(n); +
44499 return baseRest(function(args) { +
44500 return baseNth(args, n); +
44501 }); +
44502 } +
44503 +
44504 /** +
44505 * Creates a function that invokes `iteratees` with the arguments it receives +
44506 * and returns their results. +
44507 * +
44508 * @static +
44509 * @memberOf _ +
44510 * @since 4.0.0 +
44511 * @category Util +
44512 * @param {...(Function|Function[])} [iteratees=[_.identity]] +
44513 * The iteratees to invoke. +
44514 * @returns {Function} Returns the new function. +
44515 * @example +
44516 * +
44517 * var func = _.over([Math.max, Math.min]); +
44518 * +
44519 * func(1, 2, 3, 4); +
44520 * // => [4, 1] +
44521 */ +
44522 var over = createOver(arrayMap); +
44523 +
44524 /** +
44525 * Creates a function that checks if **all** of the `predicates` return +
44526 * truthy when invoked with the arguments it receives. +
44527 * +
44528 * @static +
44529 * @memberOf _ +
44530 * @since 4.0.0 +
44531 * @category Util +
44532 * @param {...(Function|Function[])} [predicates=[_.identity]] +
44533 * The predicates to check. +
44534 * @returns {Function} Returns the new function. +
44535 * @example +
44536 * +
44537 * var func = _.overEvery([Boolean, isFinite]); +
44538 * +
44539 * func('1'); +
44540 * // => true +
44541 * +
44542 * func(null); +
44543 * // => false +
44544 * +
44545 * func(NaN); +
44546 * // => false +
44547 */ +
44548 var overEvery = createOver(arrayEvery); +
44549 +
44550 /** +
44551 * Creates a function that checks if **any** of the `predicates` return +
44552 * truthy when invoked with the arguments it receives. +
44553 * +
44554 * @static +
44555 * @memberOf _ +
44556 * @since 4.0.0 +
44557 * @category Util +
44558 * @param {...(Function|Function[])} [predicates=[_.identity]] +
44559 * The predicates to check. +
44560 * @returns {Function} Returns the new function. +
44561 * @example +
44562 * +
44563 * var func = _.overSome([Boolean, isFinite]); +
44564 * +
44565 * func('1'); +
44566 * // => true +
44567 * +
44568 * func(null); +
44569 * // => true +
44570 * +
44571 * func(NaN); +
44572 * // => false +
44573 */ +
44574 var overSome = createOver(arraySome); +
44575 +
44576 /** +
44577 * Creates a function that returns the value at `path` of a given object. +
44578 * +
44579 * @static +
44580 * @memberOf _ +
44581 * @since 2.4.0 +
44582 * @category Util +
44583 * @param {Array|string} path The path of the property to get. +
44584 * @returns {Function} Returns the new accessor function. +
44585 * @example +
44586 * +
44587 * var objects = [ +
44588 * { 'a': { 'b': 2 } }, +
44589 * { 'a': { 'b': 1 } } +
44590 * ]; +
44591 * +
44592 * _.map(objects, _.property('a.b')); +
44593 * // => [2, 1] +
44594 * +
44595 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); +
44596 * // => [1, 2] +
44597 */ +
44598 function property(path) { +
44599 return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +
44600 } +
44601 +
44602 /** +
44603 * The opposite of `_.property`; this method creates a function that returns +
44604 * the value at a given path of `object`. +
44605 * +
44606 * @static +
44607 * @memberOf _ +
44608 * @since 3.0.0 +
44609 * @category Util +
44610 * @param {Object} object The object to query. +
44611 * @returns {Function} Returns the new accessor function. +
44612 * @example +
44613 * +
44614 * var array = [0, 1, 2], +
44615 * object = { 'a': array, 'b': array, 'c': array }; +
44616 * +
44617 * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); +
44618 * // => [2, 0] +
44619 * +
44620 * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); +
44621 * // => [2, 0] +
44622 */ +
44623 function propertyOf(object) { +
44624 return function(path) { +
44625 return object == null ? undefined : baseGet(object, path); +
44626 }; +
44627 } +
44628 +
44629 /** +
44630 * Creates an array of numbers (positive and/or negative) progressing from +
44631 * `start` up to, but not including, `end`. A step of `-1` is used if a negative +
44632 * `start` is specified without an `end` or `step`. If `end` is not specified, +
44633 * it's set to `start` with `start` then set to `0`. +
44634 * +
44635 * **Note:** JavaScript follows the IEEE-754 standard for resolving +
44636 * floating-point values which can produce unexpected results. +
44637 * +
44638 * @static +
44639 * @since 0.1.0 +
44640 * @memberOf _ +
44641 * @category Util +
44642 * @param {number} [start=0] The start of the range. +
44643 * @param {number} end The end of the range. +
44644 * @param {number} [step=1] The value to increment or decrement by. +
44645 * @returns {Array} Returns the range of numbers. +
44646 * @see _.inRange, _.rangeRight +
44647 * @example +
44648 * +
44649 * _.range(4); +
44650 * // => [0, 1, 2, 3] +
44651 * +
44652 * _.range(-4); +
44653 * // => [0, -1, -2, -3] +
44654 * +
44655 * _.range(1, 5); +
44656 * // => [1, 2, 3, 4] +
44657 * +
44658 * _.range(0, 20, 5); +
44659 * // => [0, 5, 10, 15] +
44660 * +
44661 * _.range(0, -4, -1); +
44662 * // => [0, -1, -2, -3] +
44663 * +
44664 * _.range(1, 4, 0); +
44665 * // => [1, 1, 1] +
44666 * +
44667 * _.range(0); +
44668 * // => [] +
44669 */ +
44670 var range = createRange(); +
44671 +
44672 /** +
44673 * This method is like `_.range` except that it populates values in +
44674 * descending order. +
44675 * +
44676 * @static +
44677 * @memberOf _ +
44678 * @since 4.0.0 +
44679 * @category Util +
44680 * @param {number} [start=0] The start of the range. +
44681 * @param {number} end The end of the range. +
44682 * @param {number} [step=1] The value to increment or decrement by. +
44683 * @returns {Array} Returns the range of numbers. +
44684 * @see _.inRange, _.range +
44685 * @example +
44686 * +
44687 * _.rangeRight(4); +
44688 * // => [3, 2, 1, 0] +
44689 * +
44690 * _.rangeRight(-4); +
44691 * // => [-3, -2, -1, 0] +
44692 * +
44693 * _.rangeRight(1, 5); +
44694 * // => [4, 3, 2, 1] +
44695 * +
44696 * _.rangeRight(0, 20, 5); +
44697 * // => [15, 10, 5, 0] +
44698 * +
44699 * _.rangeRight(0, -4, -1); +
44700 * // => [-3, -2, -1, 0] +
44701 * +
44702 * _.rangeRight(1, 4, 0); +
44703 * // => [1, 1, 1] +
44704 * +
44705 * _.rangeRight(0); +
44706 * // => [] +
44707 */ +
44708 var rangeRight = createRange(true); +
44709 +
44710 /** +
44711 * This method returns a new empty array. +
44712 * +
44713 * @static +
44714 * @memberOf _ +
44715 * @since 4.13.0 +
44716 * @category Util +
44717 * @returns {Array} Returns the new empty array. +
44718 * @example +
44719 * +
44720 * var arrays = _.times(2, _.stubArray); +
44721 * +
44722 * console.log(arrays); +
44723 * // => [[], []] +
44724 * +
44725 * console.log(arrays[0] === arrays[1]); +
44726 * // => false +
44727 */ +
44728 function stubArray() { +
44729 return []; +
44730 } +
44731 +
44732 /** +
44733 * This method returns `false`. +
44734 * +
44735 * @static +
44736 * @memberOf _ +
44737 * @since 4.13.0 +
44738 * @category Util +
44739 * @returns {boolean} Returns `false`. +
44740 * @example +
44741 * +
44742 * _.times(2, _.stubFalse); +
44743 * // => [false, false] +
44744 */ +
44745 function stubFalse() { +
44746 return false; +
44747 } +
44748 +
44749 /** +
44750 * This method returns a new empty object. +
44751 * +
44752 * @static +
44753 * @memberOf _ +
44754 * @since 4.13.0 +
44755 * @category Util +
44756 * @returns {Object} Returns the new empty object. +
44757 * @example +
44758 * +
44759 * var objects = _.times(2, _.stubObject); +
44760 * +
44761 * console.log(objects); +
44762 * // => [{}, {}] +
44763 * +
44764 * console.log(objects[0] === objects[1]); +
44765 * // => false +
44766 */ +
44767 function stubObject() { +
44768 return {}; +
44769 } +
44770 +
44771 /** +
44772 * This method returns an empty string. +
44773 * +
44774 * @static +
44775 * @memberOf _ +
44776 * @since 4.13.0 +
44777 * @category Util +
44778 * @returns {string} Returns the empty string. +
44779 * @example +
44780 * +
44781 * _.times(2, _.stubString); +
44782 * // => ['', ''] +
44783 */ +
44784 function stubString() { +
44785 return ''; +
44786 } +
44787 +
44788 /** +
44789 * This method returns `true`. +
44790 * +
44791 * @static +
44792 * @memberOf _ +
44793 * @since 4.13.0 +
44794 * @category Util +
44795 * @returns {boolean} Returns `true`. +
44796 * @example +
44797 * +
44798 * _.times(2, _.stubTrue); +
44799 * // => [true, true] +
44800 */ +
44801 function stubTrue() { +
44802 return true; +
44803 } +
44804 +
44805 /** +
44806 * Invokes the iteratee `n` times, returning an array of the results of +
44807 * each invocation. The iteratee is invoked with one argument; (index). +
44808 * +
44809 * @static +
44810 * @since 0.1.0 +
44811 * @memberOf _ +
44812 * @category Util +
44813 * @param {number} n The number of times to invoke `iteratee`. +
44814 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
44815 * @returns {Array} Returns the array of results. +
44816 * @example +
44817 * +
44818 * _.times(3, String); +
44819 * // => ['0', '1', '2'] +
44820 * +
44821 * _.times(4, _.constant(0)); +
44822 * // => [0, 0, 0, 0] +
44823 */ +
44824 function times(n, iteratee) { +
44825 n = toInteger(n); +
44826 if (n < 1 || n > MAX_SAFE_INTEGER) { +
44827 return []; +
44828 } +
44829 var index = MAX_ARRAY_LENGTH, +
44830 length = nativeMin(n, MAX_ARRAY_LENGTH); +
44831 +
44832 iteratee = getIteratee(iteratee); +
44833 n -= MAX_ARRAY_LENGTH; +
44834 +
44835 var result = baseTimes(length, iteratee); +
44836 while (++index < n) { +
44837 iteratee(index); +
44838 } +
44839 return result; +
44840 } +
44841 +
44842 /** +
44843 * Converts `value` to a property path array. +
44844 * +
44845 * @static +
44846 * @memberOf _ +
44847 * @since 4.0.0 +
44848 * @category Util +
44849 * @param {*} value The value to convert. +
44850 * @returns {Array} Returns the new property path array. +
44851 * @example +
44852 * +
44853 * _.toPath('a.b.c'); +
44854 * // => ['a', 'b', 'c'] +
44855 * +
44856 * _.toPath('a[0].b.c'); +
44857 * // => ['a', '0', 'b', 'c'] +
44858 */ +
44859 function toPath(value) { +
44860 if (isArray(value)) { +
44861 return arrayMap(value, toKey); +
44862 } +
44863 return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); +
44864 } +
44865 +
44866 /** +
44867 * Generates a unique ID. If `prefix` is given, the ID is appended to it. +
44868 * +
44869 * @static +
44870 * @since 0.1.0 +
44871 * @memberOf _ +
44872 * @category Util +
44873 * @param {string} [prefix=''] The value to prefix the ID with. +
44874 * @returns {string} Returns the unique ID. +
44875 * @example +
44876 * +
44877 * _.uniqueId('contact_'); +
44878 * // => 'contact_104' +
44879 * +
44880 * _.uniqueId(); +
44881 * // => '105' +
44882 */ +
44883 function uniqueId(prefix) { +
44884 var id = ++idCounter; +
44885 return toString(prefix) + id; +
44886 } +
44887 +
44888 /*------------------------------------------------------------------------*/ +
44889 +
44890 /** +
44891 * Adds two numbers. +
44892 * +
44893 * @static +
44894 * @memberOf _ +
44895 * @since 3.4.0 +
44896 * @category Math +
44897 * @param {number} augend The first number in an addition. +
44898 * @param {number} addend The second number in an addition. +
44899 * @returns {number} Returns the total. +
44900 * @example +
44901 * +
44902 * _.add(6, 4); +
44903 * // => 10 +
44904 */ +
44905 var add = createMathOperation(function(augend, addend) { +
44906 return augend + addend; +
44907 }, 0); +
44908 +
44909 /** +
44910 * Computes `number` rounded up to `precision`. +
44911 * +
44912 * @static +
44913 * @memberOf _ +
44914 * @since 3.10.0 +
44915 * @category Math +
44916 * @param {number} number The number to round up. +
44917 * @param {number} [precision=0] The precision to round up to. +
44918 * @returns {number} Returns the rounded up number. +
44919 * @example +
44920 * +
44921 * _.ceil(4.006); +
44922 * // => 5 +
44923 * +
44924 * _.ceil(6.004, 2); +
44925 * // => 6.01 +
44926 * +
44927 * _.ceil(6040, -2); +
44928 * // => 6100 +
44929 */ +
44930 var ceil = createRound('ceil'); +
44931 +
44932 /** +
44933 * Divide two numbers. +
44934 * +
44935 * @static +
44936 * @memberOf _ +
44937 * @since 4.7.0 +
44938 * @category Math +
44939 * @param {number} dividend The first number in a division. +
44940 * @param {number} divisor The second number in a division. +
44941 * @returns {number} Returns the quotient. +
44942 * @example +
44943 * +
44944 * _.divide(6, 4); +
44945 * // => 1.5 +
44946 */ +
44947 var divide = createMathOperation(function(dividend, divisor) { +
44948 return dividend / divisor; +
44949 }, 1); +
44950 +
44951 /** +
44952 * Computes `number` rounded down to `precision`. +
44953 * +
44954 * @static +
44955 * @memberOf _ +
44956 * @since 3.10.0 +
44957 * @category Math +
44958 * @param {number} number The number to round down. +
44959 * @param {number} [precision=0] The precision to round down to. +
44960 * @returns {number} Returns the rounded down number. +
44961 * @example +
44962 * +
44963 * _.floor(4.006); +
44964 * // => 4 +
44965 * +
44966 * _.floor(0.046, 2); +
44967 * // => 0.04 +
44968 * +
44969 * _.floor(4060, -2); +
44970 * // => 4000 +
44971 */ +
44972 var floor = createRound('floor'); +
44973 +
44974 /** +
44975 * Computes the maximum value of `array`. If `array` is empty or falsey, +
44976 * `undefined` is returned. +
44977 * +
44978 * @static +
44979 * @since 0.1.0 +
44980 * @memberOf _ +
44981 * @category Math +
44982 * @param {Array} array The array to iterate over. +
44983 * @returns {*} Returns the maximum value. +
44984 * @example +
44985 * +
44986 * _.max([4, 2, 8, 6]); +
44987 * // => 8 +
44988 * +
44989 * _.max([]); +
44990 * // => undefined +
44991 */ +
44992 function max(array) { +
44993 return (array && array.length) +
44994 ? baseExtremum(array, identity, baseGt) +
44995 : undefined; +
44996 } +
44997 +
44998 /** +
44999 * This method is like `_.max` except that it accepts `iteratee` which is +
45000 * invoked for each element in `array` to generate the criterion by which +
45001 * the value is ranked. The iteratee is invoked with one argument: (value). +
45002 * +
45003 * @static +
45004 * @memberOf _ +
45005 * @since 4.0.0 +
45006 * @category Math +
45007 * @param {Array} array The array to iterate over. +
45008 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
45009 * @returns {*} Returns the maximum value. +
45010 * @example +
45011 * +
45012 * var objects = [{ 'n': 1 }, { 'n': 2 }]; +
45013 * +
45014 * _.maxBy(objects, function(o) { return o.n; }); +
45015 * // => { 'n': 2 } +
45016 * +
45017 * // The `_.property` iteratee shorthand. +
45018 * _.maxBy(objects, 'n'); +
45019 * // => { 'n': 2 } +
45020 */ +
45021 function maxBy(array, iteratee) { +
45022 return (array && array.length) +
45023 ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) +
45024 : undefined; +
45025 } +
45026 +
45027 /** +
45028 * Computes the mean of the values in `array`. +
45029 * +
45030 * @static +
45031 * @memberOf _ +
45032 * @since 4.0.0 +
45033 * @category Math +
45034 * @param {Array} array The array to iterate over. +
45035 * @returns {number} Returns the mean. +
45036 * @example +
45037 * +
45038 * _.mean([4, 2, 8, 6]); +
45039 * // => 5 +
45040 */ +
45041 function mean(array) { +
45042 return baseMean(array, identity); +
45043 } +
45044 +
45045 /** +
45046 * This method is like `_.mean` except that it accepts `iteratee` which is +
45047 * invoked for each element in `array` to generate the value to be averaged. +
45048 * The iteratee is invoked with one argument: (value). +
45049 * +
45050 * @static +
45051 * @memberOf _ +
45052 * @since 4.7.0 +
45053 * @category Math +
45054 * @param {Array} array The array to iterate over. +
45055 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
45056 * @returns {number} Returns the mean. +
45057 * @example +
45058 * +
45059 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +
45060 * +
45061 * _.meanBy(objects, function(o) { return o.n; }); +
45062 * // => 5 +
45063 * +
45064 * // The `_.property` iteratee shorthand. +
45065 * _.meanBy(objects, 'n'); +
45066 * // => 5 +
45067 */ +
45068 function meanBy(array, iteratee) { +
45069 return baseMean(array, getIteratee(iteratee, 2)); +
45070 } +
45071 +
45072 /** +
45073 * Computes the minimum value of `array`. If `array` is empty or falsey, +
45074 * `undefined` is returned. +
45075 * +
45076 * @static +
45077 * @since 0.1.0 +
45078 * @memberOf _ +
45079 * @category Math +
45080 * @param {Array} array The array to iterate over. +
45081 * @returns {*} Returns the minimum value. +
45082 * @example +
45083 * +
45084 * _.min([4, 2, 8, 6]); +
45085 * // => 2 +
45086 * +
45087 * _.min([]); +
45088 * // => undefined +
45089 */ +
45090 function min(array) { +
45091 return (array && array.length) +
45092 ? baseExtremum(array, identity, baseLt) +
45093 : undefined; +
45094 } +
45095 +
45096 /** +
45097 * This method is like `_.min` except that it accepts `iteratee` which is +
45098 * invoked for each element in `array` to generate the criterion by which +
45099 * the value is ranked. The iteratee is invoked with one argument: (value). +
45100 * +
45101 * @static +
45102 * @memberOf _ +
45103 * @since 4.0.0 +
45104 * @category Math +
45105 * @param {Array} array The array to iterate over. +
45106 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
45107 * @returns {*} Returns the minimum value. +
45108 * @example +
45109 * +
45110 * var objects = [{ 'n': 1 }, { 'n': 2 }]; +
45111 * +
45112 * _.minBy(objects, function(o) { return o.n; }); +
45113 * // => { 'n': 1 } +
45114 * +
45115 * // The `_.property` iteratee shorthand. +
45116 * _.minBy(objects, 'n'); +
45117 * // => { 'n': 1 } +
45118 */ +
45119 function minBy(array, iteratee) { +
45120 return (array && array.length) +
45121 ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) +
45122 : undefined; +
45123 } +
45124 +
45125 /** +
45126 * Multiply two numbers. +
45127 * +
45128 * @static +
45129 * @memberOf _ +
45130 * @since 4.7.0 +
45131 * @category Math +
45132 * @param {number} multiplier The first number in a multiplication. +
45133 * @param {number} multiplicand The second number in a multiplication. +
45134 * @returns {number} Returns the product. +
45135 * @example +
45136 * +
45137 * _.multiply(6, 4); +
45138 * // => 24 +
45139 */ +
45140 var multiply = createMathOperation(function(multiplier, multiplicand) { +
45141 return multiplier * multiplicand; +
45142 }, 1); +
45143 +
45144 /** +
45145 * Computes `number` rounded to `precision`. +
45146 * +
45147 * @static +
45148 * @memberOf _ +
45149 * @since 3.10.0 +
45150 * @category Math +
45151 * @param {number} number The number to round. +
45152 * @param {number} [precision=0] The precision to round to. +
45153 * @returns {number} Returns the rounded number. +
45154 * @example +
45155 * +
45156 * _.round(4.006); +
45157 * // => 4 +
45158 * +
45159 * _.round(4.006, 2); +
45160 * // => 4.01 +
45161 * +
45162 * _.round(4060, -2); +
45163 * // => 4100 +
45164 */ +
45165 var round = createRound('round'); +
45166 +
45167 /** +
45168 * Subtract two numbers. +
45169 * +
45170 * @static +
45171 * @memberOf _ +
45172 * @since 4.0.0 +
45173 * @category Math +
45174 * @param {number} minuend The first number in a subtraction. +
45175 * @param {number} subtrahend The second number in a subtraction. +
45176 * @returns {number} Returns the difference. +
45177 * @example +
45178 * +
45179 * _.subtract(6, 4); +
45180 * // => 2 +
45181 */ +
45182 var subtract = createMathOperation(function(minuend, subtrahend) { +
45183 return minuend - subtrahend; +
45184 }, 0); +
45185 +
45186 /** +
45187 * Computes the sum of the values in `array`. +
45188 * +
45189 * @static +
45190 * @memberOf _ +
45191 * @since 3.4.0 +
45192 * @category Math +
45193 * @param {Array} array The array to iterate over. +
45194 * @returns {number} Returns the sum. +
45195 * @example +
45196 * +
45197 * _.sum([4, 2, 8, 6]); +
45198 * // => 20 +
45199 */ +
45200 function sum(array) { +
45201 return (array && array.length) +
45202 ? baseSum(array, identity) +
45203 : 0; +
45204 } +
45205 +
45206 /** +
45207 * This method is like `_.sum` except that it accepts `iteratee` which is +
45208 * invoked for each element in `array` to generate the value to be summed. +
45209 * The iteratee is invoked with one argument: (value). +
45210 * +
45211 * @static +
45212 * @memberOf _ +
45213 * @since 4.0.0 +
45214 * @category Math +
45215 * @param {Array} array The array to iterate over. +
45216 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
45217 * @returns {number} Returns the sum. +
45218 * @example +
45219 * +
45220 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +
45221 * +
45222 * _.sumBy(objects, function(o) { return o.n; }); +
45223 * // => 20 +
45224 * +
45225 * // The `_.property` iteratee shorthand. +
45226 * _.sumBy(objects, 'n'); +
45227 * // => 20 +
45228 */ +
45229 function sumBy(array, iteratee) { +
45230 return (array && array.length) +
45231 ? baseSum(array, getIteratee(iteratee, 2)) +
45232 : 0; +
45233 } +
45234 +
45235 /*------------------------------------------------------------------------*/ +
45236 +
45237 // Add methods that return wrapped values in chain sequences. +
45238 lodash.after = after; +
45239 lodash.ary = ary; +
45240 lodash.assign = assign; +
45241 lodash.assignIn = assignIn; +
45242 lodash.assignInWith = assignInWith; +
45243 lodash.assignWith = assignWith; +
45244 lodash.at = at; +
45245 lodash.before = before; +
45246 lodash.bind = bind; +
45247 lodash.bindAll = bindAll; +
45248 lodash.bindKey = bindKey; +
45249 lodash.castArray = castArray; +
45250 lodash.chain = chain; +
45251 lodash.chunk = chunk; +
45252 lodash.compact = compact; +
45253 lodash.concat = concat; +
45254 lodash.cond = cond; +
45255 lodash.conforms = conforms; +
45256 lodash.constant = constant; +
45257 lodash.countBy = countBy; +
45258 lodash.create = create; +
45259 lodash.curry = curry; +
45260 lodash.curryRight = curryRight; +
45261 lodash.debounce = debounce; +
45262 lodash.defaults = defaults; +
45263 lodash.defaultsDeep = defaultsDeep; +
45264 lodash.defer = defer; +
45265 lodash.delay = delay; +
45266 lodash.difference = difference; +
45267 lodash.differenceBy = differenceBy; +
45268 lodash.differenceWith = differenceWith; +
45269 lodash.drop = drop; +
45270 lodash.dropRight = dropRight; +
45271 lodash.dropRightWhile = dropRightWhile; +
45272 lodash.dropWhile = dropWhile; +
45273 lodash.fill = fill; +
45274 lodash.filter = filter; +
45275 lodash.flatMap = flatMap; +
45276 lodash.flatMapDeep = flatMapDeep; +
45277 lodash.flatMapDepth = flatMapDepth; +
45278 lodash.flatten = flatten; +
45279 lodash.flattenDeep = flattenDeep; +
45280 lodash.flattenDepth = flattenDepth; +
45281 lodash.flip = flip; +
45282 lodash.flow = flow; +
45283 lodash.flowRight = flowRight; +
45284 lodash.fromPairs = fromPairs; +
45285 lodash.functions = functions; +
45286 lodash.functionsIn = functionsIn; +
45287 lodash.groupBy = groupBy; +
45288 lodash.initial = initial; +
45289 lodash.intersection = intersection; +
45290 lodash.intersectionBy = intersectionBy; +
45291 lodash.intersectionWith = intersectionWith; +
45292 lodash.invert = invert; +
45293 lodash.invertBy = invertBy; +
45294 lodash.invokeMap = invokeMap; +
45295 lodash.iteratee = iteratee; +
45296 lodash.keyBy = keyBy; +
45297 lodash.keys = keys; +
45298 lodash.keysIn = keysIn; +
45299 lodash.map = map; +
45300 lodash.mapKeys = mapKeys; +
45301 lodash.mapValues = mapValues; +
45302 lodash.matches = matches; +
45303 lodash.matchesProperty = matchesProperty; +
45304 lodash.memoize = memoize; +
45305 lodash.merge = merge; +
45306 lodash.mergeWith = mergeWith; +
45307 lodash.method = method; +
45308 lodash.methodOf = methodOf; +
45309 lodash.mixin = mixin; +
45310 lodash.negate = negate; +
45311 lodash.nthArg = nthArg; +
45312 lodash.omit = omit; +
45313 lodash.omitBy = omitBy; +
45314 lodash.once = once; +
45315 lodash.orderBy = orderBy; +
45316 lodash.over = over; +
45317 lodash.overArgs = overArgs; +
45318 lodash.overEvery = overEvery; +
45319 lodash.overSome = overSome; +
45320 lodash.partial = partial; +
45321 lodash.partialRight = partialRight; +
45322 lodash.partition = partition; +
45323 lodash.pick = pick; +
45324 lodash.pickBy = pickBy; +
45325 lodash.property = property; +
45326 lodash.propertyOf = propertyOf; +
45327 lodash.pull = pull; +
45328 lodash.pullAll = pullAll; +
45329 lodash.pullAllBy = pullAllBy; +
45330 lodash.pullAllWith = pullAllWith; +
45331 lodash.pullAt = pullAt; +
45332 lodash.range = range; +
45333 lodash.rangeRight = rangeRight; +
45334 lodash.rearg = rearg; +
45335 lodash.reject = reject; +
45336 lodash.remove = remove; +
45337 lodash.rest = rest; +
45338 lodash.reverse = reverse; +
45339 lodash.sampleSize = sampleSize; +
45340 lodash.set = set; +
45341 lodash.setWith = setWith; +
45342 lodash.shuffle = shuffle; +
45343 lodash.slice = slice; +
45344 lodash.sortBy = sortBy; +
45345 lodash.sortedUniq = sortedUniq; +
45346 lodash.sortedUniqBy = sortedUniqBy; +
45347 lodash.split = split; +
45348 lodash.spread = spread; +
45349 lodash.tail = tail; +
45350 lodash.take = take; +
45351 lodash.takeRight = takeRight; +
45352 lodash.takeRightWhile = takeRightWhile; +
45353 lodash.takeWhile = takeWhile; +
45354 lodash.tap = tap; +
45355 lodash.throttle = throttle; +
45356 lodash.thru = thru; +
45357 lodash.toArray = toArray; +
45358 lodash.toPairs = toPairs; +
45359 lodash.toPairsIn = toPairsIn; +
45360 lodash.toPath = toPath; +
45361 lodash.toPlainObject = toPlainObject; +
45362 lodash.transform = transform; +
45363 lodash.unary = unary; +
45364 lodash.union = union; +
45365 lodash.unionBy = unionBy; +
45366 lodash.unionWith = unionWith; +
45367 lodash.uniq = uniq; +
45368 lodash.uniqBy = uniqBy; +
45369 lodash.uniqWith = uniqWith; +
45370 lodash.unset = unset; +
45371 lodash.unzip = unzip; +
45372 lodash.unzipWith = unzipWith; +
45373 lodash.update = update; +
45374 lodash.updateWith = updateWith; +
45375 lodash.values = values; +
45376 lodash.valuesIn = valuesIn; +
45377 lodash.without = without; +
45378 lodash.words = words; +
45379 lodash.wrap = wrap; +
45380 lodash.xor = xor; +
45381 lodash.xorBy = xorBy; +
45382 lodash.xorWith = xorWith; +
45383 lodash.zip = zip; +
45384 lodash.zipObject = zipObject; +
45385 lodash.zipObjectDeep = zipObjectDeep; +
45386 lodash.zipWith = zipWith; +
45387 +
45388 // Add aliases. +
45389 lodash.entries = toPairs; +
45390 lodash.entriesIn = toPairsIn; +
45391 lodash.extend = assignIn; +
45392 lodash.extendWith = assignInWith; +
45393 +
45394 // Add methods to `lodash.prototype`. +
45395 mixin(lodash, lodash); +
45396 +
45397 /*------------------------------------------------------------------------*/ +
45398 +
45399 // Add methods that return unwrapped values in chain sequences. +
45400 lodash.add = add; +
45401 lodash.attempt = attempt; +
45402 lodash.camelCase = camelCase; +
45403 lodash.capitalize = capitalize; +
45404 lodash.ceil = ceil; +
45405 lodash.clamp = clamp; +
45406 lodash.clone = clone; +
45407 lodash.cloneDeep = cloneDeep; +
45408 lodash.cloneDeepWith = cloneDeepWith; +
45409 lodash.cloneWith = cloneWith; +
45410 lodash.conformsTo = conformsTo; +
45411 lodash.deburr = deburr; +
45412 lodash.defaultTo = defaultTo; +
45413 lodash.divide = divide; +
45414 lodash.endsWith = endsWith; +
45415 lodash.eq = eq; +
45416 lodash.escape = escape; +
45417 lodash.escapeRegExp = escapeRegExp; +
45418 lodash.every = every; +
45419 lodash.find = find; +
45420 lodash.findIndex = findIndex; +
45421 lodash.findKey = findKey; +
45422 lodash.findLast = findLast; +
45423 lodash.findLastIndex = findLastIndex; +
45424 lodash.findLastKey = findLastKey; +
45425 lodash.floor = floor; +
45426 lodash.forEach = forEach; +
45427 lodash.forEachRight = forEachRight; +
45428 lodash.forIn = forIn; +
45429 lodash.forInRight = forInRight; +
45430 lodash.forOwn = forOwn; +
45431 lodash.forOwnRight = forOwnRight; +
45432 lodash.get = get; +
45433 lodash.gt = gt; +
45434 lodash.gte = gte; +
45435 lodash.has = has; +
45436 lodash.hasIn = hasIn; +
45437 lodash.head = head; +
45438 lodash.identity = identity; +
45439 lodash.includes = includes; +
45440 lodash.indexOf = indexOf; +
45441 lodash.inRange = inRange; +
45442 lodash.invoke = invoke; +
45443 lodash.isArguments = isArguments; +
45444 lodash.isArray = isArray; +
45445 lodash.isArrayBuffer = isArrayBuffer; +
45446 lodash.isArrayLike = isArrayLike; +
45447 lodash.isArrayLikeObject = isArrayLikeObject; +
45448 lodash.isBoolean = isBoolean; +
45449 lodash.isBuffer = isBuffer; +
45450 lodash.isDate = isDate; +
45451 lodash.isElement = isElement; +
45452 lodash.isEmpty = isEmpty; +
45453 lodash.isEqual = isEqual; +
45454 lodash.isEqualWith = isEqualWith; +
45455 lodash.isError = isError; +
45456 lodash.isFinite = isFinite; +
45457 lodash.isFunction = isFunction; +
45458 lodash.isInteger = isInteger; +
45459 lodash.isLength = isLength; +
45460 lodash.isMap = isMap; +
45461 lodash.isMatch = isMatch; +
45462 lodash.isMatchWith = isMatchWith; +
45463 lodash.isNaN = isNaN; +
45464 lodash.isNative = isNative; +
45465 lodash.isNil = isNil; +
45466 lodash.isNull = isNull; +
45467 lodash.isNumber = isNumber; +
45468 lodash.isObject = isObject; +
45469 lodash.isObjectLike = isObjectLike; +
45470 lodash.isPlainObject = isPlainObject; +
45471 lodash.isRegExp = isRegExp; +
45472 lodash.isSafeInteger = isSafeInteger; +
45473 lodash.isSet = isSet; +
45474 lodash.isString = isString; +
45475 lodash.isSymbol = isSymbol; +
45476 lodash.isTypedArray = isTypedArray; +
45477 lodash.isUndefined = isUndefined; +
45478 lodash.isWeakMap = isWeakMap; +
45479 lodash.isWeakSet = isWeakSet; +
45480 lodash.join = join; +
45481 lodash.kebabCase = kebabCase; +
45482 lodash.last = last; +
45483 lodash.lastIndexOf = lastIndexOf; +
45484 lodash.lowerCase = lowerCase; +
45485 lodash.lowerFirst = lowerFirst; +
45486 lodash.lt = lt; +
45487 lodash.lte = lte; +
45488 lodash.max = max; +
45489 lodash.maxBy = maxBy; +
45490 lodash.mean = mean; +
45491 lodash.meanBy = meanBy; +
45492 lodash.min = min; +
45493 lodash.minBy = minBy; +
45494 lodash.stubArray = stubArray; +
45495 lodash.stubFalse = stubFalse; +
45496 lodash.stubObject = stubObject; +
45497 lodash.stubString = stubString; +
45498 lodash.stubTrue = stubTrue; +
45499 lodash.multiply = multiply; +
45500 lodash.nth = nth; +
45501 lodash.noConflict = noConflict; +
45502 lodash.noop = noop; +
45503 lodash.now = now; +
45504 lodash.pad = pad; +
45505 lodash.padEnd = padEnd; +
45506 lodash.padStart = padStart; +
45507 lodash.parseInt = parseInt; +
45508 lodash.random = random; +
45509 lodash.reduce = reduce; +
45510 lodash.reduceRight = reduceRight; +
45511 lodash.repeat = repeat; +
45512 lodash.replace = replace; +
45513 lodash.result = result; +
45514 lodash.round = round; +
45515 lodash.runInContext = runInContext; +
45516 lodash.sample = sample; +
45517 lodash.size = size; +
45518 lodash.snakeCase = snakeCase; +
45519 lodash.some = some; +
45520 lodash.sortedIndex = sortedIndex; +
45521 lodash.sortedIndexBy = sortedIndexBy; +
45522 lodash.sortedIndexOf = sortedIndexOf; +
45523 lodash.sortedLastIndex = sortedLastIndex; +
45524 lodash.sortedLastIndexBy = sortedLastIndexBy; +
45525 lodash.sortedLastIndexOf = sortedLastIndexOf; +
45526 lodash.startCase = startCase; +
45527 lodash.startsWith = startsWith; +
45528 lodash.subtract = subtract; +
45529 lodash.sum = sum; +
45530 lodash.sumBy = sumBy; +
45531 lodash.template = template; +
45532 lodash.times = times; +
45533 lodash.toFinite = toFinite; +
45534 lodash.toInteger = toInteger; +
45535 lodash.toLength = toLength; +
45536 lodash.toLower = toLower; +
45537 lodash.toNumber = toNumber; +
45538 lodash.toSafeInteger = toSafeInteger; +
45539 lodash.toString = toString; +
45540 lodash.toUpper = toUpper; +
45541 lodash.trim = trim; +
45542 lodash.trimEnd = trimEnd; +
45543 lodash.trimStart = trimStart; +
45544 lodash.truncate = truncate; +
45545 lodash.unescape = unescape; +
45546 lodash.uniqueId = uniqueId; +
45547 lodash.upperCase = upperCase; +
45548 lodash.upperFirst = upperFirst; +
45549 +
45550 // Add aliases. +
45551 lodash.each = forEach; +
45552 lodash.eachRight = forEachRight; +
45553 lodash.first = head; +
45554 +
45555 mixin(lodash, (function() { +
45556 var source = {}; +
45557 baseForOwn(lodash, function(func, methodName) { +
45558 if (!hasOwnProperty.call(lodash.prototype, methodName)) { +
45559 source[methodName] = func; +
45560 } +
45561 }); +
45562 return source; +
45563 }()), { 'chain': false }); +
45564 +
45565 /*------------------------------------------------------------------------*/ +
45566 +
45567 /** +
45568 * The semantic version number. +
45569 * +
45570 * @static +
45571 * @memberOf _ +
45572 * @type {string} +
45573 */ +
45574 lodash.VERSION = VERSION; +
45575 +
45576 // Assign default placeholders. +
45577 arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { +
45578 lodash[methodName].placeholder = lodash; +
45579 }); +
45580 +
45581 // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. +
45582 arrayEach(['drop', 'take'], function(methodName, index) { +
45583 LazyWrapper.prototype[methodName] = function(n) { +
45584 n = n === undefined ? 1 : nativeMax(toInteger(n), 0); +
45585 +
45586 var result = (this.__filtered__ && !index) +
45587 ? new LazyWrapper(this) +
45588 : this.clone(); +
45589 +
45590 if (result.__filtered__) { +
45591 result.__takeCount__ = nativeMin(n, result.__takeCount__); +
45592 } else { +
45593 result.__views__.push({ +
45594 'size': nativeMin(n, MAX_ARRAY_LENGTH), +
45595 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') +
45596 }); +
45597 } +
45598 return result; +
45599 }; +
45600 +
45601 LazyWrapper.prototype[methodName + 'Right'] = function(n) { +
45602 return this.reverse()[methodName](n).reverse(); +
45603 }; +
45604 }); +
45605 +
45606 // Add `LazyWrapper` methods that accept an `iteratee` value. +
45607 arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { +
45608 var type = index + 1, +
45609 isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; +
45610 +
45611 LazyWrapper.prototype[methodName] = function(iteratee) { +
45612 var result = this.clone(); +
45613 result.__iteratees__.push({ +
45614 'iteratee': getIteratee(iteratee, 3), +
45615 'type': type +
45616 }); +
45617 result.__filtered__ = result.__filtered__ || isFilter; +
45618 return result; +
45619 }; +
45620 }); +
45621 +
45622 // Add `LazyWrapper` methods for `_.head` and `_.last`. +
45623 arrayEach(['head', 'last'], function(methodName, index) { +
45624 var takeName = 'take' + (index ? 'Right' : ''); +
45625 +
45626 LazyWrapper.prototype[methodName] = function() { +
45627 return this[takeName](1).value()[0]; +
45628 }; +
45629 }); +
45630 +
45631 // Add `LazyWrapper` methods for `_.initial` and `_.tail`. +
45632 arrayEach(['initial', 'tail'], function(methodName, index) { +
45633 var dropName = 'drop' + (index ? '' : 'Right'); +
45634 +
45635 LazyWrapper.prototype[methodName] = function() { +
45636 return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); +
45637 }; +
45638 }); +
45639 +
45640 LazyWrapper.prototype.compact = function() { +
45641 return this.filter(identity); +
45642 }; +
45643 +
45644 LazyWrapper.prototype.find = function(predicate) { +
45645 return this.filter(predicate).head(); +
45646 }; +
45647 +
45648 LazyWrapper.prototype.findLast = function(predicate) { +
45649 return this.reverse().find(predicate); +
45650 }; +
45651 +
45652 LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { +
45653 if (typeof path == 'function') { +
45654 return new LazyWrapper(this); +
45655 } +
45656 return this.map(function(value) { +
45657 return baseInvoke(value, path, args); +
45658 }); +
45659 }); +
45660 +
45661 LazyWrapper.prototype.reject = function(predicate) { +
45662 return this.filter(negate(getIteratee(predicate))); +
45663 }; +
45664 +
45665 LazyWrapper.prototype.slice = function(start, end) { +
45666 start = toInteger(start); +
45667 +
45668 var result = this; +
45669 if (result.__filtered__ && (start > 0 || end < 0)) { +
45670 return new LazyWrapper(result); +
45671 } +
45672 if (start < 0) { +
45673 result = result.takeRight(-start); +
45674 } else if (start) { +
45675 result = result.drop(start); +
45676 } +
45677 if (end !== undefined) { +
45678 end = toInteger(end); +
45679 result = end < 0 ? result.dropRight(-end) : result.take(end - start); +
45680 } +
45681 return result; +
45682 }; +
45683 +
45684 LazyWrapper.prototype.takeRightWhile = function(predicate) { +
45685 return this.reverse().takeWhile(predicate).reverse(); +
45686 }; +
45687 +
45688 LazyWrapper.prototype.toArray = function() { +
45689 return this.take(MAX_ARRAY_LENGTH); +
45690 }; +
45691 +
45692 // Add `LazyWrapper` methods to `lodash.prototype`. +
45693 baseForOwn(LazyWrapper.prototype, function(func, methodName) { +
45694 var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), +
45695 isTaker = /^(?:head|last)$/.test(methodName), +
45696 lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], +
45697 retUnwrapped = isTaker || /^find/.test(methodName); +
45698 +
45699 if (!lodashFunc) { +
45700 return; +
45701 } +
45702 lodash.prototype[methodName] = function() { +
45703 var value = this.__wrapped__, +
45704 args = isTaker ? [1] : arguments, +
45705 isLazy = value instanceof LazyWrapper, +
45706 iteratee = args[0], +
45707 useLazy = isLazy || isArray(value); +
45708 +
45709 var interceptor = function(value) { +
45710 var result = lodashFunc.apply(lodash, arrayPush([value], args)); +
45711 return (isTaker && chainAll) ? result[0] : result; +
45712 }; +
45713 +
45714 if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { +
45715 // Avoid lazy use if the iteratee has a "length" value other than `1`. +
45716 isLazy = useLazy = false; +
45717 } +
45718 var chainAll = this.__chain__, +
45719 isHybrid = !!this.__actions__.length, +
45720 isUnwrapped = retUnwrapped && !chainAll, +
45721 onlyLazy = isLazy && !isHybrid; +
45722 +
45723 if (!retUnwrapped && useLazy) { +
45724 value = onlyLazy ? value : new LazyWrapper(this); +
45725 var result = func.apply(value, args); +
45726 result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); +
45727 return new LodashWrapper(result, chainAll); +
45728 } +
45729 if (isUnwrapped && onlyLazy) { +
45730 return func.apply(this, args); +
45731 } +
45732 result = this.thru(interceptor); +
45733 return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; +
45734 }; +
45735 }); +
45736 +
45737 // Add `Array` methods to `lodash.prototype`. +
45738 arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { +
45739 var func = arrayProto[methodName], +
45740 chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', +
45741 retUnwrapped = /^(?:pop|shift)$/.test(methodName); +
45742 +
45743 lodash.prototype[methodName] = function() { +
45744 var args = arguments; +
45745 if (retUnwrapped && !this.__chain__) { +
45746 var value = this.value(); +
45747 return func.apply(isArray(value) ? value : [], args); +
45748 } +
45749 return this[chainName](function(value) { +
45750 return func.apply(isArray(value) ? value : [], args); +
45751 }); +
45752 }; +
45753 }); +
45754 +
45755 // Map minified method names to their real names. +
45756 baseForOwn(LazyWrapper.prototype, function(func, methodName) { +
45757 var lodashFunc = lodash[methodName]; +
45758 if (lodashFunc) { +
45759 var key = (lodashFunc.name + ''), +
45760 names = realNames[key] || (realNames[key] = []); +
45761 +
45762 names.push({ 'name': methodName, 'func': lodashFunc }); +
45763 } +
45764 }); +
45765 +
45766 realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ +
45767 'name': 'wrapper', +
45768 'func': undefined +
45769 }]; +
45770 +
45771 // Add methods to `LazyWrapper`. +
45772 LazyWrapper.prototype.clone = lazyClone; +
45773 LazyWrapper.prototype.reverse = lazyReverse; +
45774 LazyWrapper.prototype.value = lazyValue; +
45775 +
45776 // Add chain sequence methods to the `lodash` wrapper. +
45777 lodash.prototype.at = wrapperAt; +
45778 lodash.prototype.chain = wrapperChain; +
45779 lodash.prototype.commit = wrapperCommit; +
45780 lodash.prototype.next = wrapperNext; +
45781 lodash.prototype.plant = wrapperPlant; +
45782 lodash.prototype.reverse = wrapperReverse; +
45783 lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; +
45784 +
45785 // Add lazy aliases. +
45786 lodash.prototype.first = lodash.prototype.head; +
45787 +
45788 if (symIterator) { +
45789 lodash.prototype[symIterator] = wrapperToIterator; +
45790 } +
45791 return lodash; +
45792 }); +
45793 +
45794 /*--------------------------------------------------------------------------*/ +
45795 +
45796 // Export lodash. +
45797 var _ = runInContext(); +
45798 +
45799 // Some AMD build optimizers, like r.js, check for condition patterns like: +
45800 if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { +
45801 // Expose Lodash on the global object to prevent errors when Lodash is +
45802 // loaded by a script tag in the presence of an AMD loader. +
45803 // See http://requirejs.org/docs/errors.html#mismatch for more details. +
45804 // Use `_.noConflict` to remove Lodash from the global object. +
45805 root._ = _; +
45806 +
45807 // Define as an anonymous module so, through path mapping, it can be +
45808 // referenced as the "underscore" module. +
45809 define(function() { +
45810 return _; +
45811 }); +
45812 } +
45813 // Check for `exports` after `define` in case a build optimizer adds it. +
45814 else if (freeModule) { +
45815 // Export for Node.js. +
45816 (freeModule.exports = _)._ = _; +
45817 // Export for CommonJS support. +
45818 freeExports._ = _; +
45819 } +
45820 else { +
45821 // Export to the global object. +
45822 root._ = _; +
45823 } +
45824}.call(this)); +
45825 +
45826/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
45827 +
45828/***/ }), +
45829 +
45830/***/ "./node_modules/dagre-layout/dist/dagre-layout.core.js": +
45831/*!*************************************************************!*\ +
45832 !*** ./node_modules/dagre-layout/dist/dagre-layout.core.js ***! +
45833 \*************************************************************/ +
45834/*! no static exports found */ +
45835/***/ (function(module, exports, __webpack_require__) { +
45836 +
45837module.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n.w={},n(n.s=27)}([function(e,t){e.exports=__webpack_require__(/*! lodash */ "./node_modules/dagre-layout/node_modules/lodash/lodash.js")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addDummyNode=d,t.simplify=f,t.asNonCompoundGraph=i,t.successorWeights=l,t.predecessorWeights=c,t.intersectRect=s,t.buildLayerMatrix=h,t.normalizeRanks=v,t.removeEmptyRanks=g,t.addBorderNode=p,t.maxRank=m,t.partition=E,t.time=b,t.notime=w;var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r},o=n(2);function d(e,t,n,r){var a=void 0;do{a=u.default.uniqueId(r)}while(e.hasNode(a));return n.dummy=t,e.setNode(a,n),a}function f(e){var t=(new o.Graph).setGraph(e.graph());return u.default.forEach(e.nodes(),function(n){t.setNode(n,e.node(n))}),u.default.forEach(e.edges(),function(n){var r=t.edge(n.v,n.w)||{weight:0,minlen:1},a=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+a.weight,minlen:Math.max(r.minlen,a.minlen)})}),t}function i(e){var t=new o.Graph({multigraph:e.isMultigraph()}).setGraph(e.graph());return u.default.forEach(e.nodes(),function(n){e.children(n).length||t.setNode(n,e.node(n))}),u.default.forEach(e.edges(),function(n){t.setEdge(n,e.edge(n))}),t}function l(e){var t=u.default.map(e.nodes(),function(t){var n={};return u.default.forEach(e.outEdges(t),function(t){n[t.w]=(n[t.w]||0)+e.edge(t).weight}),n});return u.default.zipObject(e.nodes(),t)}function c(e){var t=u.default.map(e.nodes(),function(t){var n={};return u.default.forEach(e.inEdges(t),function(t){n[t.v]=(n[t.v]||0)+e.edge(t).weight}),n});return u.default.zipObject(e.nodes(),t)}function s(e,t){var n=e.x,r=e.y,a=t.x-n,u=t.y-r,o=e.width/2,d=e.height/2;if(!a&&!u)throw new Error("Not possible to find intersection inside of the rectangle");var f=void 0,i=void 0;return Math.abs(u)*o>Math.abs(a)*d?(u<0&&(d=-d),f=d*a/u,i=d):(a<0&&(o=-o),f=o,i=o*u/a),{x:n+f,y:r+i}}function h(e){var t=u.default.map(u.default.range(m(e)+1),function(){return[]});return u.default.forEach(e.nodes(),function(n){var r=e.node(n),a=r.rank;u.default.isUndefined(a)||(t[a][r.order]=n)}),t}function v(e){var t=u.default.min(u.default.map(e.nodes(),function(t){return e.node(t).rank}));u.default.forEach(e.nodes(),function(n){var r=e.node(n);u.default.has(r,"rank")&&(r.rank-=t)})}function g(e){var t=u.default.min(u.default.map(e.nodes(),function(t){return e.node(t).rank})),n=[];u.default.forEach(e.nodes(),function(r){var a=e.node(r).rank-t;n[a]||(n[a]=[]),n[a].push(r)});var r=0,a=e.graph().nodeRankFactor;u.default.forEach(n,function(t,n){u.default.isUndefined(t)&&n%a!=0?--r:r&&u.default.forEach(t,function(t){e.node(t).rank+=r})})}function p(e,t,n,r){var a={width:0,height:0};return arguments.length>=4&&(a.rank=n,a.order=r),d(e,"border",a,t)}function m(e){return u.default.max(u.default.map(e.nodes(),function(t){var n=e.node(t).rank;if(!u.default.isUndefined(n))return n}))}function E(e,t){var n={lhs:[],rhs:[]};return u.default.forEach(e,function(e){t(e)?n.lhs.push(e):n.rhs.push(e)}),n}function b(e,t){var n=u.default.now();try{return t()}finally{console.log(e+" time: "+(u.default.now()-n)+"ms")}}function w(e,t){return t()}t.default={addDummyNode:d,simplify:f,asNonCompoundGraph:i,successorWeights:l,predecessorWeights:c,intersectRect:s,buildLayerMatrix:h,normalizeRanks:v,removeEmptyRanks:g,addBorderNode:p,maxRank:m,partition:E,time:b,notime:w}},function(e,t){e.exports=__webpack_require__(/*! graphlibrary */ "./node_modules/graphlibrary/index.js")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.longestPath=o,t.slack=d;var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};function o(e){var t={};u.default.forEach(e.sources(),function n(r){var a=e.node(r);if(u.default.has(t,r))return a.rank;t[r]=!0;var o=u.default.min(u.default.map(e.outEdges(r),function(t){return n(t.w)-e.edge(t).minlen}))||0;return a.rank=o})}function d(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}t.default={longestPath:o,slack:d}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r},o=n(2),d=n(3);function f(e,t){return u.default.forEach(e.nodes(),function n(r){u.default.forEach(t.nodeEdges(r),function(a){var u=a.v,o=r===u?a.w:u;e.hasNode(o)||(0,d.slack)(t,a)||(e.setNode(o,{}),e.setEdge(r,o,{}),n(o))})}),e.nodeCount()}function i(e,t){return u.default.minBy(t.edges(),function(n){if(e.hasNode(n.v)!==e.hasNode(n.w))return(0,d.slack)(t,n)})}function l(e,t,n){u.default.forEach(e.nodes(),function(e){t.node(e).rank+=n})}t.default=function(e){var t=new o.Graph({directed:!1}),n=e.nodes()[0],r=e.nodeCount();t.setNode(n,{});for(var a=void 0;f(t,e)<r;)a=i(t,e),l(t,e,t.hasNode(a.v)?(0,d.slack)(e,a):-(0,d.slack)(e,a));return t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.positionX=p;var r=o(n(0)),a=n(2),u=o(n(1));function o(e){return e&&e.__esModule?e:{default:e}}function d(e,t){var n={};return r.default.reduce(t,function(t,a){var u=0,o=0,d=t.length,f=r.default.last(a);return r.default.forEach(a,function(t,l){var c=function(e,t){if(e.node(t).dummy)return r.default.find(e.predecessors(t),function(t){return e.node(t).dummy})}(e,t),s=c?e.node(c).order:d;(c||t===f)&&(r.default.forEach(a.slice(o,l+1),function(t){r.default.forEach(e.predecessors(t),function(r){var a=e.node(r),o=a.order;!(o<u||s<o)||a.dummy&&e.node(t).dummy||i(n,r,t)})}),o=l+1,u=s)}),a}),n}function f(e,t){var n={};function a(t,a,u,o,d){var f=void 0;r.default.forEach(r.default.range(a,u),function(a){f=t[a],e.node(f).dummy&&r.default.forEach(e.predecessors(f),function(t){var r=e.node(t);r.dummy&&(r.order<o||r.order>d)&&i(n,t,f)})})}return r.default.reduce(t,function(t,n){var u=-1,o=void 0,d=0;return r.default.forEach(n,function(r,f){if("border"===e.node(r).dummy){var i=e.predecessors(r);i.length&&(o=e.node(i[0]).order,a(n,d,f,u,o),d=f,u=o)}a(n,d,n.length,o,t.length)}),n}),n}function i(e,t,n){if(t>n){var r=t;t=n,n=r}var a=e[t];a||(e[t]=a={}),a[n]=!0}function l(e,t,n){if(t>n){var a=t;t=n,n=a}return r.default.has(e[t],n)}function c(e,t,n,a){var u={},o={},d={};return r.default.forEach(t,function(e){r.default.forEach(e,function(e,t){u[e]=e,o[e]=e,d[e]=t})}),r.default.forEach(t,function(e){var t=-1;r.default.forEach(e,function(e){var f=a(e);if(f.length)for(var i=((f=r.default.sortBy(f,function(e){return d[e]})).length-1)/2,c=Math.floor(i),s=Math.ceil(i);c<=s;++c){var h=f[c];o[e]===e&&t<d[h]&&!l(n,e,h)&&(o[h]=e,o[e]=u[e]=u[h],t=d[h])}})}),{root:u,align:o}}function s(e,t,n,u,o){var d={},f=function(e,t,n,u){var o=new a.Graph,d=e.graph(),f=function(e,t,n){return function(a,u,o){var d=a.node(u),f=a.node(o),i=0,l=void 0;if(i+=d.width/2,r.default.has(d,"labelpos"))switch(d.labelpos.toLowerCase()){case"l":l=-d.width/2;break;case"r":l=d.width/2}if(l&&(i+=n?l:-l),l=0,i+=(d.dummy?t:e)/2,i+=(f.dummy?t:e)/2,i+=f.width/2,r.default.has(f,"labelpos"))switch(f.labelpos.toLowerCase()){case"l":l=f.width/2;break;case"r":l=-f.width/2}return l&&(i+=n?l:-l),l=0,i}}(d.nodesep,d.edgesep,u);return r.default.forEach(t,function(t){var a=void 0;r.default.forEach(t,function(t){var r=n[t];if(o.setNode(r),a){var u=n[a],d=o.edge(u,r);o.setEdge(u,r,Math.max(f(e,t,a),d||0))}a=t})}),o}(e,t,n,o),i={};r.default.forEach(f.nodes(),function e(t){r.default.has(i,t)||(i[t]=!0,d[t]=r.default.reduce(f.inEdges(t),function(t,n){return e(n.v),Math.max(t,d[n.v]+f.edge(n))},0))});var l=o?"borderLeft":"borderRight";return r.default.forEach(f.nodes(),function t(n){if(2!==i[n]){i[n]++;var a=e.node(n),u=r.default.reduce(f.outEdges(n),function(e,n){return t(n.w),Math.min(e,d[n.w]-f.edge(n))},Number.POSITIVE_INFINITY);u!==Number.POSITIVE_INFINITY&&a.borderType!==l&&(d[n]=Math.max(d[n],u))}}),r.default.forEach(u,function(e){d[e]=d[n[e]]}),d}function h(e,t){return r.default.minBy(r.default.values(t),function(t){var n=(r.default.minBy(r.default.toPairs(t),function(t){return t[1]-m(e,t[0])/2})||["k",0])[1];return(r.default.maxBy(r.default.toPairs(t),function(t){return t[1]+m(e,t[0])/2})||["k",0])[1]-n})}function v(e,t){var n=r.default.values(t),a=r.default.min(n),u=r.default.max(n);r.default.forEach(["u","d"],function(n){r.default.forEach(["l","r"],function(o){var d=n+o,f=e[d];if(f!==t){var i=r.default.values(f),l="l"===o?a-r.default.min(i):u-r.default.max(i);l&&(e[d]=r.default.mapValues(f,function(e){return e+l}))}})})}function g(e,t){return r.default.mapValues(e.ul,function(n,a){if(t)return e[t.toLowerCase()][a];var u=r.default.sortBy(r.default.map(e,a));return(u[1]+u[2])/2})}function p(e){var t=u.default.buildLayerMatrix(e),n=r.default.merge(d(e,t),f(e,t)),a={},o=void 0;r.default.forEach(["u","d"],function(u){o="u"===u?t:r.default.values(t).reverse(),r.default.forEach(["l","r"],function(t){"r"===t&&(o=r.default.map(o,function(e){return r.default.values(e).reverse()}));var d=r.default.bind("u"===u?e.predecessors:e.successors,e),f=c(0,o,n,d),i=s(e,o,f.root,f.align,"r"===t);"r"===t&&(i=r.default.mapValues(i,function(e){return-e})),a[u+t]=i})});var i=h(e,a);return v(a,i),g(a,e.graph().align)}function m(e,t){return e.node(t).width}t.default={positionX:p,findType1Conflicts:d,findType2Conflicts:f,addConflict:i,hasConflict:l,verticalAlignment:c,horizontalCompaction:s,alignCoordinates:v,findSmallestWidthAlignment:h,balance:g}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(n(0)),a=o(n(1)),u=n(5);function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(e){(function(e){var t=a.default.buildLayerMatrix(e),n=e.graph().ranksep,u=0;r.default.forEach(t,function(t){var a=r.default.max(r.default.map(t,function(t){return e.node(t).height}));r.default.forEach(t,function(t){e.node(t).y=u+a/2}),u+=a+n})})(e=a.default.asNonCompoundGraph(e)),r.default.forEach((0,u.positionX)(e),function(t,n){e.node(n).x=t})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e,t,n){var r={},a=void 0;u.default.forEach(n,function(n){for(var u=e.parent(n),o=void 0,d=void 0;u;){if((o=e.parent(u))?(d=r[o],r[o]=u):(d=a,a=u),d&&d!==u)return void t.setEdge(d,u);u=o}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r},o=n(2);t.default=function(e,t,n){var r=function(e){for(var t=void 0;e.hasNode(t=u.default.uniqueId("_root")););return t}(e),a=new o.Graph({compound:!0}).setGraph({root:r}).setDefaultNodeLabel(function(t){return e.node(t)});return u.default.forEach(e.nodes(),function(o){var d=e.node(o),f=e.parent(o);(d.rank===t||d.minRank<=t&&t<=d.maxRank)&&(a.setNode(o),a.setParent(o,f||r),u.default.forEach(e[n](o),function(t){var n=t.v===o?t.w:t.v,r=a.edge(n,o),d=u.default.isUndefined(r)?0:r.weight;a.setEdge(n,o,{weight:e.edge(t).weight+d})}),u.default.has(d,"minRank")&&a.setNode(o,{borderLeft:d.borderLeft[t],borderRight:d.borderRight[t]}))}),a}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=u(n(0)),a=u(n(1));function u(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){for(var a=void 0;t.length&&(a=r.default.last(t)).i<=n;)t.pop(),e.push(a.vs),n++;return n}t.default=function(e,t){var n,u=a.default.partition(e,function(e){return r.default.has(e,"barycenter")}),d=u.lhs,f=r.default.sortBy(u.rhs,function(e){return-e.i}),i=[],l=0,c=0,s=0;d.sort((n=!!t,function(e,t){return e.barycenter<t.barycenter?-1:e.barycenter>t.barycenter?1:n?t.i-e.i:e.i-t.i})),s=o(i,f,s),r.default.forEach(d,function(e){s+=e.vs.length,i.push(e.vs),l+=e.barycenter*e.weight,c+=e.weight,s=o(i,f,s)});var h={vs:r.default.flatten(i,!0)};return c&&(h.barycenter=l/c,h.weight=c),h}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e,t){var n={};return u.default.forEach(e,function(e,t){var r=n[e.v]={indegree:0,in:[],out:[],vs:[e.v],i:t};u.default.isUndefined(e.barycenter)||(r.barycenter=e.barycenter,r.weight=e.weight)}),u.default.forEach(t.edges(),function(e){var t=n[e.v],r=n[e.w];u.default.isUndefined(t)||u.default.isUndefined(r)||(r.indegree++,t.out.push(n[e.w]))}),function(e){var t=[];function n(e){return function(t){var n,r,a,o;t.merged||(u.default.isUndefined(t.barycenter)||u.default.isUndefined(e.barycenter)||t.barycenter>=e.barycenter)&&(r=t,a=0,o=0,(n=e).weight&&(a+=n.barycenter*n.weight,o+=n.weight),r.weight&&(a+=r.barycenter*r.weight,o+=r.weight),n.vs=r.vs.concat(n.vs),n.barycenter=a/o,n.weight=o,n.i=Math.min(r.i,n.i),r.merged=!0)}}function r(t){return function(n){n.in.push(t),0==--n.indegree&&e.push(n)}}for(;e.length;){var a=e.pop();t.push(a),u.default.forEach(a.in.reverse(),n(a)),u.default.forEach(a.out,r(a))}return u.default.chain(t).filter(function(e){return!e.merged}).map(function(e){return u.default.pick(e,["vs","i","barycenter","weight"])}).value()}(u.default.filter(n,function(e){return!e.indegree}))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e,t){return u.default.map(t,function(t){var n=e.inEdges(t);if(n.length){var r=u.default.reduce(n,function(t,n){var r=e.edge(n),a=e.node(n.v);return{sum:t.sum+r.weight*a.order,weight:t.weight+r.weight}},{sum:0,weight:0});return{v:t,barycenter:r.sum/r.weight,weight:r.weight}}return{v:t}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=d(n(0)),a=d(n(11)),u=d(n(10)),o=d(n(9));function d(e){return e&&e.__esModule?e:{default:e}}t.default=function e(t,n,d,f){var i=t.children(n),l=t.node(n),c=l?l.borderLeft:void 0,s=l?l.borderRight:void 0,h={};c&&(i=r.default.filter(i,function(e){return e!==c&&e!==s}));var v=(0,a.default)(t,i);r.default.forEach(v,function(n){if(t.children(n.v).length){var a=e(t,n.v,d,f);h[n.v]=a,r.default.has(a,"barycenter")&&(u=n,o=a,r.default.isUndefined(u.barycenter)?(u.barycenter=o.barycenter,u.weight=o.weight):(u.barycenter=(u.barycenter*u.weight+o.barycenter*o.weight)/(u.weight+o.weight),u.weight+=o.weight))}var u,o});var g=(0,u.default)(v,d);!function(e,t){r.default.forEach(e,function(e){e.vs=r.default.flatten(e.vs.map(function(e){return t[e]?t[e].vs:e}),!0)})}(g,h);var p=(0,o.default)(g,f);if(c&&(p.vs=r.default.flatten([c,p.vs,s],!0),t.predecessors(c).length)){var m=t.node(t.predecessors(c)[0]),E=t.node(t.predecessors(s)[0]);r.default.has(p,"barycenter")||(p.barycenter=0,p.weight=0),p.barycenter=(p.barycenter*p.weight+m.order+E.order)/(p.weight+2),p.weight+=2}return p}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};function o(e,t,n){for(var r=u.default.zipObject(n,u.default.map(n,function(e,t){return t})),a=u.default.flatten(u.default.map(t,function(t){return u.default.chain(e.outEdges(t)).map(function(t){return{pos:r[t.w],weight:e.edge(t).weight}}).sortBy("pos").value()}),!0),o=1;o<n.length;)o<<=1;var d=2*o-1;o-=1;var f=u.default.map(new Array(d),function(){return 0}),i=0;return u.default.forEach(a.forEach(function(e){var t=e.pos+o;f[t]+=e.weight;for(var n=0;t>0;)t%2&&(n+=f[t+1]),f[t=t-1>>1]+=e.weight;i+=e.weight*n})),i}t.default=function(e,t){for(var n=0,r=1;r<t.length;++r)n+=o(e,t[r-1],t[r]);return n}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e){var t={},n=u.default.filter(e.nodes(),function(t){return!e.children(t).length}),r=u.default.max(u.default.map(n,function(t){return e.node(t).rank})),a=u.default.map(u.default.range(r+1),function(){return[]}),o=u.default.sortBy(n,function(t){return e.node(t).rank});return u.default.forEach(o,function n(r){if(!u.default.has(t,r)){t[r]=!0;var o=e.node(r);a[o.rank].push(r),u.default.forEach(e.successors(r),n)}}),a}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=c(n(0)),a=n(2),u=c(n(14)),o=c(n(13)),d=c(n(12)),f=c(n(8)),i=c(n(7)),l=c(n(1));function c(e){return e&&e.__esModule?e:{default:e}}function s(e,t,n){return r.default.map(t,function(t){return(0,f.default)(e,t,n)})}function h(e,t){var n=new a.Graph;r.default.forEach(e,function(e){var a=e.graph().root,u=(0,d.default)(e,a,n,t);r.default.forEach(u.vs,function(t,n){e.node(t).order=n}),(0,i.default)(e,n,u.vs)})}function v(e,t){r.default.forEach(t,function(t){r.default.forEach(t,function(t,n){e.node(t).order=n})})}t.default=function(e){var t=l.default.maxRank(e),n=s(e,r.default.range(1,t+1),"inEdges"),a=s(e,r.default.range(t-1,-1,-1),"outEdges"),d=(0,u.default)(e);v(e,d);for(var f=Number.POSITIVE_INFINITY,i=void 0,c=0,g=0;g<4;++c,++g){h(c%2?n:a,c%4>=2),d=l.default.buildLayerMatrix(e);var p=(0,o.default)(e,d);p<f&&(g=0,i=r.default.cloneDeep(d),f=p)}v(e,i)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};function o(e){u.default.forEach(e.nodes(),function(t){d(e.node(t))}),u.default.forEach(e.edges(),function(t){d(e.edge(t))})}function d(e){var t=e.width;e.width=e.height,e.height=t}function f(e){e.y=-e.y}function i(e){var t=e.x;e.x=e.y,e.y=t}t.default={adjust:function(e){var t=e.graph().rankdir.toLowerCase();"lr"!==t&&"rl"!==t||o(e)},undo:function(e){var t=e.graph().rankdir.toLowerCase();"bt"!==t&&"rl"!==t||function(e){u.default.forEach(e.nodes(),function(t){f(e.node(t))}),u.default.forEach(e.edges(),function(t){var n=e.edge(t);u.default.forEach(n.points,f),u.default.has(n,"y")&&f(n)})}(e),"lr"!==t&&"rl"!==t||(function(e){u.default.forEach(e.nodes(),function(t){i(e.node(t))}),u.default.forEach(e.edges(),function(t){var n=e.edge(t);u.default.forEach(n.points,i),u.default.has(n,"x")&&i(n)})}(e),o(e))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=u(n(0)),a=u(n(1));function u(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n,r,u,o){var d={width:0,height:0,rank:o,borderType:t},f=u[t][o-1],i=a.default.addDummyNode(e,"border",d,n);u[t][o]=i,e.setParent(i,r),f&&e.setEdge(f,i,{weight:1})}t.default=function(e){r.default.forEach(e.children(),function t(n){var a=e.children(n),u=e.node(n);if(a.length&&r.default.forEach(a,t),r.default.has(u,"minRank")){u.borderLeft=[],u.borderRight=[];for(var d=u.minRank,f=u.maxRank+1;d<f;++d)o(e,"borderLeft","_bl",n,u,d),o(e,"borderRight","_br",n,u,d)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=u(n(0)),a=u(n(1));function u(e){return e&&e.__esModule?e:{default:e}}t.default={run:function(e){var t=a.default.addDummyNode(e,"root",{},"_root"),n=function(e){var t={};return r.default.forEach(e.children(),function(n){!function n(a,u){var o=e.children(a);o&&o.length&&r.default.forEach(o,function(e){n(e,u+1)}),t[a]=u}(n,1)}),t}(e),u=r.default.max(r.default.values(n))-1,o=2*u+1;e.graph().nestingRoot=t,r.default.forEach(e.edges(),function(t){e.edge(t).minlen*=o});var d=function(e){return r.default.reduce(e.edges(),function(t,n){return t+e.edge(n).weight},0)}(e)+1;r.default.forEach(e.children(),function(f){!function e(t,n,u,o,d,f,i){var l=t.children(i);if(l.length){var c=a.default.addBorderNode(t,"_bt"),s=a.default.addBorderNode(t,"_bb"),h=t.node(i);t.setParent(c,i),h.borderTop=c,t.setParent(s,i),h.borderBottom=s,r.default.forEach(l,function(r){e(t,n,u,o,d,f,r);var a=t.node(r),l=a.borderTop?a.borderTop:r,h=a.borderBottom?a.borderBottom:r,v=a.borderTop?o:2*o,g=l!==h?1:d-f[i]+1;t.setEdge(c,l,{weight:v,minlen:g,nestingEdge:!0}),t.setEdge(h,s,{weight:v,minlen:g,nestingEdge:!0})}),t.parent(i)||t.setEdge(n,c,{weight:0,minlen:d+f[i]})}else i!==n&&t.setEdge(n,i,{weight:0,minlen:u})}(e,t,o,d,u,n,f)}),e.graph().nodeRankFactor=o},cleanup:function(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.default.forEach(e.edges(),function(t){e.edge(t).nestingEdge&&e.removeEdge(t)})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e){var t=function(e){var t={},n=0;return u.default.forEach(e.children(),function r(a){var o=n;u.default.forEach(e.children(a),r),t[a]={low:o,lim:n++}}),t}(e);u.default.forEach(e.graph().dummyChains,function(n){for(var r=e.node(n),a=r.edgeObj,u=function(e,t,n,r){var a=[],u=[],o=Math.min(t[n].low,t[r].low),d=Math.max(t[n].lim,t[r].lim),f=void 0,i=void 0;f=n;do{f=e.parent(f),a.push(f)}while(f&&(t[f].low>o||d>t[f].lim));for(i=f,f=r;(f=e.parent(f))!==i;)u.push(f);return{path:a.concat(u.reverse()),lca:i}}(e,t,a.v,a.w),o=u.path,d=u.lca,f=0,i=o[f],l=!0;n!==a.w;){if(r=e.node(n),l){for(;(i=o[f])!==d&&e.node(i).maxRank<r.rank;)f++;i===d&&(l=!1)}if(!l){for(;f<o.length-1&&e.node(i=o[f+1]).minRank<=r.rank;)f++;i=o[f]}e.setParent(n,i),n=e.successors(n)[0]}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=f(n(0)),a=n(2),u=f(n(4)),o=n(3),d=n(1);function f(e){return e&&e.__esModule?e:{default:e}}var i=a.alg.preorder,l=a.alg.postorder;function c(e){e=(0,d.simplify)(e),(0,o.longestPath)(e);var t=(0,u.default)(e);v(t),s(t,e);for(var n=void 0;n=g(t);)m(t,e,n,p(t,e,n))}function s(e,t){var n=l(e,e.nodes());n=n.slice(0,n.length-1),r.default.forEach(n,function(n){!function(e,t,n){var r=e.node(n).parent;e.edge(n,r).cutvalue=h(e,t,n)}(e,t,n)})}function h(e,t,n){var a=e.node(n).parent,u=!0,o=t.edge(n,a),d=0;return o||(u=!1,o=t.edge(a,n)),d=o.weight,r.default.forEach(t.nodeEdges(n),function(r){var o,f,i=r.v===n,l=i?r.w:r.v;if(l!==a){var c=i===u,s=t.edge(r).weight;if(d+=c?s:-s,o=n,f=l,e.hasEdge(o,f)){var h=e.edge(n,l).cutvalue;d+=c?-h:h}}}),d}function v(e,t){arguments.length<2&&(t=e.nodes()[0]),function e(t,n,a,u,o){var d=a;var f=t.node(u);n[u]=!0;r.default.forEach(t.neighbors(u),function(o){r.default.has(n,o)||(a=e(t,n,a,o,u))});f.low=d;f.lim=a++;o?f.parent=o:delete f.parent;return a}(e,{},1,t)}function g(e){return r.default.find(e.edges(),function(t){return e.edge(t).cutvalue<0})}function p(e,t,n){var a=n.v,u=n.w;t.hasEdge(a,u)||(a=n.w,u=n.v);var d=e.node(a),f=e.node(u),i=d,l=!1;d.lim>f.lim&&(i=f,l=!0);var c=r.default.filter(t.edges(),function(t){return l===E(e,e.node(t.v),i)&&l!==E(e,e.node(t.w),i)});return r.default.minBy(c,function(e){return(0,o.slack)(t,e)})}function m(e,t,n,a){var u=n.v,o=n.w;e.removeEdge(u,o),e.setEdge(a.v,a.w,{}),v(e),s(e,t),function(e,t){var n=r.default.find(e.nodes(),function(e){return!t.node(e).parent}),a=i(e,n);a=a.slice(1),r.default.forEach(a,function(n){var r=e.node(n).parent,a=t.edge(n,r),u=!1;a||(a=t.edge(r,n),u=!0),t.node(n).rank=t.node(r).rank+(u?a.minlen:-a.minlen)})}(e,t)}function E(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}c.initLowLimValues=v,c.initCutValues=s,c.calcCutValue=h,c.leaveEdge=g,c.enterEdge=p,c.exchangeEdges=m,t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(3),a=o(n(4)),u=o(n(20));function o(e){return e&&e.__esModule?e:{default:e}}var d=r.longestPath;function f(e){(0,u.default)(e)}t.default=function(e){switch(e.graph().ranker){case"network-simplex":f(e);break;case"tight-tree":!function(e){(0,r.longestPath)(e),(0,a.default)(e)}(e);break;case"longest-path":d(e);break;default:f(e)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=u(n(0)),a=u(n(1));function u(e){return e&&e.__esModule?e:{default:e}}t.default={run:function(e){e.graph().dummyChains=[],r.default.forEach(e.edges(),function(t){!function(e,t){var n=t.v,r=e.node(n).rank,u=t.w,o=e.node(u).rank,d=t.name,f=e.edge(t),i=f.labelRank;if(o!==r+1){e.removeEdge(t);var l=void 0,c=void 0,s=void 0;for(s=0,++r;r<o;++s,++r)f.points=[],c={width:0,height:0,edgeLabel:f,edgeObj:t,rank:r},l=a.default.addDummyNode(e,"edge",c,"_d"),r===i&&(c.width=f.width,c.height=f.height,c.dummy="edge-label",c.labelpos=f.labelpos),e.setEdge(n,l,{weight:f.weight},d),0===s&&e.graph().dummyChains.push(l),n=l;e.setEdge(n,u,{weight:f.weight},d)}}(e,t)})},undo:function(e){r.default.forEach(e.graph().dummyChains,function(t){var n=e.node(t),r=n.edgeLabel,a=null;for(e.setEdge(n.edgeObj,r);n.dummy;)a=e.successors(t)[0],e.removeNode(t),r.points.push({x:n.x,y:n.y}),"edge-label"===n.dummy&&(r.x=n.x,r.y=n.y,r.width=n.width,r.height=n.height),t=a,n=e.node(t)})}}},function(e,t,n){"use strict";function r(){var e={};e._next=e._prev=e,this._sentinel=e}function a(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function u(e,t){if("_next"!==e&&"_prev"!==e)return t}Object.defineProperty(t,"__esModule",{value:!0}),r.prototype.dequeue=function(){var e=this._sentinel,t=e._prev;if(t!==e)return a(t),t},r.prototype.enqueue=function(e){var t=this._sentinel;e._prev&&e._next&&a(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t},r.prototype.toString=function(){for(var e=[],t=this._sentinel,n=t._prev;n!==t;)e.push(JSON.stringify(n,u)),n=n._prev;return"["+e.join(", ")+"]"},t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(n(0)),a=n(2),u=o(n(23));function o(e){return e&&e.__esModule?e:{default:e}}var d=r.default.constant(1);function f(e,t,n,a,u){var o=u?[]:void 0;return r.default.forEach(e.inEdges(a.v),function(r){var a=e.edge(r),d=e.node(r.v);u&&o.push({v:r.v,w:r.w}),d.out-=a,i(t,n,d)}),r.default.forEach(e.outEdges(a.v),function(r){var a=e.edge(r),u=r.w,o=e.node(u);o.in-=a,i(t,n,o)}),e.removeNode(a.v),o}function i(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}t.default=function(e,t){if(e.nodeCount()<=1)return[];var n=function(e,t){var n=new a.Graph,o=0,d=0;r.default.forEach(e.nodes(),function(e){n.setNode(e,{v:e,in:0,out:0})}),r.default.forEach(e.edges(),function(e){var r=n.edge(e.v,e.w)||0,a=t(e),u=r+a;n.setEdge(e.v,e.w,u),d=Math.max(d,n.node(e.v).out+=a),o=Math.max(o,n.node(e.w).in+=a)});var f=r.default.range(d+o+3).map(function(){return new u.default}),l=o+1;return r.default.forEach(n.nodes(),function(e){i(f,l,n.node(e))}),{graph:n,buckets:f,zeroIdx:l}}(e,t||d),o=function(e,t,n){for(var r=[],a=t[t.length-1],u=t[0],o=void 0;e.nodeCount();){for(;o=u.dequeue();)f(e,t,n,o);for(;o=a.dequeue();)f(e,t,n,o);if(e.nodeCount())for(var d=t.length-2;d>0;--d)if(o=t[d].dequeue()){r=r.concat(f(e,t,n,o,!0));break}}return r}(n.graph,n.buckets,n.zeroIdx);return r.default.flatten(r.default.map(o,function(t){return e.outEdges(t.v,t.w)}),!0)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=u(n(0)),a=u(n(24));function u(e){return e&&e.__esModule?e:{default:e}}t.default={run:function(e){var t="greedy"===e.graph().acyclicer?(0,a.default)(e,function(e){return function(t){return e.edge(t).weight}}(e)):function(e){var t=[],n={},a={};return r.default.forEach(e.nodes(),function u(o){r.default.has(a,o)||(a[o]=!0,n[o]=!0,r.default.forEach(e.outEdges(o),function(e){r.default.has(n,e.w)?t.push(e):u(e.w)}),delete n[o])}),t}(e);r.default.forEach(t,function(t){var n=e.edge(t);e.removeEdge(t),n.forwardName=t.name,n.reversed=!0,e.setEdge(t.w,t.v,n,r.default.uniqueId("rev"))})},undo:function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t);if(n.reversed){e.removeEdge(t);var r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=p(n(0)),a=n(2),u=p(n(25)),o=p(n(22)),d=p(n(21)),f=n(1),i=p(f),l=p(n(19)),c=p(n(18)),s=p(n(17)),h=p(n(16)),v=p(n(15)),g=p(n(6));function p(e){return e&&e.__esModule?e:{default:e}}var m=["nodesep","edgesep","ranksep","marginx","marginy"],E={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},b=["acyclicer","ranker","rankdir","align"],w=["width","height"],y={width:0,height:0},_=["minlen","weight","width","height","labeloffset"],x={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},k=["labelpos"];function M(e,t){return r.default.mapValues(r.default.pick(e,t),Number)}function N(e){var t={};return r.default.forEach(e,function(e,n){t[n.toLowerCase()]=e}),t}t.default=function(e,t){var n=t&&t.debugTiming?i.default.time:i.default.notime;n("layout",function(){var t=n(" buildLayoutGraph",function(){return function(e){var t=new a.Graph({multigraph:!0,compound:!0}),n=N(e.graph());return t.setGraph(r.default.merge({},E,M(n,m),r.default.pick(n,b))),r.default.forEach(e.nodes(),function(n){var a=N(e.node(n));t.setNode(n,r.default.defaults(M(a,w),y)),t.setParent(n,e.parent(n))}),r.default.forEach(e.edges(),function(n){var a=N(e.edge(n));t.setEdge(n,r.default.merge({},x,M(a,_),r.default.pick(a,k)))}),t}(e)});n(" runLayout",function(){!function(e,t){t(" makeSpaceForEdgeLabels",function(){!function(e){var t=e.graph();t.ranksep/=2,r.default.forEach(e.edges(),function(n){var r=e.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===t.rankdir||"BT"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)})}(e)}),t(" removeSelfEdges",function(){!function(e){r.default.forEach(e.edges(),function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}})}(e)}),t(" acyclic",function(){u.default.run(e)}),t(" nestingGraph.run",function(){c.default.run(e)}),t(" rank",function(){(0,d.default)(i.default.asNonCompoundGraph(e))}),t(" injectEdgeLabelProxies",function(){!function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),a=e.node(t.w),u={rank:(a.rank-r.rank)/2+r.rank,e:t};i.default.addDummyNode(e,"edge-proxy",u,"_ep")}})}(e)}),t(" removeEmptyRanks",function(){(0,f.removeEmptyRanks)(e)}),t(" nestingGraph.cleanup",function(){c.default.cleanup(e)}),t(" normalizeRanks",function(){(0,f.normalizeRanks)(e)}),t(" assignRankMinMax",function(){!function(e){var t=0;r.default.forEach(e.nodes(),function(n){var r=e.node(n);r.borderTop&&(r.minRank=e.node(r.borderTop).rank,r.maxRank=e.node(r.borderBottom).rank,t=Math.max(t,r.maxRank))}),e.graph().maxRank=t}(e)}),t(" removeEdgeLabelProxies",function(){!function(e){r.default.forEach(e.nodes(),function(t){var n=e.node(t);"edge-proxy"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))})}(e)}),t(" normalize.run",function(){o.default.run(e)}),t(" parentDummyChains",function(){(0,l.default)(e)}),t(" addBorderSegments",function(){(0,s.default)(e)}),t(" order",function(){(0,v.default)(e)}),t(" insertSelfEdges",function(){!function(e){var t=i.default.buildLayerMatrix(e);r.default.forEach(t,function(t){var n=0;r.default.forEach(t,function(t,a){var u=e.node(t);u.order=a+n,r.default.forEach(u.selfEdges,function(t){i.default.addDummyNode(e,"selfedge",{width:t.label.width,height:t.label.height,rank:u.rank,order:a+ ++n,e:t.e,label:t.label},"_se")}),delete u.selfEdges})})}(e)}),t(" adjustCoordinateSystem",function(){h.default.adjust(e)}),t(" position",function(){(0,g.default)(e)}),t(" positionSelfEdges",function(){!function(e){r.default.forEach(e.nodes(),function(t){var n=e.node(t);if("selfedge"===n.dummy){var r=e.node(n.e.v),a=r.x+r.width/2,u=r.y,o=n.x-a,d=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:a+2*o/3,y:u-d},{x:a+5*o/6,y:u-d},{x:a+o,y:u},{x:a+5*o/6,y:u+d},{x:a+2*o/3,y:u+d}],n.label.x=n.x,n.label.y=n.y}})}(e)}),t(" removeBorderNodes",function(){!function(e){r.default.forEach(e.nodes(),function(t){if(e.children(t).length){var n=e.node(t),a=e.node(n.borderTop),u=e.node(n.borderBottom),o=e.node(r.default.last(n.borderLeft)),d=e.node(r.default.last(n.borderRight));n.width=Math.abs(d.x-o.x),n.height=Math.abs(u.y-a.y),n.x=o.x+n.width/2,n.y=a.y+n.height/2}}),r.default.forEach(e.nodes(),function(t){"border"===e.node(t).dummy&&e.removeNode(t)})}(e)}),t(" normalize.undo",function(){o.default.undo(e)}),t(" fixupEdgeLabelCoords",function(){!function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t);if(r.default.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}})}(e)}),t(" undoCoordinateSystem",function(){h.default.undo(e)}),t(" translateGraph",function(){!function(e){var t=Number.POSITIVE_INFINITY,n=0,a=Number.POSITIVE_INFINITY,u=0,o=e.graph(),d=o.marginx||0,f=o.marginy||0;function i(e){var r=e.x,o=e.y,d=e.width,f=e.height;t=Math.min(t,r-d/2),n=Math.max(n,r+d/2),a=Math.min(a,o-f/2),u=Math.max(u,o+f/2)}r.default.forEach(e.nodes(),function(t){i(e.node(t))}),r.default.forEach(e.edges(),function(t){var n=e.edge(t);r.default.has(n,"x")&&i(n)}),t-=d,a-=f,r.default.forEach(e.nodes(),function(n){var r=e.node(n);r.x-=t,r.y-=a}),r.default.forEach(e.edges(),function(n){var u=e.edge(n);r.default.forEach(u.points,function(e){e.x-=t,e.y-=a}),r.default.has(u,"x")&&(u.x-=t),r.default.has(u,"y")&&(u.y-=a)}),o.width=n-t+d,o.height=u-a+f}(e)}),t(" assignNodeIntersects",function(){!function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t),r=e.node(t.v),a=e.node(t.w),u=null,o=null;n.points?(u=n.points[0],o=n.points[n.points.length-1]):(n.points=[],u=a,o=r),n.points.unshift(i.default.intersectRect(r,u)),n.points.push(i.default.intersectRect(a,o))})}(e)}),t(" reversePoints",function(){!function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t);n.reversed&&n.points.reverse()})}(e)}),t(" acyclic.undo",function(){u.default.undo(e)})}(t,n)}),n(" updateInputGraph",function(){!function(e,t){r.default.forEach(e.nodes(),function(n){var r=e.node(n),a=t.node(n);r&&(r.x=a.x,r.y=a.y,t.children(n).length&&(r.width=a.width,r.height=a.height))}),r.default.forEach(e.edges(),function(n){var a=e.edge(n),u=t.edge(n);a.points=u.points,r.default.has(u,"x")&&(a.x=u.x,a.y=u.y)}),e.graph().width=t.graph().width,e.graph().height=t.graph().height}(e,t)})})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,a=n(26),u=(r=a)&&r.__esModule?r:{default:r};t.default={layout:u.default}}]); +
45838//# sourceMappingURL=dagre-layout.core.js.map +
45839 +
45840/***/ }), +
45841 +
45842/***/ "./node_modules/dagre-layout/node_modules/lodash/lodash.js": +
45843/*!*****************************************************************!*\ +
45844 !*** ./node_modules/dagre-layout/node_modules/lodash/lodash.js ***! +
45845 \*****************************************************************/ +
45846/*! no static exports found */ +
45847/***/ (function(module, exports, __webpack_require__) { +
45848 +
45849/* WEBPACK VAR INJECTION */(function(global, module) {/** +
45850 * @license +
45851 * Lodash <https://lodash.com/> +
45852 * Copyright JS Foundation and other contributors <https://js.foundation/> +
45853 * Released under MIT license <https://lodash.com/license> +
45854 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> +
45855 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +
45856 */ +
45857;(function() { +
45858 +
45859 /** Used as a safe reference for `undefined` in pre-ES5 environments. */ +
45860 var undefined; +
45861 +
45862 /** Used as the semantic version number. */ +
45863 var VERSION = '4.17.5'; +
45864 +
45865 /** Used as the size to enable large array optimizations. */ +
45866 var LARGE_ARRAY_SIZE = 200; +
45867 +
45868 /** Error message constants. */ +
45869 var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', +
45870 FUNC_ERROR_TEXT = 'Expected a function'; +
45871 +
45872 /** Used to stand-in for `undefined` hash values. */ +
45873 var HASH_UNDEFINED = '__lodash_hash_undefined__'; +
45874 +
45875 /** Used as the maximum memoize cache size. */ +
45876 var MAX_MEMOIZE_SIZE = 500; +
45877 +
45878 /** Used as the internal argument placeholder. */ +
45879 var PLACEHOLDER = '__lodash_placeholder__'; +
45880 +
45881 /** Used to compose bitmasks for cloning. */ +
45882 var CLONE_DEEP_FLAG = 1, +
45883 CLONE_FLAT_FLAG = 2, +
45884 CLONE_SYMBOLS_FLAG = 4; +
45885 +
45886 /** Used to compose bitmasks for value comparisons. */ +
45887 var COMPARE_PARTIAL_FLAG = 1, +
45888 COMPARE_UNORDERED_FLAG = 2; +
45889 +
45890 /** Used to compose bitmasks for function metadata. */ +
45891 var WRAP_BIND_FLAG = 1, +
45892 WRAP_BIND_KEY_FLAG = 2, +
45893 WRAP_CURRY_BOUND_FLAG = 4, +
45894 WRAP_CURRY_FLAG = 8, +
45895 WRAP_CURRY_RIGHT_FLAG = 16, +
45896 WRAP_PARTIAL_FLAG = 32, +
45897 WRAP_PARTIAL_RIGHT_FLAG = 64, +
45898 WRAP_ARY_FLAG = 128, +
45899 WRAP_REARG_FLAG = 256, +
45900 WRAP_FLIP_FLAG = 512; +
45901 +
45902 /** Used as default options for `_.truncate`. */ +
45903 var DEFAULT_TRUNC_LENGTH = 30, +
45904 DEFAULT_TRUNC_OMISSION = '...'; +
45905 +
45906 /** Used to detect hot functions by number of calls within a span of milliseconds. */ +
45907 var HOT_COUNT = 800, +
45908 HOT_SPAN = 16; +
45909 +
45910 /** Used to indicate the type of lazy iteratees. */ +
45911 var LAZY_FILTER_FLAG = 1, +
45912 LAZY_MAP_FLAG = 2, +
45913 LAZY_WHILE_FLAG = 3; +
45914 +
45915 /** Used as references for various `Number` constants. */ +
45916 var INFINITY = 1 / 0, +
45917 MAX_SAFE_INTEGER = 9007199254740991, +
45918 MAX_INTEGER = 1.7976931348623157e+308, +
45919 NAN = 0 / 0; +
45920 +
45921 /** Used as references for the maximum length and index of an array. */ +
45922 var MAX_ARRAY_LENGTH = 4294967295, +
45923 MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, +
45924 HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; +
45925 +
45926 /** Used to associate wrap methods with their bit flags. */ +
45927 var wrapFlags = [ +
45928 ['ary', WRAP_ARY_FLAG], +
45929 ['bind', WRAP_BIND_FLAG], +
45930 ['bindKey', WRAP_BIND_KEY_FLAG], +
45931 ['curry', WRAP_CURRY_FLAG], +
45932 ['curryRight', WRAP_CURRY_RIGHT_FLAG], +
45933 ['flip', WRAP_FLIP_FLAG], +
45934 ['partial', WRAP_PARTIAL_FLAG], +
45935 ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], +
45936 ['rearg', WRAP_REARG_FLAG] +
45937 ]; +
45938 +
45939 /** `Object#toString` result references. */ +
45940 var argsTag = '[object Arguments]', +
45941 arrayTag = '[object Array]', +
45942 asyncTag = '[object AsyncFunction]', +
45943 boolTag = '[object Boolean]', +
45944 dateTag = '[object Date]', +
45945 domExcTag = '[object DOMException]', +
45946 errorTag = '[object Error]', +
45947 funcTag = '[object Function]', +
45948 genTag = '[object GeneratorFunction]', +
45949 mapTag = '[object Map]', +
45950 numberTag = '[object Number]', +
45951 nullTag = '[object Null]', +
45952 objectTag = '[object Object]', +
45953 promiseTag = '[object Promise]', +
45954 proxyTag = '[object Proxy]', +
45955 regexpTag = '[object RegExp]', +
45956 setTag = '[object Set]', +
45957 stringTag = '[object String]', +
45958 symbolTag = '[object Symbol]', +
45959 undefinedTag = '[object Undefined]', +
45960 weakMapTag = '[object WeakMap]', +
45961 weakSetTag = '[object WeakSet]'; +
45962 +
45963 var arrayBufferTag = '[object ArrayBuffer]', +
45964 dataViewTag = '[object DataView]', +
45965 float32Tag = '[object Float32Array]', +
45966 float64Tag = '[object Float64Array]', +
45967 int8Tag = '[object Int8Array]', +
45968 int16Tag = '[object Int16Array]', +
45969 int32Tag = '[object Int32Array]', +
45970 uint8Tag = '[object Uint8Array]', +
45971 uint8ClampedTag = '[object Uint8ClampedArray]', +
45972 uint16Tag = '[object Uint16Array]', +
45973 uint32Tag = '[object Uint32Array]'; +
45974 +
45975 /** Used to match empty string literals in compiled template source. */ +
45976 var reEmptyStringLeading = /\b__p \+= '';/g, +
45977 reEmptyStringMiddle = /\b(__p \+=) '' \+/g, +
45978 reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; +
45979 +
45980 /** Used to match HTML entities and HTML characters. */ +
45981 var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, +
45982 reUnescapedHtml = /[&<>"']/g, +
45983 reHasEscapedHtml = RegExp(reEscapedHtml.source), +
45984 reHasUnescapedHtml = RegExp(reUnescapedHtml.source); +
45985 +
45986 /** Used to match template delimiters. */ +
45987 var reEscape = /<%-([\s\S]+?)%>/g, +
45988 reEvaluate = /<%([\s\S]+?)%>/g, +
45989 reInterpolate = /<%=([\s\S]+?)%>/g; +
45990 +
45991 /** Used to match property names within property paths. */ +
45992 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, +
45993 reIsPlainProp = /^\w*$/, +
45994 rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; +
45995 +
45996 /** +
45997 * Used to match `RegExp` +
45998 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). +
45999 */ +
46000 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, +
46001 reHasRegExpChar = RegExp(reRegExpChar.source); +
46002 +
46003 /** Used to match leading and trailing whitespace. */ +
46004 var reTrim = /^\s+|\s+$/g, +
46005 reTrimStart = /^\s+/, +
46006 reTrimEnd = /\s+$/; +
46007 +
46008 /** Used to match wrap detail comments. */ +
46009 var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, +
46010 reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, +
46011 reSplitDetails = /,? & /; +
46012 +
46013 /** Used to match words composed of alphanumeric characters. */ +
46014 var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; +
46015 +
46016 /** Used to match backslashes in property paths. */ +
46017 var reEscapeChar = /\\(\\)?/g; +
46018 +
46019 /** +
46020 * Used to match +
46021 * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). +
46022 */ +
46023 var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; +
46024 +
46025 /** Used to match `RegExp` flags from their coerced string values. */ +
46026 var reFlags = /\w*$/; +
46027 +
46028 /** Used to detect bad signed hexadecimal string values. */ +
46029 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; +
46030 +
46031 /** Used to detect binary string values. */ +
46032 var reIsBinary = /^0b[01]+$/i; +
46033 +
46034 /** Used to detect host constructors (Safari). */ +
46035 var reIsHostCtor = /^\[object .+?Constructor\]$/; +
46036 +
46037 /** Used to detect octal string values. */ +
46038 var reIsOctal = /^0o[0-7]+$/i; +
46039 +
46040 /** Used to detect unsigned integer values. */ +
46041 var reIsUint = /^(?:0|[1-9]\d*)$/; +
46042 +
46043 /** Used to match Latin Unicode letters (excluding mathematical operators). */ +
46044 var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; +
46045 +
46046 /** Used to ensure capturing order of template delimiters. */ +
46047 var reNoMatch = /($^)/; +
46048 +
46049 /** Used to match unescaped characters in compiled string literals. */ +
46050 var reUnescapedString = /['\n\r\u2028\u2029\\]/g; +
46051 +
46052 /** Used to compose unicode character classes. */ +
46053 var rsAstralRange = '\\ud800-\\udfff', +
46054 rsComboMarksRange = '\\u0300-\\u036f', +
46055 reComboHalfMarksRange = '\\ufe20-\\ufe2f', +
46056 rsComboSymbolsRange = '\\u20d0-\\u20ff', +
46057 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, +
46058 rsDingbatRange = '\\u2700-\\u27bf', +
46059 rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', +
46060 rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', +
46061 rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', +
46062 rsPunctuationRange = '\\u2000-\\u206f', +
46063 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', +
46064 rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', +
46065 rsVarRange = '\\ufe0e\\ufe0f', +
46066 rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; +
46067 +
46068 /** Used to compose unicode capture groups. */ +
46069 var rsApos = "['\u2019]", +
46070 rsAstral = '[' + rsAstralRange + ']', +
46071 rsBreak = '[' + rsBreakRange + ']', +
46072 rsCombo = '[' + rsComboRange + ']', +
46073 rsDigits = '\\d+', +
46074 rsDingbat = '[' + rsDingbatRange + ']', +
46075 rsLower = '[' + rsLowerRange + ']', +
46076 rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', +
46077 rsFitz = '\\ud83c[\\udffb-\\udfff]', +
46078 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', +
46079 rsNonAstral = '[^' + rsAstralRange + ']', +
46080 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', +
46081 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', +
46082 rsUpper = '[' + rsUpperRange + ']', +
46083 rsZWJ = '\\u200d'; +
46084 +
46085 /** Used to compose unicode regexes. */ +
46086 var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', +
46087 rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', +
46088 rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', +
46089 rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', +
46090 reOptMod = rsModifier + '?', +
46091 rsOptVar = '[' + rsVarRange + ']?', +
46092 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', +
46093 rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', +
46094 rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', +
46095 rsSeq = rsOptVar + reOptMod + rsOptJoin, +
46096 rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, +
46097 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; +
46098 +
46099 /** Used to match apostrophes. */ +
46100 var reApos = RegExp(rsApos, 'g'); +
46101 +
46102 /** +
46103 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and +
46104 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). +
46105 */ +
46106 var reComboMark = RegExp(rsCombo, 'g'); +
46107 +
46108 /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +
46109 var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); +
46110 +
46111 /** Used to match complex or compound words. */ +
46112 var reUnicodeWord = RegExp([ +
46113 rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', +
46114 rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', +
46115 rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, +
46116 rsUpper + '+' + rsOptContrUpper, +
46117 rsOrdUpper, +
46118 rsOrdLower, +
46119 rsDigits, +
46120 rsEmoji +
46121 ].join('|'), 'g'); +
46122 +
46123 /** 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/). */ +
46124 var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); +
46125 +
46126 /** Used to detect strings that need a more robust regexp to match words. */ +
46127 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 ]/; +
46128 +
46129 /** Used to assign default `context` object properties. */ +
46130 var contextProps = [ +
46131 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', +
46132 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', +
46133 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', +
46134 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', +
46135 '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' +
46136 ]; +
46137 +
46138 /** Used to make template sourceURLs easier to identify. */ +
46139 var templateCounter = -1; +
46140 +
46141 /** Used to identify `toStringTag` values of typed arrays. */ +
46142 var typedArrayTags = {}; +
46143 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +
46144 typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +
46145 typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +
46146 typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +
46147 typedArrayTags[uint32Tag] = true; +
46148 typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +
46149 typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +
46150 typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +
46151 typedArrayTags[errorTag] = typedArrayTags[funcTag] = +
46152 typedArrayTags[mapTag] = typedArrayTags[numberTag] = +
46153 typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +
46154 typedArrayTags[setTag] = typedArrayTags[stringTag] = +
46155 typedArrayTags[weakMapTag] = false; +
46156 +
46157 /** Used to identify `toStringTag` values supported by `_.clone`. */ +
46158 var cloneableTags = {}; +
46159 cloneableTags[argsTag] = cloneableTags[arrayTag] = +
46160 cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +
46161 cloneableTags[boolTag] = cloneableTags[dateTag] = +
46162 cloneableTags[float32Tag] = cloneableTags[float64Tag] = +
46163 cloneableTags[int8Tag] = cloneableTags[int16Tag] = +
46164 cloneableTags[int32Tag] = cloneableTags[mapTag] = +
46165 cloneableTags[numberTag] = cloneableTags[objectTag] = +
46166 cloneableTags[regexpTag] = cloneableTags[setTag] = +
46167 cloneableTags[stringTag] = cloneableTags[symbolTag] = +
46168 cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +
46169 cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +
46170 cloneableTags[errorTag] = cloneableTags[funcTag] = +
46171 cloneableTags[weakMapTag] = false; +
46172 +
46173 /** Used to map Latin Unicode letters to basic Latin letters. */ +
46174 var deburredLetters = { +
46175 // Latin-1 Supplement block. +
46176 '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', +
46177 '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', +
46178 '\xc7': 'C', '\xe7': 'c', +
46179 '\xd0': 'D', '\xf0': 'd', +
46180 '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', +
46181 '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', +
46182 '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', +
46183 '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', +
46184 '\xd1': 'N', '\xf1': 'n', +
46185 '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', +
46186 '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', +
46187 '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', +
46188 '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', +
46189 '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', +
46190 '\xc6': 'Ae', '\xe6': 'ae', +
46191 '\xde': 'Th', '\xfe': 'th', +
46192 '\xdf': 'ss', +
46193 // Latin Extended-A block. +
46194 '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', +
46195 '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', +
46196 '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', +
46197 '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', +
46198 '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', +
46199 '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', +
46200 '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', +
46201 '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', +
46202 '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', +
46203 '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', +
46204 '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', +
46205 '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', +
46206 '\u0134': 'J', '\u0135': 'j', +
46207 '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', +
46208 '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', +
46209 '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', +
46210 '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', +
46211 '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', +
46212 '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', +
46213 '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', +
46214 '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', +
46215 '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', +
46216 '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', +
46217 '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', +
46218 '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', +
46219 '\u0163': 't', '\u0165': 't', '\u0167': 't', +
46220 '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', +
46221 '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', +
46222 '\u0174': 'W', '\u0175': 'w', +
46223 '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', +
46224 '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', +
46225 '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', +
46226 '\u0132': 'IJ', '\u0133': 'ij', +
46227 '\u0152': 'Oe', '\u0153': 'oe', +
46228 '\u0149': "'n", '\u017f': 's' +
46229 }; +
46230 +
46231 /** Used to map characters to HTML entities. */ +
46232 var htmlEscapes = { +
46233 '&': '&amp;', +
46234 '<': '&lt;', +
46235 '>': '&gt;', +
46236 '"': '&quot;', +
46237 "'": '&#39;' +
46238 }; +
46239 +
46240 /** Used to map HTML entities to characters. */ +
46241 var htmlUnescapes = { +
46242 '&amp;': '&', +
46243 '&lt;': '<', +
46244 '&gt;': '>', +
46245 '&quot;': '"', +
46246 '&#39;': "'" +
46247 }; +
46248 +
46249 /** Used to escape characters for inclusion in compiled string literals. */ +
46250 var stringEscapes = { +
46251 '\\': '\\', +
46252 "'": "'", +
46253 '\n': 'n', +
46254 '\r': 'r', +
46255 '\u2028': 'u2028', +
46256 '\u2029': 'u2029' +
46257 }; +
46258 +
46259 /** Built-in method references without a dependency on `root`. */ +
46260 var freeParseFloat = parseFloat, +
46261 freeParseInt = parseInt; +
46262 +
46263 /** Detect free variable `global` from Node.js. */ +
46264 var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; +
46265 +
46266 /** Detect free variable `self`. */ +
46267 var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +
46268 +
46269 /** Used as a reference to the global object. */ +
46270 var root = freeGlobal || freeSelf || Function('return this')(); +
46271 +
46272 /** Detect free variable `exports`. */ +
46273 var freeExports = true && exports && !exports.nodeType && exports; +
46274 +
46275 /** Detect free variable `module`. */ +
46276 var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; +
46277 +
46278 /** Detect the popular CommonJS extension `module.exports`. */ +
46279 var moduleExports = freeModule && freeModule.exports === freeExports; +
46280 +
46281 /** Detect free variable `process` from Node.js. */ +
46282 var freeProcess = moduleExports && freeGlobal.process; +
46283 +
46284 /** Used to access faster Node.js helpers. */ +
46285 var nodeUtil = (function() { +
46286 try { +
46287 return freeProcess && freeProcess.binding && freeProcess.binding('util'); +
46288 } catch (e) {} +
46289 }()); +
46290 +
46291 /* Node.js helper references. */ +
46292 var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, +
46293 nodeIsDate = nodeUtil && nodeUtil.isDate, +
46294 nodeIsMap = nodeUtil && nodeUtil.isMap, +
46295 nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, +
46296 nodeIsSet = nodeUtil && nodeUtil.isSet, +
46297 nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; +
46298 +
46299 /*--------------------------------------------------------------------------*/ +
46300 +
46301 /** +
46302 * A faster alternative to `Function#apply`, this function invokes `func` +
46303 * with the `this` binding of `thisArg` and the arguments of `args`. +
46304 * +
46305 * @private +
46306 * @param {Function} func The function to invoke. +
46307 * @param {*} thisArg The `this` binding of `func`. +
46308 * @param {Array} args The arguments to invoke `func` with. +
46309 * @returns {*} Returns the result of `func`. +
46310 */ +
46311 function apply(func, thisArg, args) { +
46312 switch (args.length) { +
46313 case 0: return func.call(thisArg); +
46314 case 1: return func.call(thisArg, args[0]); +
46315 case 2: return func.call(thisArg, args[0], args[1]); +
46316 case 3: return func.call(thisArg, args[0], args[1], args[2]); +
46317 } +
46318 return func.apply(thisArg, args); +
46319 } +
46320 +
46321 /** +
46322 * A specialized version of `baseAggregator` for arrays. +
46323 * +
46324 * @private +
46325 * @param {Array} [array] The array to iterate over. +
46326 * @param {Function} setter The function to set `accumulator` values. +
46327 * @param {Function} iteratee The iteratee to transform keys. +
46328 * @param {Object} accumulator The initial aggregated object. +
46329 * @returns {Function} Returns `accumulator`. +
46330 */ +
46331 function arrayAggregator(array, setter, iteratee, accumulator) { +
46332 var index = -1, +
46333 length = array == null ? 0 : array.length; +
46334 +
46335 while (++index < length) { +
46336 var value = array[index]; +
46337 setter(accumulator, value, iteratee(value), array); +
46338 } +
46339 return accumulator; +
46340 } +
46341 +
46342 /** +
46343 * A specialized version of `_.forEach` for arrays without support for +
46344 * iteratee shorthands. +
46345 * +
46346 * @private +
46347 * @param {Array} [array] The array to iterate over. +
46348 * @param {Function} iteratee The function invoked per iteration. +
46349 * @returns {Array} Returns `array`. +
46350 */ +
46351 function arrayEach(array, iteratee) { +
46352 var index = -1, +
46353 length = array == null ? 0 : array.length; +
46354 +
46355 while (++index < length) { +
46356 if (iteratee(array[index], index, array) === false) { +
46357 break; +
46358 } +
46359 } +
46360 return array; +
46361 } +
46362 +
46363 /** +
46364 * A specialized version of `_.forEachRight` for arrays without support for +
46365 * iteratee shorthands. +
46366 * +
46367 * @private +
46368 * @param {Array} [array] The array to iterate over. +
46369 * @param {Function} iteratee The function invoked per iteration. +
46370 * @returns {Array} Returns `array`. +
46371 */ +
46372 function arrayEachRight(array, iteratee) { +
46373 var length = array == null ? 0 : array.length; +
46374 +
46375 while (length--) { +
46376 if (iteratee(array[length], length, array) === false) { +
46377 break; +
46378 } +
46379 } +
46380 return array; +
46381 } +
46382 +
46383 /** +
46384 * A specialized version of `_.every` for arrays without support for +
46385 * iteratee shorthands. +
46386 * +
46387 * @private +
46388 * @param {Array} [array] The array to iterate over. +
46389 * @param {Function} predicate The function invoked per iteration. +
46390 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
46391 * else `false`. +
46392 */ +
46393 function arrayEvery(array, predicate) { +
46394 var index = -1, +
46395 length = array == null ? 0 : array.length; +
46396 +
46397 while (++index < length) { +
46398 if (!predicate(array[index], index, array)) { +
46399 return false; +
46400 } +
46401 } +
46402 return true; +
46403 } +
46404 +
46405 /** +
46406 * A specialized version of `_.filter` for arrays without support for +
46407 * iteratee shorthands. +
46408 * +
46409 * @private +
46410 * @param {Array} [array] The array to iterate over. +
46411 * @param {Function} predicate The function invoked per iteration. +
46412 * @returns {Array} Returns the new filtered array. +
46413 */ +
46414 function arrayFilter(array, predicate) { +
46415 var index = -1, +
46416 length = array == null ? 0 : array.length, +
46417 resIndex = 0, +
46418 result = []; +
46419 +
46420 while (++index < length) { +
46421 var value = array[index]; +
46422 if (predicate(value, index, array)) { +
46423 result[resIndex++] = value; +
46424 } +
46425 } +
46426 return result; +
46427 } +
46428 +
46429 /** +
46430 * A specialized version of `_.includes` for arrays without support for +
46431 * specifying an index to search from. +
46432 * +
46433 * @private +
46434 * @param {Array} [array] The array to inspect. +
46435 * @param {*} target The value to search for. +
46436 * @returns {boolean} Returns `true` if `target` is found, else `false`. +
46437 */ +
46438 function arrayIncludes(array, value) { +
46439 var length = array == null ? 0 : array.length; +
46440 return !!length && baseIndexOf(array, value, 0) > -1; +
46441 } +
46442 +
46443 /** +
46444 * This function is like `arrayIncludes` except that it accepts a comparator. +
46445 * +
46446 * @private +
46447 * @param {Array} [array] The array to inspect. +
46448 * @param {*} target The value to search for. +
46449 * @param {Function} comparator The comparator invoked per element. +
46450 * @returns {boolean} Returns `true` if `target` is found, else `false`. +
46451 */ +
46452 function arrayIncludesWith(array, value, comparator) { +
46453 var index = -1, +
46454 length = array == null ? 0 : array.length; +
46455 +
46456 while (++index < length) { +
46457 if (comparator(value, array[index])) { +
46458 return true; +
46459 } +
46460 } +
46461 return false; +
46462 } +
46463 +
46464 /** +
46465 * A specialized version of `_.map` for arrays without support for iteratee +
46466 * shorthands. +
46467 * +
46468 * @private +
46469 * @param {Array} [array] The array to iterate over. +
46470 * @param {Function} iteratee The function invoked per iteration. +
46471 * @returns {Array} Returns the new mapped array. +
46472 */ +
46473 function arrayMap(array, iteratee) { +
46474 var index = -1, +
46475 length = array == null ? 0 : array.length, +
46476 result = Array(length); +
46477 +
46478 while (++index < length) { +
46479 result[index] = iteratee(array[index], index, array); +
46480 } +
46481 return result; +
46482 } +
46483 +
46484 /** +
46485 * Appends the elements of `values` to `array`. +
46486 * +
46487 * @private +
46488 * @param {Array} array The array to modify. +
46489 * @param {Array} values The values to append. +
46490 * @returns {Array} Returns `array`. +
46491 */ +
46492 function arrayPush(array, values) { +
46493 var index = -1, +
46494 length = values.length, +
46495 offset = array.length; +
46496 +
46497 while (++index < length) { +
46498 array[offset + index] = values[index]; +
46499 } +
46500 return array; +
46501 } +
46502 +
46503 /** +
46504 * A specialized version of `_.reduce` for arrays without support for +
46505 * iteratee shorthands. +
46506 * +
46507 * @private +
46508 * @param {Array} [array] The array to iterate over. +
46509 * @param {Function} iteratee The function invoked per iteration. +
46510 * @param {*} [accumulator] The initial value. +
46511 * @param {boolean} [initAccum] Specify using the first element of `array` as +
46512 * the initial value. +
46513 * @returns {*} Returns the accumulated value. +
46514 */ +
46515 function arrayReduce(array, iteratee, accumulator, initAccum) { +
46516 var index = -1, +
46517 length = array == null ? 0 : array.length; +
46518 +
46519 if (initAccum && length) { +
46520 accumulator = array[++index]; +
46521 } +
46522 while (++index < length) { +
46523 accumulator = iteratee(accumulator, array[index], index, array); +
46524 } +
46525 return accumulator; +
46526 } +
46527 +
46528 /** +
46529 * A specialized version of `_.reduceRight` for arrays without support for +
46530 * iteratee shorthands. +
46531 * +
46532 * @private +
46533 * @param {Array} [array] The array to iterate over. +
46534 * @param {Function} iteratee The function invoked per iteration. +
46535 * @param {*} [accumulator] The initial value. +
46536 * @param {boolean} [initAccum] Specify using the last element of `array` as +
46537 * the initial value. +
46538 * @returns {*} Returns the accumulated value. +
46539 */ +
46540 function arrayReduceRight(array, iteratee, accumulator, initAccum) { +
46541 var length = array == null ? 0 : array.length; +
46542 if (initAccum && length) { +
46543 accumulator = array[--length]; +
46544 } +
46545 while (length--) { +
46546 accumulator = iteratee(accumulator, array[length], length, array); +
46547 } +
46548 return accumulator; +
46549 } +
46550 +
46551 /** +
46552 * A specialized version of `_.some` for arrays without support for iteratee +
46553 * shorthands. +
46554 * +
46555 * @private +
46556 * @param {Array} [array] The array to iterate over. +
46557 * @param {Function} predicate The function invoked per iteration. +
46558 * @returns {boolean} Returns `true` if any element passes the predicate check, +
46559 * else `false`. +
46560 */ +
46561 function arraySome(array, predicate) { +
46562 var index = -1, +
46563 length = array == null ? 0 : array.length; +
46564 +
46565 while (++index < length) { +
46566 if (predicate(array[index], index, array)) { +
46567 return true; +
46568 } +
46569 } +
46570 return false; +
46571 } +
46572 +
46573 /** +
46574 * Gets the size of an ASCII `string`. +
46575 * +
46576 * @private +
46577 * @param {string} string The string inspect. +
46578 * @returns {number} Returns the string size. +
46579 */ +
46580 var asciiSize = baseProperty('length'); +
46581 +
46582 /** +
46583 * Converts an ASCII `string` to an array. +
46584 * +
46585 * @private +
46586 * @param {string} string The string to convert. +
46587 * @returns {Array} Returns the converted array. +
46588 */ +
46589 function asciiToArray(string) { +
46590 return string.split(''); +
46591 } +
46592 +
46593 /** +
46594 * Splits an ASCII `string` into an array of its words. +
46595 * +
46596 * @private +
46597 * @param {string} The string to inspect. +
46598 * @returns {Array} Returns the words of `string`. +
46599 */ +
46600 function asciiWords(string) { +
46601 return string.match(reAsciiWord) || []; +
46602 } +
46603 +
46604 /** +
46605 * The base implementation of methods like `_.findKey` and `_.findLastKey`, +
46606 * without support for iteratee shorthands, which iterates over `collection` +
46607 * using `eachFunc`. +
46608 * +
46609 * @private +
46610 * @param {Array|Object} collection The collection to inspect. +
46611 * @param {Function} predicate The function invoked per iteration. +
46612 * @param {Function} eachFunc The function to iterate over `collection`. +
46613 * @returns {*} Returns the found element or its key, else `undefined`. +
46614 */ +
46615 function baseFindKey(collection, predicate, eachFunc) { +
46616 var result; +
46617 eachFunc(collection, function(value, key, collection) { +
46618 if (predicate(value, key, collection)) { +
46619 result = key; +
46620 return false; +
46621 } +
46622 }); +
46623 return result; +
46624 } +
46625 +
46626 /** +
46627 * The base implementation of `_.findIndex` and `_.findLastIndex` without +
46628 * support for iteratee shorthands. +
46629 * +
46630 * @private +
46631 * @param {Array} array The array to inspect. +
46632 * @param {Function} predicate The function invoked per iteration. +
46633 * @param {number} fromIndex The index to search from. +
46634 * @param {boolean} [fromRight] Specify iterating from right to left. +
46635 * @returns {number} Returns the index of the matched value, else `-1`. +
46636 */ +
46637 function baseFindIndex(array, predicate, fromIndex, fromRight) { +
46638 var length = array.length, +
46639 index = fromIndex + (fromRight ? 1 : -1); +
46640 +
46641 while ((fromRight ? index-- : ++index < length)) { +
46642 if (predicate(array[index], index, array)) { +
46643 return index; +
46644 } +
46645 } +
46646 return -1; +
46647 } +
46648 +
46649 /** +
46650 * The base implementation of `_.indexOf` without `fromIndex` bounds checks. +
46651 * +
46652 * @private +
46653 * @param {Array} array The array to inspect. +
46654 * @param {*} value The value to search for. +
46655 * @param {number} fromIndex The index to search from. +
46656 * @returns {number} Returns the index of the matched value, else `-1`. +
46657 */ +
46658 function baseIndexOf(array, value, fromIndex) { +
46659 return value === value +
46660 ? strictIndexOf(array, value, fromIndex) +
46661 : baseFindIndex(array, baseIsNaN, fromIndex); +
46662 } +
46663 +
46664 /** +
46665 * This function is like `baseIndexOf` except that it accepts a comparator. +
46666 * +
46667 * @private +
46668 * @param {Array} array The array to inspect. +
46669 * @param {*} value The value to search for. +
46670 * @param {number} fromIndex The index to search from. +
46671 * @param {Function} comparator The comparator invoked per element. +
46672 * @returns {number} Returns the index of the matched value, else `-1`. +
46673 */ +
46674 function baseIndexOfWith(array, value, fromIndex, comparator) { +
46675 var index = fromIndex - 1, +
46676 length = array.length; +
46677 +
46678 while (++index < length) { +
46679 if (comparator(array[index], value)) { +
46680 return index; +
46681 } +
46682 } +
46683 return -1; +
46684 } +
46685 +
46686 /** +
46687 * The base implementation of `_.isNaN` without support for number objects. +
46688 * +
46689 * @private +
46690 * @param {*} value The value to check. +
46691 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +
46692 */ +
46693 function baseIsNaN(value) { +
46694 return value !== value; +
46695 } +
46696 +
46697 /** +
46698 * The base implementation of `_.mean` and `_.meanBy` without support for +
46699 * iteratee shorthands. +
46700 * +
46701 * @private +
46702 * @param {Array} array The array to iterate over. +
46703 * @param {Function} iteratee The function invoked per iteration. +
46704 * @returns {number} Returns the mean. +
46705 */ +
46706 function baseMean(array, iteratee) { +
46707 var length = array == null ? 0 : array.length; +
46708 return length ? (baseSum(array, iteratee) / length) : NAN; +
46709 } +
46710 +
46711 /** +
46712 * The base implementation of `_.property` without support for deep paths. +
46713 * +
46714 * @private +
46715 * @param {string} key The key of the property to get. +
46716 * @returns {Function} Returns the new accessor function. +
46717 */ +
46718 function baseProperty(key) { +
46719 return function(object) { +
46720 return object == null ? undefined : object[key]; +
46721 }; +
46722 } +
46723 +
46724 /** +
46725 * The base implementation of `_.propertyOf` without support for deep paths. +
46726 * +
46727 * @private +
46728 * @param {Object} object The object to query. +
46729 * @returns {Function} Returns the new accessor function. +
46730 */ +
46731 function basePropertyOf(object) { +
46732 return function(key) { +
46733 return object == null ? undefined : object[key]; +
46734 }; +
46735 } +
46736 +
46737 /** +
46738 * The base implementation of `_.reduce` and `_.reduceRight`, without support +
46739 * for iteratee shorthands, which iterates over `collection` using `eachFunc`. +
46740 * +
46741 * @private +
46742 * @param {Array|Object} collection The collection to iterate over. +
46743 * @param {Function} iteratee The function invoked per iteration. +
46744 * @param {*} accumulator The initial value. +
46745 * @param {boolean} initAccum Specify using the first or last element of +
46746 * `collection` as the initial value. +
46747 * @param {Function} eachFunc The function to iterate over `collection`. +
46748 * @returns {*} Returns the accumulated value. +
46749 */ +
46750 function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { +
46751 eachFunc(collection, function(value, index, collection) { +
46752 accumulator = initAccum +
46753 ? (initAccum = false, value) +
46754 : iteratee(accumulator, value, index, collection); +
46755 }); +
46756 return accumulator; +
46757 } +
46758 +
46759 /** +
46760 * The base implementation of `_.sortBy` which uses `comparer` to define the +
46761 * sort order of `array` and replaces criteria objects with their corresponding +
46762 * values. +
46763 * +
46764 * @private +
46765 * @param {Array} array The array to sort. +
46766 * @param {Function} comparer The function to define sort order. +
46767 * @returns {Array} Returns `array`. +
46768 */ +
46769 function baseSortBy(array, comparer) { +
46770 var length = array.length; +
46771 +
46772 array.sort(comparer); +
46773 while (length--) { +
46774 array[length] = array[length].value; +
46775 } +
46776 return array; +
46777 } +
46778 +
46779 /** +
46780 * The base implementation of `_.sum` and `_.sumBy` without support for +
46781 * iteratee shorthands. +
46782 * +
46783 * @private +
46784 * @param {Array} array The array to iterate over. +
46785 * @param {Function} iteratee The function invoked per iteration. +
46786 * @returns {number} Returns the sum. +
46787 */ +
46788 function baseSum(array, iteratee) { +
46789 var result, +
46790 index = -1, +
46791 length = array.length; +
46792 +
46793 while (++index < length) { +
46794 var current = iteratee(array[index]); +
46795 if (current !== undefined) { +
46796 result = result === undefined ? current : (result + current); +
46797 } +
46798 } +
46799 return result; +
46800 } +
46801 +
46802 /** +
46803 * The base implementation of `_.times` without support for iteratee shorthands +
46804 * or max array length checks. +
46805 * +
46806 * @private +
46807 * @param {number} n The number of times to invoke `iteratee`. +
46808 * @param {Function} iteratee The function invoked per iteration. +
46809 * @returns {Array} Returns the array of results. +
46810 */ +
46811 function baseTimes(n, iteratee) { +
46812 var index = -1, +
46813 result = Array(n); +
46814 +
46815 while (++index < n) { +
46816 result[index] = iteratee(index); +
46817 } +
46818 return result; +
46819 } +
46820 +
46821 /** +
46822 * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array +
46823 * of key-value pairs for `object` corresponding to the property names of `props`. +
46824 * +
46825 * @private +
46826 * @param {Object} object The object to query. +
46827 * @param {Array} props The property names to get values for. +
46828 * @returns {Object} Returns the key-value pairs. +
46829 */ +
46830 function baseToPairs(object, props) { +
46831 return arrayMap(props, function(key) { +
46832 return [key, object[key]]; +
46833 }); +
46834 } +
46835 +
46836 /** +
46837 * The base implementation of `_.unary` without support for storing metadata. +
46838 * +
46839 * @private +
46840 * @param {Function} func The function to cap arguments for. +
46841 * @returns {Function} Returns the new capped function. +
46842 */ +
46843 function baseUnary(func) { +
46844 return function(value) { +
46845 return func(value); +
46846 }; +
46847 } +
46848 +
46849 /** +
46850 * The base implementation of `_.values` and `_.valuesIn` which creates an +
46851 * array of `object` property values corresponding to the property names +
46852 * of `props`. +
46853 * +
46854 * @private +
46855 * @param {Object} object The object to query. +
46856 * @param {Array} props The property names to get values for. +
46857 * @returns {Object} Returns the array of property values. +
46858 */ +
46859 function baseValues(object, props) { +
46860 return arrayMap(props, function(key) { +
46861 return object[key]; +
46862 }); +
46863 } +
46864 +
46865 /** +
46866 * Checks if a `cache` value for `key` exists. +
46867 * +
46868 * @private +
46869 * @param {Object} cache The cache to query. +
46870 * @param {string} key The key of the entry to check. +
46871 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
46872 */ +
46873 function cacheHas(cache, key) { +
46874 return cache.has(key); +
46875 } +
46876 +
46877 /** +
46878 * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol +
46879 * that is not found in the character symbols. +
46880 * +
46881 * @private +
46882 * @param {Array} strSymbols The string symbols to inspect. +
46883 * @param {Array} chrSymbols The character symbols to find. +
46884 * @returns {number} Returns the index of the first unmatched string symbol. +
46885 */ +
46886 function charsStartIndex(strSymbols, chrSymbols) { +
46887 var index = -1, +
46888 length = strSymbols.length; +
46889 +
46890 while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +
46891 return index; +
46892 } +
46893 +
46894 /** +
46895 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol +
46896 * that is not found in the character symbols. +
46897 * +
46898 * @private +
46899 * @param {Array} strSymbols The string symbols to inspect. +
46900 * @param {Array} chrSymbols The character symbols to find. +
46901 * @returns {number} Returns the index of the last unmatched string symbol. +
46902 */ +
46903 function charsEndIndex(strSymbols, chrSymbols) { +
46904 var index = strSymbols.length; +
46905 +
46906 while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +
46907 return index; +
46908 } +
46909 +
46910 /** +
46911 * Gets the number of `placeholder` occurrences in `array`. +
46912 * +
46913 * @private +
46914 * @param {Array} array The array to inspect. +
46915 * @param {*} placeholder The placeholder to search for. +
46916 * @returns {number} Returns the placeholder count. +
46917 */ +
46918 function countHolders(array, placeholder) { +
46919 var length = array.length, +
46920 result = 0; +
46921 +
46922 while (length--) { +
46923 if (array[length] === placeholder) { +
46924 ++result; +
46925 } +
46926 } +
46927 return result; +
46928 } +
46929 +
46930 /** +
46931 * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A +
46932 * letters to basic Latin letters. +
46933 * +
46934 * @private +
46935 * @param {string} letter The matched letter to deburr. +
46936 * @returns {string} Returns the deburred letter. +
46937 */ +
46938 var deburrLetter = basePropertyOf(deburredLetters); +
46939 +
46940 /** +
46941 * Used by `_.escape` to convert characters to HTML entities. +
46942 * +
46943 * @private +
46944 * @param {string} chr The matched character to escape. +
46945 * @returns {string} Returns the escaped character. +
46946 */ +
46947 var escapeHtmlChar = basePropertyOf(htmlEscapes); +
46948 +
46949 /** +
46950 * Used by `_.template` to escape characters for inclusion in compiled string literals. +
46951 * +
46952 * @private +
46953 * @param {string} chr The matched character to escape. +
46954 * @returns {string} Returns the escaped character. +
46955 */ +
46956 function escapeStringChar(chr) { +
46957 return '\\' + stringEscapes[chr]; +
46958 } +
46959 +
46960 /** +
46961 * Gets the value at `key` of `object`. +
46962 * +
46963 * @private +
46964 * @param {Object} [object] The object to query. +
46965 * @param {string} key The key of the property to get. +
46966 * @returns {*} Returns the property value. +
46967 */ +
46968 function getValue(object, key) { +
46969 return object == null ? undefined : object[key]; +
46970 } +
46971 +
46972 /** +
46973 * Checks if `string` contains Unicode symbols. +
46974 * +
46975 * @private +
46976 * @param {string} string The string to inspect. +
46977 * @returns {boolean} Returns `true` if a symbol is found, else `false`. +
46978 */ +
46979 function hasUnicode(string) { +
46980 return reHasUnicode.test(string); +
46981 } +
46982 +
46983 /** +
46984 * Checks if `string` contains a word composed of Unicode symbols. +
46985 * +
46986 * @private +
46987 * @param {string} string The string to inspect. +
46988 * @returns {boolean} Returns `true` if a word is found, else `false`. +
46989 */ +
46990 function hasUnicodeWord(string) { +
46991 return reHasUnicodeWord.test(string); +
46992 } +
46993 +
46994 /** +
46995 * Converts `iterator` to an array. +
46996 * +
46997 * @private +
46998 * @param {Object} iterator The iterator to convert. +
46999 * @returns {Array} Returns the converted array. +
47000 */ +
47001 function iteratorToArray(iterator) { +
47002 var data, +
47003 result = []; +
47004 +
47005 while (!(data = iterator.next()).done) { +
47006 result.push(data.value); +
47007 } +
47008 return result; +
47009 } +
47010 +
47011 /** +
47012 * Converts `map` to its key-value pairs. +
47013 * +
47014 * @private +
47015 * @param {Object} map The map to convert. +
47016 * @returns {Array} Returns the key-value pairs. +
47017 */ +
47018 function mapToArray(map) { +
47019 var index = -1, +
47020 result = Array(map.size); +
47021 +
47022 map.forEach(function(value, key) { +
47023 result[++index] = [key, value]; +
47024 }); +
47025 return result; +
47026 } +
47027 +
47028 /** +
47029 * Creates a unary function that invokes `func` with its argument transformed. +
47030 * +
47031 * @private +
47032 * @param {Function} func The function to wrap. +
47033 * @param {Function} transform The argument transform. +
47034 * @returns {Function} Returns the new function. +
47035 */ +
47036 function overArg(func, transform) { +
47037 return function(arg) { +
47038 return func(transform(arg)); +
47039 }; +
47040 } +
47041 +
47042 /** +
47043 * Replaces all `placeholder` elements in `array` with an internal placeholder +
47044 * and returns an array of their indexes. +
47045 * +
47046 * @private +
47047 * @param {Array} array The array to modify. +
47048 * @param {*} placeholder The placeholder to replace. +
47049 * @returns {Array} Returns the new array of placeholder indexes. +
47050 */ +
47051 function replaceHolders(array, placeholder) { +
47052 var index = -1, +
47053 length = array.length, +
47054 resIndex = 0, +
47055 result = []; +
47056 +
47057 while (++index < length) { +
47058 var value = array[index]; +
47059 if (value === placeholder || value === PLACEHOLDER) { +
47060 array[index] = PLACEHOLDER; +
47061 result[resIndex++] = index; +
47062 } +
47063 } +
47064 return result; +
47065 } +
47066 +
47067 /** +
47068 * Gets the value at `key`, unless `key` is "__proto__". +
47069 * +
47070 * @private +
47071 * @param {Object} object The object to query. +
47072 * @param {string} key The key of the property to get. +
47073 * @returns {*} Returns the property value. +
47074 */ +
47075 function safeGet(object, key) { +
47076 return key == '__proto__' +
47077 ? undefined +
47078 : object[key]; +
47079 } +
47080 +
47081 /** +
47082 * Converts `set` to an array of its values. +
47083 * +
47084 * @private +
47085 * @param {Object} set The set to convert. +
47086 * @returns {Array} Returns the values. +
47087 */ +
47088 function setToArray(set) { +
47089 var index = -1, +
47090 result = Array(set.size); +
47091 +
47092 set.forEach(function(value) { +
47093 result[++index] = value; +
47094 }); +
47095 return result; +
47096 } +
47097 +
47098 /** +
47099 * Converts `set` to its value-value pairs. +
47100 * +
47101 * @private +
47102 * @param {Object} set The set to convert. +
47103 * @returns {Array} Returns the value-value pairs. +
47104 */ +
47105 function setToPairs(set) { +
47106 var index = -1, +
47107 result = Array(set.size); +
47108 +
47109 set.forEach(function(value) { +
47110 result[++index] = [value, value]; +
47111 }); +
47112 return result; +
47113 } +
47114 +
47115 /** +
47116 * A specialized version of `_.indexOf` which performs strict equality +
47117 * comparisons of values, i.e. `===`. +
47118 * +
47119 * @private +
47120 * @param {Array} array The array to inspect. +
47121 * @param {*} value The value to search for. +
47122 * @param {number} fromIndex The index to search from. +
47123 * @returns {number} Returns the index of the matched value, else `-1`. +
47124 */ +
47125 function strictIndexOf(array, value, fromIndex) { +
47126 var index = fromIndex - 1, +
47127 length = array.length; +
47128 +
47129 while (++index < length) { +
47130 if (array[index] === value) { +
47131 return index; +
47132 } +
47133 } +
47134 return -1; +
47135 } +
47136 +
47137 /** +
47138 * A specialized version of `_.lastIndexOf` which performs strict equality +
47139 * comparisons of values, i.e. `===`. +
47140 * +
47141 * @private +
47142 * @param {Array} array The array to inspect. +
47143 * @param {*} value The value to search for. +
47144 * @param {number} fromIndex The index to search from. +
47145 * @returns {number} Returns the index of the matched value, else `-1`. +
47146 */ +
47147 function strictLastIndexOf(array, value, fromIndex) { +
47148 var index = fromIndex + 1; +
47149 while (index--) { +
47150 if (array[index] === value) { +
47151 return index; +
47152 } +
47153 } +
47154 return index; +
47155 } +
47156 +
47157 /** +
47158 * Gets the number of symbols in `string`. +
47159 * +
47160 * @private +
47161 * @param {string} string The string to inspect. +
47162 * @returns {number} Returns the string size. +
47163 */ +
47164 function stringSize(string) { +
47165 return hasUnicode(string) +
47166 ? unicodeSize(string) +
47167 : asciiSize(string); +
47168 } +
47169 +
47170 /** +
47171 * Converts `string` to an array. +
47172 * +
47173 * @private +
47174 * @param {string} string The string to convert. +
47175 * @returns {Array} Returns the converted array. +
47176 */ +
47177 function stringToArray(string) { +
47178 return hasUnicode(string) +
47179 ? unicodeToArray(string) +
47180 : asciiToArray(string); +
47181 } +
47182 +
47183 /** +
47184 * Used by `_.unescape` to convert HTML entities to characters. +
47185 * +
47186 * @private +
47187 * @param {string} chr The matched character to unescape. +
47188 * @returns {string} Returns the unescaped character. +
47189 */ +
47190 var unescapeHtmlChar = basePropertyOf(htmlUnescapes); +
47191 +
47192 /** +
47193 * Gets the size of a Unicode `string`. +
47194 * +
47195 * @private +
47196 * @param {string} string The string inspect. +
47197 * @returns {number} Returns the string size. +
47198 */ +
47199 function unicodeSize(string) { +
47200 var result = reUnicode.lastIndex = 0; +
47201 while (reUnicode.test(string)) { +
47202 ++result; +
47203 } +
47204 return result; +
47205 } +
47206 +
47207 /** +
47208 * Converts a Unicode `string` to an array. +
47209 * +
47210 * @private +
47211 * @param {string} string The string to convert. +
47212 * @returns {Array} Returns the converted array. +
47213 */ +
47214 function unicodeToArray(string) { +
47215 return string.match(reUnicode) || []; +
47216 } +
47217 +
47218 /** +
47219 * Splits a Unicode `string` into an array of its words. +
47220 * +
47221 * @private +
47222 * @param {string} The string to inspect. +
47223 * @returns {Array} Returns the words of `string`. +
47224 */ +
47225 function unicodeWords(string) { +
47226 return string.match(reUnicodeWord) || []; +
47227 } +
47228 +
47229 /*--------------------------------------------------------------------------*/ +
47230 +
47231 /** +
47232 * Create a new pristine `lodash` function using the `context` object. +
47233 * +
47234 * @static +
47235 * @memberOf _ +
47236 * @since 1.1.0 +
47237 * @category Util +
47238 * @param {Object} [context=root] The context object. +
47239 * @returns {Function} Returns a new `lodash` function. +
47240 * @example +
47241 * +
47242 * _.mixin({ 'foo': _.constant('foo') }); +
47243 * +
47244 * var lodash = _.runInContext(); +
47245 * lodash.mixin({ 'bar': lodash.constant('bar') }); +
47246 * +
47247 * _.isFunction(_.foo); +
47248 * // => true +
47249 * _.isFunction(_.bar); +
47250 * // => false +
47251 * +
47252 * lodash.isFunction(lodash.foo); +
47253 * // => false +
47254 * lodash.isFunction(lodash.bar); +
47255 * // => true +
47256 * +
47257 * // Create a suped-up `defer` in Node.js. +
47258 * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; +
47259 */ +
47260 var runInContext = (function runInContext(context) { +
47261 context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); +
47262 +
47263 /** Built-in constructor references. */ +
47264 var Array = context.Array, +
47265 Date = context.Date, +
47266 Error = context.Error, +
47267 Function = context.Function, +
47268 Math = context.Math, +
47269 Object = context.Object, +
47270 RegExp = context.RegExp, +
47271 String = context.String, +
47272 TypeError = context.TypeError; +
47273 +
47274 /** Used for built-in method references. */ +
47275 var arrayProto = Array.prototype, +
47276 funcProto = Function.prototype, +
47277 objectProto = Object.prototype; +
47278 +
47279 /** Used to detect overreaching core-js shims. */ +
47280 var coreJsData = context['__core-js_shared__']; +
47281 +
47282 /** Used to resolve the decompiled source of functions. */ +
47283 var funcToString = funcProto.toString; +
47284 +
47285 /** Used to check objects for own properties. */ +
47286 var hasOwnProperty = objectProto.hasOwnProperty; +
47287 +
47288 /** Used to generate unique IDs. */ +
47289 var idCounter = 0; +
47290 +
47291 /** Used to detect methods masquerading as native. */ +
47292 var maskSrcKey = (function() { +
47293 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); +
47294 return uid ? ('Symbol(src)_1.' + uid) : ''; +
47295 }()); +
47296 +
47297 /** +
47298 * Used to resolve the +
47299 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) +
47300 * of values. +
47301 */ +
47302 var nativeObjectToString = objectProto.toString; +
47303 +
47304 /** Used to infer the `Object` constructor. */ +
47305 var objectCtorString = funcToString.call(Object); +
47306 +
47307 /** Used to restore the original `_` reference in `_.noConflict`. */ +
47308 var oldDash = root._; +
47309 +
47310 /** Used to detect if a method is native. */ +
47311 var reIsNative = RegExp('^' + +
47312 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') +
47313 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +
47314 ); +
47315 +
47316 /** Built-in value references. */ +
47317 var Buffer = moduleExports ? context.Buffer : undefined, +
47318 Symbol = context.Symbol, +
47319 Uint8Array = context.Uint8Array, +
47320 allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, +
47321 getPrototype = overArg(Object.getPrototypeOf, Object), +
47322 objectCreate = Object.create, +
47323 propertyIsEnumerable = objectProto.propertyIsEnumerable, +
47324 splice = arrayProto.splice, +
47325 spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, +
47326 symIterator = Symbol ? Symbol.iterator : undefined, +
47327 symToStringTag = Symbol ? Symbol.toStringTag : undefined; +
47328 +
47329 var defineProperty = (function() { +
47330 try { +
47331 var func = getNative(Object, 'defineProperty'); +
47332 func({}, '', {}); +
47333 return func; +
47334 } catch (e) {} +
47335 }()); +
47336 +
47337 /** Mocked built-ins. */ +
47338 var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, +
47339 ctxNow = Date && Date.now !== root.Date.now && Date.now, +
47340 ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; +
47341 +
47342 /* Built-in method references for those with the same name as other `lodash` methods. */ +
47343 var nativeCeil = Math.ceil, +
47344 nativeFloor = Math.floor, +
47345 nativeGetSymbols = Object.getOwnPropertySymbols, +
47346 nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, +
47347 nativeIsFinite = context.isFinite, +
47348 nativeJoin = arrayProto.join, +
47349 nativeKeys = overArg(Object.keys, Object), +
47350 nativeMax = Math.max, +
47351 nativeMin = Math.min, +
47352 nativeNow = Date.now, +
47353 nativeParseInt = context.parseInt, +
47354 nativeRandom = Math.random, +
47355 nativeReverse = arrayProto.reverse; +
47356 +
47357 /* Built-in method references that are verified to be native. */ +
47358 var DataView = getNative(context, 'DataView'), +
47359 Map = getNative(context, 'Map'), +
47360 Promise = getNative(context, 'Promise'), +
47361 Set = getNative(context, 'Set'), +
47362 WeakMap = getNative(context, 'WeakMap'), +
47363 nativeCreate = getNative(Object, 'create'); +
47364 +
47365 /** Used to store function metadata. */ +
47366 var metaMap = WeakMap && new WeakMap; +
47367 +
47368 /** Used to lookup unminified function names. */ +
47369 var realNames = {}; +
47370 +
47371 /** Used to detect maps, sets, and weakmaps. */ +
47372 var dataViewCtorString = toSource(DataView), +
47373 mapCtorString = toSource(Map), +
47374 promiseCtorString = toSource(Promise), +
47375 setCtorString = toSource(Set), +
47376 weakMapCtorString = toSource(WeakMap); +
47377 +
47378 /** Used to convert symbols to primitives and strings. */ +
47379 var symbolProto = Symbol ? Symbol.prototype : undefined, +
47380 symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, +
47381 symbolToString = symbolProto ? symbolProto.toString : undefined; +
47382 +
47383 /*------------------------------------------------------------------------*/ +
47384 +
47385 /** +
47386 * Creates a `lodash` object which wraps `value` to enable implicit method +
47387 * chain sequences. Methods that operate on and return arrays, collections, +
47388 * and functions can be chained together. Methods that retrieve a single value +
47389 * or may return a primitive value will automatically end the chain sequence +
47390 * and return the unwrapped value. Otherwise, the value must be unwrapped +
47391 * with `_#value`. +
47392 * +
47393 * Explicit chain sequences, which must be unwrapped with `_#value`, may be +
47394 * enabled using `_.chain`. +
47395 * +
47396 * The execution of chained methods is lazy, that is, it's deferred until +
47397 * `_#value` is implicitly or explicitly called. +
47398 * +
47399 * Lazy evaluation allows several methods to support shortcut fusion. +
47400 * Shortcut fusion is an optimization to merge iteratee calls; this avoids +
47401 * the creation of intermediate arrays and can greatly reduce the number of +
47402 * iteratee executions. Sections of a chain sequence qualify for shortcut +
47403 * fusion if the section is applied to an array and iteratees accept only +
47404 * one argument. The heuristic for whether a section qualifies for shortcut +
47405 * fusion is subject to change. +
47406 * +
47407 * Chaining is supported in custom builds as long as the `_#value` method is +
47408 * directly or indirectly included in the build. +
47409 * +
47410 * In addition to lodash methods, wrappers have `Array` and `String` methods. +
47411 * +
47412 * The wrapper `Array` methods are: +
47413 * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` +
47414 * +
47415 * The wrapper `String` methods are: +
47416 * `replace` and `split` +
47417 * +
47418 * The wrapper methods that support shortcut fusion are: +
47419 * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, +
47420 * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, +
47421 * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` +
47422 * +
47423 * The chainable wrapper methods are: +
47424 * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, +
47425 * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, +
47426 * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, +
47427 * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, +
47428 * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, +
47429 * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, +
47430 * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, +
47431 * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, +
47432 * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, +
47433 * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, +
47434 * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, +
47435 * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, +
47436 * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, +
47437 * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, +
47438 * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, +
47439 * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, +
47440 * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, +
47441 * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, +
47442 * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, +
47443 * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, +
47444 * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, +
47445 * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, +
47446 * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, +
47447 * `zipObject`, `zipObjectDeep`, and `zipWith` +
47448 * +
47449 * The wrapper methods that are **not** chainable by default are: +
47450 * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, +
47451 * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, +
47452 * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, +
47453 * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, +
47454 * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, +
47455 * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, +
47456 * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, +
47457 * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, +
47458 * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, +
47459 * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, +
47460 * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, +
47461 * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, +
47462 * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, +
47463 * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, +
47464 * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, +
47465 * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, +
47466 * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, +
47467 * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, +
47468 * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, +
47469 * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, +
47470 * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, +
47471 * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, +
47472 * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, +
47473 * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, +
47474 * `upperFirst`, `value`, and `words` +
47475 * +
47476 * @name _ +
47477 * @constructor +
47478 * @category Seq +
47479 * @param {*} value The value to wrap in a `lodash` instance. +
47480 * @returns {Object} Returns the new `lodash` wrapper instance. +
47481 * @example +
47482 * +
47483 * function square(n) { +
47484 * return n * n; +
47485 * } +
47486 * +
47487 * var wrapped = _([1, 2, 3]); +
47488 * +
47489 * // Returns an unwrapped value. +
47490 * wrapped.reduce(_.add); +
47491 * // => 6 +
47492 * +
47493 * // Returns a wrapped value. +
47494 * var squares = wrapped.map(square); +
47495 * +
47496 * _.isArray(squares); +
47497 * // => false +
47498 * +
47499 * _.isArray(squares.value()); +
47500 * // => true +
47501 */ +
47502 function lodash(value) { +
47503 if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { +
47504 if (value instanceof LodashWrapper) { +
47505 return value; +
47506 } +
47507 if (hasOwnProperty.call(value, '__wrapped__')) { +
47508 return wrapperClone(value); +
47509 } +
47510 } +
47511 return new LodashWrapper(value); +
47512 } +
47513 +
47514 /** +
47515 * The base implementation of `_.create` without support for assigning +
47516 * properties to the created object. +
47517 * +
47518 * @private +
47519 * @param {Object} proto The object to inherit from. +
47520 * @returns {Object} Returns the new object. +
47521 */ +
47522 var baseCreate = (function() { +
47523 function object() {} +
47524 return function(proto) { +
47525 if (!isObject(proto)) { +
47526 return {}; +
47527 } +
47528 if (objectCreate) { +
47529 return objectCreate(proto); +
47530 } +
47531 object.prototype = proto; +
47532 var result = new object; +
47533 object.prototype = undefined; +
47534 return result; +
47535 }; +
47536 }()); +
47537 +
47538 /** +
47539 * The function whose prototype chain sequence wrappers inherit from. +
47540 * +
47541 * @private +
47542 */ +
47543 function baseLodash() { +
47544 // No operation performed. +
47545 } +
47546 +
47547 /** +
47548 * The base constructor for creating `lodash` wrapper objects. +
47549 * +
47550 * @private +
47551 * @param {*} value The value to wrap. +
47552 * @param {boolean} [chainAll] Enable explicit method chain sequences. +
47553 */ +
47554 function LodashWrapper(value, chainAll) { +
47555 this.__wrapped__ = value; +
47556 this.__actions__ = []; +
47557 this.__chain__ = !!chainAll; +
47558 this.__index__ = 0; +
47559 this.__values__ = undefined; +
47560 } +
47561 +
47562 /** +
47563 * By default, the template delimiters used by lodash are like those in +
47564 * embedded Ruby (ERB) as well as ES2015 template strings. Change the +
47565 * following template settings to use alternative delimiters. +
47566 * +
47567 * @static +
47568 * @memberOf _ +
47569 * @type {Object} +
47570 */ +
47571 lodash.templateSettings = { +
47572 +
47573 /** +
47574 * Used to detect `data` property values to be HTML-escaped. +
47575 * +
47576 * @memberOf _.templateSettings +
47577 * @type {RegExp} +
47578 */ +
47579 'escape': reEscape, +
47580 +
47581 /** +
47582 * Used to detect code to be evaluated. +
47583 * +
47584 * @memberOf _.templateSettings +
47585 * @type {RegExp} +
47586 */ +
47587 'evaluate': reEvaluate, +
47588 +
47589 /** +
47590 * Used to detect `data` property values to inject. +
47591 * +
47592 * @memberOf _.templateSettings +
47593 * @type {RegExp} +
47594 */ +
47595 'interpolate': reInterpolate, +
47596 +
47597 /** +
47598 * Used to reference the data object in the template text. +
47599 * +
47600 * @memberOf _.templateSettings +
47601 * @type {string} +
47602 */ +
47603 'variable': '', +
47604 +
47605 /** +
47606 * Used to import variables into the compiled template. +
47607 * +
47608 * @memberOf _.templateSettings +
47609 * @type {Object} +
47610 */ +
47611 'imports': { +
47612 +
47613 /** +
47614 * A reference to the `lodash` function. +
47615 * +
47616 * @memberOf _.templateSettings.imports +
47617 * @type {Function} +
47618 */ +
47619 '_': lodash +
47620 } +
47621 }; +
47622 +
47623 // Ensure wrappers are instances of `baseLodash`. +
47624 lodash.prototype = baseLodash.prototype; +
47625 lodash.prototype.constructor = lodash; +
47626 +
47627 LodashWrapper.prototype = baseCreate(baseLodash.prototype); +
47628 LodashWrapper.prototype.constructor = LodashWrapper; +
47629 +
47630 /*------------------------------------------------------------------------*/ +
47631 +
47632 /** +
47633 * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. +
47634 * +
47635 * @private +
47636 * @constructor +
47637 * @param {*} value The value to wrap. +
47638 */ +
47639 function LazyWrapper(value) { +
47640 this.__wrapped__ = value; +
47641 this.__actions__ = []; +
47642 this.__dir__ = 1; +
47643 this.__filtered__ = false; +
47644 this.__iteratees__ = []; +
47645 this.__takeCount__ = MAX_ARRAY_LENGTH; +
47646 this.__views__ = []; +
47647 } +
47648 +
47649 /** +
47650 * Creates a clone of the lazy wrapper object. +
47651 * +
47652 * @private +
47653 * @name clone +
47654 * @memberOf LazyWrapper +
47655 * @returns {Object} Returns the cloned `LazyWrapper` object. +
47656 */ +
47657 function lazyClone() { +
47658 var result = new LazyWrapper(this.__wrapped__); +
47659 result.__actions__ = copyArray(this.__actions__); +
47660 result.__dir__ = this.__dir__; +
47661 result.__filtered__ = this.__filtered__; +
47662 result.__iteratees__ = copyArray(this.__iteratees__); +
47663 result.__takeCount__ = this.__takeCount__; +
47664 result.__views__ = copyArray(this.__views__); +
47665 return result; +
47666 } +
47667 +
47668 /** +
47669 * Reverses the direction of lazy iteration. +
47670 * +
47671 * @private +
47672 * @name reverse +
47673 * @memberOf LazyWrapper +
47674 * @returns {Object} Returns the new reversed `LazyWrapper` object. +
47675 */ +
47676 function lazyReverse() { +
47677 if (this.__filtered__) { +
47678 var result = new LazyWrapper(this); +
47679 result.__dir__ = -1; +
47680 result.__filtered__ = true; +
47681 } else { +
47682 result = this.clone(); +
47683 result.__dir__ *= -1; +
47684 } +
47685 return result; +
47686 } +
47687 +
47688 /** +
47689 * Extracts the unwrapped value from its lazy wrapper. +
47690 * +
47691 * @private +
47692 * @name value +
47693 * @memberOf LazyWrapper +
47694 * @returns {*} Returns the unwrapped value. +
47695 */ +
47696 function lazyValue() { +
47697 var array = this.__wrapped__.value(), +
47698 dir = this.__dir__, +
47699 isArr = isArray(array), +
47700 isRight = dir < 0, +
47701 arrLength = isArr ? array.length : 0, +
47702 view = getView(0, arrLength, this.__views__), +
47703 start = view.start, +
47704 end = view.end, +
47705 length = end - start, +
47706 index = isRight ? end : (start - 1), +
47707 iteratees = this.__iteratees__, +
47708 iterLength = iteratees.length, +
47709 resIndex = 0, +
47710 takeCount = nativeMin(length, this.__takeCount__); +
47711 +
47712 if (!isArr || (!isRight && arrLength == length && takeCount == length)) { +
47713 return baseWrapperValue(array, this.__actions__); +
47714 } +
47715 var result = []; +
47716 +
47717 outer: +
47718 while (length-- && resIndex < takeCount) { +
47719 index += dir; +
47720 +
47721 var iterIndex = -1, +
47722 value = array[index]; +
47723 +
47724 while (++iterIndex < iterLength) { +
47725 var data = iteratees[iterIndex], +
47726 iteratee = data.iteratee, +
47727 type = data.type, +
47728 computed = iteratee(value); +
47729 +
47730 if (type == LAZY_MAP_FLAG) { +
47731 value = computed; +
47732 } else if (!computed) { +
47733 if (type == LAZY_FILTER_FLAG) { +
47734 continue outer; +
47735 } else { +
47736 break outer; +
47737 } +
47738 } +
47739 } +
47740 result[resIndex++] = value; +
47741 } +
47742 return result; +
47743 } +
47744 +
47745 // Ensure `LazyWrapper` is an instance of `baseLodash`. +
47746 LazyWrapper.prototype = baseCreate(baseLodash.prototype); +
47747 LazyWrapper.prototype.constructor = LazyWrapper; +
47748 +
47749 /*------------------------------------------------------------------------*/ +
47750 +
47751 /** +
47752 * Creates a hash object. +
47753 * +
47754 * @private +
47755 * @constructor +
47756 * @param {Array} [entries] The key-value pairs to cache. +
47757 */ +
47758 function Hash(entries) { +
47759 var index = -1, +
47760 length = entries == null ? 0 : entries.length; +
47761 +
47762 this.clear(); +
47763 while (++index < length) { +
47764 var entry = entries[index]; +
47765 this.set(entry[0], entry[1]); +
47766 } +
47767 } +
47768 +
47769 /** +
47770 * Removes all key-value entries from the hash. +
47771 * +
47772 * @private +
47773 * @name clear +
47774 * @memberOf Hash +
47775 */ +
47776 function hashClear() { +
47777 this.__data__ = nativeCreate ? nativeCreate(null) : {}; +
47778 this.size = 0; +
47779 } +
47780 +
47781 /** +
47782 * Removes `key` and its value from the hash. +
47783 * +
47784 * @private +
47785 * @name delete +
47786 * @memberOf Hash +
47787 * @param {Object} hash The hash to modify. +
47788 * @param {string} key The key of the value to remove. +
47789 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
47790 */ +
47791 function hashDelete(key) { +
47792 var result = this.has(key) && delete this.__data__[key]; +
47793 this.size -= result ? 1 : 0; +
47794 return result; +
47795 } +
47796 +
47797 /** +
47798 * Gets the hash value for `key`. +
47799 * +
47800 * @private +
47801 * @name get +
47802 * @memberOf Hash +
47803 * @param {string} key The key of the value to get. +
47804 * @returns {*} Returns the entry value. +
47805 */ +
47806 function hashGet(key) { +
47807 var data = this.__data__; +
47808 if (nativeCreate) { +
47809 var result = data[key]; +
47810 return result === HASH_UNDEFINED ? undefined : result; +
47811 } +
47812 return hasOwnProperty.call(data, key) ? data[key] : undefined; +
47813 } +
47814 +
47815 /** +
47816 * Checks if a hash value for `key` exists. +
47817 * +
47818 * @private +
47819 * @name has +
47820 * @memberOf Hash +
47821 * @param {string} key The key of the entry to check. +
47822 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
47823 */ +
47824 function hashHas(key) { +
47825 var data = this.__data__; +
47826 return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +
47827 } +
47828 +
47829 /** +
47830 * Sets the hash `key` to `value`. +
47831 * +
47832 * @private +
47833 * @name set +
47834 * @memberOf Hash +
47835 * @param {string} key The key of the value to set. +
47836 * @param {*} value The value to set. +
47837 * @returns {Object} Returns the hash instance. +
47838 */ +
47839 function hashSet(key, value) { +
47840 var data = this.__data__; +
47841 this.size += this.has(key) ? 0 : 1; +
47842 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; +
47843 return this; +
47844 } +
47845 +
47846 // Add methods to `Hash`. +
47847 Hash.prototype.clear = hashClear; +
47848 Hash.prototype['delete'] = hashDelete; +
47849 Hash.prototype.get = hashGet; +
47850 Hash.prototype.has = hashHas; +
47851 Hash.prototype.set = hashSet; +
47852 +
47853 /*------------------------------------------------------------------------*/ +
47854 +
47855 /** +
47856 * Creates an list cache object. +
47857 * +
47858 * @private +
47859 * @constructor +
47860 * @param {Array} [entries] The key-value pairs to cache. +
47861 */ +
47862 function ListCache(entries) { +
47863 var index = -1, +
47864 length = entries == null ? 0 : entries.length; +
47865 +
47866 this.clear(); +
47867 while (++index < length) { +
47868 var entry = entries[index]; +
47869 this.set(entry[0], entry[1]); +
47870 } +
47871 } +
47872 +
47873 /** +
47874 * Removes all key-value entries from the list cache. +
47875 * +
47876 * @private +
47877 * @name clear +
47878 * @memberOf ListCache +
47879 */ +
47880 function listCacheClear() { +
47881 this.__data__ = []; +
47882 this.size = 0; +
47883 } +
47884 +
47885 /** +
47886 * Removes `key` and its value from the list cache. +
47887 * +
47888 * @private +
47889 * @name delete +
47890 * @memberOf ListCache +
47891 * @param {string} key The key of the value to remove. +
47892 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
47893 */ +
47894 function listCacheDelete(key) { +
47895 var data = this.__data__, +
47896 index = assocIndexOf(data, key); +
47897 +
47898 if (index < 0) { +
47899 return false; +
47900 } +
47901 var lastIndex = data.length - 1; +
47902 if (index == lastIndex) { +
47903 data.pop(); +
47904 } else { +
47905 splice.call(data, index, 1); +
47906 } +
47907 --this.size; +
47908 return true; +
47909 } +
47910 +
47911 /** +
47912 * Gets the list cache value for `key`. +
47913 * +
47914 * @private +
47915 * @name get +
47916 * @memberOf ListCache +
47917 * @param {string} key The key of the value to get. +
47918 * @returns {*} Returns the entry value. +
47919 */ +
47920 function listCacheGet(key) { +
47921 var data = this.__data__, +
47922 index = assocIndexOf(data, key); +
47923 +
47924 return index < 0 ? undefined : data[index][1]; +
47925 } +
47926 +
47927 /** +
47928 * Checks if a list cache value for `key` exists. +
47929 * +
47930 * @private +
47931 * @name has +
47932 * @memberOf ListCache +
47933 * @param {string} key The key of the entry to check. +
47934 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
47935 */ +
47936 function listCacheHas(key) { +
47937 return assocIndexOf(this.__data__, key) > -1; +
47938 } +
47939 +
47940 /** +
47941 * Sets the list cache `key` to `value`. +
47942 * +
47943 * @private +
47944 * @name set +
47945 * @memberOf ListCache +
47946 * @param {string} key The key of the value to set. +
47947 * @param {*} value The value to set. +
47948 * @returns {Object} Returns the list cache instance. +
47949 */ +
47950 function listCacheSet(key, value) { +
47951 var data = this.__data__, +
47952 index = assocIndexOf(data, key); +
47953 +
47954 if (index < 0) { +
47955 ++this.size; +
47956 data.push([key, value]); +
47957 } else { +
47958 data[index][1] = value; +
47959 } +
47960 return this; +
47961 } +
47962 +
47963 // Add methods to `ListCache`. +
47964 ListCache.prototype.clear = listCacheClear; +
47965 ListCache.prototype['delete'] = listCacheDelete; +
47966 ListCache.prototype.get = listCacheGet; +
47967 ListCache.prototype.has = listCacheHas; +
47968 ListCache.prototype.set = listCacheSet; +
47969 +
47970 /*------------------------------------------------------------------------*/ +
47971 +
47972 /** +
47973 * Creates a map cache object to store key-value pairs. +
47974 * +
47975 * @private +
47976 * @constructor +
47977 * @param {Array} [entries] The key-value pairs to cache. +
47978 */ +
47979 function MapCache(entries) { +
47980 var index = -1, +
47981 length = entries == null ? 0 : entries.length; +
47982 +
47983 this.clear(); +
47984 while (++index < length) { +
47985 var entry = entries[index]; +
47986 this.set(entry[0], entry[1]); +
47987 } +
47988 } +
47989 +
47990 /** +
47991 * Removes all key-value entries from the map. +
47992 * +
47993 * @private +
47994 * @name clear +
47995 * @memberOf MapCache +
47996 */ +
47997 function mapCacheClear() { +
47998 this.size = 0; +
47999 this.__data__ = { +
48000 'hash': new Hash, +
48001 'map': new (Map || ListCache), +
48002 'string': new Hash +
48003 }; +
48004 } +
48005 +
48006 /** +
48007 * Removes `key` and its value from the map. +
48008 * +
48009 * @private +
48010 * @name delete +
48011 * @memberOf MapCache +
48012 * @param {string} key The key of the value to remove. +
48013 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
48014 */ +
48015 function mapCacheDelete(key) { +
48016 var result = getMapData(this, key)['delete'](key); +
48017 this.size -= result ? 1 : 0; +
48018 return result; +
48019 } +
48020 +
48021 /** +
48022 * Gets the map value for `key`. +
48023 * +
48024 * @private +
48025 * @name get +
48026 * @memberOf MapCache +
48027 * @param {string} key The key of the value to get. +
48028 * @returns {*} Returns the entry value. +
48029 */ +
48030 function mapCacheGet(key) { +
48031 return getMapData(this, key).get(key); +
48032 } +
48033 +
48034 /** +
48035 * Checks if a map value for `key` exists. +
48036 * +
48037 * @private +
48038 * @name has +
48039 * @memberOf MapCache +
48040 * @param {string} key The key of the entry to check. +
48041 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
48042 */ +
48043 function mapCacheHas(key) { +
48044 return getMapData(this, key).has(key); +
48045 } +
48046 +
48047 /** +
48048 * Sets the map `key` to `value`. +
48049 * +
48050 * @private +
48051 * @name set +
48052 * @memberOf MapCache +
48053 * @param {string} key The key of the value to set. +
48054 * @param {*} value The value to set. +
48055 * @returns {Object} Returns the map cache instance. +
48056 */ +
48057 function mapCacheSet(key, value) { +
48058 var data = getMapData(this, key), +
48059 size = data.size; +
48060 +
48061 data.set(key, value); +
48062 this.size += data.size == size ? 0 : 1; +
48063 return this; +
48064 } +
48065 +
48066 // Add methods to `MapCache`. +
48067 MapCache.prototype.clear = mapCacheClear; +
48068 MapCache.prototype['delete'] = mapCacheDelete; +
48069 MapCache.prototype.get = mapCacheGet; +
48070 MapCache.prototype.has = mapCacheHas; +
48071 MapCache.prototype.set = mapCacheSet; +
48072 +
48073 /*------------------------------------------------------------------------*/ +
48074 +
48075 /** +
48076 * +
48077 * Creates an array cache object to store unique values. +
48078 * +
48079 * @private +
48080 * @constructor +
48081 * @param {Array} [values] The values to cache. +
48082 */ +
48083 function SetCache(values) { +
48084 var index = -1, +
48085 length = values == null ? 0 : values.length; +
48086 +
48087 this.__data__ = new MapCache; +
48088 while (++index < length) { +
48089 this.add(values[index]); +
48090 } +
48091 } +
48092 +
48093 /** +
48094 * Adds `value` to the array cache. +
48095 * +
48096 * @private +
48097 * @name add +
48098 * @memberOf SetCache +
48099 * @alias push +
48100 * @param {*} value The value to cache. +
48101 * @returns {Object} Returns the cache instance. +
48102 */ +
48103 function setCacheAdd(value) { +
48104 this.__data__.set(value, HASH_UNDEFINED); +
48105 return this; +
48106 } +
48107 +
48108 /** +
48109 * Checks if `value` is in the array cache. +
48110 * +
48111 * @private +
48112 * @name has +
48113 * @memberOf SetCache +
48114 * @param {*} value The value to search for. +
48115 * @returns {number} Returns `true` if `value` is found, else `false`. +
48116 */ +
48117 function setCacheHas(value) { +
48118 return this.__data__.has(value); +
48119 } +
48120 +
48121 // Add methods to `SetCache`. +
48122 SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +
48123 SetCache.prototype.has = setCacheHas; +
48124 +
48125 /*------------------------------------------------------------------------*/ +
48126 +
48127 /** +
48128 * Creates a stack cache object to store key-value pairs. +
48129 * +
48130 * @private +
48131 * @constructor +
48132 * @param {Array} [entries] The key-value pairs to cache. +
48133 */ +
48134 function Stack(entries) { +
48135 var data = this.__data__ = new ListCache(entries); +
48136 this.size = data.size; +
48137 } +
48138 +
48139 /** +
48140 * Removes all key-value entries from the stack. +
48141 * +
48142 * @private +
48143 * @name clear +
48144 * @memberOf Stack +
48145 */ +
48146 function stackClear() { +
48147 this.__data__ = new ListCache; +
48148 this.size = 0; +
48149 } +
48150 +
48151 /** +
48152 * Removes `key` and its value from the stack. +
48153 * +
48154 * @private +
48155 * @name delete +
48156 * @memberOf Stack +
48157 * @param {string} key The key of the value to remove. +
48158 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
48159 */ +
48160 function stackDelete(key) { +
48161 var data = this.__data__, +
48162 result = data['delete'](key); +
48163 +
48164 this.size = data.size; +
48165 return result; +
48166 } +
48167 +
48168 /** +
48169 * Gets the stack value for `key`. +
48170 * +
48171 * @private +
48172 * @name get +
48173 * @memberOf Stack +
48174 * @param {string} key The key of the value to get. +
48175 * @returns {*} Returns the entry value. +
48176 */ +
48177 function stackGet(key) { +
48178 return this.__data__.get(key); +
48179 } +
48180 +
48181 /** +
48182 * Checks if a stack value for `key` exists. +
48183 * +
48184 * @private +
48185 * @name has +
48186 * @memberOf Stack +
48187 * @param {string} key The key of the entry to check. +
48188 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
48189 */ +
48190 function stackHas(key) { +
48191 return this.__data__.has(key); +
48192 } +
48193 +
48194 /** +
48195 * Sets the stack `key` to `value`. +
48196 * +
48197 * @private +
48198 * @name set +
48199 * @memberOf Stack +
48200 * @param {string} key The key of the value to set. +
48201 * @param {*} value The value to set. +
48202 * @returns {Object} Returns the stack cache instance. +
48203 */ +
48204 function stackSet(key, value) { +
48205 var data = this.__data__; +
48206 if (data instanceof ListCache) { +
48207 var pairs = data.__data__; +
48208 if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { +
48209 pairs.push([key, value]); +
48210 this.size = ++data.size; +
48211 return this; +
48212 } +
48213 data = this.__data__ = new MapCache(pairs); +
48214 } +
48215 data.set(key, value); +
48216 this.size = data.size; +
48217 return this; +
48218 } +
48219 +
48220 // Add methods to `Stack`. +
48221 Stack.prototype.clear = stackClear; +
48222 Stack.prototype['delete'] = stackDelete; +
48223 Stack.prototype.get = stackGet; +
48224 Stack.prototype.has = stackHas; +
48225 Stack.prototype.set = stackSet; +
48226 +
48227 /*------------------------------------------------------------------------*/ +
48228 +
48229 /** +
48230 * Creates an array of the enumerable property names of the array-like `value`. +
48231 * +
48232 * @private +
48233 * @param {*} value The value to query. +
48234 * @param {boolean} inherited Specify returning inherited property names. +
48235 * @returns {Array} Returns the array of property names. +
48236 */ +
48237 function arrayLikeKeys(value, inherited) { +
48238 var isArr = isArray(value), +
48239 isArg = !isArr && isArguments(value), +
48240 isBuff = !isArr && !isArg && isBuffer(value), +
48241 isType = !isArr && !isArg && !isBuff && isTypedArray(value), +
48242 skipIndexes = isArr || isArg || isBuff || isType, +
48243 result = skipIndexes ? baseTimes(value.length, String) : [], +
48244 length = result.length; +
48245 +
48246 for (var key in value) { +
48247 if ((inherited || hasOwnProperty.call(value, key)) && +
48248 !(skipIndexes && ( +
48249 // Safari 9 has enumerable `arguments.length` in strict mode. +
48250 key == 'length' || +
48251 // Node.js 0.10 has enumerable non-index properties on buffers. +
48252 (isBuff && (key == 'offset' || key == 'parent')) || +
48253 // PhantomJS 2 has enumerable non-index properties on typed arrays. +
48254 (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || +
48255 // Skip index properties. +
48256 isIndex(key, length) +
48257 ))) { +
48258 result.push(key); +
48259 } +
48260 } +
48261 return result; +
48262 } +
48263 +
48264 /** +
48265 * A specialized version of `_.sample` for arrays. +
48266 * +
48267 * @private +
48268 * @param {Array} array The array to sample. +
48269 * @returns {*} Returns the random element. +
48270 */ +
48271 function arraySample(array) { +
48272 var length = array.length; +
48273 return length ? array[baseRandom(0, length - 1)] : undefined; +
48274 } +
48275 +
48276 /** +
48277 * A specialized version of `_.sampleSize` for arrays. +
48278 * +
48279 * @private +
48280 * @param {Array} array The array to sample. +
48281 * @param {number} n The number of elements to sample. +
48282 * @returns {Array} Returns the random elements. +
48283 */ +
48284 function arraySampleSize(array, n) { +
48285 return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +
48286 } +
48287 +
48288 /** +
48289 * A specialized version of `_.shuffle` for arrays. +
48290 * +
48291 * @private +
48292 * @param {Array} array The array to shuffle. +
48293 * @returns {Array} Returns the new shuffled array. +
48294 */ +
48295 function arrayShuffle(array) { +
48296 return shuffleSelf(copyArray(array)); +
48297 } +
48298 +
48299 /** +
48300 * This function is like `assignValue` except that it doesn't assign +
48301 * `undefined` values. +
48302 * +
48303 * @private +
48304 * @param {Object} object The object to modify. +
48305 * @param {string} key The key of the property to assign. +
48306 * @param {*} value The value to assign. +
48307 */ +
48308 function assignMergeValue(object, key, value) { +
48309 if ((value !== undefined && !eq(object[key], value)) || +
48310 (value === undefined && !(key in object))) { +
48311 baseAssignValue(object, key, value); +
48312 } +
48313 } +
48314 +
48315 /** +
48316 * Assigns `value` to `key` of `object` if the existing value is not equivalent +
48317 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
48318 * for equality comparisons. +
48319 * +
48320 * @private +
48321 * @param {Object} object The object to modify. +
48322 * @param {string} key The key of the property to assign. +
48323 * @param {*} value The value to assign. +
48324 */ +
48325 function assignValue(object, key, value) { +
48326 var objValue = object[key]; +
48327 if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || +
48328 (value === undefined && !(key in object))) { +
48329 baseAssignValue(object, key, value); +
48330 } +
48331 } +
48332 +
48333 /** +
48334 * Gets the index at which the `key` is found in `array` of key-value pairs. +
48335 * +
48336 * @private +
48337 * @param {Array} array The array to inspect. +
48338 * @param {*} key The key to search for. +
48339 * @returns {number} Returns the index of the matched value, else `-1`. +
48340 */ +
48341 function assocIndexOf(array, key) { +
48342 var length = array.length; +
48343 while (length--) { +
48344 if (eq(array[length][0], key)) { +
48345 return length; +
48346 } +
48347 } +
48348 return -1; +
48349 } +
48350 +
48351 /** +
48352 * Aggregates elements of `collection` on `accumulator` with keys transformed +
48353 * by `iteratee` and values set by `setter`. +
48354 * +
48355 * @private +
48356 * @param {Array|Object} collection The collection to iterate over. +
48357 * @param {Function} setter The function to set `accumulator` values. +
48358 * @param {Function} iteratee The iteratee to transform keys. +
48359 * @param {Object} accumulator The initial aggregated object. +
48360 * @returns {Function} Returns `accumulator`. +
48361 */ +
48362 function baseAggregator(collection, setter, iteratee, accumulator) { +
48363 baseEach(collection, function(value, key, collection) { +
48364 setter(accumulator, value, iteratee(value), collection); +
48365 }); +
48366 return accumulator; +
48367 } +
48368 +
48369 /** +
48370 * The base implementation of `_.assign` without support for multiple sources +
48371 * or `customizer` functions. +
48372 * +
48373 * @private +
48374 * @param {Object} object The destination object. +
48375 * @param {Object} source The source object. +
48376 * @returns {Object} Returns `object`. +
48377 */ +
48378 function baseAssign(object, source) { +
48379 return object && copyObject(source, keys(source), object); +
48380 } +
48381 +
48382 /** +
48383 * The base implementation of `_.assignIn` without support for multiple sources +
48384 * or `customizer` functions. +
48385 * +
48386 * @private +
48387 * @param {Object} object The destination object. +
48388 * @param {Object} source The source object. +
48389 * @returns {Object} Returns `object`. +
48390 */ +
48391 function baseAssignIn(object, source) { +
48392 return object && copyObject(source, keysIn(source), object); +
48393 } +
48394 +
48395 /** +
48396 * The base implementation of `assignValue` and `assignMergeValue` without +
48397 * value checks. +
48398 * +
48399 * @private +
48400 * @param {Object} object The object to modify. +
48401 * @param {string} key The key of the property to assign. +
48402 * @param {*} value The value to assign. +
48403 */ +
48404 function baseAssignValue(object, key, value) { +
48405 if (key == '__proto__' && defineProperty) { +
48406 defineProperty(object, key, { +
48407 'configurable': true, +
48408 'enumerable': true, +
48409 'value': value, +
48410 'writable': true +
48411 }); +
48412 } else { +
48413 object[key] = value; +
48414 } +
48415 } +
48416 +
48417 /** +
48418 * The base implementation of `_.at` without support for individual paths. +
48419 * +
48420 * @private +
48421 * @param {Object} object The object to iterate over. +
48422 * @param {string[]} paths The property paths to pick. +
48423 * @returns {Array} Returns the picked elements. +
48424 */ +
48425 function baseAt(object, paths) { +
48426 var index = -1, +
48427 length = paths.length, +
48428 result = Array(length), +
48429 skip = object == null; +
48430 +
48431 while (++index < length) { +
48432 result[index] = skip ? undefined : get(object, paths[index]); +
48433 } +
48434 return result; +
48435 } +
48436 +
48437 /** +
48438 * The base implementation of `_.clamp` which doesn't coerce arguments. +
48439 * +
48440 * @private +
48441 * @param {number} number The number to clamp. +
48442 * @param {number} [lower] The lower bound. +
48443 * @param {number} upper The upper bound. +
48444 * @returns {number} Returns the clamped number. +
48445 */ +
48446 function baseClamp(number, lower, upper) { +
48447 if (number === number) { +
48448 if (upper !== undefined) { +
48449 number = number <= upper ? number : upper; +
48450 } +
48451 if (lower !== undefined) { +
48452 number = number >= lower ? number : lower; +
48453 } +
48454 } +
48455 return number; +
48456 } +
48457 +
48458 /** +
48459 * The base implementation of `_.clone` and `_.cloneDeep` which tracks +
48460 * traversed objects. +
48461 * +
48462 * @private +
48463 * @param {*} value The value to clone. +
48464 * @param {boolean} bitmask The bitmask flags. +
48465 * 1 - Deep clone +
48466 * 2 - Flatten inherited properties +
48467 * 4 - Clone symbols +
48468 * @param {Function} [customizer] The function to customize cloning. +
48469 * @param {string} [key] The key of `value`. +
48470 * @param {Object} [object] The parent object of `value`. +
48471 * @param {Object} [stack] Tracks traversed objects and their clone counterparts. +
48472 * @returns {*} Returns the cloned value. +
48473 */ +
48474 function baseClone(value, bitmask, customizer, key, object, stack) { +
48475 var result, +
48476 isDeep = bitmask & CLONE_DEEP_FLAG, +
48477 isFlat = bitmask & CLONE_FLAT_FLAG, +
48478 isFull = bitmask & CLONE_SYMBOLS_FLAG; +
48479 +
48480 if (customizer) { +
48481 result = object ? customizer(value, key, object, stack) : customizer(value); +
48482 } +
48483 if (result !== undefined) { +
48484 return result; +
48485 } +
48486 if (!isObject(value)) { +
48487 return value; +
48488 } +
48489 var isArr = isArray(value); +
48490 if (isArr) { +
48491 result = initCloneArray(value); +
48492 if (!isDeep) { +
48493 return copyArray(value, result); +
48494 } +
48495 } else { +
48496 var tag = getTag(value), +
48497 isFunc = tag == funcTag || tag == genTag; +
48498 +
48499 if (isBuffer(value)) { +
48500 return cloneBuffer(value, isDeep); +
48501 } +
48502 if (tag == objectTag || tag == argsTag || (isFunc && !object)) { +
48503 result = (isFlat || isFunc) ? {} : initCloneObject(value); +
48504 if (!isDeep) { +
48505 return isFlat +
48506 ? copySymbolsIn(value, baseAssignIn(result, value)) +
48507 : copySymbols(value, baseAssign(result, value)); +
48508 } +
48509 } else { +
48510 if (!cloneableTags[tag]) { +
48511 return object ? value : {}; +
48512 } +
48513 result = initCloneByTag(value, tag, isDeep); +
48514 } +
48515 } +
48516 // Check for circular references and return its corresponding clone. +
48517 stack || (stack = new Stack); +
48518 var stacked = stack.get(value); +
48519 if (stacked) { +
48520 return stacked; +
48521 } +
48522 stack.set(value, result); +
48523 +
48524 if (isSet(value)) { +
48525 value.forEach(function(subValue) { +
48526 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); +
48527 }); +
48528 +
48529 return result; +
48530 } +
48531 +
48532 if (isMap(value)) { +
48533 value.forEach(function(subValue, key) { +
48534 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); +
48535 }); +
48536 +
48537 return result; +
48538 } +
48539 +
48540 var keysFunc = isFull +
48541 ? (isFlat ? getAllKeysIn : getAllKeys) +
48542 : (isFlat ? keysIn : keys); +
48543 +
48544 var props = isArr ? undefined : keysFunc(value); +
48545 arrayEach(props || value, function(subValue, key) { +
48546 if (props) { +
48547 key = subValue; +
48548 subValue = value[key]; +
48549 } +
48550 // Recursively populate clone (susceptible to call stack limits). +
48551 assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); +
48552 }); +
48553 return result; +
48554 } +
48555 +
48556 /** +
48557 * The base implementation of `_.conforms` which doesn't clone `source`. +
48558 * +
48559 * @private +
48560 * @param {Object} source The object of property predicates to conform to. +
48561 * @returns {Function} Returns the new spec function. +
48562 */ +
48563 function baseConforms(source) { +
48564 var props = keys(source); +
48565 return function(object) { +
48566 return baseConformsTo(object, source, props); +
48567 }; +
48568 } +
48569 +
48570 /** +
48571 * The base implementation of `_.conformsTo` which accepts `props` to check. +
48572 * +
48573 * @private +
48574 * @param {Object} object The object to inspect. +
48575 * @param {Object} source The object of property predicates to conform to. +
48576 * @returns {boolean} Returns `true` if `object` conforms, else `false`. +
48577 */ +
48578 function baseConformsTo(object, source, props) { +
48579 var length = props.length; +
48580 if (object == null) { +
48581 return !length; +
48582 } +
48583 object = Object(object); +
48584 while (length--) { +
48585 var key = props[length], +
48586 predicate = source[key], +
48587 value = object[key]; +
48588 +
48589 if ((value === undefined && !(key in object)) || !predicate(value)) { +
48590 return false; +
48591 } +
48592 } +
48593 return true; +
48594 } +
48595 +
48596 /** +
48597 * The base implementation of `_.delay` and `_.defer` which accepts `args` +
48598 * to provide to `func`. +
48599 * +
48600 * @private +
48601 * @param {Function} func The function to delay. +
48602 * @param {number} wait The number of milliseconds to delay invocation. +
48603 * @param {Array} args The arguments to provide to `func`. +
48604 * @returns {number|Object} Returns the timer id or timeout object. +
48605 */ +
48606 function baseDelay(func, wait, args) { +
48607 if (typeof func != 'function') { +
48608 throw new TypeError(FUNC_ERROR_TEXT); +
48609 } +
48610 return setTimeout(function() { func.apply(undefined, args); }, wait); +
48611 } +
48612 +
48613 /** +
48614 * The base implementation of methods like `_.difference` without support +
48615 * for excluding multiple arrays or iteratee shorthands. +
48616 * +
48617 * @private +
48618 * @param {Array} array The array to inspect. +
48619 * @param {Array} values The values to exclude. +
48620 * @param {Function} [iteratee] The iteratee invoked per element. +
48621 * @param {Function} [comparator] The comparator invoked per element. +
48622 * @returns {Array} Returns the new array of filtered values. +
48623 */ +
48624 function baseDifference(array, values, iteratee, comparator) { +
48625 var index = -1, +
48626 includes = arrayIncludes, +
48627 isCommon = true, +
48628 length = array.length, +
48629 result = [], +
48630 valuesLength = values.length; +
48631 +
48632 if (!length) { +
48633 return result; +
48634 } +
48635 if (iteratee) { +
48636 values = arrayMap(values, baseUnary(iteratee)); +
48637 } +
48638 if (comparator) { +
48639 includes = arrayIncludesWith; +
48640 isCommon = false; +
48641 } +
48642 else if (values.length >= LARGE_ARRAY_SIZE) { +
48643 includes = cacheHas; +
48644 isCommon = false; +
48645 values = new SetCache(values); +
48646 } +
48647 outer: +
48648 while (++index < length) { +
48649 var value = array[index], +
48650 computed = iteratee == null ? value : iteratee(value); +
48651 +
48652 value = (comparator || value !== 0) ? value : 0; +
48653 if (isCommon && computed === computed) { +
48654 var valuesIndex = valuesLength; +
48655 while (valuesIndex--) { +
48656 if (values[valuesIndex] === computed) { +
48657 continue outer; +
48658 } +
48659 } +
48660 result.push(value); +
48661 } +
48662 else if (!includes(values, computed, comparator)) { +
48663 result.push(value); +
48664 } +
48665 } +
48666 return result; +
48667 } +
48668 +
48669 /** +
48670 * The base implementation of `_.forEach` without support for iteratee shorthands. +
48671 * +
48672 * @private +
48673 * @param {Array|Object} collection The collection to iterate over. +
48674 * @param {Function} iteratee The function invoked per iteration. +
48675 * @returns {Array|Object} Returns `collection`. +
48676 */ +
48677 var baseEach = createBaseEach(baseForOwn); +
48678 +
48679 /** +
48680 * The base implementation of `_.forEachRight` without support for iteratee shorthands. +
48681 * +
48682 * @private +
48683 * @param {Array|Object} collection The collection to iterate over. +
48684 * @param {Function} iteratee The function invoked per iteration. +
48685 * @returns {Array|Object} Returns `collection`. +
48686 */ +
48687 var baseEachRight = createBaseEach(baseForOwnRight, true); +
48688 +
48689 /** +
48690 * The base implementation of `_.every` without support for iteratee shorthands. +
48691 * +
48692 * @private +
48693 * @param {Array|Object} collection The collection to iterate over. +
48694 * @param {Function} predicate The function invoked per iteration. +
48695 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
48696 * else `false` +
48697 */ +
48698 function baseEvery(collection, predicate) { +
48699 var result = true; +
48700 baseEach(collection, function(value, index, collection) { +
48701 result = !!predicate(value, index, collection); +
48702 return result; +
48703 }); +
48704 return result; +
48705 } +
48706 +
48707 /** +
48708 * The base implementation of methods like `_.max` and `_.min` which accepts a +
48709 * `comparator` to determine the extremum value. +
48710 * +
48711 * @private +
48712 * @param {Array} array The array to iterate over. +
48713 * @param {Function} iteratee The iteratee invoked per iteration. +
48714 * @param {Function} comparator The comparator used to compare values. +
48715 * @returns {*} Returns the extremum value. +
48716 */ +
48717 function baseExtremum(array, iteratee, comparator) { +
48718 var index = -1, +
48719 length = array.length; +
48720 +
48721 while (++index < length) { +
48722 var value = array[index], +
48723 current = iteratee(value); +
48724 +
48725 if (current != null && (computed === undefined +
48726 ? (current === current && !isSymbol(current)) +
48727 : comparator(current, computed) +
48728 )) { +
48729 var computed = current, +
48730 result = value; +
48731 } +
48732 } +
48733 return result; +
48734 } +
48735 +
48736 /** +
48737 * The base implementation of `_.fill` without an iteratee call guard. +
48738 * +
48739 * @private +
48740 * @param {Array} array The array to fill. +
48741 * @param {*} value The value to fill `array` with. +
48742 * @param {number} [start=0] The start position. +
48743 * @param {number} [end=array.length] The end position. +
48744 * @returns {Array} Returns `array`. +
48745 */ +
48746 function baseFill(array, value, start, end) { +
48747 var length = array.length; +
48748 +
48749 start = toInteger(start); +
48750 if (start < 0) { +
48751 start = -start > length ? 0 : (length + start); +
48752 } +
48753 end = (end === undefined || end > length) ? length : toInteger(end); +
48754 if (end < 0) { +
48755 end += length; +
48756 } +
48757 end = start > end ? 0 : toLength(end); +
48758 while (start < end) { +
48759 array[start++] = value; +
48760 } +
48761 return array; +
48762 } +
48763 +
48764 /** +
48765 * The base implementation of `_.filter` without support for iteratee shorthands. +
48766 * +
48767 * @private +
48768 * @param {Array|Object} collection The collection to iterate over. +
48769 * @param {Function} predicate The function invoked per iteration. +
48770 * @returns {Array} Returns the new filtered array. +
48771 */ +
48772 function baseFilter(collection, predicate) { +
48773 var result = []; +
48774 baseEach(collection, function(value, index, collection) { +
48775 if (predicate(value, index, collection)) { +
48776 result.push(value); +
48777 } +
48778 }); +
48779 return result; +
48780 } +
48781 +
48782 /** +
48783 * The base implementation of `_.flatten` with support for restricting flattening. +
48784 * +
48785 * @private +
48786 * @param {Array} array The array to flatten. +
48787 * @param {number} depth The maximum recursion depth. +
48788 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. +
48789 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. +
48790 * @param {Array} [result=[]] The initial result value. +
48791 * @returns {Array} Returns the new flattened array. +
48792 */ +
48793 function baseFlatten(array, depth, predicate, isStrict, result) { +
48794 var index = -1, +
48795 length = array.length; +
48796 +
48797 predicate || (predicate = isFlattenable); +
48798 result || (result = []); +
48799 +
48800 while (++index < length) { +
48801 var value = array[index]; +
48802 if (depth > 0 && predicate(value)) { +
48803 if (depth > 1) { +
48804 // Recursively flatten arrays (susceptible to call stack limits). +
48805 baseFlatten(value, depth - 1, predicate, isStrict, result); +
48806 } else { +
48807 arrayPush(result, value); +
48808 } +
48809 } else if (!isStrict) { +
48810 result[result.length] = value; +
48811 } +
48812 } +
48813 return result; +
48814 } +
48815 +
48816 /** +
48817 * The base implementation of `baseForOwn` which iterates over `object` +
48818 * properties returned by `keysFunc` and invokes `iteratee` for each property. +
48819 * Iteratee functions may exit iteration early by explicitly returning `false`. +
48820 * +
48821 * @private +
48822 * @param {Object} object The object to iterate over. +
48823 * @param {Function} iteratee The function invoked per iteration. +
48824 * @param {Function} keysFunc The function to get the keys of `object`. +
48825 * @returns {Object} Returns `object`. +
48826 */ +
48827 var baseFor = createBaseFor(); +
48828 +
48829 /** +
48830 * This function is like `baseFor` except that it iterates over properties +
48831 * in the opposite order. +
48832 * +
48833 * @private +
48834 * @param {Object} object The object to iterate over. +
48835 * @param {Function} iteratee The function invoked per iteration. +
48836 * @param {Function} keysFunc The function to get the keys of `object`. +
48837 * @returns {Object} Returns `object`. +
48838 */ +
48839 var baseForRight = createBaseFor(true); +
48840 +
48841 /** +
48842 * The base implementation of `_.forOwn` without support for iteratee shorthands. +
48843 * +
48844 * @private +
48845 * @param {Object} object The object to iterate over. +
48846 * @param {Function} iteratee The function invoked per iteration. +
48847 * @returns {Object} Returns `object`. +
48848 */ +
48849 function baseForOwn(object, iteratee) { +
48850 return object && baseFor(object, iteratee, keys); +
48851 } +
48852 +
48853 /** +
48854 * The base implementation of `_.forOwnRight` without support for iteratee shorthands. +
48855 * +
48856 * @private +
48857 * @param {Object} object The object to iterate over. +
48858 * @param {Function} iteratee The function invoked per iteration. +
48859 * @returns {Object} Returns `object`. +
48860 */ +
48861 function baseForOwnRight(object, iteratee) { +
48862 return object && baseForRight(object, iteratee, keys); +
48863 } +
48864 +
48865 /** +
48866 * The base implementation of `_.functions` which creates an array of +
48867 * `object` function property names filtered from `props`. +
48868 * +
48869 * @private +
48870 * @param {Object} object The object to inspect. +
48871 * @param {Array} props The property names to filter. +
48872 * @returns {Array} Returns the function names. +
48873 */ +
48874 function baseFunctions(object, props) { +
48875 return arrayFilter(props, function(key) { +
48876 return isFunction(object[key]); +
48877 }); +
48878 } +
48879 +
48880 /** +
48881 * The base implementation of `_.get` without support for default values. +
48882 * +
48883 * @private +
48884 * @param {Object} object The object to query. +
48885 * @param {Array|string} path The path of the property to get. +
48886 * @returns {*} Returns the resolved value. +
48887 */ +
48888 function baseGet(object, path) { +
48889 path = castPath(path, object); +
48890 +
48891 var index = 0, +
48892 length = path.length; +
48893 +
48894 while (object != null && index < length) { +
48895 object = object[toKey(path[index++])]; +
48896 } +
48897 return (index && index == length) ? object : undefined; +
48898 } +
48899 +
48900 /** +
48901 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses +
48902 * `keysFunc` and `symbolsFunc` to get the enumerable property names and +
48903 * symbols of `object`. +
48904 * +
48905 * @private +
48906 * @param {Object} object The object to query. +
48907 * @param {Function} keysFunc The function to get the keys of `object`. +
48908 * @param {Function} symbolsFunc The function to get the symbols of `object`. +
48909 * @returns {Array} Returns the array of property names and symbols. +
48910 */ +
48911 function baseGetAllKeys(object, keysFunc, symbolsFunc) { +
48912 var result = keysFunc(object); +
48913 return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +
48914 } +
48915 +
48916 /** +
48917 * The base implementation of `getTag` without fallbacks for buggy environments. +
48918 * +
48919 * @private +
48920 * @param {*} value The value to query. +
48921 * @returns {string} Returns the `toStringTag`. +
48922 */ +
48923 function baseGetTag(value) { +
48924 if (value == null) { +
48925 return value === undefined ? undefinedTag : nullTag; +
48926 } +
48927 return (symToStringTag && symToStringTag in Object(value)) +
48928 ? getRawTag(value) +
48929 : objectToString(value); +
48930 } +
48931 +
48932 /** +
48933 * The base implementation of `_.gt` which doesn't coerce arguments. +
48934 * +
48935 * @private +
48936 * @param {*} value The value to compare. +
48937 * @param {*} other The other value to compare. +
48938 * @returns {boolean} Returns `true` if `value` is greater than `other`, +
48939 * else `false`. +
48940 */ +
48941 function baseGt(value, other) { +
48942 return value > other; +
48943 } +
48944 +
48945 /** +
48946 * The base implementation of `_.has` without support for deep paths. +
48947 * +
48948 * @private +
48949 * @param {Object} [object] The object to query. +
48950 * @param {Array|string} key The key to check. +
48951 * @returns {boolean} Returns `true` if `key` exists, else `false`. +
48952 */ +
48953 function baseHas(object, key) { +
48954 return object != null && hasOwnProperty.call(object, key); +
48955 } +
48956 +
48957 /** +
48958 * The base implementation of `_.hasIn` without support for deep paths. +
48959 * +
48960 * @private +
48961 * @param {Object} [object] The object to query. +
48962 * @param {Array|string} key The key to check. +
48963 * @returns {boolean} Returns `true` if `key` exists, else `false`. +
48964 */ +
48965 function baseHasIn(object, key) { +
48966 return object != null && key in Object(object); +
48967 } +
48968 +
48969 /** +
48970 * The base implementation of `_.inRange` which doesn't coerce arguments. +
48971 * +
48972 * @private +
48973 * @param {number} number The number to check. +
48974 * @param {number} start The start of the range. +
48975 * @param {number} end The end of the range. +
48976 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +
48977 */ +
48978 function baseInRange(number, start, end) { +
48979 return number >= nativeMin(start, end) && number < nativeMax(start, end); +
48980 } +
48981 +
48982 /** +
48983 * The base implementation of methods like `_.intersection`, without support +
48984 * for iteratee shorthands, that accepts an array of arrays to inspect. +
48985 * +
48986 * @private +
48987 * @param {Array} arrays The arrays to inspect. +
48988 * @param {Function} [iteratee] The iteratee invoked per element. +
48989 * @param {Function} [comparator] The comparator invoked per element. +
48990 * @returns {Array} Returns the new array of shared values. +
48991 */ +
48992 function baseIntersection(arrays, iteratee, comparator) { +
48993 var includes = comparator ? arrayIncludesWith : arrayIncludes, +
48994 length = arrays[0].length, +
48995 othLength = arrays.length, +
48996 othIndex = othLength, +
48997 caches = Array(othLength), +
48998 maxLength = Infinity, +
48999 result = []; +
49000 +
49001 while (othIndex--) { +
49002 var array = arrays[othIndex]; +
49003 if (othIndex && iteratee) { +
49004 array = arrayMap(array, baseUnary(iteratee)); +
49005 } +
49006 maxLength = nativeMin(array.length, maxLength); +
49007 caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) +
49008 ? new SetCache(othIndex && array) +
49009 : undefined; +
49010 } +
49011 array = arrays[0]; +
49012 +
49013 var index = -1, +
49014 seen = caches[0]; +
49015 +
49016 outer: +
49017 while (++index < length && result.length < maxLength) { +
49018 var value = array[index], +
49019 computed = iteratee ? iteratee(value) : value; +
49020 +
49021 value = (comparator || value !== 0) ? value : 0; +
49022 if (!(seen +
49023 ? cacheHas(seen, computed) +
49024 : includes(result, computed, comparator) +
49025 )) { +
49026 othIndex = othLength; +
49027 while (--othIndex) { +
49028 var cache = caches[othIndex]; +
49029 if (!(cache +
49030 ? cacheHas(cache, computed) +
49031 : includes(arrays[othIndex], computed, comparator)) +
49032 ) { +
49033 continue outer; +
49034 } +
49035 } +
49036 if (seen) { +
49037 seen.push(computed); +
49038 } +
49039 result.push(value); +
49040 } +
49041 } +
49042 return result; +
49043 } +
49044 +
49045 /** +
49046 * The base implementation of `_.invert` and `_.invertBy` which inverts +
49047 * `object` with values transformed by `iteratee` and set by `setter`. +
49048 * +
49049 * @private +
49050 * @param {Object} object The object to iterate over. +
49051 * @param {Function} setter The function to set `accumulator` values. +
49052 * @param {Function} iteratee The iteratee to transform values. +
49053 * @param {Object} accumulator The initial inverted object. +
49054 * @returns {Function} Returns `accumulator`. +
49055 */ +
49056 function baseInverter(object, setter, iteratee, accumulator) { +
49057 baseForOwn(object, function(value, key, object) { +
49058 setter(accumulator, iteratee(value), key, object); +
49059 }); +
49060 return accumulator; +
49061 } +
49062 +
49063 /** +
49064 * The base implementation of `_.invoke` without support for individual +
49065 * method arguments. +
49066 * +
49067 * @private +
49068 * @param {Object} object The object to query. +
49069 * @param {Array|string} path The path of the method to invoke. +
49070 * @param {Array} args The arguments to invoke the method with. +
49071 * @returns {*} Returns the result of the invoked method. +
49072 */ +
49073 function baseInvoke(object, path, args) { +
49074 path = castPath(path, object); +
49075 object = parent(object, path); +
49076 var func = object == null ? object : object[toKey(last(path))]; +
49077 return func == null ? undefined : apply(func, object, args); +
49078 } +
49079 +
49080 /** +
49081 * The base implementation of `_.isArguments`. +
49082 * +
49083 * @private +
49084 * @param {*} value The value to check. +
49085 * @returns {boolean} Returns `true` if `value` is an `arguments` object, +
49086 */ +
49087 function baseIsArguments(value) { +
49088 return isObjectLike(value) && baseGetTag(value) == argsTag; +
49089 } +
49090 +
49091 /** +
49092 * The base implementation of `_.isArrayBuffer` without Node.js optimizations. +
49093 * +
49094 * @private +
49095 * @param {*} value The value to check. +
49096 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +
49097 */ +
49098 function baseIsArrayBuffer(value) { +
49099 return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +
49100 } +
49101 +
49102 /** +
49103 * The base implementation of `_.isDate` without Node.js optimizations. +
49104 * +
49105 * @private +
49106 * @param {*} value The value to check. +
49107 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +
49108 */ +
49109 function baseIsDate(value) { +
49110 return isObjectLike(value) && baseGetTag(value) == dateTag; +
49111 } +
49112 +
49113 /** +
49114 * The base implementation of `_.isEqual` which supports partial comparisons +
49115 * and tracks traversed objects. +
49116 * +
49117 * @private +
49118 * @param {*} value The value to compare. +
49119 * @param {*} other The other value to compare. +
49120 * @param {boolean} bitmask The bitmask flags. +
49121 * 1 - Unordered comparison +
49122 * 2 - Partial comparison +
49123 * @param {Function} [customizer] The function to customize comparisons. +
49124 * @param {Object} [stack] Tracks traversed `value` and `other` objects. +
49125 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
49126 */ +
49127 function baseIsEqual(value, other, bitmask, customizer, stack) { +
49128 if (value === other) { +
49129 return true; +
49130 } +
49131 if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { +
49132 return value !== value && other !== other; +
49133 } +
49134 return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +
49135 } +
49136 +
49137 /** +
49138 * A specialized version of `baseIsEqual` for arrays and objects which performs +
49139 * deep comparisons and tracks traversed objects enabling objects with circular +
49140 * references to be compared. +
49141 * +
49142 * @private +
49143 * @param {Object} object The object to compare. +
49144 * @param {Object} other The other object to compare. +
49145 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
49146 * @param {Function} customizer The function to customize comparisons. +
49147 * @param {Function} equalFunc The function to determine equivalents of values. +
49148 * @param {Object} [stack] Tracks traversed `object` and `other` objects. +
49149 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
49150 */ +
49151 function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { +
49152 var objIsArr = isArray(object), +
49153 othIsArr = isArray(other), +
49154 objTag = objIsArr ? arrayTag : getTag(object), +
49155 othTag = othIsArr ? arrayTag : getTag(other); +
49156 +
49157 objTag = objTag == argsTag ? objectTag : objTag; +
49158 othTag = othTag == argsTag ? objectTag : othTag; +
49159 +
49160 var objIsObj = objTag == objectTag, +
49161 othIsObj = othTag == objectTag, +
49162 isSameTag = objTag == othTag; +
49163 +
49164 if (isSameTag && isBuffer(object)) { +
49165 if (!isBuffer(other)) { +
49166 return false; +
49167 } +
49168 objIsArr = true; +
49169 objIsObj = false; +
49170 } +
49171 if (isSameTag && !objIsObj) { +
49172 stack || (stack = new Stack); +
49173 return (objIsArr || isTypedArray(object)) +
49174 ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) +
49175 : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); +
49176 } +
49177 if (!(bitmask & COMPARE_PARTIAL_FLAG)) { +
49178 var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), +
49179 othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); +
49180 +
49181 if (objIsWrapped || othIsWrapped) { +
49182 var objUnwrapped = objIsWrapped ? object.value() : object, +
49183 othUnwrapped = othIsWrapped ? other.value() : other; +
49184 +
49185 stack || (stack = new Stack); +
49186 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); +
49187 } +
49188 } +
49189 if (!isSameTag) { +
49190 return false; +
49191 } +
49192 stack || (stack = new Stack); +
49193 return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +
49194 } +
49195 +
49196 /** +
49197 * The base implementation of `_.isMap` without Node.js optimizations. +
49198 * +
49199 * @private +
49200 * @param {*} value The value to check. +
49201 * @returns {boolean} Returns `true` if `value` is a map, else `false`. +
49202 */ +
49203 function baseIsMap(value) { +
49204 return isObjectLike(value) && getTag(value) == mapTag; +
49205 } +
49206 +
49207 /** +
49208 * The base implementation of `_.isMatch` without support for iteratee shorthands. +
49209 * +
49210 * @private +
49211 * @param {Object} object The object to inspect. +
49212 * @param {Object} source The object of property values to match. +
49213 * @param {Array} matchData The property names, values, and compare flags to match. +
49214 * @param {Function} [customizer] The function to customize comparisons. +
49215 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
49216 */ +
49217 function baseIsMatch(object, source, matchData, customizer) { +
49218 var index = matchData.length, +
49219 length = index, +
49220 noCustomizer = !customizer; +
49221 +
49222 if (object == null) { +
49223 return !length; +
49224 } +
49225 object = Object(object); +
49226 while (index--) { +
49227 var data = matchData[index]; +
49228 if ((noCustomizer && data[2]) +
49229 ? data[1] !== object[data[0]] +
49230 : !(data[0] in object) +
49231 ) { +
49232 return false; +
49233 } +
49234 } +
49235 while (++index < length) { +
49236 data = matchData[index]; +
49237 var key = data[0], +
49238 objValue = object[key], +
49239 srcValue = data[1]; +
49240 +
49241 if (noCustomizer && data[2]) { +
49242 if (objValue === undefined && !(key in object)) { +
49243 return false; +
49244 } +
49245 } else { +
49246 var stack = new Stack; +
49247 if (customizer) { +
49248 var result = customizer(objValue, srcValue, key, object, source, stack); +
49249 } +
49250 if (!(result === undefined +
49251 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) +
49252 : result +
49253 )) { +
49254 return false; +
49255 } +
49256 } +
49257 } +
49258 return true; +
49259 } +
49260 +
49261 /** +
49262 * The base implementation of `_.isNative` without bad shim checks. +
49263 * +
49264 * @private +
49265 * @param {*} value The value to check. +
49266 * @returns {boolean} Returns `true` if `value` is a native function, +
49267 * else `false`. +
49268 */ +
49269 function baseIsNative(value) { +
49270 if (!isObject(value) || isMasked(value)) { +
49271 return false; +
49272 } +
49273 var pattern = isFunction(value) ? reIsNative : reIsHostCtor; +
49274 return pattern.test(toSource(value)); +
49275 } +
49276 +
49277 /** +
49278 * The base implementation of `_.isRegExp` without Node.js optimizations. +
49279 * +
49280 * @private +
49281 * @param {*} value The value to check. +
49282 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +
49283 */ +
49284 function baseIsRegExp(value) { +
49285 return isObjectLike(value) && baseGetTag(value) == regexpTag; +
49286 } +
49287 +
49288 /** +
49289 * The base implementation of `_.isSet` without Node.js optimizations. +
49290 * +
49291 * @private +
49292 * @param {*} value The value to check. +
49293 * @returns {boolean} Returns `true` if `value` is a set, else `false`. +
49294 */ +
49295 function baseIsSet(value) { +
49296 return isObjectLike(value) && getTag(value) == setTag; +
49297 } +
49298 +
49299 /** +
49300 * The base implementation of `_.isTypedArray` without Node.js optimizations. +
49301 * +
49302 * @private +
49303 * @param {*} value The value to check. +
49304 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +
49305 */ +
49306 function baseIsTypedArray(value) { +
49307 return isObjectLike(value) && +
49308 isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +
49309 } +
49310 +
49311 /** +
49312 * The base implementation of `_.iteratee`. +
49313 * +
49314 * @private +
49315 * @param {*} [value=_.identity] The value to convert to an iteratee. +
49316 * @returns {Function} Returns the iteratee. +
49317 */ +
49318 function baseIteratee(value) { +
49319 // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. +
49320 // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. +
49321 if (typeof value == 'function') { +
49322 return value; +
49323 } +
49324 if (value == null) { +
49325 return identity; +
49326 } +
49327 if (typeof value == 'object') { +
49328 return isArray(value) +
49329 ? baseMatchesProperty(value[0], value[1]) +
49330 : baseMatches(value); +
49331 } +
49332 return property(value); +
49333 } +
49334 +
49335 /** +
49336 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. +
49337 * +
49338 * @private +
49339 * @param {Object} object The object to query. +
49340 * @returns {Array} Returns the array of property names. +
49341 */ +
49342 function baseKeys(object) { +
49343 if (!isPrototype(object)) { +
49344 return nativeKeys(object); +
49345 } +
49346 var result = []; +
49347 for (var key in Object(object)) { +
49348 if (hasOwnProperty.call(object, key) && key != 'constructor') { +
49349 result.push(key); +
49350 } +
49351 } +
49352 return result; +
49353 } +
49354 +
49355 /** +
49356 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. +
49357 * +
49358 * @private +
49359 * @param {Object} object The object to query. +
49360 * @returns {Array} Returns the array of property names. +
49361 */ +
49362 function baseKeysIn(object) { +
49363 if (!isObject(object)) { +
49364 return nativeKeysIn(object); +
49365 } +
49366 var isProto = isPrototype(object), +
49367 result = []; +
49368 +
49369 for (var key in object) { +
49370 if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { +
49371 result.push(key); +
49372 } +
49373 } +
49374 return result; +
49375 } +
49376 +
49377 /** +
49378 * The base implementation of `_.lt` which doesn't coerce arguments. +
49379 * +
49380 * @private +
49381 * @param {*} value The value to compare. +
49382 * @param {*} other The other value to compare. +
49383 * @returns {boolean} Returns `true` if `value` is less than `other`, +
49384 * else `false`. +
49385 */ +
49386 function baseLt(value, other) { +
49387 return value < other; +
49388 } +
49389 +
49390 /** +
49391 * The base implementation of `_.map` without support for iteratee shorthands. +
49392 * +
49393 * @private +
49394 * @param {Array|Object} collection The collection to iterate over. +
49395 * @param {Function} iteratee The function invoked per iteration. +
49396 * @returns {Array} Returns the new mapped array. +
49397 */ +
49398 function baseMap(collection, iteratee) { +
49399 var index = -1, +
49400 result = isArrayLike(collection) ? Array(collection.length) : []; +
49401 +
49402 baseEach(collection, function(value, key, collection) { +
49403 result[++index] = iteratee(value, key, collection); +
49404 }); +
49405 return result; +
49406 } +
49407 +
49408 /** +
49409 * The base implementation of `_.matches` which doesn't clone `source`. +
49410 * +
49411 * @private +
49412 * @param {Object} source The object of property values to match. +
49413 * @returns {Function} Returns the new spec function. +
49414 */ +
49415 function baseMatches(source) { +
49416 var matchData = getMatchData(source); +
49417 if (matchData.length == 1 && matchData[0][2]) { +
49418 return matchesStrictComparable(matchData[0][0], matchData[0][1]); +
49419 } +
49420 return function(object) { +
49421 return object === source || baseIsMatch(object, source, matchData); +
49422 }; +
49423 } +
49424 +
49425 /** +
49426 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. +
49427 * +
49428 * @private +
49429 * @param {string} path The path of the property to get. +
49430 * @param {*} srcValue The value to match. +
49431 * @returns {Function} Returns the new spec function. +
49432 */ +
49433 function baseMatchesProperty(path, srcValue) { +
49434 if (isKey(path) && isStrictComparable(srcValue)) { +
49435 return matchesStrictComparable(toKey(path), srcValue); +
49436 } +
49437 return function(object) { +
49438 var objValue = get(object, path); +
49439 return (objValue === undefined && objValue === srcValue) +
49440 ? hasIn(object, path) +
49441 : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); +
49442 }; +
49443 } +
49444 +
49445 /** +
49446 * The base implementation of `_.merge` without support for multiple sources. +
49447 * +
49448 * @private +
49449 * @param {Object} object The destination object. +
49450 * @param {Object} source The source object. +
49451 * @param {number} srcIndex The index of `source`. +
49452 * @param {Function} [customizer] The function to customize merged values. +
49453 * @param {Object} [stack] Tracks traversed source values and their merged +
49454 * counterparts. +
49455 */ +
49456 function baseMerge(object, source, srcIndex, customizer, stack) { +
49457 if (object === source) { +
49458 return; +
49459 } +
49460 baseFor(source, function(srcValue, key) { +
49461 if (isObject(srcValue)) { +
49462 stack || (stack = new Stack); +
49463 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); +
49464 } +
49465 else { +
49466 var newValue = customizer +
49467 ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) +
49468 : undefined; +
49469 +
49470 if (newValue === undefined) { +
49471 newValue = srcValue; +
49472 } +
49473 assignMergeValue(object, key, newValue); +
49474 } +
49475 }, keysIn); +
49476 } +
49477 +
49478 /** +
49479 * A specialized version of `baseMerge` for arrays and objects which performs +
49480 * deep merges and tracks traversed objects enabling objects with circular +
49481 * references to be merged. +
49482 * +
49483 * @private +
49484 * @param {Object} object The destination object. +
49485 * @param {Object} source The source object. +
49486 * @param {string} key The key of the value to merge. +
49487 * @param {number} srcIndex The index of `source`. +
49488 * @param {Function} mergeFunc The function to merge values. +
49489 * @param {Function} [customizer] The function to customize assigned values. +
49490 * @param {Object} [stack] Tracks traversed source values and their merged +
49491 * counterparts. +
49492 */ +
49493 function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { +
49494 var objValue = safeGet(object, key), +
49495 srcValue = safeGet(source, key), +
49496 stacked = stack.get(srcValue); +
49497 +
49498 if (stacked) { +
49499 assignMergeValue(object, key, stacked); +
49500 return; +
49501 } +
49502 var newValue = customizer +
49503 ? customizer(objValue, srcValue, (key + ''), object, source, stack) +
49504 : undefined; +
49505 +
49506 var isCommon = newValue === undefined; +
49507 +
49508 if (isCommon) { +
49509 var isArr = isArray(srcValue), +
49510 isBuff = !isArr && isBuffer(srcValue), +
49511 isTyped = !isArr && !isBuff && isTypedArray(srcValue); +
49512 +
49513 newValue = srcValue; +
49514 if (isArr || isBuff || isTyped) { +
49515 if (isArray(objValue)) { +
49516 newValue = objValue; +
49517 } +
49518 else if (isArrayLikeObject(objValue)) { +
49519 newValue = copyArray(objValue); +
49520 } +
49521 else if (isBuff) { +
49522 isCommon = false; +
49523 newValue = cloneBuffer(srcValue, true); +
49524 } +
49525 else if (isTyped) { +
49526 isCommon = false; +
49527 newValue = cloneTypedArray(srcValue, true); +
49528 } +
49529 else { +
49530 newValue = []; +
49531 } +
49532 } +
49533 else if (isPlainObject(srcValue) || isArguments(srcValue)) { +
49534 newValue = objValue; +
49535 if (isArguments(objValue)) { +
49536 newValue = toPlainObject(objValue); +
49537 } +
49538 else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { +
49539 newValue = initCloneObject(srcValue); +
49540 } +
49541 } +
49542 else { +
49543 isCommon = false; +
49544 } +
49545 } +
49546 if (isCommon) { +
49547 // Recursively merge objects and arrays (susceptible to call stack limits). +
49548 stack.set(srcValue, newValue); +
49549 mergeFunc(newValue, srcValue, srcIndex, customizer, stack); +
49550 stack['delete'](srcValue); +
49551 } +
49552 assignMergeValue(object, key, newValue); +
49553 } +
49554 +
49555 /** +
49556 * The base implementation of `_.nth` which doesn't coerce arguments. +
49557 * +
49558 * @private +
49559 * @param {Array} array The array to query. +
49560 * @param {number} n The index of the element to return. +
49561 * @returns {*} Returns the nth element of `array`. +
49562 */ +
49563 function baseNth(array, n) { +
49564 var length = array.length; +
49565 if (!length) { +
49566 return; +
49567 } +
49568 n += n < 0 ? length : 0; +
49569 return isIndex(n, length) ? array[n] : undefined; +
49570 } +
49571 +
49572 /** +
49573 * The base implementation of `_.orderBy` without param guards. +
49574 * +
49575 * @private +
49576 * @param {Array|Object} collection The collection to iterate over. +
49577 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. +
49578 * @param {string[]} orders The sort orders of `iteratees`. +
49579 * @returns {Array} Returns the new sorted array. +
49580 */ +
49581 function baseOrderBy(collection, iteratees, orders) { +
49582 var index = -1; +
49583 iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); +
49584 +
49585 var result = baseMap(collection, function(value, key, collection) { +
49586 var criteria = arrayMap(iteratees, function(iteratee) { +
49587 return iteratee(value); +
49588 }); +
49589 return { 'criteria': criteria, 'index': ++index, 'value': value }; +
49590 }); +
49591 +
49592 return baseSortBy(result, function(object, other) { +
49593 return compareMultiple(object, other, orders); +
49594 }); +
49595 } +
49596 +
49597 /** +
49598 * The base implementation of `_.pick` without support for individual +
49599 * property identifiers. +
49600 * +
49601 * @private +
49602 * @param {Object} object The source object. +
49603 * @param {string[]} paths The property paths to pick. +
49604 * @returns {Object} Returns the new object. +
49605 */ +
49606 function basePick(object, paths) { +
49607 return basePickBy(object, paths, function(value, path) { +
49608 return hasIn(object, path); +
49609 }); +
49610 } +
49611 +
49612 /** +
49613 * The base implementation of `_.pickBy` without support for iteratee shorthands. +
49614 * +
49615 * @private +
49616 * @param {Object} object The source object. +
49617 * @param {string[]} paths The property paths to pick. +
49618 * @param {Function} predicate The function invoked per property. +
49619 * @returns {Object} Returns the new object. +
49620 */ +
49621 function basePickBy(object, paths, predicate) { +
49622 var index = -1, +
49623 length = paths.length, +
49624 result = {}; +
49625 +
49626 while (++index < length) { +
49627 var path = paths[index], +
49628 value = baseGet(object, path); +
49629 +
49630 if (predicate(value, path)) { +
49631 baseSet(result, castPath(path, object), value); +
49632 } +
49633 } +
49634 return result; +
49635 } +
49636 +
49637 /** +
49638 * A specialized version of `baseProperty` which supports deep paths. +
49639 * +
49640 * @private +
49641 * @param {Array|string} path The path of the property to get. +
49642 * @returns {Function} Returns the new accessor function. +
49643 */ +
49644 function basePropertyDeep(path) { +
49645 return function(object) { +
49646 return baseGet(object, path); +
49647 }; +
49648 } +
49649 +
49650 /** +
49651 * The base implementation of `_.pullAllBy` without support for iteratee +
49652 * shorthands. +
49653 * +
49654 * @private +
49655 * @param {Array} array The array to modify. +
49656 * @param {Array} values The values to remove. +
49657 * @param {Function} [iteratee] The iteratee invoked per element. +
49658 * @param {Function} [comparator] The comparator invoked per element. +
49659 * @returns {Array} Returns `array`. +
49660 */ +
49661 function basePullAll(array, values, iteratee, comparator) { +
49662 var indexOf = comparator ? baseIndexOfWith : baseIndexOf, +
49663 index = -1, +
49664 length = values.length, +
49665 seen = array; +
49666 +
49667 if (array === values) { +
49668 values = copyArray(values); +
49669 } +
49670 if (iteratee) { +
49671 seen = arrayMap(array, baseUnary(iteratee)); +
49672 } +
49673 while (++index < length) { +
49674 var fromIndex = 0, +
49675 value = values[index], +
49676 computed = iteratee ? iteratee(value) : value; +
49677 +
49678 while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { +
49679 if (seen !== array) { +
49680 splice.call(seen, fromIndex, 1); +
49681 } +
49682 splice.call(array, fromIndex, 1); +
49683 } +
49684 } +
49685 return array; +
49686 } +
49687 +
49688 /** +
49689 * The base implementation of `_.pullAt` without support for individual +
49690 * indexes or capturing the removed elements. +
49691 * +
49692 * @private +
49693 * @param {Array} array The array to modify. +
49694 * @param {number[]} indexes The indexes of elements to remove. +
49695 * @returns {Array} Returns `array`. +
49696 */ +
49697 function basePullAt(array, indexes) { +
49698 var length = array ? indexes.length : 0, +
49699 lastIndex = length - 1; +
49700 +
49701 while (length--) { +
49702 var index = indexes[length]; +
49703 if (length == lastIndex || index !== previous) { +
49704 var previous = index; +
49705 if (isIndex(index)) { +
49706 splice.call(array, index, 1); +
49707 } else { +
49708 baseUnset(array, index); +
49709 } +
49710 } +
49711 } +
49712 return array; +
49713 } +
49714 +
49715 /** +
49716 * The base implementation of `_.random` without support for returning +
49717 * floating-point numbers. +
49718 * +
49719 * @private +
49720 * @param {number} lower The lower bound. +
49721 * @param {number} upper The upper bound. +
49722 * @returns {number} Returns the random number. +
49723 */ +
49724 function baseRandom(lower, upper) { +
49725 return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +
49726 } +
49727 +
49728 /** +
49729 * The base implementation of `_.range` and `_.rangeRight` which doesn't +
49730 * coerce arguments. +
49731 * +
49732 * @private +
49733 * @param {number} start The start of the range. +
49734 * @param {number} end The end of the range. +
49735 * @param {number} step The value to increment or decrement by. +
49736 * @param {boolean} [fromRight] Specify iterating from right to left. +
49737 * @returns {Array} Returns the range of numbers. +
49738 */ +
49739 function baseRange(start, end, step, fromRight) { +
49740 var index = -1, +
49741 length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), +
49742 result = Array(length); +
49743 +
49744 while (length--) { +
49745 result[fromRight ? length : ++index] = start; +
49746 start += step; +
49747 } +
49748 return result; +
49749 } +
49750 +
49751 /** +
49752 * The base implementation of `_.repeat` which doesn't coerce arguments. +
49753 * +
49754 * @private +
49755 * @param {string} string The string to repeat. +
49756 * @param {number} n The number of times to repeat the string. +
49757 * @returns {string} Returns the repeated string. +
49758 */ +
49759 function baseRepeat(string, n) { +
49760 var result = ''; +
49761 if (!string || n < 1 || n > MAX_SAFE_INTEGER) { +
49762 return result; +
49763 } +
49764 // Leverage the exponentiation by squaring algorithm for a faster repeat. +
49765 // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. +
49766 do { +
49767 if (n % 2) { +
49768 result += string; +
49769 } +
49770 n = nativeFloor(n / 2); +
49771 if (n) { +
49772 string += string; +
49773 } +
49774 } while (n); +
49775 +
49776 return result; +
49777 } +
49778 +
49779 /** +
49780 * The base implementation of `_.rest` which doesn't validate or coerce arguments. +
49781 * +
49782 * @private +
49783 * @param {Function} func The function to apply a rest parameter to. +
49784 * @param {number} [start=func.length-1] The start position of the rest parameter. +
49785 * @returns {Function} Returns the new function. +
49786 */ +
49787 function baseRest(func, start) { +
49788 return setToString(overRest(func, start, identity), func + ''); +
49789 } +
49790 +
49791 /** +
49792 * The base implementation of `_.sample`. +
49793 * +
49794 * @private +
49795 * @param {Array|Object} collection The collection to sample. +
49796 * @returns {*} Returns the random element. +
49797 */ +
49798 function baseSample(collection) { +
49799 return arraySample(values(collection)); +
49800 } +
49801 +
49802 /** +
49803 * The base implementation of `_.sampleSize` without param guards. +
49804 * +
49805 * @private +
49806 * @param {Array|Object} collection The collection to sample. +
49807 * @param {number} n The number of elements to sample. +
49808 * @returns {Array} Returns the random elements. +
49809 */ +
49810 function baseSampleSize(collection, n) { +
49811 var array = values(collection); +
49812 return shuffleSelf(array, baseClamp(n, 0, array.length)); +
49813 } +
49814 +
49815 /** +
49816 * The base implementation of `_.set`. +
49817 * +
49818 * @private +
49819 * @param {Object} object The object to modify. +
49820 * @param {Array|string} path The path of the property to set. +
49821 * @param {*} value The value to set. +
49822 * @param {Function} [customizer] The function to customize path creation. +
49823 * @returns {Object} Returns `object`. +
49824 */ +
49825 function baseSet(object, path, value, customizer) { +
49826 if (!isObject(object)) { +
49827 return object; +
49828 } +
49829 path = castPath(path, object); +
49830 +
49831 var index = -1, +
49832 length = path.length, +
49833 lastIndex = length - 1, +
49834 nested = object; +
49835 +
49836 while (nested != null && ++index < length) { +
49837 var key = toKey(path[index]), +
49838 newValue = value; +
49839 +
49840 if (index != lastIndex) { +
49841 var objValue = nested[key]; +
49842 newValue = customizer ? customizer(objValue, key, nested) : undefined; +
49843 if (newValue === undefined) { +
49844 newValue = isObject(objValue) +
49845 ? objValue +
49846 : (isIndex(path[index + 1]) ? [] : {}); +
49847 } +
49848 } +
49849 assignValue(nested, key, newValue); +
49850 nested = nested[key]; +
49851 } +
49852 return object; +
49853 } +
49854 +
49855 /** +
49856 * The base implementation of `setData` without support for hot loop shorting. +
49857 * +
49858 * @private +
49859 * @param {Function} func The function to associate metadata with. +
49860 * @param {*} data The metadata. +
49861 * @returns {Function} Returns `func`. +
49862 */ +
49863 var baseSetData = !metaMap ? identity : function(func, data) { +
49864 metaMap.set(func, data); +
49865 return func; +
49866 }; +
49867 +
49868 /** +
49869 * The base implementation of `setToString` without support for hot loop shorting. +
49870 * +
49871 * @private +
49872 * @param {Function} func The function to modify. +
49873 * @param {Function} string The `toString` result. +
49874 * @returns {Function} Returns `func`. +
49875 */ +
49876 var baseSetToString = !defineProperty ? identity : function(func, string) { +
49877 return defineProperty(func, 'toString', { +
49878 'configurable': true, +
49879 'enumerable': false, +
49880 'value': constant(string), +
49881 'writable': true +
49882 }); +
49883 }; +
49884 +
49885 /** +
49886 * The base implementation of `_.shuffle`. +
49887 * +
49888 * @private +
49889 * @param {Array|Object} collection The collection to shuffle. +
49890 * @returns {Array} Returns the new shuffled array. +
49891 */ +
49892 function baseShuffle(collection) { +
49893 return shuffleSelf(values(collection)); +
49894 } +
49895 +
49896 /** +
49897 * The base implementation of `_.slice` without an iteratee call guard. +
49898 * +
49899 * @private +
49900 * @param {Array} array The array to slice. +
49901 * @param {number} [start=0] The start position. +
49902 * @param {number} [end=array.length] The end position. +
49903 * @returns {Array} Returns the slice of `array`. +
49904 */ +
49905 function baseSlice(array, start, end) { +
49906 var index = -1, +
49907 length = array.length; +
49908 +
49909 if (start < 0) { +
49910 start = -start > length ? 0 : (length + start); +
49911 } +
49912 end = end > length ? length : end; +
49913 if (end < 0) { +
49914 end += length; +
49915 } +
49916 length = start > end ? 0 : ((end - start) >>> 0); +
49917 start >>>= 0; +
49918 +
49919 var result = Array(length); +
49920 while (++index < length) { +
49921 result[index] = array[index + start]; +
49922 } +
49923 return result; +
49924 } +
49925 +
49926 /** +
49927 * The base implementation of `_.some` without support for iteratee shorthands. +
49928 * +
49929 * @private +
49930 * @param {Array|Object} collection The collection to iterate over. +
49931 * @param {Function} predicate The function invoked per iteration. +
49932 * @returns {boolean} Returns `true` if any element passes the predicate check, +
49933 * else `false`. +
49934 */ +
49935 function baseSome(collection, predicate) { +
49936 var result; +
49937 +
49938 baseEach(collection, function(value, index, collection) { +
49939 result = predicate(value, index, collection); +
49940 return !result; +
49941 }); +
49942 return !!result; +
49943 } +
49944 +
49945 /** +
49946 * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which +
49947 * performs a binary search of `array` to determine the index at which `value` +
49948 * should be inserted into `array` in order to maintain its sort order. +
49949 * +
49950 * @private +
49951 * @param {Array} array The sorted array to inspect. +
49952 * @param {*} value The value to evaluate. +
49953 * @param {boolean} [retHighest] Specify returning the highest qualified index. +
49954 * @returns {number} Returns the index at which `value` should be inserted +
49955 * into `array`. +
49956 */ +
49957 function baseSortedIndex(array, value, retHighest) { +
49958 var low = 0, +
49959 high = array == null ? low : array.length; +
49960 +
49961 if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { +
49962 while (low < high) { +
49963 var mid = (low + high) >>> 1, +
49964 computed = array[mid]; +
49965 +
49966 if (computed !== null && !isSymbol(computed) && +
49967 (retHighest ? (computed <= value) : (computed < value))) { +
49968 low = mid + 1; +
49969 } else { +
49970 high = mid; +
49971 } +
49972 } +
49973 return high; +
49974 } +
49975 return baseSortedIndexBy(array, value, identity, retHighest); +
49976 } +
49977 +
49978 /** +
49979 * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` +
49980 * which invokes `iteratee` for `value` and each element of `array` to compute +
49981 * their sort ranking. The iteratee is invoked with one argument; (value). +
49982 * +
49983 * @private +
49984 * @param {Array} array The sorted array to inspect. +
49985 * @param {*} value The value to evaluate. +
49986 * @param {Function} iteratee The iteratee invoked per element. +
49987 * @param {boolean} [retHighest] Specify returning the highest qualified index. +
49988 * @returns {number} Returns the index at which `value` should be inserted +
49989 * into `array`. +
49990 */ +
49991 function baseSortedIndexBy(array, value, iteratee, retHighest) { +
49992 value = iteratee(value); +
49993 +
49994 var low = 0, +
49995 high = array == null ? 0 : array.length, +
49996 valIsNaN = value !== value, +
49997 valIsNull = value === null, +
49998 valIsSymbol = isSymbol(value), +
49999 valIsUndefined = value === undefined; +
50000 +
50001 while (low < high) { +
50002 var mid = nativeFloor((low + high) / 2), +
50003 computed = iteratee(array[mid]), +
50004 othIsDefined = computed !== undefined, +
50005 othIsNull = computed === null, +
50006 othIsReflexive = computed === computed, +
50007 othIsSymbol = isSymbol(computed); +
50008 +
50009 if (valIsNaN) { +
50010 var setLow = retHighest || othIsReflexive; +
50011 } else if (valIsUndefined) { +
50012 setLow = othIsReflexive && (retHighest || othIsDefined); +
50013 } else if (valIsNull) { +
50014 setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); +
50015 } else if (valIsSymbol) { +
50016 setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); +
50017 } else if (othIsNull || othIsSymbol) { +
50018 setLow = false; +
50019 } else { +
50020 setLow = retHighest ? (computed <= value) : (computed < value); +
50021 } +
50022 if (setLow) { +
50023 low = mid + 1; +
50024 } else { +
50025 high = mid; +
50026 } +
50027 } +
50028 return nativeMin(high, MAX_ARRAY_INDEX); +
50029 } +
50030 +
50031 /** +
50032 * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without +
50033 * support for iteratee shorthands. +
50034 * +
50035 * @private +
50036 * @param {Array} array The array to inspect. +
50037 * @param {Function} [iteratee] The iteratee invoked per element. +
50038 * @returns {Array} Returns the new duplicate free array. +
50039 */ +
50040 function baseSortedUniq(array, iteratee) { +
50041 var index = -1, +
50042 length = array.length, +
50043 resIndex = 0, +
50044 result = []; +
50045 +
50046 while (++index < length) { +
50047 var value = array[index], +
50048 computed = iteratee ? iteratee(value) : value; +
50049 +
50050 if (!index || !eq(computed, seen)) { +
50051 var seen = computed; +
50052 result[resIndex++] = value === 0 ? 0 : value; +
50053 } +
50054 } +
50055 return result; +
50056 } +
50057 +
50058 /** +
50059 * The base implementation of `_.toNumber` which doesn't ensure correct +
50060 * conversions of binary, hexadecimal, or octal string values. +
50061 * +
50062 * @private +
50063 * @param {*} value The value to process. +
50064 * @returns {number} Returns the number. +
50065 */ +
50066 function baseToNumber(value) { +
50067 if (typeof value == 'number') { +
50068 return value; +
50069 } +
50070 if (isSymbol(value)) { +
50071 return NAN; +
50072 } +
50073 return +value; +
50074 } +
50075 +
50076 /** +
50077 * The base implementation of `_.toString` which doesn't convert nullish +
50078 * values to empty strings. +
50079 * +
50080 * @private +
50081 * @param {*} value The value to process. +
50082 * @returns {string} Returns the string. +
50083 */ +
50084 function baseToString(value) { +
50085 // Exit early for strings to avoid a performance hit in some environments. +
50086 if (typeof value == 'string') { +
50087 return value; +
50088 } +
50089 if (isArray(value)) { +
50090 // Recursively convert values (susceptible to call stack limits). +
50091 return arrayMap(value, baseToString) + ''; +
50092 } +
50093 if (isSymbol(value)) { +
50094 return symbolToString ? symbolToString.call(value) : ''; +
50095 } +
50096 var result = (value + ''); +
50097 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +
50098 } +
50099 +
50100 /** +
50101 * The base implementation of `_.uniqBy` without support for iteratee shorthands. +
50102 * +
50103 * @private +
50104 * @param {Array} array The array to inspect. +
50105 * @param {Function} [iteratee] The iteratee invoked per element. +
50106 * @param {Function} [comparator] The comparator invoked per element. +
50107 * @returns {Array} Returns the new duplicate free array. +
50108 */ +
50109 function baseUniq(array, iteratee, comparator) { +
50110 var index = -1, +
50111 includes = arrayIncludes, +
50112 length = array.length, +
50113 isCommon = true, +
50114 result = [], +
50115 seen = result; +
50116 +
50117 if (comparator) { +
50118 isCommon = false; +
50119 includes = arrayIncludesWith; +
50120 } +
50121 else if (length >= LARGE_ARRAY_SIZE) { +
50122 var set = iteratee ? null : createSet(array); +
50123 if (set) { +
50124 return setToArray(set); +
50125 } +
50126 isCommon = false; +
50127 includes = cacheHas; +
50128 seen = new SetCache; +
50129 } +
50130 else { +
50131 seen = iteratee ? [] : result; +
50132 } +
50133 outer: +
50134 while (++index < length) { +
50135 var value = array[index], +
50136 computed = iteratee ? iteratee(value) : value; +
50137 +
50138 value = (comparator || value !== 0) ? value : 0; +
50139 if (isCommon && computed === computed) { +
50140 var seenIndex = seen.length; +
50141 while (seenIndex--) { +
50142 if (seen[seenIndex] === computed) { +
50143 continue outer; +
50144 } +
50145 } +
50146 if (iteratee) { +
50147 seen.push(computed); +
50148 } +
50149 result.push(value); +
50150 } +
50151 else if (!includes(seen, computed, comparator)) { +
50152 if (seen !== result) { +
50153 seen.push(computed); +
50154 } +
50155 result.push(value); +
50156 } +
50157 } +
50158 return result; +
50159 } +
50160 +
50161 /** +
50162 * The base implementation of `_.unset`. +
50163 * +
50164 * @private +
50165 * @param {Object} object The object to modify. +
50166 * @param {Array|string} path The property path to unset. +
50167 * @returns {boolean} Returns `true` if the property is deleted, else `false`. +
50168 */ +
50169 function baseUnset(object, path) { +
50170 path = castPath(path, object); +
50171 object = parent(object, path); +
50172 return object == null || delete object[toKey(last(path))]; +
50173 } +
50174 +
50175 /** +
50176 * The base implementation of `_.update`. +
50177 * +
50178 * @private +
50179 * @param {Object} object The object to modify. +
50180 * @param {Array|string} path The path of the property to update. +
50181 * @param {Function} updater The function to produce the updated value. +
50182 * @param {Function} [customizer] The function to customize path creation. +
50183 * @returns {Object} Returns `object`. +
50184 */ +
50185 function baseUpdate(object, path, updater, customizer) { +
50186 return baseSet(object, path, updater(baseGet(object, path)), customizer); +
50187 } +
50188 +
50189 /** +
50190 * The base implementation of methods like `_.dropWhile` and `_.takeWhile` +
50191 * without support for iteratee shorthands. +
50192 * +
50193 * @private +
50194 * @param {Array} array The array to query. +
50195 * @param {Function} predicate The function invoked per iteration. +
50196 * @param {boolean} [isDrop] Specify dropping elements instead of taking them. +
50197 * @param {boolean} [fromRight] Specify iterating from right to left. +
50198 * @returns {Array} Returns the slice of `array`. +
50199 */ +
50200 function baseWhile(array, predicate, isDrop, fromRight) { +
50201 var length = array.length, +
50202 index = fromRight ? length : -1; +
50203 +
50204 while ((fromRight ? index-- : ++index < length) && +
50205 predicate(array[index], index, array)) {} +
50206 +
50207 return isDrop +
50208 ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) +
50209 : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +
50210 } +
50211 +
50212 /** +
50213 * The base implementation of `wrapperValue` which returns the result of +
50214 * performing a sequence of actions on the unwrapped `value`, where each +
50215 * successive action is supplied the return value of the previous. +
50216 * +
50217 * @private +
50218 * @param {*} value The unwrapped value. +
50219 * @param {Array} actions Actions to perform to resolve the unwrapped value. +
50220 * @returns {*} Returns the resolved value. +
50221 */ +
50222 function baseWrapperValue(value, actions) { +
50223 var result = value; +
50224 if (result instanceof LazyWrapper) { +
50225 result = result.value(); +
50226 } +
50227 return arrayReduce(actions, function(result, action) { +
50228 return action.func.apply(action.thisArg, arrayPush([result], action.args)); +
50229 }, result); +
50230 } +
50231 +
50232 /** +
50233 * The base implementation of methods like `_.xor`, without support for +
50234 * iteratee shorthands, that accepts an array of arrays to inspect. +
50235 * +
50236 * @private +
50237 * @param {Array} arrays The arrays to inspect. +
50238 * @param {Function} [iteratee] The iteratee invoked per element. +
50239 * @param {Function} [comparator] The comparator invoked per element. +
50240 * @returns {Array} Returns the new array of values. +
50241 */ +
50242 function baseXor(arrays, iteratee, comparator) { +
50243 var length = arrays.length; +
50244 if (length < 2) { +
50245 return length ? baseUniq(arrays[0]) : []; +
50246 } +
50247 var index = -1, +
50248 result = Array(length); +
50249 +
50250 while (++index < length) { +
50251 var array = arrays[index], +
50252 othIndex = -1; +
50253 +
50254 while (++othIndex < length) { +
50255 if (othIndex != index) { +
50256 result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); +
50257 } +
50258 } +
50259 } +
50260 return baseUniq(baseFlatten(result, 1), iteratee, comparator); +
50261 } +
50262 +
50263 /** +
50264 * This base implementation of `_.zipObject` which assigns values using `assignFunc`. +
50265 * +
50266 * @private +
50267 * @param {Array} props The property identifiers. +
50268 * @param {Array} values The property values. +
50269 * @param {Function} assignFunc The function to assign values. +
50270 * @returns {Object} Returns the new object. +
50271 */ +
50272 function baseZipObject(props, values, assignFunc) { +
50273 var index = -1, +
50274 length = props.length, +
50275 valsLength = values.length, +
50276 result = {}; +
50277 +
50278 while (++index < length) { +
50279 var value = index < valsLength ? values[index] : undefined; +
50280 assignFunc(result, props[index], value); +
50281 } +
50282 return result; +
50283 } +
50284 +
50285 /** +
50286 * Casts `value` to an empty array if it's not an array like object. +
50287 * +
50288 * @private +
50289 * @param {*} value The value to inspect. +
50290 * @returns {Array|Object} Returns the cast array-like object. +
50291 */ +
50292 function castArrayLikeObject(value) { +
50293 return isArrayLikeObject(value) ? value : []; +
50294 } +
50295 +
50296 /** +
50297 * Casts `value` to `identity` if it's not a function. +
50298 * +
50299 * @private +
50300 * @param {*} value The value to inspect. +
50301 * @returns {Function} Returns cast function. +
50302 */ +
50303 function castFunction(value) { +
50304 return typeof value == 'function' ? value : identity; +
50305 } +
50306 +
50307 /** +
50308 * Casts `value` to a path array if it's not one. +
50309 * +
50310 * @private +
50311 * @param {*} value The value to inspect. +
50312 * @param {Object} [object] The object to query keys on. +
50313 * @returns {Array} Returns the cast property path array. +
50314 */ +
50315 function castPath(value, object) { +
50316 if (isArray(value)) { +
50317 return value; +
50318 } +
50319 return isKey(value, object) ? [value] : stringToPath(toString(value)); +
50320 } +
50321 +
50322 /** +
50323 * A `baseRest` alias which can be replaced with `identity` by module +
50324 * replacement plugins. +
50325 * +
50326 * @private +
50327 * @type {Function} +
50328 * @param {Function} func The function to apply a rest parameter to. +
50329 * @returns {Function} Returns the new function. +
50330 */ +
50331 var castRest = baseRest; +
50332 +
50333 /** +
50334 * Casts `array` to a slice if it's needed. +
50335 * +
50336 * @private +
50337 * @param {Array} array The array to inspect. +
50338 * @param {number} start The start position. +
50339 * @param {number} [end=array.length] The end position. +
50340 * @returns {Array} Returns the cast slice. +
50341 */ +
50342 function castSlice(array, start, end) { +
50343 var length = array.length; +
50344 end = end === undefined ? length : end; +
50345 return (!start && end >= length) ? array : baseSlice(array, start, end); +
50346 } +
50347 +
50348 /** +
50349 * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). +
50350 * +
50351 * @private +
50352 * @param {number|Object} id The timer id or timeout object of the timer to clear. +
50353 */ +
50354 var clearTimeout = ctxClearTimeout || function(id) { +
50355 return root.clearTimeout(id); +
50356 }; +
50357 +
50358 /** +
50359 * Creates a clone of `buffer`. +
50360 * +
50361 * @private +
50362 * @param {Buffer} buffer The buffer to clone. +
50363 * @param {boolean} [isDeep] Specify a deep clone. +
50364 * @returns {Buffer} Returns the cloned buffer. +
50365 */ +
50366 function cloneBuffer(buffer, isDeep) { +
50367 if (isDeep) { +
50368 return buffer.slice(); +
50369 } +
50370 var length = buffer.length, +
50371 result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); +
50372 +
50373 buffer.copy(result); +
50374 return result; +
50375 } +
50376 +
50377 /** +
50378 * Creates a clone of `arrayBuffer`. +
50379 * +
50380 * @private +
50381 * @param {ArrayBuffer} arrayBuffer The array buffer to clone. +
50382 * @returns {ArrayBuffer} Returns the cloned array buffer. +
50383 */ +
50384 function cloneArrayBuffer(arrayBuffer) { +
50385 var result = new arrayBuffer.constructor(arrayBuffer.byteLength); +
50386 new Uint8Array(result).set(new Uint8Array(arrayBuffer)); +
50387 return result; +
50388 } +
50389 +
50390 /** +
50391 * Creates a clone of `dataView`. +
50392 * +
50393 * @private +
50394 * @param {Object} dataView The data view to clone. +
50395 * @param {boolean} [isDeep] Specify a deep clone. +
50396 * @returns {Object} Returns the cloned data view. +
50397 */ +
50398 function cloneDataView(dataView, isDeep) { +
50399 var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; +
50400 return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +
50401 } +
50402 +
50403 /** +
50404 * Creates a clone of `regexp`. +
50405 * +
50406 * @private +
50407 * @param {Object} regexp The regexp to clone. +
50408 * @returns {Object} Returns the cloned regexp. +
50409 */ +
50410 function cloneRegExp(regexp) { +
50411 var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); +
50412 result.lastIndex = regexp.lastIndex; +
50413 return result; +
50414 } +
50415 +
50416 /** +
50417 * Creates a clone of the `symbol` object. +
50418 * +
50419 * @private +
50420 * @param {Object} symbol The symbol object to clone. +
50421 * @returns {Object} Returns the cloned symbol object. +
50422 */ +
50423 function cloneSymbol(symbol) { +
50424 return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +
50425 } +
50426 +
50427 /** +
50428 * Creates a clone of `typedArray`. +
50429 * +
50430 * @private +
50431 * @param {Object} typedArray The typed array to clone. +
50432 * @param {boolean} [isDeep] Specify a deep clone. +
50433 * @returns {Object} Returns the cloned typed array. +
50434 */ +
50435 function cloneTypedArray(typedArray, isDeep) { +
50436 var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; +
50437 return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +
50438 } +
50439 +
50440 /** +
50441 * Compares values to sort them in ascending order. +
50442 * +
50443 * @private +
50444 * @param {*} value The value to compare. +
50445 * @param {*} other The other value to compare. +
50446 * @returns {number} Returns the sort order indicator for `value`. +
50447 */ +
50448 function compareAscending(value, other) { +
50449 if (value !== other) { +
50450 var valIsDefined = value !== undefined, +
50451 valIsNull = value === null, +
50452 valIsReflexive = value === value, +
50453 valIsSymbol = isSymbol(value); +
50454 +
50455 var othIsDefined = other !== undefined, +
50456 othIsNull = other === null, +
50457 othIsReflexive = other === other, +
50458 othIsSymbol = isSymbol(other); +
50459 +
50460 if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || +
50461 (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || +
50462 (valIsNull && othIsDefined && othIsReflexive) || +
50463 (!valIsDefined && othIsReflexive) || +
50464 !valIsReflexive) { +
50465 return 1; +
50466 } +
50467 if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || +
50468 (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || +
50469 (othIsNull && valIsDefined && valIsReflexive) || +
50470 (!othIsDefined && valIsReflexive) || +
50471 !othIsReflexive) { +
50472 return -1; +
50473 } +
50474 } +
50475 return 0; +
50476 } +
50477 +
50478 /** +
50479 * Used by `_.orderBy` to compare multiple properties of a value to another +
50480 * and stable sort them. +
50481 * +
50482 * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, +
50483 * specify an order of "desc" for descending or "asc" for ascending sort order +
50484 * of corresponding values. +
50485 * +
50486 * @private +
50487 * @param {Object} object The object to compare. +
50488 * @param {Object} other The other object to compare. +
50489 * @param {boolean[]|string[]} orders The order to sort by for each property. +
50490 * @returns {number} Returns the sort order indicator for `object`. +
50491 */ +
50492 function compareMultiple(object, other, orders) { +
50493 var index = -1, +
50494 objCriteria = object.criteria, +
50495 othCriteria = other.criteria, +
50496 length = objCriteria.length, +
50497 ordersLength = orders.length; +
50498 +
50499 while (++index < length) { +
50500 var result = compareAscending(objCriteria[index], othCriteria[index]); +
50501 if (result) { +
50502 if (index >= ordersLength) { +
50503 return result; +
50504 } +
50505 var order = orders[index]; +
50506 return result * (order == 'desc' ? -1 : 1); +
50507 } +
50508 } +
50509 // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications +
50510 // that causes it, under certain circumstances, to provide the same value for +
50511 // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 +
50512 // for more details. +
50513 // +
50514 // This also ensures a stable sort in V8 and other engines. +
50515 // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. +
50516 return object.index - other.index; +
50517 } +
50518 +
50519 /** +
50520 * Creates an array that is the composition of partially applied arguments, +
50521 * placeholders, and provided arguments into a single array of arguments. +
50522 * +
50523 * @private +
50524 * @param {Array} args The provided arguments. +
50525 * @param {Array} partials The arguments to prepend to those provided. +
50526 * @param {Array} holders The `partials` placeholder indexes. +
50527 * @params {boolean} [isCurried] Specify composing for a curried function. +
50528 * @returns {Array} Returns the new array of composed arguments. +
50529 */ +
50530 function composeArgs(args, partials, holders, isCurried) { +
50531 var argsIndex = -1, +
50532 argsLength = args.length, +
50533 holdersLength = holders.length, +
50534 leftIndex = -1, +
50535 leftLength = partials.length, +
50536 rangeLength = nativeMax(argsLength - holdersLength, 0), +
50537 result = Array(leftLength + rangeLength), +
50538 isUncurried = !isCurried; +
50539 +
50540 while (++leftIndex < leftLength) { +
50541 result[leftIndex] = partials[leftIndex]; +
50542 } +
50543 while (++argsIndex < holdersLength) { +
50544 if (isUncurried || argsIndex < argsLength) { +
50545 result[holders[argsIndex]] = args[argsIndex]; +
50546 } +
50547 } +
50548 while (rangeLength--) { +
50549 result[leftIndex++] = args[argsIndex++]; +
50550 } +
50551 return result; +
50552 } +
50553 +
50554 /** +
50555 * This function is like `composeArgs` except that the arguments composition +
50556 * is tailored for `_.partialRight`. +
50557 * +
50558 * @private +
50559 * @param {Array} args The provided arguments. +
50560 * @param {Array} partials The arguments to append to those provided. +
50561 * @param {Array} holders The `partials` placeholder indexes. +
50562 * @params {boolean} [isCurried] Specify composing for a curried function. +
50563 * @returns {Array} Returns the new array of composed arguments. +
50564 */ +
50565 function composeArgsRight(args, partials, holders, isCurried) { +
50566 var argsIndex = -1, +
50567 argsLength = args.length, +
50568 holdersIndex = -1, +
50569 holdersLength = holders.length, +
50570 rightIndex = -1, +
50571 rightLength = partials.length, +
50572 rangeLength = nativeMax(argsLength - holdersLength, 0), +
50573 result = Array(rangeLength + rightLength), +
50574 isUncurried = !isCurried; +
50575 +
50576 while (++argsIndex < rangeLength) { +
50577 result[argsIndex] = args[argsIndex]; +
50578 } +
50579 var offset = argsIndex; +
50580 while (++rightIndex < rightLength) { +
50581 result[offset + rightIndex] = partials[rightIndex]; +
50582 } +
50583 while (++holdersIndex < holdersLength) { +
50584 if (isUncurried || argsIndex < argsLength) { +
50585 result[offset + holders[holdersIndex]] = args[argsIndex++]; +
50586 } +
50587 } +
50588 return result; +
50589 } +
50590 +
50591 /** +
50592 * Copies the values of `source` to `array`. +
50593 * +
50594 * @private +
50595 * @param {Array} source The array to copy values from. +
50596 * @param {Array} [array=[]] The array to copy values to. +
50597 * @returns {Array} Returns `array`. +
50598 */ +
50599 function copyArray(source, array) { +
50600 var index = -1, +
50601 length = source.length; +
50602 +
50603 array || (array = Array(length)); +
50604 while (++index < length) { +
50605 array[index] = source[index]; +
50606 } +
50607 return array; +
50608 } +
50609 +
50610 /** +
50611 * Copies properties of `source` to `object`. +
50612 * +
50613 * @private +
50614 * @param {Object} source The object to copy properties from. +
50615 * @param {Array} props The property identifiers to copy. +
50616 * @param {Object} [object={}] The object to copy properties to. +
50617 * @param {Function} [customizer] The function to customize copied values. +
50618 * @returns {Object} Returns `object`. +
50619 */ +
50620 function copyObject(source, props, object, customizer) { +
50621 var isNew = !object; +
50622 object || (object = {}); +
50623 +
50624 var index = -1, +
50625 length = props.length; +
50626 +
50627 while (++index < length) { +
50628 var key = props[index]; +
50629 +
50630 var newValue = customizer +
50631 ? customizer(object[key], source[key], key, object, source) +
50632 : undefined; +
50633 +
50634 if (newValue === undefined) { +
50635 newValue = source[key]; +
50636 } +
50637 if (isNew) { +
50638 baseAssignValue(object, key, newValue); +
50639 } else { +
50640 assignValue(object, key, newValue); +
50641 } +
50642 } +
50643 return object; +
50644 } +
50645 +
50646 /** +
50647 * Copies own symbols of `source` to `object`. +
50648 * +
50649 * @private +
50650 * @param {Object} source The object to copy symbols from. +
50651 * @param {Object} [object={}] The object to copy symbols to. +
50652 * @returns {Object} Returns `object`. +
50653 */ +
50654 function copySymbols(source, object) { +
50655 return copyObject(source, getSymbols(source), object); +
50656 } +
50657 +
50658 /** +
50659 * Copies own and inherited symbols of `source` to `object`. +
50660 * +
50661 * @private +
50662 * @param {Object} source The object to copy symbols from. +
50663 * @param {Object} [object={}] The object to copy symbols to. +
50664 * @returns {Object} Returns `object`. +
50665 */ +
50666 function copySymbolsIn(source, object) { +
50667 return copyObject(source, getSymbolsIn(source), object); +
50668 } +
50669 +
50670 /** +
50671 * Creates a function like `_.groupBy`. +
50672 * +
50673 * @private +
50674 * @param {Function} setter The function to set accumulator values. +
50675 * @param {Function} [initializer] The accumulator object initializer. +
50676 * @returns {Function} Returns the new aggregator function. +
50677 */ +
50678 function createAggregator(setter, initializer) { +
50679 return function(collection, iteratee) { +
50680 var func = isArray(collection) ? arrayAggregator : baseAggregator, +
50681 accumulator = initializer ? initializer() : {}; +
50682 +
50683 return func(collection, setter, getIteratee(iteratee, 2), accumulator); +
50684 }; +
50685 } +
50686 +
50687 /** +
50688 * Creates a function like `_.assign`. +
50689 * +
50690 * @private +
50691 * @param {Function} assigner The function to assign values. +
50692 * @returns {Function} Returns the new assigner function. +
50693 */ +
50694 function createAssigner(assigner) { +
50695 return baseRest(function(object, sources) { +
50696 var index = -1, +
50697 length = sources.length, +
50698 customizer = length > 1 ? sources[length - 1] : undefined, +
50699 guard = length > 2 ? sources[2] : undefined; +
50700 +
50701 customizer = (assigner.length > 3 && typeof customizer == 'function') +
50702 ? (length--, customizer) +
50703 : undefined; +
50704 +
50705 if (guard && isIterateeCall(sources[0], sources[1], guard)) { +
50706 customizer = length < 3 ? undefined : customizer; +
50707 length = 1; +
50708 } +
50709 object = Object(object); +
50710 while (++index < length) { +
50711 var source = sources[index]; +
50712 if (source) { +
50713 assigner(object, source, index, customizer); +
50714 } +
50715 } +
50716 return object; +
50717 }); +
50718 } +
50719 +
50720 /** +
50721 * Creates a `baseEach` or `baseEachRight` function. +
50722 * +
50723 * @private +
50724 * @param {Function} eachFunc The function to iterate over a collection. +
50725 * @param {boolean} [fromRight] Specify iterating from right to left. +
50726 * @returns {Function} Returns the new base function. +
50727 */ +
50728 function createBaseEach(eachFunc, fromRight) { +
50729 return function(collection, iteratee) { +
50730 if (collection == null) { +
50731 return collection; +
50732 } +
50733 if (!isArrayLike(collection)) { +
50734 return eachFunc(collection, iteratee); +
50735 } +
50736 var length = collection.length, +
50737 index = fromRight ? length : -1, +
50738 iterable = Object(collection); +
50739 +
50740 while ((fromRight ? index-- : ++index < length)) { +
50741 if (iteratee(iterable[index], index, iterable) === false) { +
50742 break; +
50743 } +
50744 } +
50745 return collection; +
50746 }; +
50747 } +
50748 +
50749 /** +
50750 * Creates a base function for methods like `_.forIn` and `_.forOwn`. +
50751 * +
50752 * @private +
50753 * @param {boolean} [fromRight] Specify iterating from right to left. +
50754 * @returns {Function} Returns the new base function. +
50755 */ +
50756 function createBaseFor(fromRight) { +
50757 return function(object, iteratee, keysFunc) { +
50758 var index = -1, +
50759 iterable = Object(object), +
50760 props = keysFunc(object), +
50761 length = props.length; +
50762 +
50763 while (length--) { +
50764 var key = props[fromRight ? length : ++index]; +
50765 if (iteratee(iterable[key], key, iterable) === false) { +
50766 break; +
50767 } +
50768 } +
50769 return object; +
50770 }; +
50771 } +
50772 +
50773 /** +
50774 * Creates a function that wraps `func` to invoke it with the optional `this` +
50775 * binding of `thisArg`. +
50776 * +
50777 * @private +
50778 * @param {Function} func The function to wrap. +
50779 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
50780 * @param {*} [thisArg] The `this` binding of `func`. +
50781 * @returns {Function} Returns the new wrapped function. +
50782 */ +
50783 function createBind(func, bitmask, thisArg) { +
50784 var isBind = bitmask & WRAP_BIND_FLAG, +
50785 Ctor = createCtor(func); +
50786 +
50787 function wrapper() { +
50788 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
50789 return fn.apply(isBind ? thisArg : this, arguments); +
50790 } +
50791 return wrapper; +
50792 } +
50793 +
50794 /** +
50795 * Creates a function like `_.lowerFirst`. +
50796 * +
50797 * @private +
50798 * @param {string} methodName The name of the `String` case method to use. +
50799 * @returns {Function} Returns the new case function. +
50800 */ +
50801 function createCaseFirst(methodName) { +
50802 return function(string) { +
50803 string = toString(string); +
50804 +
50805 var strSymbols = hasUnicode(string) +
50806 ? stringToArray(string) +
50807 : undefined; +
50808 +
50809 var chr = strSymbols +
50810 ? strSymbols[0] +
50811 : string.charAt(0); +
50812 +
50813 var trailing = strSymbols +
50814 ? castSlice(strSymbols, 1).join('') +
50815 : string.slice(1); +
50816 +
50817 return chr[methodName]() + trailing; +
50818 }; +
50819 } +
50820 +
50821 /** +
50822 * Creates a function like `_.camelCase`. +
50823 * +
50824 * @private +
50825 * @param {Function} callback The function to combine each word. +
50826 * @returns {Function} Returns the new compounder function. +
50827 */ +
50828 function createCompounder(callback) { +
50829 return function(string) { +
50830 return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); +
50831 }; +
50832 } +
50833 +
50834 /** +
50835 * Creates a function that produces an instance of `Ctor` regardless of +
50836 * whether it was invoked as part of a `new` expression or by `call` or `apply`. +
50837 * +
50838 * @private +
50839 * @param {Function} Ctor The constructor to wrap. +
50840 * @returns {Function} Returns the new wrapped function. +
50841 */ +
50842 function createCtor(Ctor) { +
50843 return function() { +
50844 // Use a `switch` statement to work with class constructors. See +
50845 // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist +
50846 // for more details. +
50847 var args = arguments; +
50848 switch (args.length) { +
50849 case 0: return new Ctor; +
50850 case 1: return new Ctor(args[0]); +
50851 case 2: return new Ctor(args[0], args[1]); +
50852 case 3: return new Ctor(args[0], args[1], args[2]); +
50853 case 4: return new Ctor(args[0], args[1], args[2], args[3]); +
50854 case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); +
50855 case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); +
50856 case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); +
50857 } +
50858 var thisBinding = baseCreate(Ctor.prototype), +
50859 result = Ctor.apply(thisBinding, args); +
50860 +
50861 // Mimic the constructor's `return` behavior. +
50862 // See https://es5.github.io/#x13.2.2 for more details. +
50863 return isObject(result) ? result : thisBinding; +
50864 }; +
50865 } +
50866 +
50867 /** +
50868 * Creates a function that wraps `func` to enable currying. +
50869 * +
50870 * @private +
50871 * @param {Function} func The function to wrap. +
50872 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
50873 * @param {number} arity The arity of `func`. +
50874 * @returns {Function} Returns the new wrapped function. +
50875 */ +
50876 function createCurry(func, bitmask, arity) { +
50877 var Ctor = createCtor(func); +
50878 +
50879 function wrapper() { +
50880 var length = arguments.length, +
50881 args = Array(length), +
50882 index = length, +
50883 placeholder = getHolder(wrapper); +
50884 +
50885 while (index--) { +
50886 args[index] = arguments[index]; +
50887 } +
50888 var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) +
50889 ? [] +
50890 : replaceHolders(args, placeholder); +
50891 +
50892 length -= holders.length; +
50893 if (length < arity) { +
50894 return createRecurry( +
50895 func, bitmask, createHybrid, wrapper.placeholder, undefined, +
50896 args, holders, undefined, undefined, arity - length); +
50897 } +
50898 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
50899 return apply(fn, this, args); +
50900 } +
50901 return wrapper; +
50902 } +
50903 +
50904 /** +
50905 * Creates a `_.find` or `_.findLast` function. +
50906 * +
50907 * @private +
50908 * @param {Function} findIndexFunc The function to find the collection index. +
50909 * @returns {Function} Returns the new find function. +
50910 */ +
50911 function createFind(findIndexFunc) { +
50912 return function(collection, predicate, fromIndex) { +
50913 var iterable = Object(collection); +
50914 if (!isArrayLike(collection)) { +
50915 var iteratee = getIteratee(predicate, 3); +
50916 collection = keys(collection); +
50917 predicate = function(key) { return iteratee(iterable[key], key, iterable); }; +
50918 } +
50919 var index = findIndexFunc(collection, predicate, fromIndex); +
50920 return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; +
50921 }; +
50922 } +
50923 +
50924 /** +
50925 * Creates a `_.flow` or `_.flowRight` function. +
50926 * +
50927 * @private +
50928 * @param {boolean} [fromRight] Specify iterating from right to left. +
50929 * @returns {Function} Returns the new flow function. +
50930 */ +
50931 function createFlow(fromRight) { +
50932 return flatRest(function(funcs) { +
50933 var length = funcs.length, +
50934 index = length, +
50935 prereq = LodashWrapper.prototype.thru; +
50936 +
50937 if (fromRight) { +
50938 funcs.reverse(); +
50939 } +
50940 while (index--) { +
50941 var func = funcs[index]; +
50942 if (typeof func != 'function') { +
50943 throw new TypeError(FUNC_ERROR_TEXT); +
50944 } +
50945 if (prereq && !wrapper && getFuncName(func) == 'wrapper') { +
50946 var wrapper = new LodashWrapper([], true); +
50947 } +
50948 } +
50949 index = wrapper ? index : length; +
50950 while (++index < length) { +
50951 func = funcs[index]; +
50952 +
50953 var funcName = getFuncName(func), +
50954 data = funcName == 'wrapper' ? getData(func) : undefined; +
50955 +
50956 if (data && isLaziable(data[0]) && +
50957 data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && +
50958 !data[4].length && data[9] == 1 +
50959 ) { +
50960 wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); +
50961 } else { +
50962 wrapper = (func.length == 1 && isLaziable(func)) +
50963 ? wrapper[funcName]() +
50964 : wrapper.thru(func); +
50965 } +
50966 } +
50967 return function() { +
50968 var args = arguments, +
50969 value = args[0]; +
50970 +
50971 if (wrapper && args.length == 1 && isArray(value)) { +
50972 return wrapper.plant(value).value(); +
50973 } +
50974 var index = 0, +
50975 result = length ? funcs[index].apply(this, args) : value; +
50976 +
50977 while (++index < length) { +
50978 result = funcs[index].call(this, result); +
50979 } +
50980 return result; +
50981 }; +
50982 }); +
50983 } +
50984 +
50985 /** +
50986 * Creates a function that wraps `func` to invoke it with optional `this` +
50987 * binding of `thisArg`, partial application, and currying. +
50988 * +
50989 * @private +
50990 * @param {Function|string} func The function or method name to wrap. +
50991 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
50992 * @param {*} [thisArg] The `this` binding of `func`. +
50993 * @param {Array} [partials] The arguments to prepend to those provided to +
50994 * the new function. +
50995 * @param {Array} [holders] The `partials` placeholder indexes. +
50996 * @param {Array} [partialsRight] The arguments to append to those provided +
50997 * to the new function. +
50998 * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. +
50999 * @param {Array} [argPos] The argument positions of the new function. +
51000 * @param {number} [ary] The arity cap of `func`. +
51001 * @param {number} [arity] The arity of `func`. +
51002 * @returns {Function} Returns the new wrapped function. +
51003 */ +
51004 function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { +
51005 var isAry = bitmask & WRAP_ARY_FLAG, +
51006 isBind = bitmask & WRAP_BIND_FLAG, +
51007 isBindKey = bitmask & WRAP_BIND_KEY_FLAG, +
51008 isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), +
51009 isFlip = bitmask & WRAP_FLIP_FLAG, +
51010 Ctor = isBindKey ? undefined : createCtor(func); +
51011 +
51012 function wrapper() { +
51013 var length = arguments.length, +
51014 args = Array(length), +
51015 index = length; +
51016 +
51017 while (index--) { +
51018 args[index] = arguments[index]; +
51019 } +
51020 if (isCurried) { +
51021 var placeholder = getHolder(wrapper), +
51022 holdersCount = countHolders(args, placeholder); +
51023 } +
51024 if (partials) { +
51025 args = composeArgs(args, partials, holders, isCurried); +
51026 } +
51027 if (partialsRight) { +
51028 args = composeArgsRight(args, partialsRight, holdersRight, isCurried); +
51029 } +
51030 length -= holdersCount; +
51031 if (isCurried && length < arity) { +
51032 var newHolders = replaceHolders(args, placeholder); +
51033 return createRecurry( +
51034 func, bitmask, createHybrid, wrapper.placeholder, thisArg, +
51035 args, newHolders, argPos, ary, arity - length +
51036 ); +
51037 } +
51038 var thisBinding = isBind ? thisArg : this, +
51039 fn = isBindKey ? thisBinding[func] : func; +
51040 +
51041 length = args.length; +
51042 if (argPos) { +
51043 args = reorder(args, argPos); +
51044 } else if (isFlip && length > 1) { +
51045 args.reverse(); +
51046 } +
51047 if (isAry && ary < length) { +
51048 args.length = ary; +
51049 } +
51050 if (this && this !== root && this instanceof wrapper) { +
51051 fn = Ctor || createCtor(fn); +
51052 } +
51053 return fn.apply(thisBinding, args); +
51054 } +
51055 return wrapper; +
51056 } +
51057 +
51058 /** +
51059 * Creates a function like `_.invertBy`. +
51060 * +
51061 * @private +
51062 * @param {Function} setter The function to set accumulator values. +
51063 * @param {Function} toIteratee The function to resolve iteratees. +
51064 * @returns {Function} Returns the new inverter function. +
51065 */ +
51066 function createInverter(setter, toIteratee) { +
51067 return function(object, iteratee) { +
51068 return baseInverter(object, setter, toIteratee(iteratee), {}); +
51069 }; +
51070 } +
51071 +
51072 /** +
51073 * Creates a function that performs a mathematical operation on two values. +
51074 * +
51075 * @private +
51076 * @param {Function} operator The function to perform the operation. +
51077 * @param {number} [defaultValue] The value used for `undefined` arguments. +
51078 * @returns {Function} Returns the new mathematical operation function. +
51079 */ +
51080 function createMathOperation(operator, defaultValue) { +
51081 return function(value, other) { +
51082 var result; +
51083 if (value === undefined && other === undefined) { +
51084 return defaultValue; +
51085 } +
51086 if (value !== undefined) { +
51087 result = value; +
51088 } +
51089 if (other !== undefined) { +
51090 if (result === undefined) { +
51091 return other; +
51092 } +
51093 if (typeof value == 'string' || typeof other == 'string') { +
51094 value = baseToString(value); +
51095 other = baseToString(other); +
51096 } else { +
51097 value = baseToNumber(value); +
51098 other = baseToNumber(other); +
51099 } +
51100 result = operator(value, other); +
51101 } +
51102 return result; +
51103 }; +
51104 } +
51105 +
51106 /** +
51107 * Creates a function like `_.over`. +
51108 * +
51109 * @private +
51110 * @param {Function} arrayFunc The function to iterate over iteratees. +
51111 * @returns {Function} Returns the new over function. +
51112 */ +
51113 function createOver(arrayFunc) { +
51114 return flatRest(function(iteratees) { +
51115 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); +
51116 return baseRest(function(args) { +
51117 var thisArg = this; +
51118 return arrayFunc(iteratees, function(iteratee) { +
51119 return apply(iteratee, thisArg, args); +
51120 }); +
51121 }); +
51122 }); +
51123 } +
51124 +
51125 /** +
51126 * Creates the padding for `string` based on `length`. The `chars` string +
51127 * is truncated if the number of characters exceeds `length`. +
51128 * +
51129 * @private +
51130 * @param {number} length The padding length. +
51131 * @param {string} [chars=' '] The string used as padding. +
51132 * @returns {string} Returns the padding for `string`. +
51133 */ +
51134 function createPadding(length, chars) { +
51135 chars = chars === undefined ? ' ' : baseToString(chars); +
51136 +
51137 var charsLength = chars.length; +
51138 if (charsLength < 2) { +
51139 return charsLength ? baseRepeat(chars, length) : chars; +
51140 } +
51141 var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); +
51142 return hasUnicode(chars) +
51143 ? castSlice(stringToArray(result), 0, length).join('') +
51144 : result.slice(0, length); +
51145 } +
51146 +
51147 /** +
51148 * Creates a function that wraps `func` to invoke it with the `this` binding +
51149 * of `thisArg` and `partials` prepended to the arguments it receives. +
51150 * +
51151 * @private +
51152 * @param {Function} func The function to wrap. +
51153 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
51154 * @param {*} thisArg The `this` binding of `func`. +
51155 * @param {Array} partials The arguments to prepend to those provided to +
51156 * the new function. +
51157 * @returns {Function} Returns the new wrapped function. +
51158 */ +
51159 function createPartial(func, bitmask, thisArg, partials) { +
51160 var isBind = bitmask & WRAP_BIND_FLAG, +
51161 Ctor = createCtor(func); +
51162 +
51163 function wrapper() { +
51164 var argsIndex = -1, +
51165 argsLength = arguments.length, +
51166 leftIndex = -1, +
51167 leftLength = partials.length, +
51168 args = Array(leftLength + argsLength), +
51169 fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
51170 +
51171 while (++leftIndex < leftLength) { +
51172 args[leftIndex] = partials[leftIndex]; +
51173 } +
51174 while (argsLength--) { +
51175 args[leftIndex++] = arguments[++argsIndex]; +
51176 } +
51177 return apply(fn, isBind ? thisArg : this, args); +
51178 } +
51179 return wrapper; +
51180 } +
51181 +
51182 /** +
51183 * Creates a `_.range` or `_.rangeRight` function. +
51184 * +
51185 * @private +
51186 * @param {boolean} [fromRight] Specify iterating from right to left. +
51187 * @returns {Function} Returns the new range function. +
51188 */ +
51189 function createRange(fromRight) { +
51190 return function(start, end, step) { +
51191 if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { +
51192 end = step = undefined; +
51193 } +
51194 // Ensure the sign of `-0` is preserved. +
51195 start = toFinite(start); +
51196 if (end === undefined) { +
51197 end = start; +
51198 start = 0; +
51199 } else { +
51200 end = toFinite(end); +
51201 } +
51202 step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); +
51203 return baseRange(start, end, step, fromRight); +
51204 }; +
51205 } +
51206 +
51207 /** +
51208 * Creates a function that performs a relational operation on two values. +
51209 * +
51210 * @private +
51211 * @param {Function} operator The function to perform the operation. +
51212 * @returns {Function} Returns the new relational operation function. +
51213 */ +
51214 function createRelationalOperation(operator) { +
51215 return function(value, other) { +
51216 if (!(typeof value == 'string' && typeof other == 'string')) { +
51217 value = toNumber(value); +
51218 other = toNumber(other); +
51219 } +
51220 return operator(value, other); +
51221 }; +
51222 } +
51223 +
51224 /** +
51225 * Creates a function that wraps `func` to continue currying. +
51226 * +
51227 * @private +
51228 * @param {Function} func The function to wrap. +
51229 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
51230 * @param {Function} wrapFunc The function to create the `func` wrapper. +
51231 * @param {*} placeholder The placeholder value. +
51232 * @param {*} [thisArg] The `this` binding of `func`. +
51233 * @param {Array} [partials] The arguments to prepend to those provided to +
51234 * the new function. +
51235 * @param {Array} [holders] The `partials` placeholder indexes. +
51236 * @param {Array} [argPos] The argument positions of the new function. +
51237 * @param {number} [ary] The arity cap of `func`. +
51238 * @param {number} [arity] The arity of `func`. +
51239 * @returns {Function} Returns the new wrapped function. +
51240 */ +
51241 function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { +
51242 var isCurry = bitmask & WRAP_CURRY_FLAG, +
51243 newHolders = isCurry ? holders : undefined, +
51244 newHoldersRight = isCurry ? undefined : holders, +
51245 newPartials = isCurry ? partials : undefined, +
51246 newPartialsRight = isCurry ? undefined : partials; +
51247 +
51248 bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); +
51249 bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); +
51250 +
51251 if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { +
51252 bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); +
51253 } +
51254 var newData = [ +
51255 func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, +
51256 newHoldersRight, argPos, ary, arity +
51257 ]; +
51258 +
51259 var result = wrapFunc.apply(undefined, newData); +
51260 if (isLaziable(func)) { +
51261 setData(result, newData); +
51262 } +
51263 result.placeholder = placeholder; +
51264 return setWrapToString(result, func, bitmask); +
51265 } +
51266 +
51267 /** +
51268 * Creates a function like `_.round`. +
51269 * +
51270 * @private +
51271 * @param {string} methodName The name of the `Math` method to use when rounding. +
51272 * @returns {Function} Returns the new round function. +
51273 */ +
51274 function createRound(methodName) { +
51275 var func = Math[methodName]; +
51276 return function(number, precision) { +
51277 number = toNumber(number); +
51278 precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); +
51279 if (precision) { +
51280 // Shift with exponential notation to avoid floating-point issues. +
51281 // See [MDN](https://mdn.io/round#Examples) for more details. +
51282 var pair = (toString(number) + 'e').split('e'), +
51283 value = func(pair[0] + 'e' + (+pair[1] + precision)); +
51284 +
51285 pair = (toString(value) + 'e').split('e'); +
51286 return +(pair[0] + 'e' + (+pair[1] - precision)); +
51287 } +
51288 return func(number); +
51289 }; +
51290 } +
51291 +
51292 /** +
51293 * Creates a set object of `values`. +
51294 * +
51295 * @private +
51296 * @param {Array} values The values to add to the set. +
51297 * @returns {Object} Returns the new set. +
51298 */ +
51299 var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { +
51300 return new Set(values); +
51301 }; +
51302 +
51303 /** +
51304 * Creates a `_.toPairs` or `_.toPairsIn` function. +
51305 * +
51306 * @private +
51307 * @param {Function} keysFunc The function to get the keys of a given object. +
51308 * @returns {Function} Returns the new pairs function. +
51309 */ +
51310 function createToPairs(keysFunc) { +
51311 return function(object) { +
51312 var tag = getTag(object); +
51313 if (tag == mapTag) { +
51314 return mapToArray(object); +
51315 } +
51316 if (tag == setTag) { +
51317 return setToPairs(object); +
51318 } +
51319 return baseToPairs(object, keysFunc(object)); +
51320 }; +
51321 } +
51322 +
51323 /** +
51324 * Creates a function that either curries or invokes `func` with optional +
51325 * `this` binding and partially applied arguments. +
51326 * +
51327 * @private +
51328 * @param {Function|string} func The function or method name to wrap. +
51329 * @param {number} bitmask The bitmask flags. +
51330 * 1 - `_.bind` +
51331 * 2 - `_.bindKey` +
51332 * 4 - `_.curry` or `_.curryRight` of a bound function +
51333 * 8 - `_.curry` +
51334 * 16 - `_.curryRight` +
51335 * 32 - `_.partial` +
51336 * 64 - `_.partialRight` +
51337 * 128 - `_.rearg` +
51338 * 256 - `_.ary` +
51339 * 512 - `_.flip` +
51340 * @param {*} [thisArg] The `this` binding of `func`. +
51341 * @param {Array} [partials] The arguments to be partially applied. +
51342 * @param {Array} [holders] The `partials` placeholder indexes. +
51343 * @param {Array} [argPos] The argument positions of the new function. +
51344 * @param {number} [ary] The arity cap of `func`. +
51345 * @param {number} [arity] The arity of `func`. +
51346 * @returns {Function} Returns the new wrapped function. +
51347 */ +
51348 function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { +
51349 var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; +
51350 if (!isBindKey && typeof func != 'function') { +
51351 throw new TypeError(FUNC_ERROR_TEXT); +
51352 } +
51353 var length = partials ? partials.length : 0; +
51354 if (!length) { +
51355 bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); +
51356 partials = holders = undefined; +
51357 } +
51358 ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); +
51359 arity = arity === undefined ? arity : toInteger(arity); +
51360 length -= holders ? holders.length : 0; +
51361 +
51362 if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { +
51363 var partialsRight = partials, +
51364 holdersRight = holders; +
51365 +
51366 partials = holders = undefined; +
51367 } +
51368 var data = isBindKey ? undefined : getData(func); +
51369 +
51370 var newData = [ +
51371 func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, +
51372 argPos, ary, arity +
51373 ]; +
51374 +
51375 if (data) { +
51376 mergeData(newData, data); +
51377 } +
51378 func = newData[0]; +
51379 bitmask = newData[1]; +
51380 thisArg = newData[2]; +
51381 partials = newData[3]; +
51382 holders = newData[4]; +
51383 arity = newData[9] = newData[9] === undefined +
51384 ? (isBindKey ? 0 : func.length) +
51385 : nativeMax(newData[9] - length, 0); +
51386 +
51387 if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { +
51388 bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); +
51389 } +
51390 if (!bitmask || bitmask == WRAP_BIND_FLAG) { +
51391 var result = createBind(func, bitmask, thisArg); +
51392 } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { +
51393 result = createCurry(func, bitmask, arity); +
51394 } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { +
51395 result = createPartial(func, bitmask, thisArg, partials); +
51396 } else { +
51397 result = createHybrid.apply(undefined, newData); +
51398 } +
51399 var setter = data ? baseSetData : setData; +
51400 return setWrapToString(setter(result, newData), func, bitmask); +
51401 } +
51402 +
51403 /** +
51404 * Used by `_.defaults` to customize its `_.assignIn` use to assign properties +
51405 * of source objects to the destination object for all destination properties +
51406 * that resolve to `undefined`. +
51407 * +
51408 * @private +
51409 * @param {*} objValue The destination value. +
51410 * @param {*} srcValue The source value. +
51411 * @param {string} key The key of the property to assign. +
51412 * @param {Object} object The parent object of `objValue`. +
51413 * @returns {*} Returns the value to assign. +
51414 */ +
51415 function customDefaultsAssignIn(objValue, srcValue, key, object) { +
51416 if (objValue === undefined || +
51417 (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { +
51418 return srcValue; +
51419 } +
51420 return objValue; +
51421 } +
51422 +
51423 /** +
51424 * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source +
51425 * objects into destination objects that are passed thru. +
51426 * +
51427 * @private +
51428 * @param {*} objValue The destination value. +
51429 * @param {*} srcValue The source value. +
51430 * @param {string} key The key of the property to merge. +
51431 * @param {Object} object The parent object of `objValue`. +
51432 * @param {Object} source The parent object of `srcValue`. +
51433 * @param {Object} [stack] Tracks traversed source values and their merged +
51434 * counterparts. +
51435 * @returns {*} Returns the value to assign. +
51436 */ +
51437 function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { +
51438 if (isObject(objValue) && isObject(srcValue)) { +
51439 // Recursively merge objects and arrays (susceptible to call stack limits). +
51440 stack.set(srcValue, objValue); +
51441 baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); +
51442 stack['delete'](srcValue); +
51443 } +
51444 return objValue; +
51445 } +
51446 +
51447 /** +
51448 * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain +
51449 * objects. +
51450 * +
51451 * @private +
51452 * @param {*} value The value to inspect. +
51453 * @param {string} key The key of the property to inspect. +
51454 * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. +
51455 */ +
51456 function customOmitClone(value) { +
51457 return isPlainObject(value) ? undefined : value; +
51458 } +
51459 +
51460 /** +
51461 * A specialized version of `baseIsEqualDeep` for arrays with support for +
51462 * partial deep comparisons. +
51463 * +
51464 * @private +
51465 * @param {Array} array The array to compare. +
51466 * @param {Array} other The other array to compare. +
51467 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
51468 * @param {Function} customizer The function to customize comparisons. +
51469 * @param {Function} equalFunc The function to determine equivalents of values. +
51470 * @param {Object} stack Tracks traversed `array` and `other` objects. +
51471 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. +
51472 */ +
51473 function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { +
51474 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +
51475 arrLength = array.length, +
51476 othLength = other.length; +
51477 +
51478 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { +
51479 return false; +
51480 } +
51481 // Assume cyclic values are equal. +
51482 var stacked = stack.get(array); +
51483 if (stacked && stack.get(other)) { +
51484 return stacked == other; +
51485 } +
51486 var index = -1, +
51487 result = true, +
51488 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; +
51489 +
51490 stack.set(array, other); +
51491 stack.set(other, array); +
51492 +
51493 // Ignore non-index properties. +
51494 while (++index < arrLength) { +
51495 var arrValue = array[index], +
51496 othValue = other[index]; +
51497 +
51498 if (customizer) { +
51499 var compared = isPartial +
51500 ? customizer(othValue, arrValue, index, other, array, stack) +
51501 : customizer(arrValue, othValue, index, array, other, stack); +
51502 } +
51503 if (compared !== undefined) { +
51504 if (compared) { +
51505 continue; +
51506 } +
51507 result = false; +
51508 break; +
51509 } +
51510 // Recursively compare arrays (susceptible to call stack limits). +
51511 if (seen) { +
51512 if (!arraySome(other, function(othValue, othIndex) { +
51513 if (!cacheHas(seen, othIndex) && +
51514 (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { +
51515 return seen.push(othIndex); +
51516 } +
51517 })) { +
51518 result = false; +
51519 break; +
51520 } +
51521 } else if (!( +
51522 arrValue === othValue || +
51523 equalFunc(arrValue, othValue, bitmask, customizer, stack) +
51524 )) { +
51525 result = false; +
51526 break; +
51527 } +
51528 } +
51529 stack['delete'](array); +
51530 stack['delete'](other); +
51531 return result; +
51532 } +
51533 +
51534 /** +
51535 * A specialized version of `baseIsEqualDeep` for comparing objects of +
51536 * the same `toStringTag`. +
51537 * +
51538 * **Note:** This function only supports comparing values with tags of +
51539 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. +
51540 * +
51541 * @private +
51542 * @param {Object} object The object to compare. +
51543 * @param {Object} other The other object to compare. +
51544 * @param {string} tag The `toStringTag` of the objects to compare. +
51545 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
51546 * @param {Function} customizer The function to customize comparisons. +
51547 * @param {Function} equalFunc The function to determine equivalents of values. +
51548 * @param {Object} stack Tracks traversed `object` and `other` objects. +
51549 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
51550 */ +
51551 function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { +
51552 switch (tag) { +
51553 case dataViewTag: +
51554 if ((object.byteLength != other.byteLength) || +
51555 (object.byteOffset != other.byteOffset)) { +
51556 return false; +
51557 } +
51558 object = object.buffer; +
51559 other = other.buffer; +
51560 +
51561 case arrayBufferTag: +
51562 if ((object.byteLength != other.byteLength) || +
51563 !equalFunc(new Uint8Array(object), new Uint8Array(other))) { +
51564 return false; +
51565 } +
51566 return true; +
51567 +
51568 case boolTag: +
51569 case dateTag: +
51570 case numberTag: +
51571 // Coerce booleans to `1` or `0` and dates to milliseconds. +
51572 // Invalid dates are coerced to `NaN`. +
51573 return eq(+object, +other); +
51574 +
51575 case errorTag: +
51576 return object.name == other.name && object.message == other.message; +
51577 +
51578 case regexpTag: +
51579 case stringTag: +
51580 // Coerce regexes to strings and treat strings, primitives and objects, +
51581 // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring +
51582 // for more details. +
51583 return object == (other + ''); +
51584 +
51585 case mapTag: +
51586 var convert = mapToArray; +
51587 +
51588 case setTag: +
51589 var isPartial = bitmask & COMPARE_PARTIAL_FLAG; +
51590 convert || (convert = setToArray); +
51591 +
51592 if (object.size != other.size && !isPartial) { +
51593 return false; +
51594 } +
51595 // Assume cyclic values are equal. +
51596 var stacked = stack.get(object); +
51597 if (stacked) { +
51598 return stacked == other; +
51599 } +
51600 bitmask |= COMPARE_UNORDERED_FLAG; +
51601 +
51602 // Recursively compare objects (susceptible to call stack limits). +
51603 stack.set(object, other); +
51604 var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); +
51605 stack['delete'](object); +
51606 return result; +
51607 +
51608 case symbolTag: +
51609 if (symbolValueOf) { +
51610 return symbolValueOf.call(object) == symbolValueOf.call(other); +
51611 } +
51612 } +
51613 return false; +
51614 } +
51615 +
51616 /** +
51617 * A specialized version of `baseIsEqualDeep` for objects with support for +
51618 * partial deep comparisons. +
51619 * +
51620 * @private +
51621 * @param {Object} object The object to compare. +
51622 * @param {Object} other The other object to compare. +
51623 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
51624 * @param {Function} customizer The function to customize comparisons. +
51625 * @param {Function} equalFunc The function to determine equivalents of values. +
51626 * @param {Object} stack Tracks traversed `object` and `other` objects. +
51627 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
51628 */ +
51629 function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { +
51630 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +
51631 objProps = getAllKeys(object), +
51632 objLength = objProps.length, +
51633 othProps = getAllKeys(other), +
51634 othLength = othProps.length; +
51635 +
51636 if (objLength != othLength && !isPartial) { +
51637 return false; +
51638 } +
51639 var index = objLength; +
51640 while (index--) { +
51641 var key = objProps[index]; +
51642 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { +
51643 return false; +
51644 } +
51645 } +
51646 // Assume cyclic values are equal. +
51647 var stacked = stack.get(object); +
51648 if (stacked && stack.get(other)) { +
51649 return stacked == other; +
51650 } +
51651 var result = true; +
51652 stack.set(object, other); +
51653 stack.set(other, object); +
51654 +
51655 var skipCtor = isPartial; +
51656 while (++index < objLength) { +
51657 key = objProps[index]; +
51658 var objValue = object[key], +
51659 othValue = other[key]; +
51660 +
51661 if (customizer) { +
51662 var compared = isPartial +
51663 ? customizer(othValue, objValue, key, other, object, stack) +
51664 : customizer(objValue, othValue, key, object, other, stack); +
51665 } +
51666 // Recursively compare objects (susceptible to call stack limits). +
51667 if (!(compared === undefined +
51668 ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) +
51669 : compared +
51670 )) { +
51671 result = false; +
51672 break; +
51673 } +
51674 skipCtor || (skipCtor = key == 'constructor'); +
51675 } +
51676 if (result && !skipCtor) { +
51677 var objCtor = object.constructor, +
51678 othCtor = other.constructor; +
51679 +
51680 // Non `Object` object instances with different constructors are not equal. +
51681 if (objCtor != othCtor && +
51682 ('constructor' in object && 'constructor' in other) && +
51683 !(typeof objCtor == 'function' && objCtor instanceof objCtor && +
51684 typeof othCtor == 'function' && othCtor instanceof othCtor)) { +
51685 result = false; +
51686 } +
51687 } +
51688 stack['delete'](object); +
51689 stack['delete'](other); +
51690 return result; +
51691 } +
51692 +
51693 /** +
51694 * A specialized version of `baseRest` which flattens the rest array. +
51695 * +
51696 * @private +
51697 * @param {Function} func The function to apply a rest parameter to. +
51698 * @returns {Function} Returns the new function. +
51699 */ +
51700 function flatRest(func) { +
51701 return setToString(overRest(func, undefined, flatten), func + ''); +
51702 } +
51703 +
51704 /** +
51705 * Creates an array of own enumerable property names and symbols of `object`. +
51706 * +
51707 * @private +
51708 * @param {Object} object The object to query. +
51709 * @returns {Array} Returns the array of property names and symbols. +
51710 */ +
51711 function getAllKeys(object) { +
51712 return baseGetAllKeys(object, keys, getSymbols); +
51713 } +
51714 +
51715 /** +
51716 * Creates an array of own and inherited enumerable property names and +
51717 * symbols of `object`. +
51718 * +
51719 * @private +
51720 * @param {Object} object The object to query. +
51721 * @returns {Array} Returns the array of property names and symbols. +
51722 */ +
51723 function getAllKeysIn(object) { +
51724 return baseGetAllKeys(object, keysIn, getSymbolsIn); +
51725 } +
51726 +
51727 /** +
51728 * Gets metadata for `func`. +
51729 * +
51730 * @private +
51731 * @param {Function} func The function to query. +
51732 * @returns {*} Returns the metadata for `func`. +
51733 */ +
51734 var getData = !metaMap ? noop : function(func) { +
51735 return metaMap.get(func); +
51736 }; +
51737 +
51738 /** +
51739 * Gets the name of `func`. +
51740 * +
51741 * @private +
51742 * @param {Function} func The function to query. +
51743 * @returns {string} Returns the function name. +
51744 */ +
51745 function getFuncName(func) { +
51746 var result = (func.name + ''), +
51747 array = realNames[result], +
51748 length = hasOwnProperty.call(realNames, result) ? array.length : 0; +
51749 +
51750 while (length--) { +
51751 var data = array[length], +
51752 otherFunc = data.func; +
51753 if (otherFunc == null || otherFunc == func) { +
51754 return data.name; +
51755 } +
51756 } +
51757 return result; +
51758 } +
51759 +
51760 /** +
51761 * Gets the argument placeholder value for `func`. +
51762 * +
51763 * @private +
51764 * @param {Function} func The function to inspect. +
51765 * @returns {*} Returns the placeholder value. +
51766 */ +
51767 function getHolder(func) { +
51768 var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; +
51769 return object.placeholder; +
51770 } +
51771 +
51772 /** +
51773 * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, +
51774 * this function returns the custom method, otherwise it returns `baseIteratee`. +
51775 * If arguments are provided, the chosen function is invoked with them and +
51776 * its result is returned. +
51777 * +
51778 * @private +
51779 * @param {*} [value] The value to convert to an iteratee. +
51780 * @param {number} [arity] The arity of the created iteratee. +
51781 * @returns {Function} Returns the chosen function or its result. +
51782 */ +
51783 function getIteratee() { +
51784 var result = lodash.iteratee || iteratee; +
51785 result = result === iteratee ? baseIteratee : result; +
51786 return arguments.length ? result(arguments[0], arguments[1]) : result; +
51787 } +
51788 +
51789 /** +
51790 * Gets the data for `map`. +
51791 * +
51792 * @private +
51793 * @param {Object} map The map to query. +
51794 * @param {string} key The reference key. +
51795 * @returns {*} Returns the map data. +
51796 */ +
51797 function getMapData(map, key) { +
51798 var data = map.__data__; +
51799 return isKeyable(key) +
51800 ? data[typeof key == 'string' ? 'string' : 'hash'] +
51801 : data.map; +
51802 } +
51803 +
51804 /** +
51805 * Gets the property names, values, and compare flags of `object`. +
51806 * +
51807 * @private +
51808 * @param {Object} object The object to query. +
51809 * @returns {Array} Returns the match data of `object`. +
51810 */ +
51811 function getMatchData(object) { +
51812 var result = keys(object), +
51813 length = result.length; +
51814 +
51815 while (length--) { +
51816 var key = result[length], +
51817 value = object[key]; +
51818 +
51819 result[length] = [key, value, isStrictComparable(value)]; +
51820 } +
51821 return result; +
51822 } +
51823 +
51824 /** +
51825 * Gets the native function at `key` of `object`. +
51826 * +
51827 * @private +
51828 * @param {Object} object The object to query. +
51829 * @param {string} key The key of the method to get. +
51830 * @returns {*} Returns the function if it's native, else `undefined`. +
51831 */ +
51832 function getNative(object, key) { +
51833 var value = getValue(object, key); +
51834 return baseIsNative(value) ? value : undefined; +
51835 } +
51836 +
51837 /** +
51838 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. +
51839 * +
51840 * @private +
51841 * @param {*} value The value to query. +
51842 * @returns {string} Returns the raw `toStringTag`. +
51843 */ +
51844 function getRawTag(value) { +
51845 var isOwn = hasOwnProperty.call(value, symToStringTag), +
51846 tag = value[symToStringTag]; +
51847 +
51848 try { +
51849 value[symToStringTag] = undefined; +
51850 var unmasked = true; +
51851 } catch (e) {} +
51852 +
51853 var result = nativeObjectToString.call(value); +
51854 if (unmasked) { +
51855 if (isOwn) { +
51856 value[symToStringTag] = tag; +
51857 } else { +
51858 delete value[symToStringTag]; +
51859 } +
51860 } +
51861 return result; +
51862 } +
51863 +
51864 /** +
51865 * Creates an array of the own enumerable symbols of `object`. +
51866 * +
51867 * @private +
51868 * @param {Object} object The object to query. +
51869 * @returns {Array} Returns the array of symbols. +
51870 */ +
51871 var getSymbols = !nativeGetSymbols ? stubArray : function(object) { +
51872 if (object == null) { +
51873 return []; +
51874 } +
51875 object = Object(object); +
51876 return arrayFilter(nativeGetSymbols(object), function(symbol) { +
51877 return propertyIsEnumerable.call(object, symbol); +
51878 }); +
51879 }; +
51880 +
51881 /** +
51882 * Creates an array of the own and inherited enumerable symbols of `object`. +
51883 * +
51884 * @private +
51885 * @param {Object} object The object to query. +
51886 * @returns {Array} Returns the array of symbols. +
51887 */ +
51888 var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { +
51889 var result = []; +
51890 while (object) { +
51891 arrayPush(result, getSymbols(object)); +
51892 object = getPrototype(object); +
51893 } +
51894 return result; +
51895 }; +
51896 +
51897 /** +
51898 * Gets the `toStringTag` of `value`. +
51899 * +
51900 * @private +
51901 * @param {*} value The value to query. +
51902 * @returns {string} Returns the `toStringTag`. +
51903 */ +
51904 var getTag = baseGetTag; +
51905 +
51906 // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +
51907 if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || +
51908 (Map && getTag(new Map) != mapTag) || +
51909 (Promise && getTag(Promise.resolve()) != promiseTag) || +
51910 (Set && getTag(new Set) != setTag) || +
51911 (WeakMap && getTag(new WeakMap) != weakMapTag)) { +
51912 getTag = function(value) { +
51913 var result = baseGetTag(value), +
51914 Ctor = result == objectTag ? value.constructor : undefined, +
51915 ctorString = Ctor ? toSource(Ctor) : ''; +
51916 +
51917 if (ctorString) { +
51918 switch (ctorString) { +
51919 case dataViewCtorString: return dataViewTag; +
51920 case mapCtorString: return mapTag; +
51921 case promiseCtorString: return promiseTag; +
51922 case setCtorString: return setTag; +
51923 case weakMapCtorString: return weakMapTag; +
51924 } +
51925 } +
51926 return result; +
51927 }; +
51928 } +
51929 +
51930 /** +
51931 * Gets the view, applying any `transforms` to the `start` and `end` positions. +
51932 * +
51933 * @private +
51934 * @param {number} start The start of the view. +
51935 * @param {number} end The end of the view. +
51936 * @param {Array} transforms The transformations to apply to the view. +
51937 * @returns {Object} Returns an object containing the `start` and `end` +
51938 * positions of the view. +
51939 */ +
51940 function getView(start, end, transforms) { +
51941 var index = -1, +
51942 length = transforms.length; +
51943 +
51944 while (++index < length) { +
51945 var data = transforms[index], +
51946 size = data.size; +
51947 +
51948 switch (data.type) { +
51949 case 'drop': start += size; break; +
51950 case 'dropRight': end -= size; break; +
51951 case 'take': end = nativeMin(end, start + size); break; +
51952 case 'takeRight': start = nativeMax(start, end - size); break; +
51953 } +
51954 } +
51955 return { 'start': start, 'end': end }; +
51956 } +
51957 +
51958 /** +
51959 * Extracts wrapper details from the `source` body comment. +
51960 * +
51961 * @private +
51962 * @param {string} source The source to inspect. +
51963 * @returns {Array} Returns the wrapper details. +
51964 */ +
51965 function getWrapDetails(source) { +
51966 var match = source.match(reWrapDetails); +
51967 return match ? match[1].split(reSplitDetails) : []; +
51968 } +
51969 +
51970 /** +
51971 * Checks if `path` exists on `object`. +
51972 * +
51973 * @private +
51974 * @param {Object} object The object to query. +
51975 * @param {Array|string} path The path to check. +
51976 * @param {Function} hasFunc The function to check properties. +
51977 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
51978 */ +
51979 function hasPath(object, path, hasFunc) { +
51980 path = castPath(path, object); +
51981 +
51982 var index = -1, +
51983 length = path.length, +
51984 result = false; +
51985 +
51986 while (++index < length) { +
51987 var key = toKey(path[index]); +
51988 if (!(result = object != null && hasFunc(object, key))) { +
51989 break; +
51990 } +
51991 object = object[key]; +
51992 } +
51993 if (result || ++index != length) { +
51994 return result; +
51995 } +
51996 length = object == null ? 0 : object.length; +
51997 return !!length && isLength(length) && isIndex(key, length) && +
51998 (isArray(object) || isArguments(object)); +
51999 } +
52000 +
52001 /** +
52002 * Initializes an array clone. +
52003 * +
52004 * @private +
52005 * @param {Array} array The array to clone. +
52006 * @returns {Array} Returns the initialized clone. +
52007 */ +
52008 function initCloneArray(array) { +
52009 var length = array.length, +
52010 result = new array.constructor(length); +
52011 +
52012 // Add properties assigned by `RegExp#exec`. +
52013 if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { +
52014 result.index = array.index; +
52015 result.input = array.input; +
52016 } +
52017 return result; +
52018 } +
52019 +
52020 /** +
52021 * Initializes an object clone. +
52022 * +
52023 * @private +
52024 * @param {Object} object The object to clone. +
52025 * @returns {Object} Returns the initialized clone. +
52026 */ +
52027 function initCloneObject(object) { +
52028 return (typeof object.constructor == 'function' && !isPrototype(object)) +
52029 ? baseCreate(getPrototype(object)) +
52030 : {}; +
52031 } +
52032 +
52033 /** +
52034 * Initializes an object clone based on its `toStringTag`. +
52035 * +
52036 * **Note:** This function only supports cloning values with tags of +
52037 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. +
52038 * +
52039 * @private +
52040 * @param {Object} object The object to clone. +
52041 * @param {string} tag The `toStringTag` of the object to clone. +
52042 * @param {boolean} [isDeep] Specify a deep clone. +
52043 * @returns {Object} Returns the initialized clone. +
52044 */ +
52045 function initCloneByTag(object, tag, isDeep) { +
52046 var Ctor = object.constructor; +
52047 switch (tag) { +
52048 case arrayBufferTag: +
52049 return cloneArrayBuffer(object); +
52050 +
52051 case boolTag: +
52052 case dateTag: +
52053 return new Ctor(+object); +
52054 +
52055 case dataViewTag: +
52056 return cloneDataView(object, isDeep); +
52057 +
52058 case float32Tag: case float64Tag: +
52059 case int8Tag: case int16Tag: case int32Tag: +
52060 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: +
52061 return cloneTypedArray(object, isDeep); +
52062 +
52063 case mapTag: +
52064 return new Ctor; +
52065 +
52066 case numberTag: +
52067 case stringTag: +
52068 return new Ctor(object); +
52069 +
52070 case regexpTag: +
52071 return cloneRegExp(object); +
52072 +
52073 case setTag: +
52074 return new Ctor; +
52075 +
52076 case symbolTag: +
52077 return cloneSymbol(object); +
52078 } +
52079 } +
52080 +
52081 /** +
52082 * Inserts wrapper `details` in a comment at the top of the `source` body. +
52083 * +
52084 * @private +
52085 * @param {string} source The source to modify. +
52086 * @returns {Array} details The details to insert. +
52087 * @returns {string} Returns the modified source. +
52088 */ +
52089 function insertWrapDetails(source, details) { +
52090 var length = details.length; +
52091 if (!length) { +
52092 return source; +
52093 } +
52094 var lastIndex = length - 1; +
52095 details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; +
52096 details = details.join(length > 2 ? ', ' : ' '); +
52097 return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); +
52098 } +
52099 +
52100 /** +
52101 * Checks if `value` is a flattenable `arguments` object or array. +
52102 * +
52103 * @private +
52104 * @param {*} value The value to check. +
52105 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. +
52106 */ +
52107 function isFlattenable(value) { +
52108 return isArray(value) || isArguments(value) || +
52109 !!(spreadableSymbol && value && value[spreadableSymbol]); +
52110 } +
52111 +
52112 /** +
52113 * Checks if `value` is a valid array-like index. +
52114 * +
52115 * @private +
52116 * @param {*} value The value to check. +
52117 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. +
52118 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. +
52119 */ +
52120 function isIndex(value, length) { +
52121 var type = typeof value; +
52122 length = length == null ? MAX_SAFE_INTEGER : length; +
52123 +
52124 return !!length && +
52125 (type == 'number' || +
52126 (type != 'symbol' && reIsUint.test(value))) && +
52127 (value > -1 && value % 1 == 0 && value < length); +
52128 } +
52129 +
52130 /** +
52131 * Checks if the given arguments are from an iteratee call. +
52132 * +
52133 * @private +
52134 * @param {*} value The potential iteratee value argument. +
52135 * @param {*} index The potential iteratee index or key argument. +
52136 * @param {*} object The potential iteratee object argument. +
52137 * @returns {boolean} Returns `true` if the arguments are from an iteratee call, +
52138 * else `false`. +
52139 */ +
52140 function isIterateeCall(value, index, object) { +
52141 if (!isObject(object)) { +
52142 return false; +
52143 } +
52144 var type = typeof index; +
52145 if (type == 'number' +
52146 ? (isArrayLike(object) && isIndex(index, object.length)) +
52147 : (type == 'string' && index in object) +
52148 ) { +
52149 return eq(object[index], value); +
52150 } +
52151 return false; +
52152 } +
52153 +
52154 /** +
52155 * Checks if `value` is a property name and not a property path. +
52156 * +
52157 * @private +
52158 * @param {*} value The value to check. +
52159 * @param {Object} [object] The object to query keys on. +
52160 * @returns {boolean} Returns `true` if `value` is a property name, else `false`. +
52161 */ +
52162 function isKey(value, object) { +
52163 if (isArray(value)) { +
52164 return false; +
52165 } +
52166 var type = typeof value; +
52167 if (type == 'number' || type == 'symbol' || type == 'boolean' || +
52168 value == null || isSymbol(value)) { +
52169 return true; +
52170 } +
52171 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || +
52172 (object != null && value in Object(object)); +
52173 } +
52174 +
52175 /** +
52176 * Checks if `value` is suitable for use as unique object key. +
52177 * +
52178 * @private +
52179 * @param {*} value The value to check. +
52180 * @returns {boolean} Returns `true` if `value` is suitable, else `false`. +
52181 */ +
52182 function isKeyable(value) { +
52183 var type = typeof value; +
52184 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') +
52185 ? (value !== '__proto__') +
52186 : (value === null); +
52187 } +
52188 +
52189 /** +
52190 * Checks if `func` has a lazy counterpart. +
52191 * +
52192 * @private +
52193 * @param {Function} func The function to check. +
52194 * @returns {boolean} Returns `true` if `func` has a lazy counterpart, +
52195 * else `false`. +
52196 */ +
52197 function isLaziable(func) { +
52198 var funcName = getFuncName(func), +
52199 other = lodash[funcName]; +
52200 +
52201 if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { +
52202 return false; +
52203 } +
52204 if (func === other) { +
52205 return true; +
52206 } +
52207 var data = getData(other); +
52208 return !!data && func === data[0]; +
52209 } +
52210 +
52211 /** +
52212 * Checks if `func` has its source masked. +
52213 * +
52214 * @private +
52215 * @param {Function} func The function to check. +
52216 * @returns {boolean} Returns `true` if `func` is masked, else `false`. +
52217 */ +
52218 function isMasked(func) { +
52219 return !!maskSrcKey && (maskSrcKey in func); +
52220 } +
52221 +
52222 /** +
52223 * Checks if `func` is capable of being masked. +
52224 * +
52225 * @private +
52226 * @param {*} value The value to check. +
52227 * @returns {boolean} Returns `true` if `func` is maskable, else `false`. +
52228 */ +
52229 var isMaskable = coreJsData ? isFunction : stubFalse; +
52230 +
52231 /** +
52232 * Checks if `value` is likely a prototype object. +
52233 * +
52234 * @private +
52235 * @param {*} value The value to check. +
52236 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. +
52237 */ +
52238 function isPrototype(value) { +
52239 var Ctor = value && value.constructor, +
52240 proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; +
52241 +
52242 return value === proto; +
52243 } +
52244 +
52245 /** +
52246 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. +
52247 * +
52248 * @private +
52249 * @param {*} value The value to check. +
52250 * @returns {boolean} Returns `true` if `value` if suitable for strict +
52251 * equality comparisons, else `false`. +
52252 */ +
52253 function isStrictComparable(value) { +
52254 return value === value && !isObject(value); +
52255 } +
52256 +
52257 /** +
52258 * A specialized version of `matchesProperty` for source values suitable +
52259 * for strict equality comparisons, i.e. `===`. +
52260 * +
52261 * @private +
52262 * @param {string} key The key of the property to get. +
52263 * @param {*} srcValue The value to match. +
52264 * @returns {Function} Returns the new spec function. +
52265 */ +
52266 function matchesStrictComparable(key, srcValue) { +
52267 return function(object) { +
52268 if (object == null) { +
52269 return false; +
52270 } +
52271 return object[key] === srcValue && +
52272 (srcValue !== undefined || (key in Object(object))); +
52273 }; +
52274 } +
52275 +
52276 /** +
52277 * A specialized version of `_.memoize` which clears the memoized function's +
52278 * cache when it exceeds `MAX_MEMOIZE_SIZE`. +
52279 * +
52280 * @private +
52281 * @param {Function} func The function to have its output memoized. +
52282 * @returns {Function} Returns the new memoized function. +
52283 */ +
52284 function memoizeCapped(func) { +
52285 var result = memoize(func, function(key) { +
52286 if (cache.size === MAX_MEMOIZE_SIZE) { +
52287 cache.clear(); +
52288 } +
52289 return key; +
52290 }); +
52291 +
52292 var cache = result.cache; +
52293 return result; +
52294 } +
52295 +
52296 /** +
52297 * Merges the function metadata of `source` into `data`. +
52298 * +
52299 * Merging metadata reduces the number of wrappers used to invoke a function. +
52300 * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` +
52301 * may be applied regardless of execution order. Methods like `_.ary` and +
52302 * `_.rearg` modify function arguments, making the order in which they are +
52303 * executed important, preventing the merging of metadata. However, we make +
52304 * an exception for a safe combined case where curried functions have `_.ary` +
52305 * and or `_.rearg` applied. +
52306 * +
52307 * @private +
52308 * @param {Array} data The destination metadata. +
52309 * @param {Array} source The source metadata. +
52310 * @returns {Array} Returns `data`. +
52311 */ +
52312 function mergeData(data, source) { +
52313 var bitmask = data[1], +
52314 srcBitmask = source[1], +
52315 newBitmask = bitmask | srcBitmask, +
52316 isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); +
52317 +
52318 var isCombo = +
52319 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || +
52320 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || +
52321 ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); +
52322 +
52323 // Exit early if metadata can't be merged. +
52324 if (!(isCommon || isCombo)) { +
52325 return data; +
52326 } +
52327 // Use source `thisArg` if available. +
52328 if (srcBitmask & WRAP_BIND_FLAG) { +
52329 data[2] = source[2]; +
52330 // Set when currying a bound function. +
52331 newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; +
52332 } +
52333 // Compose partial arguments. +
52334 var value = source[3]; +
52335 if (value) { +
52336 var partials = data[3]; +
52337 data[3] = partials ? composeArgs(partials, value, source[4]) : value; +
52338 data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; +
52339 } +
52340 // Compose partial right arguments. +
52341 value = source[5]; +
52342 if (value) { +
52343 partials = data[5]; +
52344 data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; +
52345 data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; +
52346 } +
52347 // Use source `argPos` if available. +
52348 value = source[7]; +
52349 if (value) { +
52350 data[7] = value; +
52351 } +
52352 // Use source `ary` if it's smaller. +
52353 if (srcBitmask & WRAP_ARY_FLAG) { +
52354 data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); +
52355 } +
52356 // Use source `arity` if one is not provided. +
52357 if (data[9] == null) { +
52358 data[9] = source[9]; +
52359 } +
52360 // Use source `func` and merge bitmasks. +
52361 data[0] = source[0]; +
52362 data[1] = newBitmask; +
52363 +
52364 return data; +
52365 } +
52366 +
52367 /** +
52368 * This function is like +
52369 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +
52370 * except that it includes inherited enumerable properties. +
52371 * +
52372 * @private +
52373 * @param {Object} object The object to query. +
52374 * @returns {Array} Returns the array of property names. +
52375 */ +
52376 function nativeKeysIn(object) { +
52377 var result = []; +
52378 if (object != null) { +
52379 for (var key in Object(object)) { +
52380 result.push(key); +
52381 } +
52382 } +
52383 return result; +
52384 } +
52385 +
52386 /** +
52387 * Converts `value` to a string using `Object.prototype.toString`. +
52388 * +
52389 * @private +
52390 * @param {*} value The value to convert. +
52391 * @returns {string} Returns the converted string. +
52392 */ +
52393 function objectToString(value) { +
52394 return nativeObjectToString.call(value); +
52395 } +
52396 +
52397 /** +
52398 * A specialized version of `baseRest` which transforms the rest array. +
52399 * +
52400 * @private +
52401 * @param {Function} func The function to apply a rest parameter to. +
52402 * @param {number} [start=func.length-1] The start position of the rest parameter. +
52403 * @param {Function} transform The rest array transform. +
52404 * @returns {Function} Returns the new function. +
52405 */ +
52406 function overRest(func, start, transform) { +
52407 start = nativeMax(start === undefined ? (func.length - 1) : start, 0); +
52408 return function() { +
52409 var args = arguments, +
52410 index = -1, +
52411 length = nativeMax(args.length - start, 0), +
52412 array = Array(length); +
52413 +
52414 while (++index < length) { +
52415 array[index] = args[start + index]; +
52416 } +
52417 index = -1; +
52418 var otherArgs = Array(start + 1); +
52419 while (++index < start) { +
52420 otherArgs[index] = args[index]; +
52421 } +
52422 otherArgs[start] = transform(array); +
52423 return apply(func, this, otherArgs); +
52424 }; +
52425 } +
52426 +
52427 /** +
52428 * Gets the parent value at `path` of `object`. +
52429 * +
52430 * @private +
52431 * @param {Object} object The object to query. +
52432 * @param {Array} path The path to get the parent value of. +
52433 * @returns {*} Returns the parent value. +
52434 */ +
52435 function parent(object, path) { +
52436 return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); +
52437 } +
52438 +
52439 /** +
52440 * Reorder `array` according to the specified indexes where the element at +
52441 * the first index is assigned as the first element, the element at +
52442 * the second index is assigned as the second element, and so on. +
52443 * +
52444 * @private +
52445 * @param {Array} array The array to reorder. +
52446 * @param {Array} indexes The arranged array indexes. +
52447 * @returns {Array} Returns `array`. +
52448 */ +
52449 function reorder(array, indexes) { +
52450 var arrLength = array.length, +
52451 length = nativeMin(indexes.length, arrLength), +
52452 oldArray = copyArray(array); +
52453 +
52454 while (length--) { +
52455 var index = indexes[length]; +
52456 array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; +
52457 } +
52458 return array; +
52459 } +
52460 +
52461 /** +
52462 * Sets metadata for `func`. +
52463 * +
52464 * **Note:** If this function becomes hot, i.e. is invoked a lot in a short +
52465 * period of time, it will trip its breaker and transition to an identity +
52466 * function to avoid garbage collection pauses in V8. See +
52467 * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) +
52468 * for more details. +
52469 * +
52470 * @private +
52471 * @param {Function} func The function to associate metadata with. +
52472 * @param {*} data The metadata. +
52473 * @returns {Function} Returns `func`. +
52474 */ +
52475 var setData = shortOut(baseSetData); +
52476 +
52477 /** +
52478 * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). +
52479 * +
52480 * @private +
52481 * @param {Function} func The function to delay. +
52482 * @param {number} wait The number of milliseconds to delay invocation. +
52483 * @returns {number|Object} Returns the timer id or timeout object. +
52484 */ +
52485 var setTimeout = ctxSetTimeout || function(func, wait) { +
52486 return root.setTimeout(func, wait); +
52487 }; +
52488 +
52489 /** +
52490 * Sets the `toString` method of `func` to return `string`. +
52491 * +
52492 * @private +
52493 * @param {Function} func The function to modify. +
52494 * @param {Function} string The `toString` result. +
52495 * @returns {Function} Returns `func`. +
52496 */ +
52497 var setToString = shortOut(baseSetToString); +
52498 +
52499 /** +
52500 * Sets the `toString` method of `wrapper` to mimic the source of `reference` +
52501 * with wrapper details in a comment at the top of the source body. +
52502 * +
52503 * @private +
52504 * @param {Function} wrapper The function to modify. +
52505 * @param {Function} reference The reference function. +
52506 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
52507 * @returns {Function} Returns `wrapper`. +
52508 */ +
52509 function setWrapToString(wrapper, reference, bitmask) { +
52510 var source = (reference + ''); +
52511 return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); +
52512 } +
52513 +
52514 /** +
52515 * Creates a function that'll short out and invoke `identity` instead +
52516 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` +
52517 * milliseconds. +
52518 * +
52519 * @private +
52520 * @param {Function} func The function to restrict. +
52521 * @returns {Function} Returns the new shortable function. +
52522 */ +
52523 function shortOut(func) { +
52524 var count = 0, +
52525 lastCalled = 0; +
52526 +
52527 return function() { +
52528 var stamp = nativeNow(), +
52529 remaining = HOT_SPAN - (stamp - lastCalled); +
52530 +
52531 lastCalled = stamp; +
52532 if (remaining > 0) { +
52533 if (++count >= HOT_COUNT) { +
52534 return arguments[0]; +
52535 } +
52536 } else { +
52537 count = 0; +
52538 } +
52539 return func.apply(undefined, arguments); +
52540 }; +
52541 } +
52542 +
52543 /** +
52544 * A specialized version of `_.shuffle` which mutates and sets the size of `array`. +
52545 * +
52546 * @private +
52547 * @param {Array} array The array to shuffle. +
52548 * @param {number} [size=array.length] The size of `array`. +
52549 * @returns {Array} Returns `array`. +
52550 */ +
52551 function shuffleSelf(array, size) { +
52552 var index = -1, +
52553 length = array.length, +
52554 lastIndex = length - 1; +
52555 +
52556 size = size === undefined ? length : size; +
52557 while (++index < size) { +
52558 var rand = baseRandom(index, lastIndex), +
52559 value = array[rand]; +
52560 +
52561 array[rand] = array[index]; +
52562 array[index] = value; +
52563 } +
52564 array.length = size; +
52565 return array; +
52566 } +
52567 +
52568 /** +
52569 * Converts `string` to a property path array. +
52570 * +
52571 * @private +
52572 * @param {string} string The string to convert. +
52573 * @returns {Array} Returns the property path array. +
52574 */ +
52575 var stringToPath = memoizeCapped(function(string) { +
52576 var result = []; +
52577 if (string.charCodeAt(0) === 46 /* . */) { +
52578 result.push(''); +
52579 } +
52580 string.replace(rePropName, function(match, number, quote, subString) { +
52581 result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); +
52582 }); +
52583 return result; +
52584 }); +
52585 +
52586 /** +
52587 * Converts `value` to a string key if it's not a string or symbol. +
52588 * +
52589 * @private +
52590 * @param {*} value The value to inspect. +
52591 * @returns {string|symbol} Returns the key. +
52592 */ +
52593 function toKey(value) { +
52594 if (typeof value == 'string' || isSymbol(value)) { +
52595 return value; +
52596 } +
52597 var result = (value + ''); +
52598 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +
52599 } +
52600 +
52601 /** +
52602 * Converts `func` to its source code. +
52603 * +
52604 * @private +
52605 * @param {Function} func The function to convert. +
52606 * @returns {string} Returns the source code. +
52607 */ +
52608 function toSource(func) { +
52609 if (func != null) { +
52610 try { +
52611 return funcToString.call(func); +
52612 } catch (e) {} +
52613 try { +
52614 return (func + ''); +
52615 } catch (e) {} +
52616 } +
52617 return ''; +
52618 } +
52619 +
52620 /** +
52621 * Updates wrapper `details` based on `bitmask` flags. +
52622 * +
52623 * @private +
52624 * @returns {Array} details The details to modify. +
52625 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
52626 * @returns {Array} Returns `details`. +
52627 */ +
52628 function updateWrapDetails(details, bitmask) { +
52629 arrayEach(wrapFlags, function(pair) { +
52630 var value = '_.' + pair[0]; +
52631 if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { +
52632 details.push(value); +
52633 } +
52634 }); +
52635 return details.sort(); +
52636 } +
52637 +
52638 /** +
52639 * Creates a clone of `wrapper`. +
52640 * +
52641 * @private +
52642 * @param {Object} wrapper The wrapper to clone. +
52643 * @returns {Object} Returns the cloned wrapper. +
52644 */ +
52645 function wrapperClone(wrapper) { +
52646 if (wrapper instanceof LazyWrapper) { +
52647 return wrapper.clone(); +
52648 } +
52649 var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); +
52650 result.__actions__ = copyArray(wrapper.__actions__); +
52651 result.__index__ = wrapper.__index__; +
52652 result.__values__ = wrapper.__values__; +
52653 return result; +
52654 } +
52655 +
52656 /*------------------------------------------------------------------------*/ +
52657 +
52658 /** +
52659 * Creates an array of elements split into groups the length of `size`. +
52660 * If `array` can't be split evenly, the final chunk will be the remaining +
52661 * elements. +
52662 * +
52663 * @static +
52664 * @memberOf _ +
52665 * @since 3.0.0 +
52666 * @category Array +
52667 * @param {Array} array The array to process. +
52668 * @param {number} [size=1] The length of each chunk +
52669 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
52670 * @returns {Array} Returns the new array of chunks. +
52671 * @example +
52672 * +
52673 * _.chunk(['a', 'b', 'c', 'd'], 2); +
52674 * // => [['a', 'b'], ['c', 'd']] +
52675 * +
52676 * _.chunk(['a', 'b', 'c', 'd'], 3); +
52677 * // => [['a', 'b', 'c'], ['d']] +
52678 */ +
52679 function chunk(array, size, guard) { +
52680 if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { +
52681 size = 1; +
52682 } else { +
52683 size = nativeMax(toInteger(size), 0); +
52684 } +
52685 var length = array == null ? 0 : array.length; +
52686 if (!length || size < 1) { +
52687 return []; +
52688 } +
52689 var index = 0, +
52690 resIndex = 0, +
52691 result = Array(nativeCeil(length / size)); +
52692 +
52693 while (index < length) { +
52694 result[resIndex++] = baseSlice(array, index, (index += size)); +
52695 } +
52696 return result; +
52697 } +
52698 +
52699 /** +
52700 * Creates an array with all falsey values removed. The values `false`, `null`, +
52701 * `0`, `""`, `undefined`, and `NaN` are falsey. +
52702 * +
52703 * @static +
52704 * @memberOf _ +
52705 * @since 0.1.0 +
52706 * @category Array +
52707 * @param {Array} array The array to compact. +
52708 * @returns {Array} Returns the new array of filtered values. +
52709 * @example +
52710 * +
52711 * _.compact([0, 1, false, 2, '', 3]); +
52712 * // => [1, 2, 3] +
52713 */ +
52714 function compact(array) { +
52715 var index = -1, +
52716 length = array == null ? 0 : array.length, +
52717 resIndex = 0, +
52718 result = []; +
52719 +
52720 while (++index < length) { +
52721 var value = array[index]; +
52722 if (value) { +
52723 result[resIndex++] = value; +
52724 } +
52725 } +
52726 return result; +
52727 } +
52728 +
52729 /** +
52730 * Creates a new array concatenating `array` with any additional arrays +
52731 * and/or values. +
52732 * +
52733 * @static +
52734 * @memberOf _ +
52735 * @since 4.0.0 +
52736 * @category Array +
52737 * @param {Array} array The array to concatenate. +
52738 * @param {...*} [values] The values to concatenate. +
52739 * @returns {Array} Returns the new concatenated array. +
52740 * @example +
52741 * +
52742 * var array = [1]; +
52743 * var other = _.concat(array, 2, [3], [[4]]); +
52744 * +
52745 * console.log(other); +
52746 * // => [1, 2, 3, [4]] +
52747 * +
52748 * console.log(array); +
52749 * // => [1] +
52750 */ +
52751 function concat() { +
52752 var length = arguments.length; +
52753 if (!length) { +
52754 return []; +
52755 } +
52756 var args = Array(length - 1), +
52757 array = arguments[0], +
52758 index = length; +
52759 +
52760 while (index--) { +
52761 args[index - 1] = arguments[index]; +
52762 } +
52763 return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); +
52764 } +
52765 +
52766 /** +
52767 * Creates an array of `array` values not included in the other given arrays +
52768 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
52769 * for equality comparisons. The order and references of result values are +
52770 * determined by the first array. +
52771 * +
52772 * **Note:** Unlike `_.pullAll`, this method returns a new array. +
52773 * +
52774 * @static +
52775 * @memberOf _ +
52776 * @since 0.1.0 +
52777 * @category Array +
52778 * @param {Array} array The array to inspect. +
52779 * @param {...Array} [values] The values to exclude. +
52780 * @returns {Array} Returns the new array of filtered values. +
52781 * @see _.without, _.xor +
52782 * @example +
52783 * +
52784 * _.difference([2, 1], [2, 3]); +
52785 * // => [1] +
52786 */ +
52787 var difference = baseRest(function(array, values) { +
52788 return isArrayLikeObject(array) +
52789 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) +
52790 : []; +
52791 }); +
52792 +
52793 /** +
52794 * This method is like `_.difference` except that it accepts `iteratee` which +
52795 * is invoked for each element of `array` and `values` to generate the criterion +
52796 * by which they're compared. The order and references of result values are +
52797 * determined by the first array. The iteratee is invoked with one argument: +
52798 * (value). +
52799 * +
52800 * **Note:** Unlike `_.pullAllBy`, this method returns a new array. +
52801 * +
52802 * @static +
52803 * @memberOf _ +
52804 * @since 4.0.0 +
52805 * @category Array +
52806 * @param {Array} array The array to inspect. +
52807 * @param {...Array} [values] The values to exclude. +
52808 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
52809 * @returns {Array} Returns the new array of filtered values. +
52810 * @example +
52811 * +
52812 * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
52813 * // => [1.2] +
52814 * +
52815 * // The `_.property` iteratee shorthand. +
52816 * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); +
52817 * // => [{ 'x': 2 }] +
52818 */ +
52819 var differenceBy = baseRest(function(array, values) { +
52820 var iteratee = last(values); +
52821 if (isArrayLikeObject(iteratee)) { +
52822 iteratee = undefined; +
52823 } +
52824 return isArrayLikeObject(array) +
52825 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) +
52826 : []; +
52827 }); +
52828 +
52829 /** +
52830 * This method is like `_.difference` except that it accepts `comparator` +
52831 * which is invoked to compare elements of `array` to `values`. The order and +
52832 * references of result values are determined by the first array. The comparator +
52833 * is invoked with two arguments: (arrVal, othVal). +
52834 * +
52835 * **Note:** Unlike `_.pullAllWith`, this method returns a new array. +
52836 * +
52837 * @static +
52838 * @memberOf _ +
52839 * @since 4.0.0 +
52840 * @category Array +
52841 * @param {Array} array The array to inspect. +
52842 * @param {...Array} [values] The values to exclude. +
52843 * @param {Function} [comparator] The comparator invoked per element. +
52844 * @returns {Array} Returns the new array of filtered values. +
52845 * @example +
52846 * +
52847 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
52848 * +
52849 * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); +
52850 * // => [{ 'x': 2, 'y': 1 }] +
52851 */ +
52852 var differenceWith = baseRest(function(array, values) { +
52853 var comparator = last(values); +
52854 if (isArrayLikeObject(comparator)) { +
52855 comparator = undefined; +
52856 } +
52857 return isArrayLikeObject(array) +
52858 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) +
52859 : []; +
52860 }); +
52861 +
52862 /** +
52863 * Creates a slice of `array` with `n` elements dropped from the beginning. +
52864 * +
52865 * @static +
52866 * @memberOf _ +
52867 * @since 0.5.0 +
52868 * @category Array +
52869 * @param {Array} array The array to query. +
52870 * @param {number} [n=1] The number of elements to drop. +
52871 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
52872 * @returns {Array} Returns the slice of `array`. +
52873 * @example +
52874 * +
52875 * _.drop([1, 2, 3]); +
52876 * // => [2, 3] +
52877 * +
52878 * _.drop([1, 2, 3], 2); +
52879 * // => [3] +
52880 * +
52881 * _.drop([1, 2, 3], 5); +
52882 * // => [] +
52883 * +
52884 * _.drop([1, 2, 3], 0); +
52885 * // => [1, 2, 3] +
52886 */ +
52887 function drop(array, n, guard) { +
52888 var length = array == null ? 0 : array.length; +
52889 if (!length) { +
52890 return []; +
52891 } +
52892 n = (guard || n === undefined) ? 1 : toInteger(n); +
52893 return baseSlice(array, n < 0 ? 0 : n, length); +
52894 } +
52895 +
52896 /** +
52897 * Creates a slice of `array` with `n` elements dropped from the end. +
52898 * +
52899 * @static +
52900 * @memberOf _ +
52901 * @since 3.0.0 +
52902 * @category Array +
52903 * @param {Array} array The array to query. +
52904 * @param {number} [n=1] The number of elements to drop. +
52905 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
52906 * @returns {Array} Returns the slice of `array`. +
52907 * @example +
52908 * +
52909 * _.dropRight([1, 2, 3]); +
52910 * // => [1, 2] +
52911 * +
52912 * _.dropRight([1, 2, 3], 2); +
52913 * // => [1] +
52914 * +
52915 * _.dropRight([1, 2, 3], 5); +
52916 * // => [] +
52917 * +
52918 * _.dropRight([1, 2, 3], 0); +
52919 * // => [1, 2, 3] +
52920 */ +
52921 function dropRight(array, n, guard) { +
52922 var length = array == null ? 0 : array.length; +
52923 if (!length) { +
52924 return []; +
52925 } +
52926 n = (guard || n === undefined) ? 1 : toInteger(n); +
52927 n = length - n; +
52928 return baseSlice(array, 0, n < 0 ? 0 : n); +
52929 } +
52930 +
52931 /** +
52932 * Creates a slice of `array` excluding elements dropped from the end. +
52933 * Elements are dropped until `predicate` returns falsey. The predicate is +
52934 * invoked with three arguments: (value, index, array). +
52935 * +
52936 * @static +
52937 * @memberOf _ +
52938 * @since 3.0.0 +
52939 * @category Array +
52940 * @param {Array} array The array to query. +
52941 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
52942 * @returns {Array} Returns the slice of `array`. +
52943 * @example +
52944 * +
52945 * var users = [ +
52946 * { 'user': 'barney', 'active': true }, +
52947 * { 'user': 'fred', 'active': false }, +
52948 * { 'user': 'pebbles', 'active': false } +
52949 * ]; +
52950 * +
52951 * _.dropRightWhile(users, function(o) { return !o.active; }); +
52952 * // => objects for ['barney'] +
52953 * +
52954 * // The `_.matches` iteratee shorthand. +
52955 * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); +
52956 * // => objects for ['barney', 'fred'] +
52957 * +
52958 * // The `_.matchesProperty` iteratee shorthand. +
52959 * _.dropRightWhile(users, ['active', false]); +
52960 * // => objects for ['barney'] +
52961 * +
52962 * // The `_.property` iteratee shorthand. +
52963 * _.dropRightWhile(users, 'active'); +
52964 * // => objects for ['barney', 'fred', 'pebbles'] +
52965 */ +
52966 function dropRightWhile(array, predicate) { +
52967 return (array && array.length) +
52968 ? baseWhile(array, getIteratee(predicate, 3), true, true) +
52969 : []; +
52970 } +
52971 +
52972 /** +
52973 * Creates a slice of `array` excluding elements dropped from the beginning. +
52974 * Elements are dropped until `predicate` returns falsey. The predicate is +
52975 * invoked with three arguments: (value, index, array). +
52976 * +
52977 * @static +
52978 * @memberOf _ +
52979 * @since 3.0.0 +
52980 * @category Array +
52981 * @param {Array} array The array to query. +
52982 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
52983 * @returns {Array} Returns the slice of `array`. +
52984 * @example +
52985 * +
52986 * var users = [ +
52987 * { 'user': 'barney', 'active': false }, +
52988 * { 'user': 'fred', 'active': false }, +
52989 * { 'user': 'pebbles', 'active': true } +
52990 * ]; +
52991 * +
52992 * _.dropWhile(users, function(o) { return !o.active; }); +
52993 * // => objects for ['pebbles'] +
52994 * +
52995 * // The `_.matches` iteratee shorthand. +
52996 * _.dropWhile(users, { 'user': 'barney', 'active': false }); +
52997 * // => objects for ['fred', 'pebbles'] +
52998 * +
52999 * // The `_.matchesProperty` iteratee shorthand. +
53000 * _.dropWhile(users, ['active', false]); +
53001 * // => objects for ['pebbles'] +
53002 * +
53003 * // The `_.property` iteratee shorthand. +
53004 * _.dropWhile(users, 'active'); +
53005 * // => objects for ['barney', 'fred', 'pebbles'] +
53006 */ +
53007 function dropWhile(array, predicate) { +
53008 return (array && array.length) +
53009 ? baseWhile(array, getIteratee(predicate, 3), true) +
53010 : []; +
53011 } +
53012 +
53013 /** +
53014 * Fills elements of `array` with `value` from `start` up to, but not +
53015 * including, `end`. +
53016 * +
53017 * **Note:** This method mutates `array`. +
53018 * +
53019 * @static +
53020 * @memberOf _ +
53021 * @since 3.2.0 +
53022 * @category Array +
53023 * @param {Array} array The array to fill. +
53024 * @param {*} value The value to fill `array` with. +
53025 * @param {number} [start=0] The start position. +
53026 * @param {number} [end=array.length] The end position. +
53027 * @returns {Array} Returns `array`. +
53028 * @example +
53029 * +
53030 * var array = [1, 2, 3]; +
53031 * +
53032 * _.fill(array, 'a'); +
53033 * console.log(array); +
53034 * // => ['a', 'a', 'a'] +
53035 * +
53036 * _.fill(Array(3), 2); +
53037 * // => [2, 2, 2] +
53038 * +
53039 * _.fill([4, 6, 8, 10], '*', 1, 3); +
53040 * // => [4, '*', '*', 10] +
53041 */ +
53042 function fill(array, value, start, end) { +
53043 var length = array == null ? 0 : array.length; +
53044 if (!length) { +
53045 return []; +
53046 } +
53047 if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { +
53048 start = 0; +
53049 end = length; +
53050 } +
53051 return baseFill(array, value, start, end); +
53052 } +
53053 +
53054 /** +
53055 * This method is like `_.find` except that it returns the index of the first +
53056 * element `predicate` returns truthy for instead of the element itself. +
53057 * +
53058 * @static +
53059 * @memberOf _ +
53060 * @since 1.1.0 +
53061 * @category Array +
53062 * @param {Array} array The array to inspect. +
53063 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
53064 * @param {number} [fromIndex=0] The index to search from. +
53065 * @returns {number} Returns the index of the found element, else `-1`. +
53066 * @example +
53067 * +
53068 * var users = [ +
53069 * { 'user': 'barney', 'active': false }, +
53070 * { 'user': 'fred', 'active': false }, +
53071 * { 'user': 'pebbles', 'active': true } +
53072 * ]; +
53073 * +
53074 * _.findIndex(users, function(o) { return o.user == 'barney'; }); +
53075 * // => 0 +
53076 * +
53077 * // The `_.matches` iteratee shorthand. +
53078 * _.findIndex(users, { 'user': 'fred', 'active': false }); +
53079 * // => 1 +
53080 * +
53081 * // The `_.matchesProperty` iteratee shorthand. +
53082 * _.findIndex(users, ['active', false]); +
53083 * // => 0 +
53084 * +
53085 * // The `_.property` iteratee shorthand. +
53086 * _.findIndex(users, 'active'); +
53087 * // => 2 +
53088 */ +
53089 function findIndex(array, predicate, fromIndex) { +
53090 var length = array == null ? 0 : array.length; +
53091 if (!length) { +
53092 return -1; +
53093 } +
53094 var index = fromIndex == null ? 0 : toInteger(fromIndex); +
53095 if (index < 0) { +
53096 index = nativeMax(length + index, 0); +
53097 } +
53098 return baseFindIndex(array, getIteratee(predicate, 3), index); +
53099 } +
53100 +
53101 /** +
53102 * This method is like `_.findIndex` except that it iterates over elements +
53103 * of `collection` from right to left. +
53104 * +
53105 * @static +
53106 * @memberOf _ +
53107 * @since 2.0.0 +
53108 * @category Array +
53109 * @param {Array} array The array to inspect. +
53110 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
53111 * @param {number} [fromIndex=array.length-1] The index to search from. +
53112 * @returns {number} Returns the index of the found element, else `-1`. +
53113 * @example +
53114 * +
53115 * var users = [ +
53116 * { 'user': 'barney', 'active': true }, +
53117 * { 'user': 'fred', 'active': false }, +
53118 * { 'user': 'pebbles', 'active': false } +
53119 * ]; +
53120 * +
53121 * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); +
53122 * // => 2 +
53123 * +
53124 * // The `_.matches` iteratee shorthand. +
53125 * _.findLastIndex(users, { 'user': 'barney', 'active': true }); +
53126 * // => 0 +
53127 * +
53128 * // The `_.matchesProperty` iteratee shorthand. +
53129 * _.findLastIndex(users, ['active', false]); +
53130 * // => 2 +
53131 * +
53132 * // The `_.property` iteratee shorthand. +
53133 * _.findLastIndex(users, 'active'); +
53134 * // => 0 +
53135 */ +
53136 function findLastIndex(array, predicate, fromIndex) { +
53137 var length = array == null ? 0 : array.length; +
53138 if (!length) { +
53139 return -1; +
53140 } +
53141 var index = length - 1; +
53142 if (fromIndex !== undefined) { +
53143 index = toInteger(fromIndex); +
53144 index = fromIndex < 0 +
53145 ? nativeMax(length + index, 0) +
53146 : nativeMin(index, length - 1); +
53147 } +
53148 return baseFindIndex(array, getIteratee(predicate, 3), index, true); +
53149 } +
53150 +
53151 /** +
53152 * Flattens `array` a single level deep. +
53153 * +
53154 * @static +
53155 * @memberOf _ +
53156 * @since 0.1.0 +
53157 * @category Array +
53158 * @param {Array} array The array to flatten. +
53159 * @returns {Array} Returns the new flattened array. +
53160 * @example +
53161 * +
53162 * _.flatten([1, [2, [3, [4]], 5]]); +
53163 * // => [1, 2, [3, [4]], 5] +
53164 */ +
53165 function flatten(array) { +
53166 var length = array == null ? 0 : array.length; +
53167 return length ? baseFlatten(array, 1) : []; +
53168 } +
53169 +
53170 /** +
53171 * Recursively flattens `array`. +
53172 * +
53173 * @static +
53174 * @memberOf _ +
53175 * @since 3.0.0 +
53176 * @category Array +
53177 * @param {Array} array The array to flatten. +
53178 * @returns {Array} Returns the new flattened array. +
53179 * @example +
53180 * +
53181 * _.flattenDeep([1, [2, [3, [4]], 5]]); +
53182 * // => [1, 2, 3, 4, 5] +
53183 */ +
53184 function flattenDeep(array) { +
53185 var length = array == null ? 0 : array.length; +
53186 return length ? baseFlatten(array, INFINITY) : []; +
53187 } +
53188 +
53189 /** +
53190 * Recursively flatten `array` up to `depth` times. +
53191 * +
53192 * @static +
53193 * @memberOf _ +
53194 * @since 4.4.0 +
53195 * @category Array +
53196 * @param {Array} array The array to flatten. +
53197 * @param {number} [depth=1] The maximum recursion depth. +
53198 * @returns {Array} Returns the new flattened array. +
53199 * @example +
53200 * +
53201 * var array = [1, [2, [3, [4]], 5]]; +
53202 * +
53203 * _.flattenDepth(array, 1); +
53204 * // => [1, 2, [3, [4]], 5] +
53205 * +
53206 * _.flattenDepth(array, 2); +
53207 * // => [1, 2, 3, [4], 5] +
53208 */ +
53209 function flattenDepth(array, depth) { +
53210 var length = array == null ? 0 : array.length; +
53211 if (!length) { +
53212 return []; +
53213 } +
53214 depth = depth === undefined ? 1 : toInteger(depth); +
53215 return baseFlatten(array, depth); +
53216 } +
53217 +
53218 /** +
53219 * The inverse of `_.toPairs`; this method returns an object composed +
53220 * from key-value `pairs`. +
53221 * +
53222 * @static +
53223 * @memberOf _ +
53224 * @since 4.0.0 +
53225 * @category Array +
53226 * @param {Array} pairs The key-value pairs. +
53227 * @returns {Object} Returns the new object. +
53228 * @example +
53229 * +
53230 * _.fromPairs([['a', 1], ['b', 2]]); +
53231 * // => { 'a': 1, 'b': 2 } +
53232 */ +
53233 function fromPairs(pairs) { +
53234 var index = -1, +
53235 length = pairs == null ? 0 : pairs.length, +
53236 result = {}; +
53237 +
53238 while (++index < length) { +
53239 var pair = pairs[index]; +
53240 result[pair[0]] = pair[1]; +
53241 } +
53242 return result; +
53243 } +
53244 +
53245 /** +
53246 * Gets the first element of `array`. +
53247 * +
53248 * @static +
53249 * @memberOf _ +
53250 * @since 0.1.0 +
53251 * @alias first +
53252 * @category Array +
53253 * @param {Array} array The array to query. +
53254 * @returns {*} Returns the first element of `array`. +
53255 * @example +
53256 * +
53257 * _.head([1, 2, 3]); +
53258 * // => 1 +
53259 * +
53260 * _.head([]); +
53261 * // => undefined +
53262 */ +
53263 function head(array) { +
53264 return (array && array.length) ? array[0] : undefined; +
53265 } +
53266 +
53267 /** +
53268 * Gets the index at which the first occurrence of `value` is found in `array` +
53269 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
53270 * for equality comparisons. If `fromIndex` is negative, it's used as the +
53271 * offset from the end of `array`. +
53272 * +
53273 * @static +
53274 * @memberOf _ +
53275 * @since 0.1.0 +
53276 * @category Array +
53277 * @param {Array} array The array to inspect. +
53278 * @param {*} value The value to search for. +
53279 * @param {number} [fromIndex=0] The index to search from. +
53280 * @returns {number} Returns the index of the matched value, else `-1`. +
53281 * @example +
53282 * +
53283 * _.indexOf([1, 2, 1, 2], 2); +
53284 * // => 1 +
53285 * +
53286 * // Search from the `fromIndex`. +
53287 * _.indexOf([1, 2, 1, 2], 2, 2); +
53288 * // => 3 +
53289 */ +
53290 function indexOf(array, value, fromIndex) { +
53291 var length = array == null ? 0 : array.length; +
53292 if (!length) { +
53293 return -1; +
53294 } +
53295 var index = fromIndex == null ? 0 : toInteger(fromIndex); +
53296 if (index < 0) { +
53297 index = nativeMax(length + index, 0); +
53298 } +
53299 return baseIndexOf(array, value, index); +
53300 } +
53301 +
53302 /** +
53303 * Gets all but the last element of `array`. +
53304 * +
53305 * @static +
53306 * @memberOf _ +
53307 * @since 0.1.0 +
53308 * @category Array +
53309 * @param {Array} array The array to query. +
53310 * @returns {Array} Returns the slice of `array`. +
53311 * @example +
53312 * +
53313 * _.initial([1, 2, 3]); +
53314 * // => [1, 2] +
53315 */ +
53316 function initial(array) { +
53317 var length = array == null ? 0 : array.length; +
53318 return length ? baseSlice(array, 0, -1) : []; +
53319 } +
53320 +
53321 /** +
53322 * Creates an array of unique values that are included in all given arrays +
53323 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
53324 * for equality comparisons. The order and references of result values are +
53325 * determined by the first array. +
53326 * +
53327 * @static +
53328 * @memberOf _ +
53329 * @since 0.1.0 +
53330 * @category Array +
53331 * @param {...Array} [arrays] The arrays to inspect. +
53332 * @returns {Array} Returns the new array of intersecting values. +
53333 * @example +
53334 * +
53335 * _.intersection([2, 1], [2, 3]); +
53336 * // => [2] +
53337 */ +
53338 var intersection = baseRest(function(arrays) { +
53339 var mapped = arrayMap(arrays, castArrayLikeObject); +
53340 return (mapped.length && mapped[0] === arrays[0]) +
53341 ? baseIntersection(mapped) +
53342 : []; +
53343 }); +
53344 +
53345 /** +
53346 * This method is like `_.intersection` except that it accepts `iteratee` +
53347 * which is invoked for each element of each `arrays` to generate the criterion +
53348 * by which they're compared. The order and references of result values are +
53349 * determined by the first array. The iteratee is invoked with one argument: +
53350 * (value). +
53351 * +
53352 * @static +
53353 * @memberOf _ +
53354 * @since 4.0.0 +
53355 * @category Array +
53356 * @param {...Array} [arrays] The arrays to inspect. +
53357 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
53358 * @returns {Array} Returns the new array of intersecting values. +
53359 * @example +
53360 * +
53361 * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
53362 * // => [2.1] +
53363 * +
53364 * // The `_.property` iteratee shorthand. +
53365 * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
53366 * // => [{ 'x': 1 }] +
53367 */ +
53368 var intersectionBy = baseRest(function(arrays) { +
53369 var iteratee = last(arrays), +
53370 mapped = arrayMap(arrays, castArrayLikeObject); +
53371 +
53372 if (iteratee === last(mapped)) { +
53373 iteratee = undefined; +
53374 } else { +
53375 mapped.pop(); +
53376 } +
53377 return (mapped.length && mapped[0] === arrays[0]) +
53378 ? baseIntersection(mapped, getIteratee(iteratee, 2)) +
53379 : []; +
53380 }); +
53381 +
53382 /** +
53383 * This method is like `_.intersection` except that it accepts `comparator` +
53384 * which is invoked to compare elements of `arrays`. The order and references +
53385 * of result values are determined by the first array. The comparator is +
53386 * invoked with two arguments: (arrVal, othVal). +
53387 * +
53388 * @static +
53389 * @memberOf _ +
53390 * @since 4.0.0 +
53391 * @category Array +
53392 * @param {...Array} [arrays] The arrays to inspect. +
53393 * @param {Function} [comparator] The comparator invoked per element. +
53394 * @returns {Array} Returns the new array of intersecting values. +
53395 * @example +
53396 * +
53397 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
53398 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
53399 * +
53400 * _.intersectionWith(objects, others, _.isEqual); +
53401 * // => [{ 'x': 1, 'y': 2 }] +
53402 */ +
53403 var intersectionWith = baseRest(function(arrays) { +
53404 var comparator = last(arrays), +
53405 mapped = arrayMap(arrays, castArrayLikeObject); +
53406 +
53407 comparator = typeof comparator == 'function' ? comparator : undefined; +
53408 if (comparator) { +
53409 mapped.pop(); +
53410 } +
53411 return (mapped.length && mapped[0] === arrays[0]) +
53412 ? baseIntersection(mapped, undefined, comparator) +
53413 : []; +
53414 }); +
53415 +
53416 /** +
53417 * Converts all elements in `array` into a string separated by `separator`. +
53418 * +
53419 * @static +
53420 * @memberOf _ +
53421 * @since 4.0.0 +
53422 * @category Array +
53423 * @param {Array} array The array to convert. +
53424 * @param {string} [separator=','] The element separator. +
53425 * @returns {string} Returns the joined string. +
53426 * @example +
53427 * +
53428 * _.join(['a', 'b', 'c'], '~'); +
53429 * // => 'a~b~c' +
53430 */ +
53431 function join(array, separator) { +
53432 return array == null ? '' : nativeJoin.call(array, separator); +
53433 } +
53434 +
53435 /** +
53436 * Gets the last element of `array`. +
53437 * +
53438 * @static +
53439 * @memberOf _ +
53440 * @since 0.1.0 +
53441 * @category Array +
53442 * @param {Array} array The array to query. +
53443 * @returns {*} Returns the last element of `array`. +
53444 * @example +
53445 * +
53446 * _.last([1, 2, 3]); +
53447 * // => 3 +
53448 */ +
53449 function last(array) { +
53450 var length = array == null ? 0 : array.length; +
53451 return length ? array[length - 1] : undefined; +
53452 } +
53453 +
53454 /** +
53455 * This method is like `_.indexOf` except that it iterates over elements of +
53456 * `array` from right to left. +
53457 * +
53458 * @static +
53459 * @memberOf _ +
53460 * @since 0.1.0 +
53461 * @category Array +
53462 * @param {Array} array The array to inspect. +
53463 * @param {*} value The value to search for. +
53464 * @param {number} [fromIndex=array.length-1] The index to search from. +
53465 * @returns {number} Returns the index of the matched value, else `-1`. +
53466 * @example +
53467 * +
53468 * _.lastIndexOf([1, 2, 1, 2], 2); +
53469 * // => 3 +
53470 * +
53471 * // Search from the `fromIndex`. +
53472 * _.lastIndexOf([1, 2, 1, 2], 2, 2); +
53473 * // => 1 +
53474 */ +
53475 function lastIndexOf(array, value, fromIndex) { +
53476 var length = array == null ? 0 : array.length; +
53477 if (!length) { +
53478 return -1; +
53479 } +
53480 var index = length; +
53481 if (fromIndex !== undefined) { +
53482 index = toInteger(fromIndex); +
53483 index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); +
53484 } +
53485 return value === value +
53486 ? strictLastIndexOf(array, value, index) +
53487 : baseFindIndex(array, baseIsNaN, index, true); +
53488 } +
53489 +
53490 /** +
53491 * Gets the element at index `n` of `array`. If `n` is negative, the nth +
53492 * element from the end is returned. +
53493 * +
53494 * @static +
53495 * @memberOf _ +
53496 * @since 4.11.0 +
53497 * @category Array +
53498 * @param {Array} array The array to query. +
53499 * @param {number} [n=0] The index of the element to return. +
53500 * @returns {*} Returns the nth element of `array`. +
53501 * @example +
53502 * +
53503 * var array = ['a', 'b', 'c', 'd']; +
53504 * +
53505 * _.nth(array, 1); +
53506 * // => 'b' +
53507 * +
53508 * _.nth(array, -2); +
53509 * // => 'c'; +
53510 */ +
53511 function nth(array, n) { +
53512 return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; +
53513 } +
53514 +
53515 /** +
53516 * Removes all given values from `array` using +
53517 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
53518 * for equality comparisons. +
53519 * +
53520 * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` +
53521 * to remove elements from an array by predicate. +
53522 * +
53523 * @static +
53524 * @memberOf _ +
53525 * @since 2.0.0 +
53526 * @category Array +
53527 * @param {Array} array The array to modify. +
53528 * @param {...*} [values] The values to remove. +
53529 * @returns {Array} Returns `array`. +
53530 * @example +
53531 * +
53532 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +
53533 * +
53534 * _.pull(array, 'a', 'c'); +
53535 * console.log(array); +
53536 * // => ['b', 'b'] +
53537 */ +
53538 var pull = baseRest(pullAll); +
53539 +
53540 /** +
53541 * This method is like `_.pull` except that it accepts an array of values to remove. +
53542 * +
53543 * **Note:** Unlike `_.difference`, this method mutates `array`. +
53544 * +
53545 * @static +
53546 * @memberOf _ +
53547 * @since 4.0.0 +
53548 * @category Array +
53549 * @param {Array} array The array to modify. +
53550 * @param {Array} values The values to remove. +
53551 * @returns {Array} Returns `array`. +
53552 * @example +
53553 * +
53554 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +
53555 * +
53556 * _.pullAll(array, ['a', 'c']); +
53557 * console.log(array); +
53558 * // => ['b', 'b'] +
53559 */ +
53560 function pullAll(array, values) { +
53561 return (array && array.length && values && values.length) +
53562 ? basePullAll(array, values) +
53563 : array; +
53564 } +
53565 +
53566 /** +
53567 * This method is like `_.pullAll` except that it accepts `iteratee` which is +
53568 * invoked for each element of `array` and `values` to generate the criterion +
53569 * by which they're compared. The iteratee is invoked with one argument: (value). +
53570 * +
53571 * **Note:** Unlike `_.differenceBy`, this method mutates `array`. +
53572 * +
53573 * @static +
53574 * @memberOf _ +
53575 * @since 4.0.0 +
53576 * @category Array +
53577 * @param {Array} array The array to modify. +
53578 * @param {Array} values The values to remove. +
53579 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
53580 * @returns {Array} Returns `array`. +
53581 * @example +
53582 * +
53583 * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; +
53584 * +
53585 * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); +
53586 * console.log(array); +
53587 * // => [{ 'x': 2 }] +
53588 */ +
53589 function pullAllBy(array, values, iteratee) { +
53590 return (array && array.length && values && values.length) +
53591 ? basePullAll(array, values, getIteratee(iteratee, 2)) +
53592 : array; +
53593 } +
53594 +
53595 /** +
53596 * This method is like `_.pullAll` except that it accepts `comparator` which +
53597 * is invoked to compare elements of `array` to `values`. The comparator is +
53598 * invoked with two arguments: (arrVal, othVal). +
53599 * +
53600 * **Note:** Unlike `_.differenceWith`, this method mutates `array`. +
53601 * +
53602 * @static +
53603 * @memberOf _ +
53604 * @since 4.6.0 +
53605 * @category Array +
53606 * @param {Array} array The array to modify. +
53607 * @param {Array} values The values to remove. +
53608 * @param {Function} [comparator] The comparator invoked per element. +
53609 * @returns {Array} Returns `array`. +
53610 * @example +
53611 * +
53612 * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; +
53613 * +
53614 * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); +
53615 * console.log(array); +
53616 * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] +
53617 */ +
53618 function pullAllWith(array, values, comparator) { +
53619 return (array && array.length && values && values.length) +
53620 ? basePullAll(array, values, undefined, comparator) +
53621 : array; +
53622 } +
53623 +
53624 /** +
53625 * Removes elements from `array` corresponding to `indexes` and returns an +
53626 * array of removed elements. +
53627 * +
53628 * **Note:** Unlike `_.at`, this method mutates `array`. +
53629 * +
53630 * @static +
53631 * @memberOf _ +
53632 * @since 3.0.0 +
53633 * @category Array +
53634 * @param {Array} array The array to modify. +
53635 * @param {...(number|number[])} [indexes] The indexes of elements to remove. +
53636 * @returns {Array} Returns the new array of removed elements. +
53637 * @example +
53638 * +
53639 * var array = ['a', 'b', 'c', 'd']; +
53640 * var pulled = _.pullAt(array, [1, 3]); +
53641 * +
53642 * console.log(array); +
53643 * // => ['a', 'c'] +
53644 * +
53645 * console.log(pulled); +
53646 * // => ['b', 'd'] +
53647 */ +
53648 var pullAt = flatRest(function(array, indexes) { +
53649 var length = array == null ? 0 : array.length, +
53650 result = baseAt(array, indexes); +
53651 +
53652 basePullAt(array, arrayMap(indexes, function(index) { +
53653 return isIndex(index, length) ? +index : index; +
53654 }).sort(compareAscending)); +
53655 +
53656 return result; +
53657 }); +
53658 +
53659 /** +
53660 * Removes all elements from `array` that `predicate` returns truthy for +
53661 * and returns an array of the removed elements. The predicate is invoked +
53662 * with three arguments: (value, index, array). +
53663 * +
53664 * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` +
53665 * to pull elements from an array by value. +
53666 * +
53667 * @static +
53668 * @memberOf _ +
53669 * @since 2.0.0 +
53670 * @category Array +
53671 * @param {Array} array The array to modify. +
53672 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
53673 * @returns {Array} Returns the new array of removed elements. +
53674 * @example +
53675 * +
53676 * var array = [1, 2, 3, 4]; +
53677 * var evens = _.remove(array, function(n) { +
53678 * return n % 2 == 0; +
53679 * }); +
53680 * +
53681 * console.log(array); +
53682 * // => [1, 3] +
53683 * +
53684 * console.log(evens); +
53685 * // => [2, 4] +
53686 */ +
53687 function remove(array, predicate) { +
53688 var result = []; +
53689 if (!(array && array.length)) { +
53690 return result; +
53691 } +
53692 var index = -1, +
53693 indexes = [], +
53694 length = array.length; +
53695 +
53696 predicate = getIteratee(predicate, 3); +
53697 while (++index < length) { +
53698 var value = array[index]; +
53699 if (predicate(value, index, array)) { +
53700 result.push(value); +
53701 indexes.push(index); +
53702 } +
53703 } +
53704 basePullAt(array, indexes); +
53705 return result; +
53706 } +
53707 +
53708 /** +
53709 * Reverses `array` so that the first element becomes the last, the second +
53710 * element becomes the second to last, and so on. +
53711 * +
53712 * **Note:** This method mutates `array` and is based on +
53713 * [`Array#reverse`](https://mdn.io/Array/reverse). +
53714 * +
53715 * @static +
53716 * @memberOf _ +
53717 * @since 4.0.0 +
53718 * @category Array +
53719 * @param {Array} array The array to modify. +
53720 * @returns {Array} Returns `array`. +
53721 * @example +
53722 * +
53723 * var array = [1, 2, 3]; +
53724 * +
53725 * _.reverse(array); +
53726 * // => [3, 2, 1] +
53727 * +
53728 * console.log(array); +
53729 * // => [3, 2, 1] +
53730 */ +
53731 function reverse(array) { +
53732 return array == null ? array : nativeReverse.call(array); +
53733 } +
53734 +
53735 /** +
53736 * Creates a slice of `array` from `start` up to, but not including, `end`. +
53737 * +
53738 * **Note:** This method is used instead of +
53739 * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are +
53740 * returned. +
53741 * +
53742 * @static +
53743 * @memberOf _ +
53744 * @since 3.0.0 +
53745 * @category Array +
53746 * @param {Array} array The array to slice. +
53747 * @param {number} [start=0] The start position. +
53748 * @param {number} [end=array.length] The end position. +
53749 * @returns {Array} Returns the slice of `array`. +
53750 */ +
53751 function slice(array, start, end) { +
53752 var length = array == null ? 0 : array.length; +
53753 if (!length) { +
53754 return []; +
53755 } +
53756 if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { +
53757 start = 0; +
53758 end = length; +
53759 } +
53760 else { +
53761 start = start == null ? 0 : toInteger(start); +
53762 end = end === undefined ? length : toInteger(end); +
53763 } +
53764 return baseSlice(array, start, end); +
53765 } +
53766 +
53767 /** +
53768 * Uses a binary search to determine the lowest index at which `value` +
53769 * should be inserted into `array` in order to maintain its sort order. +
53770 * +
53771 * @static +
53772 * @memberOf _ +
53773 * @since 0.1.0 +
53774 * @category Array +
53775 * @param {Array} array The sorted array to inspect. +
53776 * @param {*} value The value to evaluate. +
53777 * @returns {number} Returns the index at which `value` should be inserted +
53778 * into `array`. +
53779 * @example +
53780 * +
53781 * _.sortedIndex([30, 50], 40); +
53782 * // => 1 +
53783 */ +
53784 function sortedIndex(array, value) { +
53785 return baseSortedIndex(array, value); +
53786 } +
53787 +
53788 /** +
53789 * This method is like `_.sortedIndex` except that it accepts `iteratee` +
53790 * which is invoked for `value` and each element of `array` to compute their +
53791 * sort ranking. The iteratee is invoked with one argument: (value). +
53792 * +
53793 * @static +
53794 * @memberOf _ +
53795 * @since 4.0.0 +
53796 * @category Array +
53797 * @param {Array} array The sorted array to inspect. +
53798 * @param {*} value The value to evaluate. +
53799 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
53800 * @returns {number} Returns the index at which `value` should be inserted +
53801 * into `array`. +
53802 * @example +
53803 * +
53804 * var objects = [{ 'x': 4 }, { 'x': 5 }]; +
53805 * +
53806 * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +
53807 * // => 0 +
53808 * +
53809 * // The `_.property` iteratee shorthand. +
53810 * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); +
53811 * // => 0 +
53812 */ +
53813 function sortedIndexBy(array, value, iteratee) { +
53814 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); +
53815 } +
53816 +
53817 /** +
53818 * This method is like `_.indexOf` except that it performs a binary +
53819 * search on a sorted `array`. +
53820 * +
53821 * @static +
53822 * @memberOf _ +
53823 * @since 4.0.0 +
53824 * @category Array +
53825 * @param {Array} array The array to inspect. +
53826 * @param {*} value The value to search for. +
53827 * @returns {number} Returns the index of the matched value, else `-1`. +
53828 * @example +
53829 * +
53830 * _.sortedIndexOf([4, 5, 5, 5, 6], 5); +
53831 * // => 1 +
53832 */ +
53833 function sortedIndexOf(array, value) { +
53834 var length = array == null ? 0 : array.length; +
53835 if (length) { +
53836 var index = baseSortedIndex(array, value); +
53837 if (index < length && eq(array[index], value)) { +
53838 return index; +
53839 } +
53840 } +
53841 return -1; +
53842 } +
53843 +
53844 /** +
53845 * This method is like `_.sortedIndex` except that it returns the highest +
53846 * index at which `value` should be inserted into `array` in order to +
53847 * maintain its sort order. +
53848 * +
53849 * @static +
53850 * @memberOf _ +
53851 * @since 3.0.0 +
53852 * @category Array +
53853 * @param {Array} array The sorted array to inspect. +
53854 * @param {*} value The value to evaluate. +
53855 * @returns {number} Returns the index at which `value` should be inserted +
53856 * into `array`. +
53857 * @example +
53858 * +
53859 * _.sortedLastIndex([4, 5, 5, 5, 6], 5); +
53860 * // => 4 +
53861 */ +
53862 function sortedLastIndex(array, value) { +
53863 return baseSortedIndex(array, value, true); +
53864 } +
53865 +
53866 /** +
53867 * This method is like `_.sortedLastIndex` except that it accepts `iteratee` +
53868 * which is invoked for `value` and each element of `array` to compute their +
53869 * sort ranking. The iteratee is invoked with one argument: (value). +
53870 * +
53871 * @static +
53872 * @memberOf _ +
53873 * @since 4.0.0 +
53874 * @category Array +
53875 * @param {Array} array The sorted array to inspect. +
53876 * @param {*} value The value to evaluate. +
53877 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
53878 * @returns {number} Returns the index at which `value` should be inserted +
53879 * into `array`. +
53880 * @example +
53881 * +
53882 * var objects = [{ 'x': 4 }, { 'x': 5 }]; +
53883 * +
53884 * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +
53885 * // => 1 +
53886 * +
53887 * // The `_.property` iteratee shorthand. +
53888 * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); +
53889 * // => 1 +
53890 */ +
53891 function sortedLastIndexBy(array, value, iteratee) { +
53892 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); +
53893 } +
53894 +
53895 /** +
53896 * This method is like `_.lastIndexOf` except that it performs a binary +
53897 * search on a sorted `array`. +
53898 * +
53899 * @static +
53900 * @memberOf _ +
53901 * @since 4.0.0 +
53902 * @category Array +
53903 * @param {Array} array The array to inspect. +
53904 * @param {*} value The value to search for. +
53905 * @returns {number} Returns the index of the matched value, else `-1`. +
53906 * @example +
53907 * +
53908 * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); +
53909 * // => 3 +
53910 */ +
53911 function sortedLastIndexOf(array, value) { +
53912 var length = array == null ? 0 : array.length; +
53913 if (length) { +
53914 var index = baseSortedIndex(array, value, true) - 1; +
53915 if (eq(array[index], value)) { +
53916 return index; +
53917 } +
53918 } +
53919 return -1; +
53920 } +
53921 +
53922 /** +
53923 * This method is like `_.uniq` except that it's designed and optimized +
53924 * for sorted arrays. +
53925 * +
53926 * @static +
53927 * @memberOf _ +
53928 * @since 4.0.0 +
53929 * @category Array +
53930 * @param {Array} array The array to inspect. +
53931 * @returns {Array} Returns the new duplicate free array. +
53932 * @example +
53933 * +
53934 * _.sortedUniq([1, 1, 2]); +
53935 * // => [1, 2] +
53936 */ +
53937 function sortedUniq(array) { +
53938 return (array && array.length) +
53939 ? baseSortedUniq(array) +
53940 : []; +
53941 } +
53942 +
53943 /** +
53944 * This method is like `_.uniqBy` except that it's designed and optimized +
53945 * for sorted arrays. +
53946 * +
53947 * @static +
53948 * @memberOf _ +
53949 * @since 4.0.0 +
53950 * @category Array +
53951 * @param {Array} array The array to inspect. +
53952 * @param {Function} [iteratee] The iteratee invoked per element. +
53953 * @returns {Array} Returns the new duplicate free array. +
53954 * @example +
53955 * +
53956 * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); +
53957 * // => [1.1, 2.3] +
53958 */ +
53959 function sortedUniqBy(array, iteratee) { +
53960 return (array && array.length) +
53961 ? baseSortedUniq(array, getIteratee(iteratee, 2)) +
53962 : []; +
53963 } +
53964 +
53965 /** +
53966 * Gets all but the first element of `array`. +
53967 * +
53968 * @static +
53969 * @memberOf _ +
53970 * @since 4.0.0 +
53971 * @category Array +
53972 * @param {Array} array The array to query. +
53973 * @returns {Array} Returns the slice of `array`. +
53974 * @example +
53975 * +
53976 * _.tail([1, 2, 3]); +
53977 * // => [2, 3] +
53978 */ +
53979 function tail(array) { +
53980 var length = array == null ? 0 : array.length; +
53981 return length ? baseSlice(array, 1, length) : []; +
53982 } +
53983 +
53984 /** +
53985 * Creates a slice of `array` with `n` elements taken from the beginning. +
53986 * +
53987 * @static +
53988 * @memberOf _ +
53989 * @since 0.1.0 +
53990 * @category Array +
53991 * @param {Array} array The array to query. +
53992 * @param {number} [n=1] The number of elements to take. +
53993 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
53994 * @returns {Array} Returns the slice of `array`. +
53995 * @example +
53996 * +
53997 * _.take([1, 2, 3]); +
53998 * // => [1] +
53999 * +
54000 * _.take([1, 2, 3], 2); +
54001 * // => [1, 2] +
54002 * +
54003 * _.take([1, 2, 3], 5); +
54004 * // => [1, 2, 3] +
54005 * +
54006 * _.take([1, 2, 3], 0); +
54007 * // => [] +
54008 */ +
54009 function take(array, n, guard) { +
54010 if (!(array && array.length)) { +
54011 return []; +
54012 } +
54013 n = (guard || n === undefined) ? 1 : toInteger(n); +
54014 return baseSlice(array, 0, n < 0 ? 0 : n); +
54015 } +
54016 +
54017 /** +
54018 * Creates a slice of `array` with `n` elements taken from the end. +
54019 * +
54020 * @static +
54021 * @memberOf _ +
54022 * @since 3.0.0 +
54023 * @category Array +
54024 * @param {Array} array The array to query. +
54025 * @param {number} [n=1] The number of elements to take. +
54026 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
54027 * @returns {Array} Returns the slice of `array`. +
54028 * @example +
54029 * +
54030 * _.takeRight([1, 2, 3]); +
54031 * // => [3] +
54032 * +
54033 * _.takeRight([1, 2, 3], 2); +
54034 * // => [2, 3] +
54035 * +
54036 * _.takeRight([1, 2, 3], 5); +
54037 * // => [1, 2, 3] +
54038 * +
54039 * _.takeRight([1, 2, 3], 0); +
54040 * // => [] +
54041 */ +
54042 function takeRight(array, n, guard) { +
54043 var length = array == null ? 0 : array.length; +
54044 if (!length) { +
54045 return []; +
54046 } +
54047 n = (guard || n === undefined) ? 1 : toInteger(n); +
54048 n = length - n; +
54049 return baseSlice(array, n < 0 ? 0 : n, length); +
54050 } +
54051 +
54052 /** +
54053 * Creates a slice of `array` with elements taken from the end. Elements are +
54054 * taken until `predicate` returns falsey. The predicate is invoked with +
54055 * three arguments: (value, index, array). +
54056 * +
54057 * @static +
54058 * @memberOf _ +
54059 * @since 3.0.0 +
54060 * @category Array +
54061 * @param {Array} array The array to query. +
54062 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
54063 * @returns {Array} Returns the slice of `array`. +
54064 * @example +
54065 * +
54066 * var users = [ +
54067 * { 'user': 'barney', 'active': true }, +
54068 * { 'user': 'fred', 'active': false }, +
54069 * { 'user': 'pebbles', 'active': false } +
54070 * ]; +
54071 * +
54072 * _.takeRightWhile(users, function(o) { return !o.active; }); +
54073 * // => objects for ['fred', 'pebbles'] +
54074 * +
54075 * // The `_.matches` iteratee shorthand. +
54076 * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); +
54077 * // => objects for ['pebbles'] +
54078 * +
54079 * // The `_.matchesProperty` iteratee shorthand. +
54080 * _.takeRightWhile(users, ['active', false]); +
54081 * // => objects for ['fred', 'pebbles'] +
54082 * +
54083 * // The `_.property` iteratee shorthand. +
54084 * _.takeRightWhile(users, 'active'); +
54085 * // => [] +
54086 */ +
54087 function takeRightWhile(array, predicate) { +
54088 return (array && array.length) +
54089 ? baseWhile(array, getIteratee(predicate, 3), false, true) +
54090 : []; +
54091 } +
54092 +
54093 /** +
54094 * Creates a slice of `array` with elements taken from the beginning. Elements +
54095 * are taken until `predicate` returns falsey. The predicate is invoked with +
54096 * three arguments: (value, index, array). +
54097 * +
54098 * @static +
54099 * @memberOf _ +
54100 * @since 3.0.0 +
54101 * @category Array +
54102 * @param {Array} array The array to query. +
54103 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
54104 * @returns {Array} Returns the slice of `array`. +
54105 * @example +
54106 * +
54107 * var users = [ +
54108 * { 'user': 'barney', 'active': false }, +
54109 * { 'user': 'fred', 'active': false }, +
54110 * { 'user': 'pebbles', 'active': true } +
54111 * ]; +
54112 * +
54113 * _.takeWhile(users, function(o) { return !o.active; }); +
54114 * // => objects for ['barney', 'fred'] +
54115 * +
54116 * // The `_.matches` iteratee shorthand. +
54117 * _.takeWhile(users, { 'user': 'barney', 'active': false }); +
54118 * // => objects for ['barney'] +
54119 * +
54120 * // The `_.matchesProperty` iteratee shorthand. +
54121 * _.takeWhile(users, ['active', false]); +
54122 * // => objects for ['barney', 'fred'] +
54123 * +
54124 * // The `_.property` iteratee shorthand. +
54125 * _.takeWhile(users, 'active'); +
54126 * // => [] +
54127 */ +
54128 function takeWhile(array, predicate) { +
54129 return (array && array.length) +
54130 ? baseWhile(array, getIteratee(predicate, 3)) +
54131 : []; +
54132 } +
54133 +
54134 /** +
54135 * Creates an array of unique values, in order, from all given arrays using +
54136 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
54137 * for equality comparisons. +
54138 * +
54139 * @static +
54140 * @memberOf _ +
54141 * @since 0.1.0 +
54142 * @category Array +
54143 * @param {...Array} [arrays] The arrays to inspect. +
54144 * @returns {Array} Returns the new array of combined values. +
54145 * @example +
54146 * +
54147 * _.union([2], [1, 2]); +
54148 * // => [2, 1] +
54149 */ +
54150 var union = baseRest(function(arrays) { +
54151 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); +
54152 }); +
54153 +
54154 /** +
54155 * This method is like `_.union` except that it accepts `iteratee` which is +
54156 * invoked for each element of each `arrays` to generate the criterion by +
54157 * which uniqueness is computed. Result values are chosen from the first +
54158 * array in which the value occurs. The iteratee is invoked with one argument: +
54159 * (value). +
54160 * +
54161 * @static +
54162 * @memberOf _ +
54163 * @since 4.0.0 +
54164 * @category Array +
54165 * @param {...Array} [arrays] The arrays to inspect. +
54166 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
54167 * @returns {Array} Returns the new array of combined values. +
54168 * @example +
54169 * +
54170 * _.unionBy([2.1], [1.2, 2.3], Math.floor); +
54171 * // => [2.1, 1.2] +
54172 * +
54173 * // The `_.property` iteratee shorthand. +
54174 * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
54175 * // => [{ 'x': 1 }, { 'x': 2 }] +
54176 */ +
54177 var unionBy = baseRest(function(arrays) { +
54178 var iteratee = last(arrays); +
54179 if (isArrayLikeObject(iteratee)) { +
54180 iteratee = undefined; +
54181 } +
54182 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); +
54183 }); +
54184 +
54185 /** +
54186 * This method is like `_.union` except that it accepts `comparator` which +
54187 * is invoked to compare elements of `arrays`. Result values are chosen from +
54188 * the first array in which the value occurs. The comparator is invoked +
54189 * with two arguments: (arrVal, othVal). +
54190 * +
54191 * @static +
54192 * @memberOf _ +
54193 * @since 4.0.0 +
54194 * @category Array +
54195 * @param {...Array} [arrays] The arrays to inspect. +
54196 * @param {Function} [comparator] The comparator invoked per element. +
54197 * @returns {Array} Returns the new array of combined values. +
54198 * @example +
54199 * +
54200 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
54201 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
54202 * +
54203 * _.unionWith(objects, others, _.isEqual); +
54204 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +
54205 */ +
54206 var unionWith = baseRest(function(arrays) { +
54207 var comparator = last(arrays); +
54208 comparator = typeof comparator == 'function' ? comparator : undefined; +
54209 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); +
54210 }); +
54211 +
54212 /** +
54213 * Creates a duplicate-free version of an array, using +
54214 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
54215 * for equality comparisons, in which only the first occurrence of each element +
54216 * is kept. The order of result values is determined by the order they occur +
54217 * in the array. +
54218 * +
54219 * @static +
54220 * @memberOf _ +
54221 * @since 0.1.0 +
54222 * @category Array +
54223 * @param {Array} array The array to inspect. +
54224 * @returns {Array} Returns the new duplicate free array. +
54225 * @example +
54226 * +
54227 * _.uniq([2, 1, 2]); +
54228 * // => [2, 1] +
54229 */ +
54230 function uniq(array) { +
54231 return (array && array.length) ? baseUniq(array) : []; +
54232 } +
54233 +
54234 /** +
54235 * This method is like `_.uniq` except that it accepts `iteratee` which is +
54236 * invoked for each element in `array` to generate the criterion by which +
54237 * uniqueness is computed. The order of result values is determined by the +
54238 * order they occur in the array. The iteratee is invoked with one argument: +
54239 * (value). +
54240 * +
54241 * @static +
54242 * @memberOf _ +
54243 * @since 4.0.0 +
54244 * @category Array +
54245 * @param {Array} array The array to inspect. +
54246 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
54247 * @returns {Array} Returns the new duplicate free array. +
54248 * @example +
54249 * +
54250 * _.uniqBy([2.1, 1.2, 2.3], Math.floor); +
54251 * // => [2.1, 1.2] +
54252 * +
54253 * // The `_.property` iteratee shorthand. +
54254 * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); +
54255 * // => [{ 'x': 1 }, { 'x': 2 }] +
54256 */ +
54257 function uniqBy(array, iteratee) { +
54258 return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; +
54259 } +
54260 +
54261 /** +
54262 * This method is like `_.uniq` except that it accepts `comparator` which +
54263 * is invoked to compare elements of `array`. The order of result values is +
54264 * determined by the order they occur in the array.The comparator is invoked +
54265 * with two arguments: (arrVal, othVal). +
54266 * +
54267 * @static +
54268 * @memberOf _ +
54269 * @since 4.0.0 +
54270 * @category Array +
54271 * @param {Array} array The array to inspect. +
54272 * @param {Function} [comparator] The comparator invoked per element. +
54273 * @returns {Array} Returns the new duplicate free array. +
54274 * @example +
54275 * +
54276 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
54277 * +
54278 * _.uniqWith(objects, _.isEqual); +
54279 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] +
54280 */ +
54281 function uniqWith(array, comparator) { +
54282 comparator = typeof comparator == 'function' ? comparator : undefined; +
54283 return (array && array.length) ? baseUniq(array, undefined, comparator) : []; +
54284 } +
54285 +
54286 /** +
54287 * This method is like `_.zip` except that it accepts an array of grouped +
54288 * elements and creates an array regrouping the elements to their pre-zip +
54289 * configuration. +
54290 * +
54291 * @static +
54292 * @memberOf _ +
54293 * @since 1.2.0 +
54294 * @category Array +
54295 * @param {Array} array The array of grouped elements to process. +
54296 * @returns {Array} Returns the new array of regrouped elements. +
54297 * @example +
54298 * +
54299 * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); +
54300 * // => [['a', 1, true], ['b', 2, false]] +
54301 * +
54302 * _.unzip(zipped); +
54303 * // => [['a', 'b'], [1, 2], [true, false]] +
54304 */ +
54305 function unzip(array) { +
54306 if (!(array && array.length)) { +
54307 return []; +
54308 } +
54309 var length = 0; +
54310 array = arrayFilter(array, function(group) { +
54311 if (isArrayLikeObject(group)) { +
54312 length = nativeMax(group.length, length); +
54313 return true; +
54314 } +
54315 }); +
54316 return baseTimes(length, function(index) { +
54317 return arrayMap(array, baseProperty(index)); +
54318 }); +
54319 } +
54320 +
54321 /** +
54322 * This method is like `_.unzip` except that it accepts `iteratee` to specify +
54323 * how regrouped values should be combined. The iteratee is invoked with the +
54324 * elements of each group: (...group). +
54325 * +
54326 * @static +
54327 * @memberOf _ +
54328 * @since 3.8.0 +
54329 * @category Array +
54330 * @param {Array} array The array of grouped elements to process. +
54331 * @param {Function} [iteratee=_.identity] The function to combine +
54332 * regrouped values. +
54333 * @returns {Array} Returns the new array of regrouped elements. +
54334 * @example +
54335 * +
54336 * var zipped = _.zip([1, 2], [10, 20], [100, 200]); +
54337 * // => [[1, 10, 100], [2, 20, 200]] +
54338 * +
54339 * _.unzipWith(zipped, _.add); +
54340 * // => [3, 30, 300] +
54341 */ +
54342 function unzipWith(array, iteratee) { +
54343 if (!(array && array.length)) { +
54344 return []; +
54345 } +
54346 var result = unzip(array); +
54347 if (iteratee == null) { +
54348 return result; +
54349 } +
54350 return arrayMap(result, function(group) { +
54351 return apply(iteratee, undefined, group); +
54352 }); +
54353 } +
54354 +
54355 /** +
54356 * Creates an array excluding all given values using +
54357 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
54358 * for equality comparisons. +
54359 * +
54360 * **Note:** Unlike `_.pull`, this method returns a new array. +
54361 * +
54362 * @static +
54363 * @memberOf _ +
54364 * @since 0.1.0 +
54365 * @category Array +
54366 * @param {Array} array The array to inspect. +
54367 * @param {...*} [values] The values to exclude. +
54368 * @returns {Array} Returns the new array of filtered values. +
54369 * @see _.difference, _.xor +
54370 * @example +
54371 * +
54372 * _.without([2, 1, 2, 3], 1, 2); +
54373 * // => [3] +
54374 */ +
54375 var without = baseRest(function(array, values) { +
54376 return isArrayLikeObject(array) +
54377 ? baseDifference(array, values) +
54378 : []; +
54379 }); +
54380 +
54381 /** +
54382 * Creates an array of unique values that is the +
54383 * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) +
54384 * of the given arrays. The order of result values is determined by the order +
54385 * they occur in the arrays. +
54386 * +
54387 * @static +
54388 * @memberOf _ +
54389 * @since 2.4.0 +
54390 * @category Array +
54391 * @param {...Array} [arrays] The arrays to inspect. +
54392 * @returns {Array} Returns the new array of filtered values. +
54393 * @see _.difference, _.without +
54394 * @example +
54395 * +
54396 * _.xor([2, 1], [2, 3]); +
54397 * // => [1, 3] +
54398 */ +
54399 var xor = baseRest(function(arrays) { +
54400 return baseXor(arrayFilter(arrays, isArrayLikeObject)); +
54401 }); +
54402 +
54403 /** +
54404 * This method is like `_.xor` except that it accepts `iteratee` which is +
54405 * invoked for each element of each `arrays` to generate the criterion by +
54406 * which by which they're compared. The order of result values is determined +
54407 * by the order they occur in the arrays. The iteratee is invoked with one +
54408 * argument: (value). +
54409 * +
54410 * @static +
54411 * @memberOf _ +
54412 * @since 4.0.0 +
54413 * @category Array +
54414 * @param {...Array} [arrays] The arrays to inspect. +
54415 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
54416 * @returns {Array} Returns the new array of filtered values. +
54417 * @example +
54418 * +
54419 * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
54420 * // => [1.2, 3.4] +
54421 * +
54422 * // The `_.property` iteratee shorthand. +
54423 * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
54424 * // => [{ 'x': 2 }] +
54425 */ +
54426 var xorBy = baseRest(function(arrays) { +
54427 var iteratee = last(arrays); +
54428 if (isArrayLikeObject(iteratee)) { +
54429 iteratee = undefined; +
54430 } +
54431 return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); +
54432 }); +
54433 +
54434 /** +
54435 * This method is like `_.xor` except that it accepts `comparator` which is +
54436 * invoked to compare elements of `arrays`. The order of result values is +
54437 * determined by the order they occur in the arrays. The comparator is invoked +
54438 * with two arguments: (arrVal, othVal). +
54439 * +
54440 * @static +
54441 * @memberOf _ +
54442 * @since 4.0.0 +
54443 * @category Array +
54444 * @param {...Array} [arrays] The arrays to inspect. +
54445 * @param {Function} [comparator] The comparator invoked per element. +
54446 * @returns {Array} Returns the new array of filtered values. +
54447 * @example +
54448 * +
54449 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
54450 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
54451 * +
54452 * _.xorWith(objects, others, _.isEqual); +
54453 * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +
54454 */ +
54455 var xorWith = baseRest(function(arrays) { +
54456 var comparator = last(arrays); +
54457 comparator = typeof comparator == 'function' ? comparator : undefined; +
54458 return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); +
54459 }); +
54460 +
54461 /** +
54462 * Creates an array of grouped elements, the first of which contains the +
54463 * first elements of the given arrays, the second of which contains the +
54464 * second elements of the given arrays, and so on. +
54465 * +
54466 * @static +
54467 * @memberOf _ +
54468 * @since 0.1.0 +
54469 * @category Array +
54470 * @param {...Array} [arrays] The arrays to process. +
54471 * @returns {Array} Returns the new array of grouped elements. +
54472 * @example +
54473 * +
54474 * _.zip(['a', 'b'], [1, 2], [true, false]); +
54475 * // => [['a', 1, true], ['b', 2, false]] +
54476 */ +
54477 var zip = baseRest(unzip); +
54478 +
54479 /** +
54480 * This method is like `_.fromPairs` except that it accepts two arrays, +
54481 * one of property identifiers and one of corresponding values. +
54482 * +
54483 * @static +
54484 * @memberOf _ +
54485 * @since 0.4.0 +
54486 * @category Array +
54487 * @param {Array} [props=[]] The property identifiers. +
54488 * @param {Array} [values=[]] The property values. +
54489 * @returns {Object} Returns the new object. +
54490 * @example +
54491 * +
54492 * _.zipObject(['a', 'b'], [1, 2]); +
54493 * // => { 'a': 1, 'b': 2 } +
54494 */ +
54495 function zipObject(props, values) { +
54496 return baseZipObject(props || [], values || [], assignValue); +
54497 } +
54498 +
54499 /** +
54500 * This method is like `_.zipObject` except that it supports property paths. +
54501 * +
54502 * @static +
54503 * @memberOf _ +
54504 * @since 4.1.0 +
54505 * @category Array +
54506 * @param {Array} [props=[]] The property identifiers. +
54507 * @param {Array} [values=[]] The property values. +
54508 * @returns {Object} Returns the new object. +
54509 * @example +
54510 * +
54511 * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); +
54512 * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } +
54513 */ +
54514 function zipObjectDeep(props, values) { +
54515 return baseZipObject(props || [], values || [], baseSet); +
54516 } +
54517 +
54518 /** +
54519 * This method is like `_.zip` except that it accepts `iteratee` to specify +
54520 * how grouped values should be combined. The iteratee is invoked with the +
54521 * elements of each group: (...group). +
54522 * +
54523 * @static +
54524 * @memberOf _ +
54525 * @since 3.8.0 +
54526 * @category Array +
54527 * @param {...Array} [arrays] The arrays to process. +
54528 * @param {Function} [iteratee=_.identity] The function to combine +
54529 * grouped values. +
54530 * @returns {Array} Returns the new array of grouped elements. +
54531 * @example +
54532 * +
54533 * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { +
54534 * return a + b + c; +
54535 * }); +
54536 * // => [111, 222] +
54537 */ +
54538 var zipWith = baseRest(function(arrays) { +
54539 var length = arrays.length, +
54540 iteratee = length > 1 ? arrays[length - 1] : undefined; +
54541 +
54542 iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; +
54543 return unzipWith(arrays, iteratee); +
54544 }); +
54545 +
54546 /*------------------------------------------------------------------------*/ +
54547 +
54548 /** +
54549 * Creates a `lodash` wrapper instance that wraps `value` with explicit method +
54550 * chain sequences enabled. The result of such sequences must be unwrapped +
54551 * with `_#value`. +
54552 * +
54553 * @static +
54554 * @memberOf _ +
54555 * @since 1.3.0 +
54556 * @category Seq +
54557 * @param {*} value The value to wrap. +
54558 * @returns {Object} Returns the new `lodash` wrapper instance. +
54559 * @example +
54560 * +
54561 * var users = [ +
54562 * { 'user': 'barney', 'age': 36 }, +
54563 * { 'user': 'fred', 'age': 40 }, +
54564 * { 'user': 'pebbles', 'age': 1 } +
54565 * ]; +
54566 * +
54567 * var youngest = _ +
54568 * .chain(users) +
54569 * .sortBy('age') +
54570 * .map(function(o) { +
54571 * return o.user + ' is ' + o.age; +
54572 * }) +
54573 * .head() +
54574 * .value(); +
54575 * // => 'pebbles is 1' +
54576 */ +
54577 function chain(value) { +
54578 var result = lodash(value); +
54579 result.__chain__ = true; +
54580 return result; +
54581 } +
54582 +
54583 /** +
54584 * This method invokes `interceptor` and returns `value`. The interceptor +
54585 * is invoked with one argument; (value). The purpose of this method is to +
54586 * "tap into" a method chain sequence in order to modify intermediate results. +
54587 * +
54588 * @static +
54589 * @memberOf _ +
54590 * @since 0.1.0 +
54591 * @category Seq +
54592 * @param {*} value The value to provide to `interceptor`. +
54593 * @param {Function} interceptor The function to invoke. +
54594 * @returns {*} Returns `value`. +
54595 * @example +
54596 * +
54597 * _([1, 2, 3]) +
54598 * .tap(function(array) { +
54599 * // Mutate input array. +
54600 * array.pop(); +
54601 * }) +
54602 * .reverse() +
54603 * .value(); +
54604 * // => [2, 1] +
54605 */ +
54606 function tap(value, interceptor) { +
54607 interceptor(value); +
54608 return value; +
54609 } +
54610 +
54611 /** +
54612 * This method is like `_.tap` except that it returns the result of `interceptor`. +
54613 * The purpose of this method is to "pass thru" values replacing intermediate +
54614 * results in a method chain sequence. +
54615 * +
54616 * @static +
54617 * @memberOf _ +
54618 * @since 3.0.0 +
54619 * @category Seq +
54620 * @param {*} value The value to provide to `interceptor`. +
54621 * @param {Function} interceptor The function to invoke. +
54622 * @returns {*} Returns the result of `interceptor`. +
54623 * @example +
54624 * +
54625 * _(' abc ') +
54626 * .chain() +
54627 * .trim() +
54628 * .thru(function(value) { +
54629 * return [value]; +
54630 * }) +
54631 * .value(); +
54632 * // => ['abc'] +
54633 */ +
54634 function thru(value, interceptor) { +
54635 return interceptor(value); +
54636 } +
54637 +
54638 /** +
54639 * This method is the wrapper version of `_.at`. +
54640 * +
54641 * @name at +
54642 * @memberOf _ +
54643 * @since 1.0.0 +
54644 * @category Seq +
54645 * @param {...(string|string[])} [paths] The property paths to pick. +
54646 * @returns {Object} Returns the new `lodash` wrapper instance. +
54647 * @example +
54648 * +
54649 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +
54650 * +
54651 * _(object).at(['a[0].b.c', 'a[1]']).value(); +
54652 * // => [3, 4] +
54653 */ +
54654 var wrapperAt = flatRest(function(paths) { +
54655 var length = paths.length, +
54656 start = length ? paths[0] : 0, +
54657 value = this.__wrapped__, +
54658 interceptor = function(object) { return baseAt(object, paths); }; +
54659 +
54660 if (length > 1 || this.__actions__.length || +
54661 !(value instanceof LazyWrapper) || !isIndex(start)) { +
54662 return this.thru(interceptor); +
54663 } +
54664 value = value.slice(start, +start + (length ? 1 : 0)); +
54665 value.__actions__.push({ +
54666 'func': thru, +
54667 'args': [interceptor], +
54668 'thisArg': undefined +
54669 }); +
54670 return new LodashWrapper(value, this.__chain__).thru(function(array) { +
54671 if (length && !array.length) { +
54672 array.push(undefined); +
54673 } +
54674 return array; +
54675 }); +
54676 }); +
54677 +
54678 /** +
54679 * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. +
54680 * +
54681 * @name chain +
54682 * @memberOf _ +
54683 * @since 0.1.0 +
54684 * @category Seq +
54685 * @returns {Object} Returns the new `lodash` wrapper instance. +
54686 * @example +
54687 * +
54688 * var users = [ +
54689 * { 'user': 'barney', 'age': 36 }, +
54690 * { 'user': 'fred', 'age': 40 } +
54691 * ]; +
54692 * +
54693 * // A sequence without explicit chaining. +
54694 * _(users).head(); +
54695 * // => { 'user': 'barney', 'age': 36 } +
54696 * +
54697 * // A sequence with explicit chaining. +
54698 * _(users) +
54699 * .chain() +
54700 * .head() +
54701 * .pick('user') +
54702 * .value(); +
54703 * // => { 'user': 'barney' } +
54704 */ +
54705 function wrapperChain() { +
54706 return chain(this); +
54707 } +
54708 +
54709 /** +
54710 * Executes the chain sequence and returns the wrapped result. +
54711 * +
54712 * @name commit +
54713 * @memberOf _ +
54714 * @since 3.2.0 +
54715 * @category Seq +
54716 * @returns {Object} Returns the new `lodash` wrapper instance. +
54717 * @example +
54718 * +
54719 * var array = [1, 2]; +
54720 * var wrapped = _(array).push(3); +
54721 * +
54722 * console.log(array); +
54723 * // => [1, 2] +
54724 * +
54725 * wrapped = wrapped.commit(); +
54726 * console.log(array); +
54727 * // => [1, 2, 3] +
54728 * +
54729 * wrapped.last(); +
54730 * // => 3 +
54731 * +
54732 * console.log(array); +
54733 * // => [1, 2, 3] +
54734 */ +
54735 function wrapperCommit() { +
54736 return new LodashWrapper(this.value(), this.__chain__); +
54737 } +
54738 +
54739 /** +
54740 * Gets the next value on a wrapped object following the +
54741 * [iterator protocol](https://mdn.io/iteration_protocols#iterator). +
54742 * +
54743 * @name next +
54744 * @memberOf _ +
54745 * @since 4.0.0 +
54746 * @category Seq +
54747 * @returns {Object} Returns the next iterator value. +
54748 * @example +
54749 * +
54750 * var wrapped = _([1, 2]); +
54751 * +
54752 * wrapped.next(); +
54753 * // => { 'done': false, 'value': 1 } +
54754 * +
54755 * wrapped.next(); +
54756 * // => { 'done': false, 'value': 2 } +
54757 * +
54758 * wrapped.next(); +
54759 * // => { 'done': true, 'value': undefined } +
54760 */ +
54761 function wrapperNext() { +
54762 if (this.__values__ === undefined) { +
54763 this.__values__ = toArray(this.value()); +
54764 } +
54765 var done = this.__index__ >= this.__values__.length, +
54766 value = done ? undefined : this.__values__[this.__index__++]; +
54767 +
54768 return { 'done': done, 'value': value }; +
54769 } +
54770 +
54771 /** +
54772 * Enables the wrapper to be iterable. +
54773 * +
54774 * @name Symbol.iterator +
54775 * @memberOf _ +
54776 * @since 4.0.0 +
54777 * @category Seq +
54778 * @returns {Object} Returns the wrapper object. +
54779 * @example +
54780 * +
54781 * var wrapped = _([1, 2]); +
54782 * +
54783 * wrapped[Symbol.iterator]() === wrapped; +
54784 * // => true +
54785 * +
54786 * Array.from(wrapped); +
54787 * // => [1, 2] +
54788 */ +
54789 function wrapperToIterator() { +
54790 return this; +
54791 } +
54792 +
54793 /** +
54794 * Creates a clone of the chain sequence planting `value` as the wrapped value. +
54795 * +
54796 * @name plant +
54797 * @memberOf _ +
54798 * @since 3.2.0 +
54799 * @category Seq +
54800 * @param {*} value The value to plant. +
54801 * @returns {Object} Returns the new `lodash` wrapper instance. +
54802 * @example +
54803 * +
54804 * function square(n) { +
54805 * return n * n; +
54806 * } +
54807 * +
54808 * var wrapped = _([1, 2]).map(square); +
54809 * var other = wrapped.plant([3, 4]); +
54810 * +
54811 * other.value(); +
54812 * // => [9, 16] +
54813 * +
54814 * wrapped.value(); +
54815 * // => [1, 4] +
54816 */ +
54817 function wrapperPlant(value) { +
54818 var result, +
54819 parent = this; +
54820 +
54821 while (parent instanceof baseLodash) { +
54822 var clone = wrapperClone(parent); +
54823 clone.__index__ = 0; +
54824 clone.__values__ = undefined; +
54825 if (result) { +
54826 previous.__wrapped__ = clone; +
54827 } else { +
54828 result = clone; +
54829 } +
54830 var previous = clone; +
54831 parent = parent.__wrapped__; +
54832 } +
54833 previous.__wrapped__ = value; +
54834 return result; +
54835 } +
54836 +
54837 /** +
54838 * This method is the wrapper version of `_.reverse`. +
54839 * +
54840 * **Note:** This method mutates the wrapped array. +
54841 * +
54842 * @name reverse +
54843 * @memberOf _ +
54844 * @since 0.1.0 +
54845 * @category Seq +
54846 * @returns {Object} Returns the new `lodash` wrapper instance. +
54847 * @example +
54848 * +
54849 * var array = [1, 2, 3]; +
54850 * +
54851 * _(array).reverse().value() +
54852 * // => [3, 2, 1] +
54853 * +
54854 * console.log(array); +
54855 * // => [3, 2, 1] +
54856 */ +
54857 function wrapperReverse() { +
54858 var value = this.__wrapped__; +
54859 if (value instanceof LazyWrapper) { +
54860 var wrapped = value; +
54861 if (this.__actions__.length) { +
54862 wrapped = new LazyWrapper(this); +
54863 } +
54864 wrapped = wrapped.reverse(); +
54865 wrapped.__actions__.push({ +
54866 'func': thru, +
54867 'args': [reverse], +
54868 'thisArg': undefined +
54869 }); +
54870 return new LodashWrapper(wrapped, this.__chain__); +
54871 } +
54872 return this.thru(reverse); +
54873 } +
54874 +
54875 /** +
54876 * Executes the chain sequence to resolve the unwrapped value. +
54877 * +
54878 * @name value +
54879 * @memberOf _ +
54880 * @since 0.1.0 +
54881 * @alias toJSON, valueOf +
54882 * @category Seq +
54883 * @returns {*} Returns the resolved unwrapped value. +
54884 * @example +
54885 * +
54886 * _([1, 2, 3]).value(); +
54887 * // => [1, 2, 3] +
54888 */ +
54889 function wrapperValue() { +
54890 return baseWrapperValue(this.__wrapped__, this.__actions__); +
54891 } +
54892 +
54893 /*------------------------------------------------------------------------*/ +
54894 +
54895 /** +
54896 * Creates an object composed of keys generated from the results of running +
54897 * each element of `collection` thru `iteratee`. The corresponding value of +
54898 * each key is the number of times the key was returned by `iteratee`. The +
54899 * iteratee is invoked with one argument: (value). +
54900 * +
54901 * @static +
54902 * @memberOf _ +
54903 * @since 0.5.0 +
54904 * @category Collection +
54905 * @param {Array|Object} collection The collection to iterate over. +
54906 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
54907 * @returns {Object} Returns the composed aggregate object. +
54908 * @example +
54909 * +
54910 * _.countBy([6.1, 4.2, 6.3], Math.floor); +
54911 * // => { '4': 1, '6': 2 } +
54912 * +
54913 * // The `_.property` iteratee shorthand. +
54914 * _.countBy(['one', 'two', 'three'], 'length'); +
54915 * // => { '3': 2, '5': 1 } +
54916 */ +
54917 var countBy = createAggregator(function(result, value, key) { +
54918 if (hasOwnProperty.call(result, key)) { +
54919 ++result[key]; +
54920 } else { +
54921 baseAssignValue(result, key, 1); +
54922 } +
54923 }); +
54924 +
54925 /** +
54926 * Checks if `predicate` returns truthy for **all** elements of `collection`. +
54927 * Iteration is stopped once `predicate` returns falsey. The predicate is +
54928 * invoked with three arguments: (value, index|key, collection). +
54929 * +
54930 * **Note:** This method returns `true` for +
54931 * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because +
54932 * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of +
54933 * elements of empty collections. +
54934 * +
54935 * @static +
54936 * @memberOf _ +
54937 * @since 0.1.0 +
54938 * @category Collection +
54939 * @param {Array|Object} collection The collection to iterate over. +
54940 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
54941 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
54942 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
54943 * else `false`. +
54944 * @example +
54945 * +
54946 * _.every([true, 1, null, 'yes'], Boolean); +
54947 * // => false +
54948 * +
54949 * var users = [ +
54950 * { 'user': 'barney', 'age': 36, 'active': false }, +
54951 * { 'user': 'fred', 'age': 40, 'active': false } +
54952 * ]; +
54953 * +
54954 * // The `_.matches` iteratee shorthand. +
54955 * _.every(users, { 'user': 'barney', 'active': false }); +
54956 * // => false +
54957 * +
54958 * // The `_.matchesProperty` iteratee shorthand. +
54959 * _.every(users, ['active', false]); +
54960 * // => true +
54961 * +
54962 * // The `_.property` iteratee shorthand. +
54963 * _.every(users, 'active'); +
54964 * // => false +
54965 */ +
54966 function every(collection, predicate, guard) { +
54967 var func = isArray(collection) ? arrayEvery : baseEvery; +
54968 if (guard && isIterateeCall(collection, predicate, guard)) { +
54969 predicate = undefined; +
54970 } +
54971 return func(collection, getIteratee(predicate, 3)); +
54972 } +
54973 +
54974 /** +
54975 * Iterates over elements of `collection`, returning an array of all elements +
54976 * `predicate` returns truthy for. The predicate is invoked with three +
54977 * arguments: (value, index|key, collection). +
54978 * +
54979 * **Note:** Unlike `_.remove`, this method returns a new array. +
54980 * +
54981 * @static +
54982 * @memberOf _ +
54983 * @since 0.1.0 +
54984 * @category Collection +
54985 * @param {Array|Object} collection The collection to iterate over. +
54986 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
54987 * @returns {Array} Returns the new filtered array. +
54988 * @see _.reject +
54989 * @example +
54990 * +
54991 * var users = [ +
54992 * { 'user': 'barney', 'age': 36, 'active': true }, +
54993 * { 'user': 'fred', 'age': 40, 'active': false } +
54994 * ]; +
54995 * +
54996 * _.filter(users, function(o) { return !o.active; }); +
54997 * // => objects for ['fred'] +
54998 * +
54999 * // The `_.matches` iteratee shorthand. +
55000 * _.filter(users, { 'age': 36, 'active': true }); +
55001 * // => objects for ['barney'] +
55002 * +
55003 * // The `_.matchesProperty` iteratee shorthand. +
55004 * _.filter(users, ['active', false]); +
55005 * // => objects for ['fred'] +
55006 * +
55007 * // The `_.property` iteratee shorthand. +
55008 * _.filter(users, 'active'); +
55009 * // => objects for ['barney'] +
55010 */ +
55011 function filter(collection, predicate) { +
55012 var func = isArray(collection) ? arrayFilter : baseFilter; +
55013 return func(collection, getIteratee(predicate, 3)); +
55014 } +
55015 +
55016 /** +
55017 * Iterates over elements of `collection`, returning the first element +
55018 * `predicate` returns truthy for. The predicate is invoked with three +
55019 * arguments: (value, index|key, collection). +
55020 * +
55021 * @static +
55022 * @memberOf _ +
55023 * @since 0.1.0 +
55024 * @category Collection +
55025 * @param {Array|Object} collection The collection to inspect. +
55026 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
55027 * @param {number} [fromIndex=0] The index to search from. +
55028 * @returns {*} Returns the matched element, else `undefined`. +
55029 * @example +
55030 * +
55031 * var users = [ +
55032 * { 'user': 'barney', 'age': 36, 'active': true }, +
55033 * { 'user': 'fred', 'age': 40, 'active': false }, +
55034 * { 'user': 'pebbles', 'age': 1, 'active': true } +
55035 * ]; +
55036 * +
55037 * _.find(users, function(o) { return o.age < 40; }); +
55038 * // => object for 'barney' +
55039 * +
55040 * // The `_.matches` iteratee shorthand. +
55041 * _.find(users, { 'age': 1, 'active': true }); +
55042 * // => object for 'pebbles' +
55043 * +
55044 * // The `_.matchesProperty` iteratee shorthand. +
55045 * _.find(users, ['active', false]); +
55046 * // => object for 'fred' +
55047 * +
55048 * // The `_.property` iteratee shorthand. +
55049 * _.find(users, 'active'); +
55050 * // => object for 'barney' +
55051 */ +
55052 var find = createFind(findIndex); +
55053 +
55054 /** +
55055 * This method is like `_.find` except that it iterates over elements of +
55056 * `collection` from right to left. +
55057 * +
55058 * @static +
55059 * @memberOf _ +
55060 * @since 2.0.0 +
55061 * @category Collection +
55062 * @param {Array|Object} collection The collection to inspect. +
55063 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
55064 * @param {number} [fromIndex=collection.length-1] The index to search from. +
55065 * @returns {*} Returns the matched element, else `undefined`. +
55066 * @example +
55067 * +
55068 * _.findLast([1, 2, 3, 4], function(n) { +
55069 * return n % 2 == 1; +
55070 * }); +
55071 * // => 3 +
55072 */ +
55073 var findLast = createFind(findLastIndex); +
55074 +
55075 /** +
55076 * Creates a flattened array of values by running each element in `collection` +
55077 * thru `iteratee` and flattening the mapped results. The iteratee is invoked +
55078 * with three arguments: (value, index|key, collection). +
55079 * +
55080 * @static +
55081 * @memberOf _ +
55082 * @since 4.0.0 +
55083 * @category Collection +
55084 * @param {Array|Object} collection The collection to iterate over. +
55085 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
55086 * @returns {Array} Returns the new flattened array. +
55087 * @example +
55088 * +
55089 * function duplicate(n) { +
55090 * return [n, n]; +
55091 * } +
55092 * +
55093 * _.flatMap([1, 2], duplicate); +
55094 * // => [1, 1, 2, 2] +
55095 */ +
55096 function flatMap(collection, iteratee) { +
55097 return baseFlatten(map(collection, iteratee), 1); +
55098 } +
55099 +
55100 /** +
55101 * This method is like `_.flatMap` except that it recursively flattens the +
55102 * mapped results. +
55103 * +
55104 * @static +
55105 * @memberOf _ +
55106 * @since 4.7.0 +
55107 * @category Collection +
55108 * @param {Array|Object} collection The collection to iterate over. +
55109 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
55110 * @returns {Array} Returns the new flattened array. +
55111 * @example +
55112 * +
55113 * function duplicate(n) { +
55114 * return [[[n, n]]]; +
55115 * } +
55116 * +
55117 * _.flatMapDeep([1, 2], duplicate); +
55118 * // => [1, 1, 2, 2] +
55119 */ +
55120 function flatMapDeep(collection, iteratee) { +
55121 return baseFlatten(map(collection, iteratee), INFINITY); +
55122 } +
55123 +
55124 /** +
55125 * This method is like `_.flatMap` except that it recursively flattens the +
55126 * mapped results up to `depth` times. +
55127 * +
55128 * @static +
55129 * @memberOf _ +
55130 * @since 4.7.0 +
55131 * @category Collection +
55132 * @param {Array|Object} collection The collection to iterate over. +
55133 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
55134 * @param {number} [depth=1] The maximum recursion depth. +
55135 * @returns {Array} Returns the new flattened array. +
55136 * @example +
55137 * +
55138 * function duplicate(n) { +
55139 * return [[[n, n]]]; +
55140 * } +
55141 * +
55142 * _.flatMapDepth([1, 2], duplicate, 2); +
55143 * // => [[1, 1], [2, 2]] +
55144 */ +
55145 function flatMapDepth(collection, iteratee, depth) { +
55146 depth = depth === undefined ? 1 : toInteger(depth); +
55147 return baseFlatten(map(collection, iteratee), depth); +
55148 } +
55149 +
55150 /** +
55151 * Iterates over elements of `collection` and invokes `iteratee` for each element. +
55152 * The iteratee is invoked with three arguments: (value, index|key, collection). +
55153 * Iteratee functions may exit iteration early by explicitly returning `false`. +
55154 * +
55155 * **Note:** As with other "Collections" methods, objects with a "length" +
55156 * property are iterated like arrays. To avoid this behavior use `_.forIn` +
55157 * or `_.forOwn` for object iteration. +
55158 * +
55159 * @static +
55160 * @memberOf _ +
55161 * @since 0.1.0 +
55162 * @alias each +
55163 * @category Collection +
55164 * @param {Array|Object} collection The collection to iterate over. +
55165 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
55166 * @returns {Array|Object} Returns `collection`. +
55167 * @see _.forEachRight +
55168 * @example +
55169 * +
55170 * _.forEach([1, 2], function(value) { +
55171 * console.log(value); +
55172 * }); +
55173 * // => Logs `1` then `2`. +
55174 * +
55175 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { +
55176 * console.log(key); +
55177 * }); +
55178 * // => Logs 'a' then 'b' (iteration order is not guaranteed). +
55179 */ +
55180 function forEach(collection, iteratee) { +
55181 var func = isArray(collection) ? arrayEach : baseEach; +
55182 return func(collection, getIteratee(iteratee, 3)); +
55183 } +
55184 +
55185 /** +
55186 * This method is like `_.forEach` except that it iterates over elements of +
55187 * `collection` from right to left. +
55188 * +
55189 * @static +
55190 * @memberOf _ +
55191 * @since 2.0.0 +
55192 * @alias eachRight +
55193 * @category Collection +
55194 * @param {Array|Object} collection The collection to iterate over. +
55195 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
55196 * @returns {Array|Object} Returns `collection`. +
55197 * @see _.forEach +
55198 * @example +
55199 * +
55200 * _.forEachRight([1, 2], function(value) { +
55201 * console.log(value); +
55202 * }); +
55203 * // => Logs `2` then `1`. +
55204 */ +
55205 function forEachRight(collection, iteratee) { +
55206 var func = isArray(collection) ? arrayEachRight : baseEachRight; +
55207 return func(collection, getIteratee(iteratee, 3)); +
55208 } +
55209 +
55210 /** +
55211 * Creates an object composed of keys generated from the results of running +
55212 * each element of `collection` thru `iteratee`. The order of grouped values +
55213 * is determined by the order they occur in `collection`. The corresponding +
55214 * value of each key is an array of elements responsible for generating the +
55215 * key. The iteratee is invoked with one argument: (value). +
55216 * +
55217 * @static +
55218 * @memberOf _ +
55219 * @since 0.1.0 +
55220 * @category Collection +
55221 * @param {Array|Object} collection The collection to iterate over. +
55222 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
55223 * @returns {Object} Returns the composed aggregate object. +
55224 * @example +
55225 * +
55226 * _.groupBy([6.1, 4.2, 6.3], Math.floor); +
55227 * // => { '4': [4.2], '6': [6.1, 6.3] } +
55228 * +
55229 * // The `_.property` iteratee shorthand. +
55230 * _.groupBy(['one', 'two', 'three'], 'length'); +
55231 * // => { '3': ['one', 'two'], '5': ['three'] } +
55232 */ +
55233 var groupBy = createAggregator(function(result, value, key) { +
55234 if (hasOwnProperty.call(result, key)) { +
55235 result[key].push(value); +
55236 } else { +
55237 baseAssignValue(result, key, [value]); +
55238 } +
55239 }); +
55240 +
55241 /** +
55242 * Checks if `value` is in `collection`. If `collection` is a string, it's +
55243 * checked for a substring of `value`, otherwise +
55244 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
55245 * is used for equality comparisons. If `fromIndex` is negative, it's used as +
55246 * the offset from the end of `collection`. +
55247 * +
55248 * @static +
55249 * @memberOf _ +
55250 * @since 0.1.0 +
55251 * @category Collection +
55252 * @param {Array|Object|string} collection The collection to inspect. +
55253 * @param {*} value The value to search for. +
55254 * @param {number} [fromIndex=0] The index to search from. +
55255 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +
55256 * @returns {boolean} Returns `true` if `value` is found, else `false`. +
55257 * @example +
55258 * +
55259 * _.includes([1, 2, 3], 1); +
55260 * // => true +
55261 * +
55262 * _.includes([1, 2, 3], 1, 2); +
55263 * // => false +
55264 * +
55265 * _.includes({ 'a': 1, 'b': 2 }, 1); +
55266 * // => true +
55267 * +
55268 * _.includes('abcd', 'bc'); +
55269 * // => true +
55270 */ +
55271 function includes(collection, value, fromIndex, guard) { +
55272 collection = isArrayLike(collection) ? collection : values(collection); +
55273 fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; +
55274 +
55275 var length = collection.length; +
55276 if (fromIndex < 0) { +
55277 fromIndex = nativeMax(length + fromIndex, 0); +
55278 } +
55279 return isString(collection) +
55280 ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) +
55281 : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +
55282 } +
55283 +
55284 /** +
55285 * Invokes the method at `path` of each element in `collection`, returning +
55286 * an array of the results of each invoked method. Any additional arguments +
55287 * are provided to each invoked method. If `path` is a function, it's invoked +
55288 * for, and `this` bound to, each element in `collection`. +
55289 * +
55290 * @static +
55291 * @memberOf _ +
55292 * @since 4.0.0 +
55293 * @category Collection +
55294 * @param {Array|Object} collection The collection to iterate over. +
55295 * @param {Array|Function|string} path The path of the method to invoke or +
55296 * the function invoked per iteration. +
55297 * @param {...*} [args] The arguments to invoke each method with. +
55298 * @returns {Array} Returns the array of results. +
55299 * @example +
55300 * +
55301 * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); +
55302 * // => [[1, 5, 7], [1, 2, 3]] +
55303 * +
55304 * _.invokeMap([123, 456], String.prototype.split, ''); +
55305 * // => [['1', '2', '3'], ['4', '5', '6']] +
55306 */ +
55307 var invokeMap = baseRest(function(collection, path, args) { +
55308 var index = -1, +
55309 isFunc = typeof path == 'function', +
55310 result = isArrayLike(collection) ? Array(collection.length) : []; +
55311 +
55312 baseEach(collection, function(value) { +
55313 result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); +
55314 }); +
55315 return result; +
55316 }); +
55317 +
55318 /** +
55319 * Creates an object composed of keys generated from the results of running +
55320 * each element of `collection` thru `iteratee`. The corresponding value of +
55321 * each key is the last element responsible for generating the key. The +
55322 * iteratee is invoked with one argument: (value). +
55323 * +
55324 * @static +
55325 * @memberOf _ +
55326 * @since 4.0.0 +
55327 * @category Collection +
55328 * @param {Array|Object} collection The collection to iterate over. +
55329 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
55330 * @returns {Object} Returns the composed aggregate object. +
55331 * @example +
55332 * +
55333 * var array = [ +
55334 * { 'dir': 'left', 'code': 97 }, +
55335 * { 'dir': 'right', 'code': 100 } +
55336 * ]; +
55337 * +
55338 * _.keyBy(array, function(o) { +
55339 * return String.fromCharCode(o.code); +
55340 * }); +
55341 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } +
55342 * +
55343 * _.keyBy(array, 'dir'); +
55344 * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } +
55345 */ +
55346 var keyBy = createAggregator(function(result, value, key) { +
55347 baseAssignValue(result, key, value); +
55348 }); +
55349 +
55350 /** +
55351 * Creates an array of values by running each element in `collection` thru +
55352 * `iteratee`. The iteratee is invoked with three arguments: +
55353 * (value, index|key, collection). +
55354 * +
55355 * Many lodash methods are guarded to work as iteratees for methods like +
55356 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. +
55357 * +
55358 * The guarded methods are: +
55359 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, +
55360 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, +
55361 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, +
55362 * `template`, `trim`, `trimEnd`, `trimStart`, and `words` +
55363 * +
55364 * @static +
55365 * @memberOf _ +
55366 * @since 0.1.0 +
55367 * @category Collection +
55368 * @param {Array|Object} collection The collection to iterate over. +
55369 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
55370 * @returns {Array} Returns the new mapped array. +
55371 * @example +
55372 * +
55373 * function square(n) { +
55374 * return n * n; +
55375 * } +
55376 * +
55377 * _.map([4, 8], square); +
55378 * // => [16, 64] +
55379 * +
55380 * _.map({ 'a': 4, 'b': 8 }, square); +
55381 * // => [16, 64] (iteration order is not guaranteed) +
55382 * +
55383 * var users = [ +
55384 * { 'user': 'barney' }, +
55385 * { 'user': 'fred' } +
55386 * ]; +
55387 * +
55388 * // The `_.property` iteratee shorthand. +
55389 * _.map(users, 'user'); +
55390 * // => ['barney', 'fred'] +
55391 */ +
55392 function map(collection, iteratee) { +
55393 var func = isArray(collection) ? arrayMap : baseMap; +
55394 return func(collection, getIteratee(iteratee, 3)); +
55395 } +
55396 +
55397 /** +
55398 * This method is like `_.sortBy` except that it allows specifying the sort +
55399 * orders of the iteratees to sort by. If `orders` is unspecified, all values +
55400 * are sorted in ascending order. Otherwise, specify an order of "desc" for +
55401 * descending or "asc" for ascending sort order of corresponding values. +
55402 * +
55403 * @static +
55404 * @memberOf _ +
55405 * @since 4.0.0 +
55406 * @category Collection +
55407 * @param {Array|Object} collection The collection to iterate over. +
55408 * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] +
55409 * The iteratees to sort by. +
55410 * @param {string[]} [orders] The sort orders of `iteratees`. +
55411 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +
55412 * @returns {Array} Returns the new sorted array. +
55413 * @example +
55414 * +
55415 * var users = [ +
55416 * { 'user': 'fred', 'age': 48 }, +
55417 * { 'user': 'barney', 'age': 34 }, +
55418 * { 'user': 'fred', 'age': 40 }, +
55419 * { 'user': 'barney', 'age': 36 } +
55420 * ]; +
55421 * +
55422 * // Sort by `user` in ascending order and by `age` in descending order. +
55423 * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); +
55424 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] +
55425 */ +
55426 function orderBy(collection, iteratees, orders, guard) { +
55427 if (collection == null) { +
55428 return []; +
55429 } +
55430 if (!isArray(iteratees)) { +
55431 iteratees = iteratees == null ? [] : [iteratees]; +
55432 } +
55433 orders = guard ? undefined : orders; +
55434 if (!isArray(orders)) { +
55435 orders = orders == null ? [] : [orders]; +
55436 } +
55437 return baseOrderBy(collection, iteratees, orders); +
55438 } +
55439 +
55440 /** +
55441 * Creates an array of elements split into two groups, the first of which +
55442 * contains elements `predicate` returns truthy for, the second of which +
55443 * contains elements `predicate` returns falsey for. The predicate is +
55444 * invoked with one argument: (value). +
55445 * +
55446 * @static +
55447 * @memberOf _ +
55448 * @since 3.0.0 +
55449 * @category Collection +
55450 * @param {Array|Object} collection The collection to iterate over. +
55451 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
55452 * @returns {Array} Returns the array of grouped elements. +
55453 * @example +
55454 * +
55455 * var users = [ +
55456 * { 'user': 'barney', 'age': 36, 'active': false }, +
55457 * { 'user': 'fred', 'age': 40, 'active': true }, +
55458 * { 'user': 'pebbles', 'age': 1, 'active': false } +
55459 * ]; +
55460 * +
55461 * _.partition(users, function(o) { return o.active; }); +
55462 * // => objects for [['fred'], ['barney', 'pebbles']] +
55463 * +
55464 * // The `_.matches` iteratee shorthand. +
55465 * _.partition(users, { 'age': 1, 'active': false }); +
55466 * // => objects for [['pebbles'], ['barney', 'fred']] +
55467 * +
55468 * // The `_.matchesProperty` iteratee shorthand. +
55469 * _.partition(users, ['active', false]); +
55470 * // => objects for [['barney', 'pebbles'], ['fred']] +
55471 * +
55472 * // The `_.property` iteratee shorthand. +
55473 * _.partition(users, 'active'); +
55474 * // => objects for [['fred'], ['barney', 'pebbles']] +
55475 */ +
55476 var partition = createAggregator(function(result, value, key) { +
55477 result[key ? 0 : 1].push(value); +
55478 }, function() { return [[], []]; }); +
55479 +
55480 /** +
55481 * Reduces `collection` to a value which is the accumulated result of running +
55482 * each element in `collection` thru `iteratee`, where each successive +
55483 * invocation is supplied the return value of the previous. If `accumulator` +
55484 * is not given, the first element of `collection` is used as the initial +
55485 * value. The iteratee is invoked with four arguments: +
55486 * (accumulator, value, index|key, collection). +
55487 * +
55488 * Many lodash methods are guarded to work as iteratees for methods like +
55489 * `_.reduce`, `_.reduceRight`, and `_.transform`. +
55490 * +
55491 * The guarded methods are: +
55492 * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, +
55493 * and `sortBy` +
55494 * +
55495 * @static +
55496 * @memberOf _ +
55497 * @since 0.1.0 +
55498 * @category Collection +
55499 * @param {Array|Object} collection The collection to iterate over. +
55500 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
55501 * @param {*} [accumulator] The initial value. +
55502 * @returns {*} Returns the accumulated value. +
55503 * @see _.reduceRight +
55504 * @example +
55505 * +
55506 * _.reduce([1, 2], function(sum, n) { +
55507 * return sum + n; +
55508 * }, 0); +
55509 * // => 3 +
55510 * +
55511 * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +
55512 * (result[value] || (result[value] = [])).push(key); +
55513 * return result; +
55514 * }, {}); +
55515 * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) +
55516 */ +
55517 function reduce(collection, iteratee, accumulator) { +
55518 var func = isArray(collection) ? arrayReduce : baseReduce, +
55519 initAccum = arguments.length < 3; +
55520 +
55521 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); +
55522 } +
55523 +
55524 /** +
55525 * This method is like `_.reduce` except that it iterates over elements of +
55526 * `collection` from right to left. +
55527 * +
55528 * @static +
55529 * @memberOf _ +
55530 * @since 0.1.0 +
55531 * @category Collection +
55532 * @param {Array|Object} collection The collection to iterate over. +
55533 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
55534 * @param {*} [accumulator] The initial value. +
55535 * @returns {*} Returns the accumulated value. +
55536 * @see _.reduce +
55537 * @example +
55538 * +
55539 * var array = [[0, 1], [2, 3], [4, 5]]; +
55540 * +
55541 * _.reduceRight(array, function(flattened, other) { +
55542 * return flattened.concat(other); +
55543 * }, []); +
55544 * // => [4, 5, 2, 3, 0, 1] +
55545 */ +
55546 function reduceRight(collection, iteratee, accumulator) { +
55547 var func = isArray(collection) ? arrayReduceRight : baseReduce, +
55548 initAccum = arguments.length < 3; +
55549 +
55550 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); +
55551 } +
55552 +
55553 /** +
55554 * The opposite of `_.filter`; this method returns the elements of `collection` +
55555 * that `predicate` does **not** return truthy for. +
55556 * +
55557 * @static +
55558 * @memberOf _ +
55559 * @since 0.1.0 +
55560 * @category Collection +
55561 * @param {Array|Object} collection The collection to iterate over. +
55562 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
55563 * @returns {Array} Returns the new filtered array. +
55564 * @see _.filter +
55565 * @example +
55566 * +
55567 * var users = [ +
55568 * { 'user': 'barney', 'age': 36, 'active': false }, +
55569 * { 'user': 'fred', 'age': 40, 'active': true } +
55570 * ]; +
55571 * +
55572 * _.reject(users, function(o) { return !o.active; }); +
55573 * // => objects for ['fred'] +
55574 * +
55575 * // The `_.matches` iteratee shorthand. +
55576 * _.reject(users, { 'age': 40, 'active': true }); +
55577 * // => objects for ['barney'] +
55578 * +
55579 * // The `_.matchesProperty` iteratee shorthand. +
55580 * _.reject(users, ['active', false]); +
55581 * // => objects for ['fred'] +
55582 * +
55583 * // The `_.property` iteratee shorthand. +
55584 * _.reject(users, 'active'); +
55585 * // => objects for ['barney'] +
55586 */ +
55587 function reject(collection, predicate) { +
55588 var func = isArray(collection) ? arrayFilter : baseFilter; +
55589 return func(collection, negate(getIteratee(predicate, 3))); +
55590 } +
55591 +
55592 /** +
55593 * Gets a random element from `collection`. +
55594 * +
55595 * @static +
55596 * @memberOf _ +
55597 * @since 2.0.0 +
55598 * @category Collection +
55599 * @param {Array|Object} collection The collection to sample. +
55600 * @returns {*} Returns the random element. +
55601 * @example +
55602 * +
55603 * _.sample([1, 2, 3, 4]); +
55604 * // => 2 +
55605 */ +
55606 function sample(collection) { +
55607 var func = isArray(collection) ? arraySample : baseSample; +
55608 return func(collection); +
55609 } +
55610 +
55611 /** +
55612 * Gets `n` random elements at unique keys from `collection` up to the +
55613 * size of `collection`. +
55614 * +
55615 * @static +
55616 * @memberOf _ +
55617 * @since 4.0.0 +
55618 * @category Collection +
55619 * @param {Array|Object} collection The collection to sample. +
55620 * @param {number} [n=1] The number of elements to sample. +
55621 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
55622 * @returns {Array} Returns the random elements. +
55623 * @example +
55624 * +
55625 * _.sampleSize([1, 2, 3], 2); +
55626 * // => [3, 1] +
55627 * +
55628 * _.sampleSize([1, 2, 3], 4); +
55629 * // => [2, 3, 1] +
55630 */ +
55631 function sampleSize(collection, n, guard) { +
55632 if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { +
55633 n = 1; +
55634 } else { +
55635 n = toInteger(n); +
55636 } +
55637 var func = isArray(collection) ? arraySampleSize : baseSampleSize; +
55638 return func(collection, n); +
55639 } +
55640 +
55641 /** +
55642 * Creates an array of shuffled values, using a version of the +
55643 * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). +
55644 * +
55645 * @static +
55646 * @memberOf _ +
55647 * @since 0.1.0 +
55648 * @category Collection +
55649 * @param {Array|Object} collection The collection to shuffle. +
55650 * @returns {Array} Returns the new shuffled array. +
55651 * @example +
55652 * +
55653 * _.shuffle([1, 2, 3, 4]); +
55654 * // => [4, 1, 3, 2] +
55655 */ +
55656 function shuffle(collection) { +
55657 var func = isArray(collection) ? arrayShuffle : baseShuffle; +
55658 return func(collection); +
55659 } +
55660 +
55661 /** +
55662 * Gets the size of `collection` by returning its length for array-like +
55663 * values or the number of own enumerable string keyed properties for objects. +
55664 * +
55665 * @static +
55666 * @memberOf _ +
55667 * @since 0.1.0 +
55668 * @category Collection +
55669 * @param {Array|Object|string} collection The collection to inspect. +
55670 * @returns {number} Returns the collection size. +
55671 * @example +
55672 * +
55673 * _.size([1, 2, 3]); +
55674 * // => 3 +
55675 * +
55676 * _.size({ 'a': 1, 'b': 2 }); +
55677 * // => 2 +
55678 * +
55679 * _.size('pebbles'); +
55680 * // => 7 +
55681 */ +
55682 function size(collection) { +
55683 if (collection == null) { +
55684 return 0; +
55685 } +
55686 if (isArrayLike(collection)) { +
55687 return isString(collection) ? stringSize(collection) : collection.length; +
55688 } +
55689 var tag = getTag(collection); +
55690 if (tag == mapTag || tag == setTag) { +
55691 return collection.size; +
55692 } +
55693 return baseKeys(collection).length; +
55694 } +
55695 +
55696 /** +
55697 * Checks if `predicate` returns truthy for **any** element of `collection`. +
55698 * Iteration is stopped once `predicate` returns truthy. The predicate is +
55699 * invoked with three arguments: (value, index|key, collection). +
55700 * +
55701 * @static +
55702 * @memberOf _ +
55703 * @since 0.1.0 +
55704 * @category Collection +
55705 * @param {Array|Object} collection The collection to iterate over. +
55706 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
55707 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
55708 * @returns {boolean} Returns `true` if any element passes the predicate check, +
55709 * else `false`. +
55710 * @example +
55711 * +
55712 * _.some([null, 0, 'yes', false], Boolean); +
55713 * // => true +
55714 * +
55715 * var users = [ +
55716 * { 'user': 'barney', 'active': true }, +
55717 * { 'user': 'fred', 'active': false } +
55718 * ]; +
55719 * +
55720 * // The `_.matches` iteratee shorthand. +
55721 * _.some(users, { 'user': 'barney', 'active': false }); +
55722 * // => false +
55723 * +
55724 * // The `_.matchesProperty` iteratee shorthand. +
55725 * _.some(users, ['active', false]); +
55726 * // => true +
55727 * +
55728 * // The `_.property` iteratee shorthand. +
55729 * _.some(users, 'active'); +
55730 * // => true +
55731 */ +
55732 function some(collection, predicate, guard) { +
55733 var func = isArray(collection) ? arraySome : baseSome; +
55734 if (guard && isIterateeCall(collection, predicate, guard)) { +
55735 predicate = undefined; +
55736 } +
55737 return func(collection, getIteratee(predicate, 3)); +
55738 } +
55739 +
55740 /** +
55741 * Creates an array of elements, sorted in ascending order by the results of +
55742 * running each element in a collection thru each iteratee. This method +
55743 * performs a stable sort, that is, it preserves the original sort order of +
55744 * equal elements. The iteratees are invoked with one argument: (value). +
55745 * +
55746 * @static +
55747 * @memberOf _ +
55748 * @since 0.1.0 +
55749 * @category Collection +
55750 * @param {Array|Object} collection The collection to iterate over. +
55751 * @param {...(Function|Function[])} [iteratees=[_.identity]] +
55752 * The iteratees to sort by. +
55753 * @returns {Array} Returns the new sorted array. +
55754 * @example +
55755 * +
55756 * var users = [ +
55757 * { 'user': 'fred', 'age': 48 }, +
55758 * { 'user': 'barney', 'age': 36 }, +
55759 * { 'user': 'fred', 'age': 40 }, +
55760 * { 'user': 'barney', 'age': 34 } +
55761 * ]; +
55762 * +
55763 * _.sortBy(users, [function(o) { return o.user; }]); +
55764 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] +
55765 * +
55766 * _.sortBy(users, ['user', 'age']); +
55767 * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] +
55768 */ +
55769 var sortBy = baseRest(function(collection, iteratees) { +
55770 if (collection == null) { +
55771 return []; +
55772 } +
55773 var length = iteratees.length; +
55774 if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { +
55775 iteratees = []; +
55776 } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { +
55777 iteratees = [iteratees[0]]; +
55778 } +
55779 return baseOrderBy(collection, baseFlatten(iteratees, 1), []); +
55780 }); +
55781 +
55782 /*------------------------------------------------------------------------*/ +
55783 +
55784 /** +
55785 * Gets the timestamp of the number of milliseconds that have elapsed since +
55786 * the Unix epoch (1 January 1970 00:00:00 UTC). +
55787 * +
55788 * @static +
55789 * @memberOf _ +
55790 * @since 2.4.0 +
55791 * @category Date +
55792 * @returns {number} Returns the timestamp. +
55793 * @example +
55794 * +
55795 * _.defer(function(stamp) { +
55796 * console.log(_.now() - stamp); +
55797 * }, _.now()); +
55798 * // => Logs the number of milliseconds it took for the deferred invocation. +
55799 */ +
55800 var now = ctxNow || function() { +
55801 return root.Date.now(); +
55802 }; +
55803 +
55804 /*------------------------------------------------------------------------*/ +
55805 +
55806 /** +
55807 * The opposite of `_.before`; this method creates a function that invokes +
55808 * `func` once it's called `n` or more times. +
55809 * +
55810 * @static +
55811 * @memberOf _ +
55812 * @since 0.1.0 +
55813 * @category Function +
55814 * @param {number} n The number of calls before `func` is invoked. +
55815 * @param {Function} func The function to restrict. +
55816 * @returns {Function} Returns the new restricted function. +
55817 * @example +
55818 * +
55819 * var saves = ['profile', 'settings']; +
55820 * +
55821 * var done = _.after(saves.length, function() { +
55822 * console.log('done saving!'); +
55823 * }); +
55824 * +
55825 * _.forEach(saves, function(type) { +
55826 * asyncSave({ 'type': type, 'complete': done }); +
55827 * }); +
55828 * // => Logs 'done saving!' after the two async saves have completed. +
55829 */ +
55830 function after(n, func) { +
55831 if (typeof func != 'function') { +
55832 throw new TypeError(FUNC_ERROR_TEXT); +
55833 } +
55834 n = toInteger(n); +
55835 return function() { +
55836 if (--n < 1) { +
55837 return func.apply(this, arguments); +
55838 } +
55839 }; +
55840 } +
55841 +
55842 /** +
55843 * Creates a function that invokes `func`, with up to `n` arguments, +
55844 * ignoring any additional arguments. +
55845 * +
55846 * @static +
55847 * @memberOf _ +
55848 * @since 3.0.0 +
55849 * @category Function +
55850 * @param {Function} func The function to cap arguments for. +
55851 * @param {number} [n=func.length] The arity cap. +
55852 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
55853 * @returns {Function} Returns the new capped function. +
55854 * @example +
55855 * +
55856 * _.map(['6', '8', '10'], _.ary(parseInt, 1)); +
55857 * // => [6, 8, 10] +
55858 */ +
55859 function ary(func, n, guard) { +
55860 n = guard ? undefined : n; +
55861 n = (func && n == null) ? func.length : n; +
55862 return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); +
55863 } +
55864 +
55865 /** +
55866 * Creates a function that invokes `func`, with the `this` binding and arguments +
55867 * of the created function, while it's called less than `n` times. Subsequent +
55868 * calls to the created function return the result of the last `func` invocation. +
55869 * +
55870 * @static +
55871 * @memberOf _ +
55872 * @since 3.0.0 +
55873 * @category Function +
55874 * @param {number} n The number of calls at which `func` is no longer invoked. +
55875 * @param {Function} func The function to restrict. +
55876 * @returns {Function} Returns the new restricted function. +
55877 * @example +
55878 * +
55879 * jQuery(element).on('click', _.before(5, addContactToList)); +
55880 * // => Allows adding up to 4 contacts to the list. +
55881 */ +
55882 function before(n, func) { +
55883 var result; +
55884 if (typeof func != 'function') { +
55885 throw new TypeError(FUNC_ERROR_TEXT); +
55886 } +
55887 n = toInteger(n); +
55888 return function() { +
55889 if (--n > 0) { +
55890 result = func.apply(this, arguments); +
55891 } +
55892 if (n <= 1) { +
55893 func = undefined; +
55894 } +
55895 return result; +
55896 }; +
55897 } +
55898 +
55899 /** +
55900 * Creates a function that invokes `func` with the `this` binding of `thisArg` +
55901 * and `partials` prepended to the arguments it receives. +
55902 * +
55903 * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, +
55904 * may be used as a placeholder for partially applied arguments. +
55905 * +
55906 * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" +
55907 * property of bound functions. +
55908 * +
55909 * @static +
55910 * @memberOf _ +
55911 * @since 0.1.0 +
55912 * @category Function +
55913 * @param {Function} func The function to bind. +
55914 * @param {*} thisArg The `this` binding of `func`. +
55915 * @param {...*} [partials] The arguments to be partially applied. +
55916 * @returns {Function} Returns the new bound function. +
55917 * @example +
55918 * +
55919 * function greet(greeting, punctuation) { +
55920 * return greeting + ' ' + this.user + punctuation; +
55921 * } +
55922 * +
55923 * var object = { 'user': 'fred' }; +
55924 * +
55925 * var bound = _.bind(greet, object, 'hi'); +
55926 * bound('!'); +
55927 * // => 'hi fred!' +
55928 * +
55929 * // Bound with placeholders. +
55930 * var bound = _.bind(greet, object, _, '!'); +
55931 * bound('hi'); +
55932 * // => 'hi fred!' +
55933 */ +
55934 var bind = baseRest(function(func, thisArg, partials) { +
55935 var bitmask = WRAP_BIND_FLAG; +
55936 if (partials.length) { +
55937 var holders = replaceHolders(partials, getHolder(bind)); +
55938 bitmask |= WRAP_PARTIAL_FLAG; +
55939 } +
55940 return createWrap(func, bitmask, thisArg, partials, holders); +
55941 }); +
55942 +
55943 /** +
55944 * Creates a function that invokes the method at `object[key]` with `partials` +
55945 * prepended to the arguments it receives. +
55946 * +
55947 * This method differs from `_.bind` by allowing bound functions to reference +
55948 * methods that may be redefined or don't yet exist. See +
55949 * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) +
55950 * for more details. +
55951 * +
55952 * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic +
55953 * builds, may be used as a placeholder for partially applied arguments. +
55954 * +
55955 * @static +
55956 * @memberOf _ +
55957 * @since 0.10.0 +
55958 * @category Function +
55959 * @param {Object} object The object to invoke the method on. +
55960 * @param {string} key The key of the method. +
55961 * @param {...*} [partials] The arguments to be partially applied. +
55962 * @returns {Function} Returns the new bound function. +
55963 * @example +
55964 * +
55965 * var object = { +
55966 * 'user': 'fred', +
55967 * 'greet': function(greeting, punctuation) { +
55968 * return greeting + ' ' + this.user + punctuation; +
55969 * } +
55970 * }; +
55971 * +
55972 * var bound = _.bindKey(object, 'greet', 'hi'); +
55973 * bound('!'); +
55974 * // => 'hi fred!' +
55975 * +
55976 * object.greet = function(greeting, punctuation) { +
55977 * return greeting + 'ya ' + this.user + punctuation; +
55978 * }; +
55979 * +
55980 * bound('!'); +
55981 * // => 'hiya fred!' +
55982 * +
55983 * // Bound with placeholders. +
55984 * var bound = _.bindKey(object, 'greet', _, '!'); +
55985 * bound('hi'); +
55986 * // => 'hiya fred!' +
55987 */ +
55988 var bindKey = baseRest(function(object, key, partials) { +
55989 var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; +
55990 if (partials.length) { +
55991 var holders = replaceHolders(partials, getHolder(bindKey)); +
55992 bitmask |= WRAP_PARTIAL_FLAG; +
55993 } +
55994 return createWrap(key, bitmask, object, partials, holders); +
55995 }); +
55996 +
55997 /** +
55998 * Creates a function that accepts arguments of `func` and either invokes +
55999 * `func` returning its result, if at least `arity` number of arguments have +
56000 * been provided, or returns a function that accepts the remaining `func` +
56001 * arguments, and so on. The arity of `func` may be specified if `func.length` +
56002 * is not sufficient. +
56003 * +
56004 * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, +
56005 * may be used as a placeholder for provided arguments. +
56006 * +
56007 * **Note:** This method doesn't set the "length" property of curried functions. +
56008 * +
56009 * @static +
56010 * @memberOf _ +
56011 * @since 2.0.0 +
56012 * @category Function +
56013 * @param {Function} func The function to curry. +
56014 * @param {number} [arity=func.length] The arity of `func`. +
56015 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
56016 * @returns {Function} Returns the new curried function. +
56017 * @example +
56018 * +
56019 * var abc = function(a, b, c) { +
56020 * return [a, b, c]; +
56021 * }; +
56022 * +
56023 * var curried = _.curry(abc); +
56024 * +
56025 * curried(1)(2)(3); +
56026 * // => [1, 2, 3] +
56027 * +
56028 * curried(1, 2)(3); +
56029 * // => [1, 2, 3] +
56030 * +
56031 * curried(1, 2, 3); +
56032 * // => [1, 2, 3] +
56033 * +
56034 * // Curried with placeholders. +
56035 * curried(1)(_, 3)(2); +
56036 * // => [1, 2, 3] +
56037 */ +
56038 function curry(func, arity, guard) { +
56039 arity = guard ? undefined : arity; +
56040 var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +
56041 result.placeholder = curry.placeholder; +
56042 return result; +
56043 } +
56044 +
56045 /** +
56046 * This method is like `_.curry` except that arguments are applied to `func` +
56047 * in the manner of `_.partialRight` instead of `_.partial`. +
56048 * +
56049 * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic +
56050 * builds, may be used as a placeholder for provided arguments. +
56051 * +
56052 * **Note:** This method doesn't set the "length" property of curried functions. +
56053 * +
56054 * @static +
56055 * @memberOf _ +
56056 * @since 3.0.0 +
56057 * @category Function +
56058 * @param {Function} func The function to curry. +
56059 * @param {number} [arity=func.length] The arity of `func`. +
56060 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
56061 * @returns {Function} Returns the new curried function. +
56062 * @example +
56063 * +
56064 * var abc = function(a, b, c) { +
56065 * return [a, b, c]; +
56066 * }; +
56067 * +
56068 * var curried = _.curryRight(abc); +
56069 * +
56070 * curried(3)(2)(1); +
56071 * // => [1, 2, 3] +
56072 * +
56073 * curried(2, 3)(1); +
56074 * // => [1, 2, 3] +
56075 * +
56076 * curried(1, 2, 3); +
56077 * // => [1, 2, 3] +
56078 * +
56079 * // Curried with placeholders. +
56080 * curried(3)(1, _)(2); +
56081 * // => [1, 2, 3] +
56082 */ +
56083 function curryRight(func, arity, guard) { +
56084 arity = guard ? undefined : arity; +
56085 var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +
56086 result.placeholder = curryRight.placeholder; +
56087 return result; +
56088 } +
56089 +
56090 /** +
56091 * Creates a debounced function that delays invoking `func` until after `wait` +
56092 * milliseconds have elapsed since the last time the debounced function was +
56093 * invoked. The debounced function comes with a `cancel` method to cancel +
56094 * delayed `func` invocations and a `flush` method to immediately invoke them. +
56095 * Provide `options` to indicate whether `func` should be invoked on the +
56096 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked +
56097 * with the last arguments provided to the debounced function. Subsequent +
56098 * calls to the debounced function return the result of the last `func` +
56099 * invocation. +
56100 * +
56101 * **Note:** If `leading` and `trailing` options are `true`, `func` is +
56102 * invoked on the trailing edge of the timeout only if the debounced function +
56103 * is invoked more than once during the `wait` timeout. +
56104 * +
56105 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +
56106 * until to the next tick, similar to `setTimeout` with a timeout of `0`. +
56107 * +
56108 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +
56109 * for details over the differences between `_.debounce` and `_.throttle`. +
56110 * +
56111 * @static +
56112 * @memberOf _ +
56113 * @since 0.1.0 +
56114 * @category Function +
56115 * @param {Function} func The function to debounce. +
56116 * @param {number} [wait=0] The number of milliseconds to delay. +
56117 * @param {Object} [options={}] The options object. +
56118 * @param {boolean} [options.leading=false] +
56119 * Specify invoking on the leading edge of the timeout. +
56120 * @param {number} [options.maxWait] +
56121 * The maximum time `func` is allowed to be delayed before it's invoked. +
56122 * @param {boolean} [options.trailing=true] +
56123 * Specify invoking on the trailing edge of the timeout. +
56124 * @returns {Function} Returns the new debounced function. +
56125 * @example +
56126 * +
56127 * // Avoid costly calculations while the window size is in flux. +
56128 * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); +
56129 * +
56130 * // Invoke `sendMail` when clicked, debouncing subsequent calls. +
56131 * jQuery(element).on('click', _.debounce(sendMail, 300, { +
56132 * 'leading': true, +
56133 * 'trailing': false +
56134 * })); +
56135 * +
56136 * // Ensure `batchLog` is invoked once after 1 second of debounced calls. +
56137 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); +
56138 * var source = new EventSource('/stream'); +
56139 * jQuery(source).on('message', debounced); +
56140 * +
56141 * // Cancel the trailing debounced invocation. +
56142 * jQuery(window).on('popstate', debounced.cancel); +
56143 */ +
56144 function debounce(func, wait, options) { +
56145 var lastArgs, +
56146 lastThis, +
56147 maxWait, +
56148 result, +
56149 timerId, +
56150 lastCallTime, +
56151 lastInvokeTime = 0, +
56152 leading = false, +
56153 maxing = false, +
56154 trailing = true; +
56155 +
56156 if (typeof func != 'function') { +
56157 throw new TypeError(FUNC_ERROR_TEXT); +
56158 } +
56159 wait = toNumber(wait) || 0; +
56160 if (isObject(options)) { +
56161 leading = !!options.leading; +
56162 maxing = 'maxWait' in options; +
56163 maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; +
56164 trailing = 'trailing' in options ? !!options.trailing : trailing; +
56165 } +
56166 +
56167 function invokeFunc(time) { +
56168 var args = lastArgs, +
56169 thisArg = lastThis; +
56170 +
56171 lastArgs = lastThis = undefined; +
56172 lastInvokeTime = time; +
56173 result = func.apply(thisArg, args); +
56174 return result; +
56175 } +
56176 +
56177 function leadingEdge(time) { +
56178 // Reset any `maxWait` timer. +
56179 lastInvokeTime = time; +
56180 // Start the timer for the trailing edge. +
56181 timerId = setTimeout(timerExpired, wait); +
56182 // Invoke the leading edge. +
56183 return leading ? invokeFunc(time) : result; +
56184 } +
56185 +
56186 function remainingWait(time) { +
56187 var timeSinceLastCall = time - lastCallTime, +
56188 timeSinceLastInvoke = time - lastInvokeTime, +
56189 timeWaiting = wait - timeSinceLastCall; +
56190 +
56191 return maxing +
56192 ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) +
56193 : timeWaiting; +
56194 } +
56195 +
56196 function shouldInvoke(time) { +
56197 var timeSinceLastCall = time - lastCallTime, +
56198 timeSinceLastInvoke = time - lastInvokeTime; +
56199 +
56200 // Either this is the first call, activity has stopped and we're at the +
56201 // trailing edge, the system time has gone backwards and we're treating +
56202 // it as the trailing edge, or we've hit the `maxWait` limit. +
56203 return (lastCallTime === undefined || (timeSinceLastCall >= wait) || +
56204 (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); +
56205 } +
56206 +
56207 function timerExpired() { +
56208 var time = now(); +
56209 if (shouldInvoke(time)) { +
56210 return trailingEdge(time); +
56211 } +
56212 // Restart the timer. +
56213 timerId = setTimeout(timerExpired, remainingWait(time)); +
56214 } +
56215 +
56216 function trailingEdge(time) { +
56217 timerId = undefined; +
56218 +
56219 // Only invoke if we have `lastArgs` which means `func` has been +
56220 // debounced at least once. +
56221 if (trailing && lastArgs) { +
56222 return invokeFunc(time); +
56223 } +
56224 lastArgs = lastThis = undefined; +
56225 return result; +
56226 } +
56227 +
56228 function cancel() { +
56229 if (timerId !== undefined) { +
56230 clearTimeout(timerId); +
56231 } +
56232 lastInvokeTime = 0; +
56233 lastArgs = lastCallTime = lastThis = timerId = undefined; +
56234 } +
56235 +
56236 function flush() { +
56237 return timerId === undefined ? result : trailingEdge(now()); +
56238 } +
56239 +
56240 function debounced() { +
56241 var time = now(), +
56242 isInvoking = shouldInvoke(time); +
56243 +
56244 lastArgs = arguments; +
56245 lastThis = this; +
56246 lastCallTime = time; +
56247 +
56248 if (isInvoking) { +
56249 if (timerId === undefined) { +
56250 return leadingEdge(lastCallTime); +
56251 } +
56252 if (maxing) { +
56253 // Handle invocations in a tight loop. +
56254 timerId = setTimeout(timerExpired, wait); +
56255 return invokeFunc(lastCallTime); +
56256 } +
56257 } +
56258 if (timerId === undefined) { +
56259 timerId = setTimeout(timerExpired, wait); +
56260 } +
56261 return result; +
56262 } +
56263 debounced.cancel = cancel; +
56264 debounced.flush = flush; +
56265 return debounced; +
56266 } +
56267 +
56268 /** +
56269 * Defers invoking the `func` until the current call stack has cleared. Any +
56270 * additional arguments are provided to `func` when it's invoked. +
56271 * +
56272 * @static +
56273 * @memberOf _ +
56274 * @since 0.1.0 +
56275 * @category Function +
56276 * @param {Function} func The function to defer. +
56277 * @param {...*} [args] The arguments to invoke `func` with. +
56278 * @returns {number} Returns the timer id. +
56279 * @example +
56280 * +
56281 * _.defer(function(text) { +
56282 * console.log(text); +
56283 * }, 'deferred'); +
56284 * // => Logs 'deferred' after one millisecond. +
56285 */ +
56286 var defer = baseRest(function(func, args) { +
56287 return baseDelay(func, 1, args); +
56288 }); +
56289 +
56290 /** +
56291 * Invokes `func` after `wait` milliseconds. Any additional arguments are +
56292 * provided to `func` when it's invoked. +
56293 * +
56294 * @static +
56295 * @memberOf _ +
56296 * @since 0.1.0 +
56297 * @category Function +
56298 * @param {Function} func The function to delay. +
56299 * @param {number} wait The number of milliseconds to delay invocation. +
56300 * @param {...*} [args] The arguments to invoke `func` with. +
56301 * @returns {number} Returns the timer id. +
56302 * @example +
56303 * +
56304 * _.delay(function(text) { +
56305 * console.log(text); +
56306 * }, 1000, 'later'); +
56307 * // => Logs 'later' after one second. +
56308 */ +
56309 var delay = baseRest(function(func, wait, args) { +
56310 return baseDelay(func, toNumber(wait) || 0, args); +
56311 }); +
56312 +
56313 /** +
56314 * Creates a function that invokes `func` with arguments reversed. +
56315 * +
56316 * @static +
56317 * @memberOf _ +
56318 * @since 4.0.0 +
56319 * @category Function +
56320 * @param {Function} func The function to flip arguments for. +
56321 * @returns {Function} Returns the new flipped function. +
56322 * @example +
56323 * +
56324 * var flipped = _.flip(function() { +
56325 * return _.toArray(arguments); +
56326 * }); +
56327 * +
56328 * flipped('a', 'b', 'c', 'd'); +
56329 * // => ['d', 'c', 'b', 'a'] +
56330 */ +
56331 function flip(func) { +
56332 return createWrap(func, WRAP_FLIP_FLAG); +
56333 } +
56334 +
56335 /** +
56336 * Creates a function that memoizes the result of `func`. If `resolver` is +
56337 * provided, it determines the cache key for storing the result based on the +
56338 * arguments provided to the memoized function. By default, the first argument +
56339 * provided to the memoized function is used as the map cache key. The `func` +
56340 * is invoked with the `this` binding of the memoized function. +
56341 * +
56342 * **Note:** The cache is exposed as the `cache` property on the memoized +
56343 * function. Its creation may be customized by replacing the `_.memoize.Cache` +
56344 * constructor with one whose instances implement the +
56345 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) +
56346 * method interface of `clear`, `delete`, `get`, `has`, and `set`. +
56347 * +
56348 * @static +
56349 * @memberOf _ +
56350 * @since 0.1.0 +
56351 * @category Function +
56352 * @param {Function} func The function to have its output memoized. +
56353 * @param {Function} [resolver] The function to resolve the cache key. +
56354 * @returns {Function} Returns the new memoized function. +
56355 * @example +
56356 * +
56357 * var object = { 'a': 1, 'b': 2 }; +
56358 * var other = { 'c': 3, 'd': 4 }; +
56359 * +
56360 * var values = _.memoize(_.values); +
56361 * values(object); +
56362 * // => [1, 2] +
56363 * +
56364 * values(other); +
56365 * // => [3, 4] +
56366 * +
56367 * object.a = 2; +
56368 * values(object); +
56369 * // => [1, 2] +
56370 * +
56371 * // Modify the result cache. +
56372 * values.cache.set(object, ['a', 'b']); +
56373 * values(object); +
56374 * // => ['a', 'b'] +
56375 * +
56376 * // Replace `_.memoize.Cache`. +
56377 * _.memoize.Cache = WeakMap; +
56378 */ +
56379 function memoize(func, resolver) { +
56380 if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { +
56381 throw new TypeError(FUNC_ERROR_TEXT); +
56382 } +
56383 var memoized = function() { +
56384 var args = arguments, +
56385 key = resolver ? resolver.apply(this, args) : args[0], +
56386 cache = memoized.cache; +
56387 +
56388 if (cache.has(key)) { +
56389 return cache.get(key); +
56390 } +
56391 var result = func.apply(this, args); +
56392 memoized.cache = cache.set(key, result) || cache; +
56393 return result; +
56394 }; +
56395 memoized.cache = new (memoize.Cache || MapCache); +
56396 return memoized; +
56397 } +
56398 +
56399 // Expose `MapCache`. +
56400 memoize.Cache = MapCache; +
56401 +
56402 /** +
56403 * Creates a function that negates the result of the predicate `func`. The +
56404 * `func` predicate is invoked with the `this` binding and arguments of the +
56405 * created function. +
56406 * +
56407 * @static +
56408 * @memberOf _ +
56409 * @since 3.0.0 +
56410 * @category Function +
56411 * @param {Function} predicate The predicate to negate. +
56412 * @returns {Function} Returns the new negated function. +
56413 * @example +
56414 * +
56415 * function isEven(n) { +
56416 * return n % 2 == 0; +
56417 * } +
56418 * +
56419 * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); +
56420 * // => [1, 3, 5] +
56421 */ +
56422 function negate(predicate) { +
56423 if (typeof predicate != 'function') { +
56424 throw new TypeError(FUNC_ERROR_TEXT); +
56425 } +
56426 return function() { +
56427 var args = arguments; +
56428 switch (args.length) { +
56429 case 0: return !predicate.call(this); +
56430 case 1: return !predicate.call(this, args[0]); +
56431 case 2: return !predicate.call(this, args[0], args[1]); +
56432 case 3: return !predicate.call(this, args[0], args[1], args[2]); +
56433 } +
56434 return !predicate.apply(this, args); +
56435 }; +
56436 } +
56437 +
56438 /** +
56439 * Creates a function that is restricted to invoking `func` once. Repeat calls +
56440 * to the function return the value of the first invocation. The `func` is +
56441 * invoked with the `this` binding and arguments of the created function. +
56442 * +
56443 * @static +
56444 * @memberOf _ +
56445 * @since 0.1.0 +
56446 * @category Function +
56447 * @param {Function} func The function to restrict. +
56448 * @returns {Function} Returns the new restricted function. +
56449 * @example +
56450 * +
56451 * var initialize = _.once(createApplication); +
56452 * initialize(); +
56453 * initialize(); +
56454 * // => `createApplication` is invoked once +
56455 */ +
56456 function once(func) { +
56457 return before(2, func); +
56458 } +
56459 +
56460 /** +
56461 * Creates a function that invokes `func` with its arguments transformed. +
56462 * +
56463 * @static +
56464 * @since 4.0.0 +
56465 * @memberOf _ +
56466 * @category Function +
56467 * @param {Function} func The function to wrap. +
56468 * @param {...(Function|Function[])} [transforms=[_.identity]] +
56469 * The argument transforms. +
56470 * @returns {Function} Returns the new function. +
56471 * @example +
56472 * +
56473 * function doubled(n) { +
56474 * return n * 2; +
56475 * } +
56476 * +
56477 * function square(n) { +
56478 * return n * n; +
56479 * } +
56480 * +
56481 * var func = _.overArgs(function(x, y) { +
56482 * return [x, y]; +
56483 * }, [square, doubled]); +
56484 * +
56485 * func(9, 3); +
56486 * // => [81, 6] +
56487 * +
56488 * func(10, 5); +
56489 * // => [100, 10] +
56490 */ +
56491 var overArgs = castRest(function(func, transforms) { +
56492 transforms = (transforms.length == 1 && isArray(transforms[0])) +
56493 ? arrayMap(transforms[0], baseUnary(getIteratee())) +
56494 : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); +
56495 +
56496 var funcsLength = transforms.length; +
56497 return baseRest(function(args) { +
56498 var index = -1, +
56499 length = nativeMin(args.length, funcsLength); +
56500 +
56501 while (++index < length) { +
56502 args[index] = transforms[index].call(this, args[index]); +
56503 } +
56504 return apply(func, this, args); +
56505 }); +
56506 }); +
56507 +
56508 /** +
56509 * Creates a function that invokes `func` with `partials` prepended to the +
56510 * arguments it receives. This method is like `_.bind` except it does **not** +
56511 * alter the `this` binding. +
56512 * +
56513 * The `_.partial.placeholder` value, which defaults to `_` in monolithic +
56514 * builds, may be used as a placeholder for partially applied arguments. +
56515 * +
56516 * **Note:** This method doesn't set the "length" property of partially +
56517 * applied functions. +
56518 * +
56519 * @static +
56520 * @memberOf _ +
56521 * @since 0.2.0 +
56522 * @category Function +
56523 * @param {Function} func The function to partially apply arguments to. +
56524 * @param {...*} [partials] The arguments to be partially applied. +
56525 * @returns {Function} Returns the new partially applied function. +
56526 * @example +
56527 * +
56528 * function greet(greeting, name) { +
56529 * return greeting + ' ' + name; +
56530 * } +
56531 * +
56532 * var sayHelloTo = _.partial(greet, 'hello'); +
56533 * sayHelloTo('fred'); +
56534 * // => 'hello fred' +
56535 * +
56536 * // Partially applied with placeholders. +
56537 * var greetFred = _.partial(greet, _, 'fred'); +
56538 * greetFred('hi'); +
56539 * // => 'hi fred' +
56540 */ +
56541 var partial = baseRest(function(func, partials) { +
56542 var holders = replaceHolders(partials, getHolder(partial)); +
56543 return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); +
56544 }); +
56545 +
56546 /** +
56547 * This method is like `_.partial` except that partially applied arguments +
56548 * are appended to the arguments it receives. +
56549 * +
56550 * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic +
56551 * builds, may be used as a placeholder for partially applied arguments. +
56552 * +
56553 * **Note:** This method doesn't set the "length" property of partially +
56554 * applied functions. +
56555 * +
56556 * @static +
56557 * @memberOf _ +
56558 * @since 1.0.0 +
56559 * @category Function +
56560 * @param {Function} func The function to partially apply arguments to. +
56561 * @param {...*} [partials] The arguments to be partially applied. +
56562 * @returns {Function} Returns the new partially applied function. +
56563 * @example +
56564 * +
56565 * function greet(greeting, name) { +
56566 * return greeting + ' ' + name; +
56567 * } +
56568 * +
56569 * var greetFred = _.partialRight(greet, 'fred'); +
56570 * greetFred('hi'); +
56571 * // => 'hi fred' +
56572 * +
56573 * // Partially applied with placeholders. +
56574 * var sayHelloTo = _.partialRight(greet, 'hello', _); +
56575 * sayHelloTo('fred'); +
56576 * // => 'hello fred' +
56577 */ +
56578 var partialRight = baseRest(function(func, partials) { +
56579 var holders = replaceHolders(partials, getHolder(partialRight)); +
56580 return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); +
56581 }); +
56582 +
56583 /** +
56584 * Creates a function that invokes `func` with arguments arranged according +
56585 * to the specified `indexes` where the argument value at the first index is +
56586 * provided as the first argument, the argument value at the second index is +
56587 * provided as the second argument, and so on. +
56588 * +
56589 * @static +
56590 * @memberOf _ +
56591 * @since 3.0.0 +
56592 * @category Function +
56593 * @param {Function} func The function to rearrange arguments for. +
56594 * @param {...(number|number[])} indexes The arranged argument indexes. +
56595 * @returns {Function} Returns the new function. +
56596 * @example +
56597 * +
56598 * var rearged = _.rearg(function(a, b, c) { +
56599 * return [a, b, c]; +
56600 * }, [2, 0, 1]); +
56601 * +
56602 * rearged('b', 'c', 'a') +
56603 * // => ['a', 'b', 'c'] +
56604 */ +
56605 var rearg = flatRest(function(func, indexes) { +
56606 return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); +
56607 }); +
56608 +
56609 /** +
56610 * Creates a function that invokes `func` with the `this` binding of the +
56611 * created function and arguments from `start` and beyond provided as +
56612 * an array. +
56613 * +
56614 * **Note:** This method is based on the +
56615 * [rest parameter](https://mdn.io/rest_parameters). +
56616 * +
56617 * @static +
56618 * @memberOf _ +
56619 * @since 4.0.0 +
56620 * @category Function +
56621 * @param {Function} func The function to apply a rest parameter to. +
56622 * @param {number} [start=func.length-1] The start position of the rest parameter. +
56623 * @returns {Function} Returns the new function. +
56624 * @example +
56625 * +
56626 * var say = _.rest(function(what, names) { +
56627 * return what + ' ' + _.initial(names).join(', ') + +
56628 * (_.size(names) > 1 ? ', & ' : '') + _.last(names); +
56629 * }); +
56630 * +
56631 * say('hello', 'fred', 'barney', 'pebbles'); +
56632 * // => 'hello fred, barney, & pebbles' +
56633 */ +
56634 function rest(func, start) { +
56635 if (typeof func != 'function') { +
56636 throw new TypeError(FUNC_ERROR_TEXT); +
56637 } +
56638 start = start === undefined ? start : toInteger(start); +
56639 return baseRest(func, start); +
56640 } +
56641 +
56642 /** +
56643 * Creates a function that invokes `func` with the `this` binding of the +
56644 * create function and an array of arguments much like +
56645 * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). +
56646 * +
56647 * **Note:** This method is based on the +
56648 * [spread operator](https://mdn.io/spread_operator). +
56649 * +
56650 * @static +
56651 * @memberOf _ +
56652 * @since 3.2.0 +
56653 * @category Function +
56654 * @param {Function} func The function to spread arguments over. +
56655 * @param {number} [start=0] The start position of the spread. +
56656 * @returns {Function} Returns the new function. +
56657 * @example +
56658 * +
56659 * var say = _.spread(function(who, what) { +
56660 * return who + ' says ' + what; +
56661 * }); +
56662 * +
56663 * say(['fred', 'hello']); +
56664 * // => 'fred says hello' +
56665 * +
56666 * var numbers = Promise.all([ +
56667 * Promise.resolve(40), +
56668 * Promise.resolve(36) +
56669 * ]); +
56670 * +
56671 * numbers.then(_.spread(function(x, y) { +
56672 * return x + y; +
56673 * })); +
56674 * // => a Promise of 76 +
56675 */ +
56676 function spread(func, start) { +
56677 if (typeof func != 'function') { +
56678 throw new TypeError(FUNC_ERROR_TEXT); +
56679 } +
56680 start = start == null ? 0 : nativeMax(toInteger(start), 0); +
56681 return baseRest(function(args) { +
56682 var array = args[start], +
56683 otherArgs = castSlice(args, 0, start); +
56684 +
56685 if (array) { +
56686 arrayPush(otherArgs, array); +
56687 } +
56688 return apply(func, this, otherArgs); +
56689 }); +
56690 } +
56691 +
56692 /** +
56693 * Creates a throttled function that only invokes `func` at most once per +
56694 * every `wait` milliseconds. The throttled function comes with a `cancel` +
56695 * method to cancel delayed `func` invocations and a `flush` method to +
56696 * immediately invoke them. Provide `options` to indicate whether `func` +
56697 * should be invoked on the leading and/or trailing edge of the `wait` +
56698 * timeout. The `func` is invoked with the last arguments provided to the +
56699 * throttled function. Subsequent calls to the throttled function return the +
56700 * result of the last `func` invocation. +
56701 * +
56702 * **Note:** If `leading` and `trailing` options are `true`, `func` is +
56703 * invoked on the trailing edge of the timeout only if the throttled function +
56704 * is invoked more than once during the `wait` timeout. +
56705 * +
56706 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +
56707 * until to the next tick, similar to `setTimeout` with a timeout of `0`. +
56708 * +
56709 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +
56710 * for details over the differences between `_.throttle` and `_.debounce`. +
56711 * +
56712 * @static +
56713 * @memberOf _ +
56714 * @since 0.1.0 +
56715 * @category Function +
56716 * @param {Function} func The function to throttle. +
56717 * @param {number} [wait=0] The number of milliseconds to throttle invocations to. +
56718 * @param {Object} [options={}] The options object. +
56719 * @param {boolean} [options.leading=true] +
56720 * Specify invoking on the leading edge of the timeout. +
56721 * @param {boolean} [options.trailing=true] +
56722 * Specify invoking on the trailing edge of the timeout. +
56723 * @returns {Function} Returns the new throttled function. +
56724 * @example +
56725 * +
56726 * // Avoid excessively updating the position while scrolling. +
56727 * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); +
56728 * +
56729 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. +
56730 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); +
56731 * jQuery(element).on('click', throttled); +
56732 * +
56733 * // Cancel the trailing throttled invocation. +
56734 * jQuery(window).on('popstate', throttled.cancel); +
56735 */ +
56736 function throttle(func, wait, options) { +
56737 var leading = true, +
56738 trailing = true; +
56739 +
56740 if (typeof func != 'function') { +
56741 throw new TypeError(FUNC_ERROR_TEXT); +
56742 } +
56743 if (isObject(options)) { +
56744 leading = 'leading' in options ? !!options.leading : leading; +
56745 trailing = 'trailing' in options ? !!options.trailing : trailing; +
56746 } +
56747 return debounce(func, wait, { +
56748 'leading': leading, +
56749 'maxWait': wait, +
56750 'trailing': trailing +
56751 }); +
56752 } +
56753 +
56754 /** +
56755 * Creates a function that accepts up to one argument, ignoring any +
56756 * additional arguments. +
56757 * +
56758 * @static +
56759 * @memberOf _ +
56760 * @since 4.0.0 +
56761 * @category Function +
56762 * @param {Function} func The function to cap arguments for. +
56763 * @returns {Function} Returns the new capped function. +
56764 * @example +
56765 * +
56766 * _.map(['6', '8', '10'], _.unary(parseInt)); +
56767 * // => [6, 8, 10] +
56768 */ +
56769 function unary(func) { +
56770 return ary(func, 1); +
56771 } +
56772 +
56773 /** +
56774 * Creates a function that provides `value` to `wrapper` as its first +
56775 * argument. Any additional arguments provided to the function are appended +
56776 * to those provided to the `wrapper`. The wrapper is invoked with the `this` +
56777 * binding of the created function. +
56778 * +
56779 * @static +
56780 * @memberOf _ +
56781 * @since 0.1.0 +
56782 * @category Function +
56783 * @param {*} value The value to wrap. +
56784 * @param {Function} [wrapper=identity] The wrapper function. +
56785 * @returns {Function} Returns the new function. +
56786 * @example +
56787 * +
56788 * var p = _.wrap(_.escape, function(func, text) { +
56789 * return '<p>' + func(text) + '</p>'; +
56790 * }); +
56791 * +
56792 * p('fred, barney, & pebbles'); +
56793 * // => '<p>fred, barney, &amp; pebbles</p>' +
56794 */ +
56795 function wrap(value, wrapper) { +
56796 return partial(castFunction(wrapper), value); +
56797 } +
56798 +
56799 /*------------------------------------------------------------------------*/ +
56800 +
56801 /** +
56802 * Casts `value` as an array if it's not one. +
56803 * +
56804 * @static +
56805 * @memberOf _ +
56806 * @since 4.4.0 +
56807 * @category Lang +
56808 * @param {*} value The value to inspect. +
56809 * @returns {Array} Returns the cast array. +
56810 * @example +
56811 * +
56812 * _.castArray(1); +
56813 * // => [1] +
56814 * +
56815 * _.castArray({ 'a': 1 }); +
56816 * // => [{ 'a': 1 }] +
56817 * +
56818 * _.castArray('abc'); +
56819 * // => ['abc'] +
56820 * +
56821 * _.castArray(null); +
56822 * // => [null] +
56823 * +
56824 * _.castArray(undefined); +
56825 * // => [undefined] +
56826 * +
56827 * _.castArray(); +
56828 * // => [] +
56829 * +
56830 * var array = [1, 2, 3]; +
56831 * console.log(_.castArray(array) === array); +
56832 * // => true +
56833 */ +
56834 function castArray() { +
56835 if (!arguments.length) { +
56836 return []; +
56837 } +
56838 var value = arguments[0]; +
56839 return isArray(value) ? value : [value]; +
56840 } +
56841 +
56842 /** +
56843 * Creates a shallow clone of `value`. +
56844 * +
56845 * **Note:** This method is loosely based on the +
56846 * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) +
56847 * and supports cloning arrays, array buffers, booleans, date objects, maps, +
56848 * numbers, `Object` objects, regexes, sets, strings, symbols, and typed +
56849 * arrays. The own enumerable properties of `arguments` objects are cloned +
56850 * as plain objects. An empty object is returned for uncloneable values such +
56851 * as error objects, functions, DOM nodes, and WeakMaps. +
56852 * +
56853 * @static +
56854 * @memberOf _ +
56855 * @since 0.1.0 +
56856 * @category Lang +
56857 * @param {*} value The value to clone. +
56858 * @returns {*} Returns the cloned value. +
56859 * @see _.cloneDeep +
56860 * @example +
56861 * +
56862 * var objects = [{ 'a': 1 }, { 'b': 2 }]; +
56863 * +
56864 * var shallow = _.clone(objects); +
56865 * console.log(shallow[0] === objects[0]); +
56866 * // => true +
56867 */ +
56868 function clone(value) { +
56869 return baseClone(value, CLONE_SYMBOLS_FLAG); +
56870 } +
56871 +
56872 /** +
56873 * This method is like `_.clone` except that it accepts `customizer` which +
56874 * is invoked to produce the cloned value. If `customizer` returns `undefined`, +
56875 * cloning is handled by the method instead. The `customizer` is invoked with +
56876 * up to four arguments; (value [, index|key, object, stack]). +
56877 * +
56878 * @static +
56879 * @memberOf _ +
56880 * @since 4.0.0 +
56881 * @category Lang +
56882 * @param {*} value The value to clone. +
56883 * @param {Function} [customizer] The function to customize cloning. +
56884 * @returns {*} Returns the cloned value. +
56885 * @see _.cloneDeepWith +
56886 * @example +
56887 * +
56888 * function customizer(value) { +
56889 * if (_.isElement(value)) { +
56890 * return value.cloneNode(false); +
56891 * } +
56892 * } +
56893 * +
56894 * var el = _.cloneWith(document.body, customizer); +
56895 * +
56896 * console.log(el === document.body); +
56897 * // => false +
56898 * console.log(el.nodeName); +
56899 * // => 'BODY' +
56900 * console.log(el.childNodes.length); +
56901 * // => 0 +
56902 */ +
56903 function cloneWith(value, customizer) { +
56904 customizer = typeof customizer == 'function' ? customizer : undefined; +
56905 return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); +
56906 } +
56907 +
56908 /** +
56909 * This method is like `_.clone` except that it recursively clones `value`. +
56910 * +
56911 * @static +
56912 * @memberOf _ +
56913 * @since 1.0.0 +
56914 * @category Lang +
56915 * @param {*} value The value to recursively clone. +
56916 * @returns {*} Returns the deep cloned value. +
56917 * @see _.clone +
56918 * @example +
56919 * +
56920 * var objects = [{ 'a': 1 }, { 'b': 2 }]; +
56921 * +
56922 * var deep = _.cloneDeep(objects); +
56923 * console.log(deep[0] === objects[0]); +
56924 * // => false +
56925 */ +
56926 function cloneDeep(value) { +
56927 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +
56928 } +
56929 +
56930 /** +
56931 * This method is like `_.cloneWith` except that it recursively clones `value`. +
56932 * +
56933 * @static +
56934 * @memberOf _ +
56935 * @since 4.0.0 +
56936 * @category Lang +
56937 * @param {*} value The value to recursively clone. +
56938 * @param {Function} [customizer] The function to customize cloning. +
56939 * @returns {*} Returns the deep cloned value. +
56940 * @see _.cloneWith +
56941 * @example +
56942 * +
56943 * function customizer(value) { +
56944 * if (_.isElement(value)) { +
56945 * return value.cloneNode(true); +
56946 * } +
56947 * } +
56948 * +
56949 * var el = _.cloneDeepWith(document.body, customizer); +
56950 * +
56951 * console.log(el === document.body); +
56952 * // => false +
56953 * console.log(el.nodeName); +
56954 * // => 'BODY' +
56955 * console.log(el.childNodes.length); +
56956 * // => 20 +
56957 */ +
56958 function cloneDeepWith(value, customizer) { +
56959 customizer = typeof customizer == 'function' ? customizer : undefined; +
56960 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); +
56961 } +
56962 +
56963 /** +
56964 * Checks if `object` conforms to `source` by invoking the predicate +
56965 * properties of `source` with the corresponding property values of `object`. +
56966 * +
56967 * **Note:** This method is equivalent to `_.conforms` when `source` is +
56968 * partially applied. +
56969 * +
56970 * @static +
56971 * @memberOf _ +
56972 * @since 4.14.0 +
56973 * @category Lang +
56974 * @param {Object} object The object to inspect. +
56975 * @param {Object} source The object of property predicates to conform to. +
56976 * @returns {boolean} Returns `true` if `object` conforms, else `false`. +
56977 * @example +
56978 * +
56979 * var object = { 'a': 1, 'b': 2 }; +
56980 * +
56981 * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); +
56982 * // => true +
56983 * +
56984 * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); +
56985 * // => false +
56986 */ +
56987 function conformsTo(object, source) { +
56988 return source == null || baseConformsTo(object, source, keys(source)); +
56989 } +
56990 +
56991 /** +
56992 * Performs a +
56993 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
56994 * comparison between two values to determine if they are equivalent. +
56995 * +
56996 * @static +
56997 * @memberOf _ +
56998 * @since 4.0.0 +
56999 * @category Lang +
57000 * @param {*} value The value to compare. +
57001 * @param {*} other The other value to compare. +
57002 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
57003 * @example +
57004 * +
57005 * var object = { 'a': 1 }; +
57006 * var other = { 'a': 1 }; +
57007 * +
57008 * _.eq(object, object); +
57009 * // => true +
57010 * +
57011 * _.eq(object, other); +
57012 * // => false +
57013 * +
57014 * _.eq('a', 'a'); +
57015 * // => true +
57016 * +
57017 * _.eq('a', Object('a')); +
57018 * // => false +
57019 * +
57020 * _.eq(NaN, NaN); +
57021 * // => true +
57022 */ +
57023 function eq(value, other) { +
57024 return value === other || (value !== value && other !== other); +
57025 } +
57026 +
57027 /** +
57028 * Checks if `value` is greater than `other`. +
57029 * +
57030 * @static +
57031 * @memberOf _ +
57032 * @since 3.9.0 +
57033 * @category Lang +
57034 * @param {*} value The value to compare. +
57035 * @param {*} other The other value to compare. +
57036 * @returns {boolean} Returns `true` if `value` is greater than `other`, +
57037 * else `false`. +
57038 * @see _.lt +
57039 * @example +
57040 * +
57041 * _.gt(3, 1); +
57042 * // => true +
57043 * +
57044 * _.gt(3, 3); +
57045 * // => false +
57046 * +
57047 * _.gt(1, 3); +
57048 * // => false +
57049 */ +
57050 var gt = createRelationalOperation(baseGt); +
57051 +
57052 /** +
57053 * Checks if `value` is greater than or equal to `other`. +
57054 * +
57055 * @static +
57056 * @memberOf _ +
57057 * @since 3.9.0 +
57058 * @category Lang +
57059 * @param {*} value The value to compare. +
57060 * @param {*} other The other value to compare. +
57061 * @returns {boolean} Returns `true` if `value` is greater than or equal to +
57062 * `other`, else `false`. +
57063 * @see _.lte +
57064 * @example +
57065 * +
57066 * _.gte(3, 1); +
57067 * // => true +
57068 * +
57069 * _.gte(3, 3); +
57070 * // => true +
57071 * +
57072 * _.gte(1, 3); +
57073 * // => false +
57074 */ +
57075 var gte = createRelationalOperation(function(value, other) { +
57076 return value >= other; +
57077 }); +
57078 +
57079 /** +
57080 * Checks if `value` is likely an `arguments` object. +
57081 * +
57082 * @static +
57083 * @memberOf _ +
57084 * @since 0.1.0 +
57085 * @category Lang +
57086 * @param {*} value The value to check. +
57087 * @returns {boolean} Returns `true` if `value` is an `arguments` object, +
57088 * else `false`. +
57089 * @example +
57090 * +
57091 * _.isArguments(function() { return arguments; }()); +
57092 * // => true +
57093 * +
57094 * _.isArguments([1, 2, 3]); +
57095 * // => false +
57096 */ +
57097 var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { +
57098 return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && +
57099 !propertyIsEnumerable.call(value, 'callee'); +
57100 }; +
57101 +
57102 /** +
57103 * Checks if `value` is classified as an `Array` object. +
57104 * +
57105 * @static +
57106 * @memberOf _ +
57107 * @since 0.1.0 +
57108 * @category Lang +
57109 * @param {*} value The value to check. +
57110 * @returns {boolean} Returns `true` if `value` is an array, else `false`. +
57111 * @example +
57112 * +
57113 * _.isArray([1, 2, 3]); +
57114 * // => true +
57115 * +
57116 * _.isArray(document.body.children); +
57117 * // => false +
57118 * +
57119 * _.isArray('abc'); +
57120 * // => false +
57121 * +
57122 * _.isArray(_.noop); +
57123 * // => false +
57124 */ +
57125 var isArray = Array.isArray; +
57126 +
57127 /** +
57128 * Checks if `value` is classified as an `ArrayBuffer` object. +
57129 * +
57130 * @static +
57131 * @memberOf _ +
57132 * @since 4.3.0 +
57133 * @category Lang +
57134 * @param {*} value The value to check. +
57135 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +
57136 * @example +
57137 * +
57138 * _.isArrayBuffer(new ArrayBuffer(2)); +
57139 * // => true +
57140 * +
57141 * _.isArrayBuffer(new Array(2)); +
57142 * // => false +
57143 */ +
57144 var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; +
57145 +
57146 /** +
57147 * Checks if `value` is array-like. A value is considered array-like if it's +
57148 * not a function and has a `value.length` that's an integer greater than or +
57149 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. +
57150 * +
57151 * @static +
57152 * @memberOf _ +
57153 * @since 4.0.0 +
57154 * @category Lang +
57155 * @param {*} value The value to check. +
57156 * @returns {boolean} Returns `true` if `value` is array-like, else `false`. +
57157 * @example +
57158 * +
57159 * _.isArrayLike([1, 2, 3]); +
57160 * // => true +
57161 * +
57162 * _.isArrayLike(document.body.children); +
57163 * // => true +
57164 * +
57165 * _.isArrayLike('abc'); +
57166 * // => true +
57167 * +
57168 * _.isArrayLike(_.noop); +
57169 * // => false +
57170 */ +
57171 function isArrayLike(value) { +
57172 return value != null && isLength(value.length) && !isFunction(value); +
57173 } +
57174 +
57175 /** +
57176 * This method is like `_.isArrayLike` except that it also checks if `value` +
57177 * is an object. +
57178 * +
57179 * @static +
57180 * @memberOf _ +
57181 * @since 4.0.0 +
57182 * @category Lang +
57183 * @param {*} value The value to check. +
57184 * @returns {boolean} Returns `true` if `value` is an array-like object, +
57185 * else `false`. +
57186 * @example +
57187 * +
57188 * _.isArrayLikeObject([1, 2, 3]); +
57189 * // => true +
57190 * +
57191 * _.isArrayLikeObject(document.body.children); +
57192 * // => true +
57193 * +
57194 * _.isArrayLikeObject('abc'); +
57195 * // => false +
57196 * +
57197 * _.isArrayLikeObject(_.noop); +
57198 * // => false +
57199 */ +
57200 function isArrayLikeObject(value) { +
57201 return isObjectLike(value) && isArrayLike(value); +
57202 } +
57203 +
57204 /** +
57205 * Checks if `value` is classified as a boolean primitive or object. +
57206 * +
57207 * @static +
57208 * @memberOf _ +
57209 * @since 0.1.0 +
57210 * @category Lang +
57211 * @param {*} value The value to check. +
57212 * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. +
57213 * @example +
57214 * +
57215 * _.isBoolean(false); +
57216 * // => true +
57217 * +
57218 * _.isBoolean(null); +
57219 * // => false +
57220 */ +
57221 function isBoolean(value) { +
57222 return value === true || value === false || +
57223 (isObjectLike(value) && baseGetTag(value) == boolTag); +
57224 } +
57225 +
57226 /** +
57227 * Checks if `value` is a buffer. +
57228 * +
57229 * @static +
57230 * @memberOf _ +
57231 * @since 4.3.0 +
57232 * @category Lang +
57233 * @param {*} value The value to check. +
57234 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. +
57235 * @example +
57236 * +
57237 * _.isBuffer(new Buffer(2)); +
57238 * // => true +
57239 * +
57240 * _.isBuffer(new Uint8Array(2)); +
57241 * // => false +
57242 */ +
57243 var isBuffer = nativeIsBuffer || stubFalse; +
57244 +
57245 /** +
57246 * Checks if `value` is classified as a `Date` object. +
57247 * +
57248 * @static +
57249 * @memberOf _ +
57250 * @since 0.1.0 +
57251 * @category Lang +
57252 * @param {*} value The value to check. +
57253 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +
57254 * @example +
57255 * +
57256 * _.isDate(new Date); +
57257 * // => true +
57258 * +
57259 * _.isDate('Mon April 23 2012'); +
57260 * // => false +
57261 */ +
57262 var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; +
57263 +
57264 /** +
57265 * Checks if `value` is likely a DOM element. +
57266 * +
57267 * @static +
57268 * @memberOf _ +
57269 * @since 0.1.0 +
57270 * @category Lang +
57271 * @param {*} value The value to check. +
57272 * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. +
57273 * @example +
57274 * +
57275 * _.isElement(document.body); +
57276 * // => true +
57277 * +
57278 * _.isElement('<body>'); +
57279 * // => false +
57280 */ +
57281 function isElement(value) { +
57282 return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); +
57283 } +
57284 +
57285 /** +
57286 * Checks if `value` is an empty object, collection, map, or set. +
57287 * +
57288 * Objects are considered empty if they have no own enumerable string keyed +
57289 * properties. +
57290 * +
57291 * Array-like values such as `arguments` objects, arrays, buffers, strings, or +
57292 * jQuery-like collections are considered empty if they have a `length` of `0`. +
57293 * Similarly, maps and sets are considered empty if they have a `size` of `0`. +
57294 * +
57295 * @static +
57296 * @memberOf _ +
57297 * @since 0.1.0 +
57298 * @category Lang +
57299 * @param {*} value The value to check. +
57300 * @returns {boolean} Returns `true` if `value` is empty, else `false`. +
57301 * @example +
57302 * +
57303 * _.isEmpty(null); +
57304 * // => true +
57305 * +
57306 * _.isEmpty(true); +
57307 * // => true +
57308 * +
57309 * _.isEmpty(1); +
57310 * // => true +
57311 * +
57312 * _.isEmpty([1, 2, 3]); +
57313 * // => false +
57314 * +
57315 * _.isEmpty({ 'a': 1 }); +
57316 * // => false +
57317 */ +
57318 function isEmpty(value) { +
57319 if (value == null) { +
57320 return true; +
57321 } +
57322 if (isArrayLike(value) && +
57323 (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || +
57324 isBuffer(value) || isTypedArray(value) || isArguments(value))) { +
57325 return !value.length; +
57326 } +
57327 var tag = getTag(value); +
57328 if (tag == mapTag || tag == setTag) { +
57329 return !value.size; +
57330 } +
57331 if (isPrototype(value)) { +
57332 return !baseKeys(value).length; +
57333 } +
57334 for (var key in value) { +
57335 if (hasOwnProperty.call(value, key)) { +
57336 return false; +
57337 } +
57338 } +
57339 return true; +
57340 } +
57341 +
57342 /** +
57343 * Performs a deep comparison between two values to determine if they are +
57344 * equivalent. +
57345 * +
57346 * **Note:** This method supports comparing arrays, array buffers, booleans, +
57347 * date objects, error objects, maps, numbers, `Object` objects, regexes, +
57348 * sets, strings, symbols, and typed arrays. `Object` objects are compared +
57349 * by their own, not inherited, enumerable properties. Functions and DOM +
57350 * nodes are compared by strict equality, i.e. `===`. +
57351 * +
57352 * @static +
57353 * @memberOf _ +
57354 * @since 0.1.0 +
57355 * @category Lang +
57356 * @param {*} value The value to compare. +
57357 * @param {*} other The other value to compare. +
57358 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
57359 * @example +
57360 * +
57361 * var object = { 'a': 1 }; +
57362 * var other = { 'a': 1 }; +
57363 * +
57364 * _.isEqual(object, other); +
57365 * // => true +
57366 * +
57367 * object === other; +
57368 * // => false +
57369 */ +
57370 function isEqual(value, other) { +
57371 return baseIsEqual(value, other); +
57372 } +
57373 +
57374 /** +
57375 * This method is like `_.isEqual` except that it accepts `customizer` which +
57376 * is invoked to compare values. If `customizer` returns `undefined`, comparisons +
57377 * are handled by the method instead. The `customizer` is invoked with up to +
57378 * six arguments: (objValue, othValue [, index|key, object, other, stack]). +
57379 * +
57380 * @static +
57381 * @memberOf _ +
57382 * @since 4.0.0 +
57383 * @category Lang +
57384 * @param {*} value The value to compare. +
57385 * @param {*} other The other value to compare. +
57386 * @param {Function} [customizer] The function to customize comparisons. +
57387 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
57388 * @example +
57389 * +
57390 * function isGreeting(value) { +
57391 * return /^h(?:i|ello)$/.test(value); +
57392 * } +
57393 * +
57394 * function customizer(objValue, othValue) { +
57395 * if (isGreeting(objValue) && isGreeting(othValue)) { +
57396 * return true; +
57397 * } +
57398 * } +
57399 * +
57400 * var array = ['hello', 'goodbye']; +
57401 * var other = ['hi', 'goodbye']; +
57402 * +
57403 * _.isEqualWith(array, other, customizer); +
57404 * // => true +
57405 */ +
57406 function isEqualWith(value, other, customizer) { +
57407 customizer = typeof customizer == 'function' ? customizer : undefined; +
57408 var result = customizer ? customizer(value, other) : undefined; +
57409 return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; +
57410 } +
57411 +
57412 /** +
57413 * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, +
57414 * `SyntaxError`, `TypeError`, or `URIError` object. +
57415 * +
57416 * @static +
57417 * @memberOf _ +
57418 * @since 3.0.0 +
57419 * @category Lang +
57420 * @param {*} value The value to check. +
57421 * @returns {boolean} Returns `true` if `value` is an error object, else `false`. +
57422 * @example +
57423 * +
57424 * _.isError(new Error); +
57425 * // => true +
57426 * +
57427 * _.isError(Error); +
57428 * // => false +
57429 */ +
57430 function isError(value) { +
57431 if (!isObjectLike(value)) { +
57432 return false; +
57433 } +
57434 var tag = baseGetTag(value); +
57435 return tag == errorTag || tag == domExcTag || +
57436 (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); +
57437 } +
57438 +
57439 /** +
57440 * Checks if `value` is a finite primitive number. +
57441 * +
57442 * **Note:** This method is based on +
57443 * [`Number.isFinite`](https://mdn.io/Number/isFinite). +
57444 * +
57445 * @static +
57446 * @memberOf _ +
57447 * @since 0.1.0 +
57448 * @category Lang +
57449 * @param {*} value The value to check. +
57450 * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. +
57451 * @example +
57452 * +
57453 * _.isFinite(3); +
57454 * // => true +
57455 * +
57456 * _.isFinite(Number.MIN_VALUE); +
57457 * // => true +
57458 * +
57459 * _.isFinite(Infinity); +
57460 * // => false +
57461 * +
57462 * _.isFinite('3'); +
57463 * // => false +
57464 */ +
57465 function isFinite(value) { +
57466 return typeof value == 'number' && nativeIsFinite(value); +
57467 } +
57468 +
57469 /** +
57470 * Checks if `value` is classified as a `Function` object. +
57471 * +
57472 * @static +
57473 * @memberOf _ +
57474 * @since 0.1.0 +
57475 * @category Lang +
57476 * @param {*} value The value to check. +
57477 * @returns {boolean} Returns `true` if `value` is a function, else `false`. +
57478 * @example +
57479 * +
57480 * _.isFunction(_); +
57481 * // => true +
57482 * +
57483 * _.isFunction(/abc/); +
57484 * // => false +
57485 */ +
57486 function isFunction(value) { +
57487 if (!isObject(value)) { +
57488 return false; +
57489 } +
57490 // The use of `Object#toString` avoids issues with the `typeof` operator +
57491 // in Safari 9 which returns 'object' for typed arrays and other constructors. +
57492 var tag = baseGetTag(value); +
57493 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +
57494 } +
57495 +
57496 /** +
57497 * Checks if `value` is an integer. +
57498 * +
57499 * **Note:** This method is based on +
57500 * [`Number.isInteger`](https://mdn.io/Number/isInteger). +
57501 * +
57502 * @static +
57503 * @memberOf _ +
57504 * @since 4.0.0 +
57505 * @category Lang +
57506 * @param {*} value The value to check. +
57507 * @returns {boolean} Returns `true` if `value` is an integer, else `false`. +
57508 * @example +
57509 * +
57510 * _.isInteger(3); +
57511 * // => true +
57512 * +
57513 * _.isInteger(Number.MIN_VALUE); +
57514 * // => false +
57515 * +
57516 * _.isInteger(Infinity); +
57517 * // => false +
57518 * +
57519 * _.isInteger('3'); +
57520 * // => false +
57521 */ +
57522 function isInteger(value) { +
57523 return typeof value == 'number' && value == toInteger(value); +
57524 } +
57525 +
57526 /** +
57527 * Checks if `value` is a valid array-like length. +
57528 * +
57529 * **Note:** This method is loosely based on +
57530 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +
57531 * +
57532 * @static +
57533 * @memberOf _ +
57534 * @since 4.0.0 +
57535 * @category Lang +
57536 * @param {*} value The value to check. +
57537 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. +
57538 * @example +
57539 * +
57540 * _.isLength(3); +
57541 * // => true +
57542 * +
57543 * _.isLength(Number.MIN_VALUE); +
57544 * // => false +
57545 * +
57546 * _.isLength(Infinity); +
57547 * // => false +
57548 * +
57549 * _.isLength('3'); +
57550 * // => false +
57551 */ +
57552 function isLength(value) { +
57553 return typeof value == 'number' && +
57554 value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +
57555 } +
57556 +
57557 /** +
57558 * Checks if `value` is the +
57559 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) +
57560 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) +
57561 * +
57562 * @static +
57563 * @memberOf _ +
57564 * @since 0.1.0 +
57565 * @category Lang +
57566 * @param {*} value The value to check. +
57567 * @returns {boolean} Returns `true` if `value` is an object, else `false`. +
57568 * @example +
57569 * +
57570 * _.isObject({}); +
57571 * // => true +
57572 * +
57573 * _.isObject([1, 2, 3]); +
57574 * // => true +
57575 * +
57576 * _.isObject(_.noop); +
57577 * // => true +
57578 * +
57579 * _.isObject(null); +
57580 * // => false +
57581 */ +
57582 function isObject(value) { +
57583 var type = typeof value; +
57584 return value != null && (type == 'object' || type == 'function'); +
57585 } +
57586 +
57587 /** +
57588 * Checks if `value` is object-like. A value is object-like if it's not `null` +
57589 * and has a `typeof` result of "object". +
57590 * +
57591 * @static +
57592 * @memberOf _ +
57593 * @since 4.0.0 +
57594 * @category Lang +
57595 * @param {*} value The value to check. +
57596 * @returns {boolean} Returns `true` if `value` is object-like, else `false`. +
57597 * @example +
57598 * +
57599 * _.isObjectLike({}); +
57600 * // => true +
57601 * +
57602 * _.isObjectLike([1, 2, 3]); +
57603 * // => true +
57604 * +
57605 * _.isObjectLike(_.noop); +
57606 * // => false +
57607 * +
57608 * _.isObjectLike(null); +
57609 * // => false +
57610 */ +
57611 function isObjectLike(value) { +
57612 return value != null && typeof value == 'object'; +
57613 } +
57614 +
57615 /** +
57616 * Checks if `value` is classified as a `Map` object. +
57617 * +
57618 * @static +
57619 * @memberOf _ +
57620 * @since 4.3.0 +
57621 * @category Lang +
57622 * @param {*} value The value to check. +
57623 * @returns {boolean} Returns `true` if `value` is a map, else `false`. +
57624 * @example +
57625 * +
57626 * _.isMap(new Map); +
57627 * // => true +
57628 * +
57629 * _.isMap(new WeakMap); +
57630 * // => false +
57631 */ +
57632 var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; +
57633 +
57634 /** +
57635 * Performs a partial deep comparison between `object` and `source` to +
57636 * determine if `object` contains equivalent property values. +
57637 * +
57638 * **Note:** This method is equivalent to `_.matches` when `source` is +
57639 * partially applied. +
57640 * +
57641 * Partial comparisons will match empty array and empty object `source` +
57642 * values against any array or object value, respectively. See `_.isEqual` +
57643 * for a list of supported value comparisons. +
57644 * +
57645 * @static +
57646 * @memberOf _ +
57647 * @since 3.0.0 +
57648 * @category Lang +
57649 * @param {Object} object The object to inspect. +
57650 * @param {Object} source The object of property values to match. +
57651 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
57652 * @example +
57653 * +
57654 * var object = { 'a': 1, 'b': 2 }; +
57655 * +
57656 * _.isMatch(object, { 'b': 2 }); +
57657 * // => true +
57658 * +
57659 * _.isMatch(object, { 'b': 1 }); +
57660 * // => false +
57661 */ +
57662 function isMatch(object, source) { +
57663 return object === source || baseIsMatch(object, source, getMatchData(source)); +
57664 } +
57665 +
57666 /** +
57667 * This method is like `_.isMatch` except that it accepts `customizer` which +
57668 * is invoked to compare values. If `customizer` returns `undefined`, comparisons +
57669 * are handled by the method instead. The `customizer` is invoked with five +
57670 * arguments: (objValue, srcValue, index|key, object, source). +
57671 * +
57672 * @static +
57673 * @memberOf _ +
57674 * @since 4.0.0 +
57675 * @category Lang +
57676 * @param {Object} object The object to inspect. +
57677 * @param {Object} source The object of property values to match. +
57678 * @param {Function} [customizer] The function to customize comparisons. +
57679 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
57680 * @example +
57681 * +
57682 * function isGreeting(value) { +
57683 * return /^h(?:i|ello)$/.test(value); +
57684 * } +
57685 * +
57686 * function customizer(objValue, srcValue) { +
57687 * if (isGreeting(objValue) && isGreeting(srcValue)) { +
57688 * return true; +
57689 * } +
57690 * } +
57691 * +
57692 * var object = { 'greeting': 'hello' }; +
57693 * var source = { 'greeting': 'hi' }; +
57694 * +
57695 * _.isMatchWith(object, source, customizer); +
57696 * // => true +
57697 */ +
57698 function isMatchWith(object, source, customizer) { +
57699 customizer = typeof customizer == 'function' ? customizer : undefined; +
57700 return baseIsMatch(object, source, getMatchData(source), customizer); +
57701 } +
57702 +
57703 /** +
57704 * Checks if `value` is `NaN`. +
57705 * +
57706 * **Note:** This method is based on +
57707 * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as +
57708 * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for +
57709 * `undefined` and other non-number values. +
57710 * +
57711 * @static +
57712 * @memberOf _ +
57713 * @since 0.1.0 +
57714 * @category Lang +
57715 * @param {*} value The value to check. +
57716 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +
57717 * @example +
57718 * +
57719 * _.isNaN(NaN); +
57720 * // => true +
57721 * +
57722 * _.isNaN(new Number(NaN)); +
57723 * // => true +
57724 * +
57725 * isNaN(undefined); +
57726 * // => true +
57727 * +
57728 * _.isNaN(undefined); +
57729 * // => false +
57730 */ +
57731 function isNaN(value) { +
57732 // An `NaN` primitive is the only value that is not equal to itself. +
57733 // Perform the `toStringTag` check first to avoid errors with some +
57734 // ActiveX objects in IE. +
57735 return isNumber(value) && value != +value; +
57736 } +
57737 +
57738 /** +
57739 * Checks if `value` is a pristine native function. +
57740 * +
57741 * **Note:** This method can't reliably detect native functions in the presence +
57742 * of the core-js package because core-js circumvents this kind of detection. +
57743 * Despite multiple requests, the core-js maintainer has made it clear: any +
57744 * attempt to fix the detection will be obstructed. As a result, we're left +
57745 * with little choice but to throw an error. Unfortunately, this also affects +
57746 * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), +
57747 * which rely on core-js. +
57748 * +
57749 * @static +
57750 * @memberOf _ +
57751 * @since 3.0.0 +
57752 * @category Lang +
57753 * @param {*} value The value to check. +
57754 * @returns {boolean} Returns `true` if `value` is a native function, +
57755 * else `false`. +
57756 * @example +
57757 * +
57758 * _.isNative(Array.prototype.push); +
57759 * // => true +
57760 * +
57761 * _.isNative(_); +
57762 * // => false +
57763 */ +
57764 function isNative(value) { +
57765 if (isMaskable(value)) { +
57766 throw new Error(CORE_ERROR_TEXT); +
57767 } +
57768 return baseIsNative(value); +
57769 } +
57770 +
57771 /** +
57772 * Checks if `value` is `null`. +
57773 * +
57774 * @static +
57775 * @memberOf _ +
57776 * @since 0.1.0 +
57777 * @category Lang +
57778 * @param {*} value The value to check. +
57779 * @returns {boolean} Returns `true` if `value` is `null`, else `false`. +
57780 * @example +
57781 * +
57782 * _.isNull(null); +
57783 * // => true +
57784 * +
57785 * _.isNull(void 0); +
57786 * // => false +
57787 */ +
57788 function isNull(value) { +
57789 return value === null; +
57790 } +
57791 +
57792 /** +
57793 * Checks if `value` is `null` or `undefined`. +
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 nullish, else `false`. +
57801 * @example +
57802 * +
57803 * _.isNil(null); +
57804 * // => true +
57805 * +
57806 * _.isNil(void 0); +
57807 * // => true +
57808 * +
57809 * _.isNil(NaN); +
57810 * // => false +
57811 */ +
57812 function isNil(value) { +
57813 return value == null; +
57814 } +
57815 +
57816 /** +
57817 * Checks if `value` is classified as a `Number` primitive or object. +
57818 * +
57819 * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are +
57820 * classified as numbers, use the `_.isFinite` method. +
57821 * +
57822 * @static +
57823 * @memberOf _ +
57824 * @since 0.1.0 +
57825 * @category Lang +
57826 * @param {*} value The value to check. +
57827 * @returns {boolean} Returns `true` if `value` is a number, else `false`. +
57828 * @example +
57829 * +
57830 * _.isNumber(3); +
57831 * // => true +
57832 * +
57833 * _.isNumber(Number.MIN_VALUE); +
57834 * // => true +
57835 * +
57836 * _.isNumber(Infinity); +
57837 * // => true +
57838 * +
57839 * _.isNumber('3'); +
57840 * // => false +
57841 */ +
57842 function isNumber(value) { +
57843 return typeof value == 'number' || +
57844 (isObjectLike(value) && baseGetTag(value) == numberTag); +
57845 } +
57846 +
57847 /** +
57848 * Checks if `value` is a plain object, that is, an object created by the +
57849 * `Object` constructor or one with a `[[Prototype]]` of `null`. +
57850 * +
57851 * @static +
57852 * @memberOf _ +
57853 * @since 0.8.0 +
57854 * @category Lang +
57855 * @param {*} value The value to check. +
57856 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. +
57857 * @example +
57858 * +
57859 * function Foo() { +
57860 * this.a = 1; +
57861 * } +
57862 * +
57863 * _.isPlainObject(new Foo); +
57864 * // => false +
57865 * +
57866 * _.isPlainObject([1, 2, 3]); +
57867 * // => false +
57868 * +
57869 * _.isPlainObject({ 'x': 0, 'y': 0 }); +
57870 * // => true +
57871 * +
57872 * _.isPlainObject(Object.create(null)); +
57873 * // => true +
57874 */ +
57875 function isPlainObject(value) { +
57876 if (!isObjectLike(value) || baseGetTag(value) != objectTag) { +
57877 return false; +
57878 } +
57879 var proto = getPrototype(value); +
57880 if (proto === null) { +
57881 return true; +
57882 } +
57883 var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; +
57884 return typeof Ctor == 'function' && Ctor instanceof Ctor && +
57885 funcToString.call(Ctor) == objectCtorString; +
57886 } +
57887 +
57888 /** +
57889 * Checks if `value` is classified as a `RegExp` object. +
57890 * +
57891 * @static +
57892 * @memberOf _ +
57893 * @since 0.1.0 +
57894 * @category Lang +
57895 * @param {*} value The value to check. +
57896 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +
57897 * @example +
57898 * +
57899 * _.isRegExp(/abc/); +
57900 * // => true +
57901 * +
57902 * _.isRegExp('/abc/'); +
57903 * // => false +
57904 */ +
57905 var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; +
57906 +
57907 /** +
57908 * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 +
57909 * double precision number which isn't the result of a rounded unsafe integer. +
57910 * +
57911 * **Note:** This method is based on +
57912 * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). +
57913 * +
57914 * @static +
57915 * @memberOf _ +
57916 * @since 4.0.0 +
57917 * @category Lang +
57918 * @param {*} value The value to check. +
57919 * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. +
57920 * @example +
57921 * +
57922 * _.isSafeInteger(3); +
57923 * // => true +
57924 * +
57925 * _.isSafeInteger(Number.MIN_VALUE); +
57926 * // => false +
57927 * +
57928 * _.isSafeInteger(Infinity); +
57929 * // => false +
57930 * +
57931 * _.isSafeInteger('3'); +
57932 * // => false +
57933 */ +
57934 function isSafeInteger(value) { +
57935 return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +
57936 } +
57937 +
57938 /** +
57939 * Checks if `value` is classified as a `Set` object. +
57940 * +
57941 * @static +
57942 * @memberOf _ +
57943 * @since 4.3.0 +
57944 * @category Lang +
57945 * @param {*} value The value to check. +
57946 * @returns {boolean} Returns `true` if `value` is a set, else `false`. +
57947 * @example +
57948 * +
57949 * _.isSet(new Set); +
57950 * // => true +
57951 * +
57952 * _.isSet(new WeakSet); +
57953 * // => false +
57954 */ +
57955 var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; +
57956 +
57957 /** +
57958 * Checks if `value` is classified as a `String` primitive or object. +
57959 * +
57960 * @static +
57961 * @since 0.1.0 +
57962 * @memberOf _ +
57963 * @category Lang +
57964 * @param {*} value The value to check. +
57965 * @returns {boolean} Returns `true` if `value` is a string, else `false`. +
57966 * @example +
57967 * +
57968 * _.isString('abc'); +
57969 * // => true +
57970 * +
57971 * _.isString(1); +
57972 * // => false +
57973 */ +
57974 function isString(value) { +
57975 return typeof value == 'string' || +
57976 (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +
57977 } +
57978 +
57979 /** +
57980 * Checks if `value` is classified as a `Symbol` primitive or object. +
57981 * +
57982 * @static +
57983 * @memberOf _ +
57984 * @since 4.0.0 +
57985 * @category Lang +
57986 * @param {*} value The value to check. +
57987 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. +
57988 * @example +
57989 * +
57990 * _.isSymbol(Symbol.iterator); +
57991 * // => true +
57992 * +
57993 * _.isSymbol('abc'); +
57994 * // => false +
57995 */ +
57996 function isSymbol(value) { +
57997 return typeof value == 'symbol' || +
57998 (isObjectLike(value) && baseGetTag(value) == symbolTag); +
57999 } +
58000 +
58001 /** +
58002 * Checks if `value` is classified as a typed array. +
58003 * +
58004 * @static +
58005 * @memberOf _ +
58006 * @since 3.0.0 +
58007 * @category Lang +
58008 * @param {*} value The value to check. +
58009 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +
58010 * @example +
58011 * +
58012 * _.isTypedArray(new Uint8Array); +
58013 * // => true +
58014 * +
58015 * _.isTypedArray([]); +
58016 * // => false +
58017 */ +
58018 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; +
58019 +
58020 /** +
58021 * Checks if `value` is `undefined`. +
58022 * +
58023 * @static +
58024 * @since 0.1.0 +
58025 * @memberOf _ +
58026 * @category Lang +
58027 * @param {*} value The value to check. +
58028 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. +
58029 * @example +
58030 * +
58031 * _.isUndefined(void 0); +
58032 * // => true +
58033 * +
58034 * _.isUndefined(null); +
58035 * // => false +
58036 */ +
58037 function isUndefined(value) { +
58038 return value === undefined; +
58039 } +
58040 +
58041 /** +
58042 * Checks if `value` is classified as a `WeakMap` object. +
58043 * +
58044 * @static +
58045 * @memberOf _ +
58046 * @since 4.3.0 +
58047 * @category Lang +
58048 * @param {*} value The value to check. +
58049 * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. +
58050 * @example +
58051 * +
58052 * _.isWeakMap(new WeakMap); +
58053 * // => true +
58054 * +
58055 * _.isWeakMap(new Map); +
58056 * // => false +
58057 */ +
58058 function isWeakMap(value) { +
58059 return isObjectLike(value) && getTag(value) == weakMapTag; +
58060 } +
58061 +
58062 /** +
58063 * Checks if `value` is classified as a `WeakSet` object. +
58064 * +
58065 * @static +
58066 * @memberOf _ +
58067 * @since 4.3.0 +
58068 * @category Lang +
58069 * @param {*} value The value to check. +
58070 * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. +
58071 * @example +
58072 * +
58073 * _.isWeakSet(new WeakSet); +
58074 * // => true +
58075 * +
58076 * _.isWeakSet(new Set); +
58077 * // => false +
58078 */ +
58079 function isWeakSet(value) { +
58080 return isObjectLike(value) && baseGetTag(value) == weakSetTag; +
58081 } +
58082 +
58083 /** +
58084 * Checks if `value` is less than `other`. +
58085 * +
58086 * @static +
58087 * @memberOf _ +
58088 * @since 3.9.0 +
58089 * @category Lang +
58090 * @param {*} value The value to compare. +
58091 * @param {*} other The other value to compare. +
58092 * @returns {boolean} Returns `true` if `value` is less than `other`, +
58093 * else `false`. +
58094 * @see _.gt +
58095 * @example +
58096 * +
58097 * _.lt(1, 3); +
58098 * // => true +
58099 * +
58100 * _.lt(3, 3); +
58101 * // => false +
58102 * +
58103 * _.lt(3, 1); +
58104 * // => false +
58105 */ +
58106 var lt = createRelationalOperation(baseLt); +
58107 +
58108 /** +
58109 * Checks if `value` is less than or equal to `other`. +
58110 * +
58111 * @static +
58112 * @memberOf _ +
58113 * @since 3.9.0 +
58114 * @category Lang +
58115 * @param {*} value The value to compare. +
58116 * @param {*} other The other value to compare. +
58117 * @returns {boolean} Returns `true` if `value` is less than or equal to +
58118 * `other`, else `false`. +
58119 * @see _.gte +
58120 * @example +
58121 * +
58122 * _.lte(1, 3); +
58123 * // => true +
58124 * +
58125 * _.lte(3, 3); +
58126 * // => true +
58127 * +
58128 * _.lte(3, 1); +
58129 * // => false +
58130 */ +
58131 var lte = createRelationalOperation(function(value, other) { +
58132 return value <= other; +
58133 }); +
58134 +
58135 /** +
58136 * Converts `value` to an array. +
58137 * +
58138 * @static +
58139 * @since 0.1.0 +
58140 * @memberOf _ +
58141 * @category Lang +
58142 * @param {*} value The value to convert. +
58143 * @returns {Array} Returns the converted array. +
58144 * @example +
58145 * +
58146 * _.toArray({ 'a': 1, 'b': 2 }); +
58147 * // => [1, 2] +
58148 * +
58149 * _.toArray('abc'); +
58150 * // => ['a', 'b', 'c'] +
58151 * +
58152 * _.toArray(1); +
58153 * // => [] +
58154 * +
58155 * _.toArray(null); +
58156 * // => [] +
58157 */ +
58158 function toArray(value) { +
58159 if (!value) { +
58160 return []; +
58161 } +
58162 if (isArrayLike(value)) { +
58163 return isString(value) ? stringToArray(value) : copyArray(value); +
58164 } +
58165 if (symIterator && value[symIterator]) { +
58166 return iteratorToArray(value[symIterator]()); +
58167 } +
58168 var tag = getTag(value), +
58169 func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); +
58170 +
58171 return func(value); +
58172 } +
58173 +
58174 /** +
58175 * Converts `value` to a finite number. +
58176 * +
58177 * @static +
58178 * @memberOf _ +
58179 * @since 4.12.0 +
58180 * @category Lang +
58181 * @param {*} value The value to convert. +
58182 * @returns {number} Returns the converted number. +
58183 * @example +
58184 * +
58185 * _.toFinite(3.2); +
58186 * // => 3.2 +
58187 * +
58188 * _.toFinite(Number.MIN_VALUE); +
58189 * // => 5e-324 +
58190 * +
58191 * _.toFinite(Infinity); +
58192 * // => 1.7976931348623157e+308 +
58193 * +
58194 * _.toFinite('3.2'); +
58195 * // => 3.2 +
58196 */ +
58197 function toFinite(value) { +
58198 if (!value) { +
58199 return value === 0 ? value : 0; +
58200 } +
58201 value = toNumber(value); +
58202 if (value === INFINITY || value === -INFINITY) { +
58203 var sign = (value < 0 ? -1 : 1); +
58204 return sign * MAX_INTEGER; +
58205 } +
58206 return value === value ? value : 0; +
58207 } +
58208 +
58209 /** +
58210 * Converts `value` to an integer. +
58211 * +
58212 * **Note:** This method is loosely based on +
58213 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). +
58214 * +
58215 * @static +
58216 * @memberOf _ +
58217 * @since 4.0.0 +
58218 * @category Lang +
58219 * @param {*} value The value to convert. +
58220 * @returns {number} Returns the converted integer. +
58221 * @example +
58222 * +
58223 * _.toInteger(3.2); +
58224 * // => 3 +
58225 * +
58226 * _.toInteger(Number.MIN_VALUE); +
58227 * // => 0 +
58228 * +
58229 * _.toInteger(Infinity); +
58230 * // => 1.7976931348623157e+308 +
58231 * +
58232 * _.toInteger('3.2'); +
58233 * // => 3 +
58234 */ +
58235 function toInteger(value) { +
58236 var result = toFinite(value), +
58237 remainder = result % 1; +
58238 +
58239 return result === result ? (remainder ? result - remainder : result) : 0; +
58240 } +
58241 +
58242 /** +
58243 * Converts `value` to an integer suitable for use as the length of an +
58244 * array-like object. +
58245 * +
58246 * **Note:** This method is based on +
58247 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +
58248 * +
58249 * @static +
58250 * @memberOf _ +
58251 * @since 4.0.0 +
58252 * @category Lang +
58253 * @param {*} value The value to convert. +
58254 * @returns {number} Returns the converted integer. +
58255 * @example +
58256 * +
58257 * _.toLength(3.2); +
58258 * // => 3 +
58259 * +
58260 * _.toLength(Number.MIN_VALUE); +
58261 * // => 0 +
58262 * +
58263 * _.toLength(Infinity); +
58264 * // => 4294967295 +
58265 * +
58266 * _.toLength('3.2'); +
58267 * // => 3 +
58268 */ +
58269 function toLength(value) { +
58270 return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; +
58271 } +
58272 +
58273 /** +
58274 * Converts `value` to a number. +
58275 * +
58276 * @static +
58277 * @memberOf _ +
58278 * @since 4.0.0 +
58279 * @category Lang +
58280 * @param {*} value The value to process. +
58281 * @returns {number} Returns the number. +
58282 * @example +
58283 * +
58284 * _.toNumber(3.2); +
58285 * // => 3.2 +
58286 * +
58287 * _.toNumber(Number.MIN_VALUE); +
58288 * // => 5e-324 +
58289 * +
58290 * _.toNumber(Infinity); +
58291 * // => Infinity +
58292 * +
58293 * _.toNumber('3.2'); +
58294 * // => 3.2 +
58295 */ +
58296 function toNumber(value) { +
58297 if (typeof value == 'number') { +
58298 return value; +
58299 } +
58300 if (isSymbol(value)) { +
58301 return NAN; +
58302 } +
58303 if (isObject(value)) { +
58304 var other = typeof value.valueOf == 'function' ? value.valueOf() : value; +
58305 value = isObject(other) ? (other + '') : other; +
58306 } +
58307 if (typeof value != 'string') { +
58308 return value === 0 ? value : +value; +
58309 } +
58310 value = value.replace(reTrim, ''); +
58311 var isBinary = reIsBinary.test(value); +
58312 return (isBinary || reIsOctal.test(value)) +
58313 ? freeParseInt(value.slice(2), isBinary ? 2 : 8) +
58314 : (reIsBadHex.test(value) ? NAN : +value); +
58315 } +
58316 +
58317 /** +
58318 * Converts `value` to a plain object flattening inherited enumerable string +
58319 * keyed properties of `value` to own properties of the plain object. +
58320 * +
58321 * @static +
58322 * @memberOf _ +
58323 * @since 3.0.0 +
58324 * @category Lang +
58325 * @param {*} value The value to convert. +
58326 * @returns {Object} Returns the converted plain object. +
58327 * @example +
58328 * +
58329 * function Foo() { +
58330 * this.b = 2; +
58331 * } +
58332 * +
58333 * Foo.prototype.c = 3; +
58334 * +
58335 * _.assign({ 'a': 1 }, new Foo); +
58336 * // => { 'a': 1, 'b': 2 } +
58337 * +
58338 * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); +
58339 * // => { 'a': 1, 'b': 2, 'c': 3 } +
58340 */ +
58341 function toPlainObject(value) { +
58342 return copyObject(value, keysIn(value)); +
58343 } +
58344 +
58345 /** +
58346 * Converts `value` to a safe integer. A safe integer can be compared and +
58347 * represented correctly. +
58348 * +
58349 * @static +
58350 * @memberOf _ +
58351 * @since 4.0.0 +
58352 * @category Lang +
58353 * @param {*} value The value to convert. +
58354 * @returns {number} Returns the converted integer. +
58355 * @example +
58356 * +
58357 * _.toSafeInteger(3.2); +
58358 * // => 3 +
58359 * +
58360 * _.toSafeInteger(Number.MIN_VALUE); +
58361 * // => 0 +
58362 * +
58363 * _.toSafeInteger(Infinity); +
58364 * // => 9007199254740991 +
58365 * +
58366 * _.toSafeInteger('3.2'); +
58367 * // => 3 +
58368 */ +
58369 function toSafeInteger(value) { +
58370 return value +
58371 ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) +
58372 : (value === 0 ? value : 0); +
58373 } +
58374 +
58375 /** +
58376 * Converts `value` to a string. An empty string is returned for `null` +
58377 * and `undefined` values. The sign of `-0` is preserved. +
58378 * +
58379 * @static +
58380 * @memberOf _ +
58381 * @since 4.0.0 +
58382 * @category Lang +
58383 * @param {*} value The value to convert. +
58384 * @returns {string} Returns the converted string. +
58385 * @example +
58386 * +
58387 * _.toString(null); +
58388 * // => '' +
58389 * +
58390 * _.toString(-0); +
58391 * // => '-0' +
58392 * +
58393 * _.toString([1, 2, 3]); +
58394 * // => '1,2,3' +
58395 */ +
58396 function toString(value) { +
58397 return value == null ? '' : baseToString(value); +
58398 } +
58399 +
58400 /*------------------------------------------------------------------------*/ +
58401 +
58402 /** +
58403 * Assigns own enumerable string keyed properties of source objects to the +
58404 * destination object. Source objects are applied from left to right. +
58405 * Subsequent sources overwrite property assignments of previous sources. +
58406 * +
58407 * **Note:** This method mutates `object` and is loosely based on +
58408 * [`Object.assign`](https://mdn.io/Object/assign). +
58409 * +
58410 * @static +
58411 * @memberOf _ +
58412 * @since 0.10.0 +
58413 * @category Object +
58414 * @param {Object} object The destination object. +
58415 * @param {...Object} [sources] The source objects. +
58416 * @returns {Object} Returns `object`. +
58417 * @see _.assignIn +
58418 * @example +
58419 * +
58420 * function Foo() { +
58421 * this.a = 1; +
58422 * } +
58423 * +
58424 * function Bar() { +
58425 * this.c = 3; +
58426 * } +
58427 * +
58428 * Foo.prototype.b = 2; +
58429 * Bar.prototype.d = 4; +
58430 * +
58431 * _.assign({ 'a': 0 }, new Foo, new Bar); +
58432 * // => { 'a': 1, 'c': 3 } +
58433 */ +
58434 var assign = createAssigner(function(object, source) { +
58435 if (isPrototype(source) || isArrayLike(source)) { +
58436 copyObject(source, keys(source), object); +
58437 return; +
58438 } +
58439 for (var key in source) { +
58440 if (hasOwnProperty.call(source, key)) { +
58441 assignValue(object, key, source[key]); +
58442 } +
58443 } +
58444 }); +
58445 +
58446 /** +
58447 * This method is like `_.assign` except that it iterates over own and +
58448 * inherited source properties. +
58449 * +
58450 * **Note:** This method mutates `object`. +
58451 * +
58452 * @static +
58453 * @memberOf _ +
58454 * @since 4.0.0 +
58455 * @alias extend +
58456 * @category Object +
58457 * @param {Object} object The destination object. +
58458 * @param {...Object} [sources] The source objects. +
58459 * @returns {Object} Returns `object`. +
58460 * @see _.assign +
58461 * @example +
58462 * +
58463 * function Foo() { +
58464 * this.a = 1; +
58465 * } +
58466 * +
58467 * function Bar() { +
58468 * this.c = 3; +
58469 * } +
58470 * +
58471 * Foo.prototype.b = 2; +
58472 * Bar.prototype.d = 4; +
58473 * +
58474 * _.assignIn({ 'a': 0 }, new Foo, new Bar); +
58475 * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } +
58476 */ +
58477 var assignIn = createAssigner(function(object, source) { +
58478 copyObject(source, keysIn(source), object); +
58479 }); +
58480 +
58481 /** +
58482 * This method is like `_.assignIn` except that it accepts `customizer` +
58483 * which is invoked to produce the assigned values. If `customizer` returns +
58484 * `undefined`, assignment is handled by the method instead. The `customizer` +
58485 * is invoked with five arguments: (objValue, srcValue, key, object, source). +
58486 * +
58487 * **Note:** This method mutates `object`. +
58488 * +
58489 * @static +
58490 * @memberOf _ +
58491 * @since 4.0.0 +
58492 * @alias extendWith +
58493 * @category Object +
58494 * @param {Object} object The destination object. +
58495 * @param {...Object} sources The source objects. +
58496 * @param {Function} [customizer] The function to customize assigned values. +
58497 * @returns {Object} Returns `object`. +
58498 * @see _.assignWith +
58499 * @example +
58500 * +
58501 * function customizer(objValue, srcValue) { +
58502 * return _.isUndefined(objValue) ? srcValue : objValue; +
58503 * } +
58504 * +
58505 * var defaults = _.partialRight(_.assignInWith, customizer); +
58506 * +
58507 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
58508 * // => { 'a': 1, 'b': 2 } +
58509 */ +
58510 var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { +
58511 copyObject(source, keysIn(source), object, customizer); +
58512 }); +
58513 +
58514 /** +
58515 * This method is like `_.assign` except that it accepts `customizer` +
58516 * which is invoked to produce the assigned values. If `customizer` returns +
58517 * `undefined`, assignment is handled by the method instead. The `customizer` +
58518 * is invoked with five arguments: (objValue, srcValue, key, object, source). +
58519 * +
58520 * **Note:** This method mutates `object`. +
58521 * +
58522 * @static +
58523 * @memberOf _ +
58524 * @since 4.0.0 +
58525 * @category Object +
58526 * @param {Object} object The destination object. +
58527 * @param {...Object} sources The source objects. +
58528 * @param {Function} [customizer] The function to customize assigned values. +
58529 * @returns {Object} Returns `object`. +
58530 * @see _.assignInWith +
58531 * @example +
58532 * +
58533 * function customizer(objValue, srcValue) { +
58534 * return _.isUndefined(objValue) ? srcValue : objValue; +
58535 * } +
58536 * +
58537 * var defaults = _.partialRight(_.assignWith, customizer); +
58538 * +
58539 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
58540 * // => { 'a': 1, 'b': 2 } +
58541 */ +
58542 var assignWith = createAssigner(function(object, source, srcIndex, customizer) { +
58543 copyObject(source, keys(source), object, customizer); +
58544 }); +
58545 +
58546 /** +
58547 * Creates an array of values corresponding to `paths` of `object`. +
58548 * +
58549 * @static +
58550 * @memberOf _ +
58551 * @since 1.0.0 +
58552 * @category Object +
58553 * @param {Object} object The object to iterate over. +
58554 * @param {...(string|string[])} [paths] The property paths to pick. +
58555 * @returns {Array} Returns the picked values. +
58556 * @example +
58557 * +
58558 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +
58559 * +
58560 * _.at(object, ['a[0].b.c', 'a[1]']); +
58561 * // => [3, 4] +
58562 */ +
58563 var at = flatRest(baseAt); +
58564 +
58565 /** +
58566 * Creates an object that inherits from the `prototype` object. If a +
58567 * `properties` object is given, its own enumerable string keyed properties +
58568 * are assigned to the created object. +
58569 * +
58570 * @static +
58571 * @memberOf _ +
58572 * @since 2.3.0 +
58573 * @category Object +
58574 * @param {Object} prototype The object to inherit from. +
58575 * @param {Object} [properties] The properties to assign to the object. +
58576 * @returns {Object} Returns the new object. +
58577 * @example +
58578 * +
58579 * function Shape() { +
58580 * this.x = 0; +
58581 * this.y = 0; +
58582 * } +
58583 * +
58584 * function Circle() { +
58585 * Shape.call(this); +
58586 * } +
58587 * +
58588 * Circle.prototype = _.create(Shape.prototype, { +
58589 * 'constructor': Circle +
58590 * }); +
58591 * +
58592 * var circle = new Circle; +
58593 * circle instanceof Circle; +
58594 * // => true +
58595 * +
58596 * circle instanceof Shape; +
58597 * // => true +
58598 */ +
58599 function create(prototype, properties) { +
58600 var result = baseCreate(prototype); +
58601 return properties == null ? result : baseAssign(result, properties); +
58602 } +
58603 +
58604 /** +
58605 * Assigns own and inherited enumerable string keyed properties of source +
58606 * objects to the destination object for all destination properties that +
58607 * resolve to `undefined`. Source objects are applied from left to right. +
58608 * Once a property is set, additional values of the same property are ignored. +
58609 * +
58610 * **Note:** This method mutates `object`. +
58611 * +
58612 * @static +
58613 * @since 0.1.0 +
58614 * @memberOf _ +
58615 * @category Object +
58616 * @param {Object} object The destination object. +
58617 * @param {...Object} [sources] The source objects. +
58618 * @returns {Object} Returns `object`. +
58619 * @see _.defaultsDeep +
58620 * @example +
58621 * +
58622 * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
58623 * // => { 'a': 1, 'b': 2 } +
58624 */ +
58625 var defaults = baseRest(function(object, sources) { +
58626 object = Object(object); +
58627 +
58628 var index = -1; +
58629 var length = sources.length; +
58630 var guard = length > 2 ? sources[2] : undefined; +
58631 +
58632 if (guard && isIterateeCall(sources[0], sources[1], guard)) { +
58633 length = 1; +
58634 } +
58635 +
58636 while (++index < length) { +
58637 var source = sources[index]; +
58638 var props = keysIn(source); +
58639 var propsIndex = -1; +
58640 var propsLength = props.length; +
58641 +
58642 while (++propsIndex < propsLength) { +
58643 var key = props[propsIndex]; +
58644 var value = object[key]; +
58645 +
58646 if (value === undefined || +
58647 (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { +
58648 object[key] = source[key]; +
58649 } +
58650 } +
58651 } +
58652 +
58653 return object; +
58654 }); +
58655 +
58656 /** +
58657 * This method is like `_.defaults` except that it recursively assigns +
58658 * default properties. +
58659 * +
58660 * **Note:** This method mutates `object`. +
58661 * +
58662 * @static +
58663 * @memberOf _ +
58664 * @since 3.10.0 +
58665 * @category Object +
58666 * @param {Object} object The destination object. +
58667 * @param {...Object} [sources] The source objects. +
58668 * @returns {Object} Returns `object`. +
58669 * @see _.defaults +
58670 * @example +
58671 * +
58672 * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); +
58673 * // => { 'a': { 'b': 2, 'c': 3 } } +
58674 */ +
58675 var defaultsDeep = baseRest(function(args) { +
58676 args.push(undefined, customDefaultsMerge); +
58677 return apply(mergeWith, undefined, args); +
58678 }); +
58679 +
58680 /** +
58681 * This method is like `_.find` except that it returns the key of the first +
58682 * element `predicate` returns truthy for instead of the element itself. +
58683 * +
58684 * @static +
58685 * @memberOf _ +
58686 * @since 1.1.0 +
58687 * @category Object +
58688 * @param {Object} object The object to inspect. +
58689 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
58690 * @returns {string|undefined} Returns the key of the matched element, +
58691 * else `undefined`. +
58692 * @example +
58693 * +
58694 * var users = { +
58695 * 'barney': { 'age': 36, 'active': true }, +
58696 * 'fred': { 'age': 40, 'active': false }, +
58697 * 'pebbles': { 'age': 1, 'active': true } +
58698 * }; +
58699 * +
58700 * _.findKey(users, function(o) { return o.age < 40; }); +
58701 * // => 'barney' (iteration order is not guaranteed) +
58702 * +
58703 * // The `_.matches` iteratee shorthand. +
58704 * _.findKey(users, { 'age': 1, 'active': true }); +
58705 * // => 'pebbles' +
58706 * +
58707 * // The `_.matchesProperty` iteratee shorthand. +
58708 * _.findKey(users, ['active', false]); +
58709 * // => 'fred' +
58710 * +
58711 * // The `_.property` iteratee shorthand. +
58712 * _.findKey(users, 'active'); +
58713 * // => 'barney' +
58714 */ +
58715 function findKey(object, predicate) { +
58716 return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); +
58717 } +
58718 +
58719 /** +
58720 * This method is like `_.findKey` except that it iterates over elements of +
58721 * a collection in the opposite order. +
58722 * +
58723 * @static +
58724 * @memberOf _ +
58725 * @since 2.0.0 +
58726 * @category Object +
58727 * @param {Object} object The object to inspect. +
58728 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
58729 * @returns {string|undefined} Returns the key of the matched element, +
58730 * else `undefined`. +
58731 * @example +
58732 * +
58733 * var users = { +
58734 * 'barney': { 'age': 36, 'active': true }, +
58735 * 'fred': { 'age': 40, 'active': false }, +
58736 * 'pebbles': { 'age': 1, 'active': true } +
58737 * }; +
58738 * +
58739 * _.findLastKey(users, function(o) { return o.age < 40; }); +
58740 * // => returns 'pebbles' assuming `_.findKey` returns 'barney' +
58741 * +
58742 * // The `_.matches` iteratee shorthand. +
58743 * _.findLastKey(users, { 'age': 36, 'active': true }); +
58744 * // => 'barney' +
58745 * +
58746 * // The `_.matchesProperty` iteratee shorthand. +
58747 * _.findLastKey(users, ['active', false]); +
58748 * // => 'fred' +
58749 * +
58750 * // The `_.property` iteratee shorthand. +
58751 * _.findLastKey(users, 'active'); +
58752 * // => 'pebbles' +
58753 */ +
58754 function findLastKey(object, predicate) { +
58755 return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); +
58756 } +
58757 +
58758 /** +
58759 * Iterates over own and inherited enumerable string keyed properties of an +
58760 * object and invokes `iteratee` for each property. The iteratee is invoked +
58761 * with three arguments: (value, key, object). Iteratee functions may exit +
58762 * iteration early by explicitly returning `false`. +
58763 * +
58764 * @static +
58765 * @memberOf _ +
58766 * @since 0.3.0 +
58767 * @category Object +
58768 * @param {Object} object The object to iterate over. +
58769 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
58770 * @returns {Object} Returns `object`. +
58771 * @see _.forInRight +
58772 * @example +
58773 * +
58774 * function Foo() { +
58775 * this.a = 1; +
58776 * this.b = 2; +
58777 * } +
58778 * +
58779 * Foo.prototype.c = 3; +
58780 * +
58781 * _.forIn(new Foo, function(value, key) { +
58782 * console.log(key); +
58783 * }); +
58784 * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). +
58785 */ +
58786 function forIn(object, iteratee) { +
58787 return object == null +
58788 ? object +
58789 : baseFor(object, getIteratee(iteratee, 3), keysIn); +
58790 } +
58791 +
58792 /** +
58793 * This method is like `_.forIn` except that it iterates over properties of +
58794 * `object` in the opposite order. +
58795 * +
58796 * @static +
58797 * @memberOf _ +
58798 * @since 2.0.0 +
58799 * @category Object +
58800 * @param {Object} object The object to iterate over. +
58801 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
58802 * @returns {Object} Returns `object`. +
58803 * @see _.forIn +
58804 * @example +
58805 * +
58806 * function Foo() { +
58807 * this.a = 1; +
58808 * this.b = 2; +
58809 * } +
58810 * +
58811 * Foo.prototype.c = 3; +
58812 * +
58813 * _.forInRight(new Foo, function(value, key) { +
58814 * console.log(key); +
58815 * }); +
58816 * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. +
58817 */ +
58818 function forInRight(object, iteratee) { +
58819 return object == null +
58820 ? object +
58821 : baseForRight(object, getIteratee(iteratee, 3), keysIn); +
58822 } +
58823 +
58824 /** +
58825 * Iterates over own enumerable string keyed properties of an object and +
58826 * invokes `iteratee` for each property. The iteratee is invoked with three +
58827 * arguments: (value, key, object). Iteratee functions may exit iteration +
58828 * early by explicitly returning `false`. +
58829 * +
58830 * @static +
58831 * @memberOf _ +
58832 * @since 0.3.0 +
58833 * @category Object +
58834 * @param {Object} object The object to iterate over. +
58835 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
58836 * @returns {Object} Returns `object`. +
58837 * @see _.forOwnRight +
58838 * @example +
58839 * +
58840 * function Foo() { +
58841 * this.a = 1; +
58842 * this.b = 2; +
58843 * } +
58844 * +
58845 * Foo.prototype.c = 3; +
58846 * +
58847 * _.forOwn(new Foo, function(value, key) { +
58848 * console.log(key); +
58849 * }); +
58850 * // => Logs 'a' then 'b' (iteration order is not guaranteed). +
58851 */ +
58852 function forOwn(object, iteratee) { +
58853 return object && baseForOwn(object, getIteratee(iteratee, 3)); +
58854 } +
58855 +
58856 /** +
58857 * This method is like `_.forOwn` except that it iterates over properties of +
58858 * `object` in the opposite order. +
58859 * +
58860 * @static +
58861 * @memberOf _ +
58862 * @since 2.0.0 +
58863 * @category Object +
58864 * @param {Object} object The object to iterate over. +
58865 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
58866 * @returns {Object} Returns `object`. +
58867 * @see _.forOwn +
58868 * @example +
58869 * +
58870 * function Foo() { +
58871 * this.a = 1; +
58872 * this.b = 2; +
58873 * } +
58874 * +
58875 * Foo.prototype.c = 3; +
58876 * +
58877 * _.forOwnRight(new Foo, function(value, key) { +
58878 * console.log(key); +
58879 * }); +
58880 * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. +
58881 */ +
58882 function forOwnRight(object, iteratee) { +
58883 return object && baseForOwnRight(object, getIteratee(iteratee, 3)); +
58884 } +
58885 +
58886 /** +
58887 * Creates an array of function property names from own enumerable properties +
58888 * of `object`. +
58889 * +
58890 * @static +
58891 * @since 0.1.0 +
58892 * @memberOf _ +
58893 * @category Object +
58894 * @param {Object} object The object to inspect. +
58895 * @returns {Array} Returns the function names. +
58896 * @see _.functionsIn +
58897 * @example +
58898 * +
58899 * function Foo() { +
58900 * this.a = _.constant('a'); +
58901 * this.b = _.constant('b'); +
58902 * } +
58903 * +
58904 * Foo.prototype.c = _.constant('c'); +
58905 * +
58906 * _.functions(new Foo); +
58907 * // => ['a', 'b'] +
58908 */ +
58909 function functions(object) { +
58910 return object == null ? [] : baseFunctions(object, keys(object)); +
58911 } +
58912 +
58913 /** +
58914 * Creates an array of function property names from own and inherited +
58915 * enumerable properties of `object`. +
58916 * +
58917 * @static +
58918 * @memberOf _ +
58919 * @since 4.0.0 +
58920 * @category Object +
58921 * @param {Object} object The object to inspect. +
58922 * @returns {Array} Returns the function names. +
58923 * @see _.functions +
58924 * @example +
58925 * +
58926 * function Foo() { +
58927 * this.a = _.constant('a'); +
58928 * this.b = _.constant('b'); +
58929 * } +
58930 * +
58931 * Foo.prototype.c = _.constant('c'); +
58932 * +
58933 * _.functionsIn(new Foo); +
58934 * // => ['a', 'b', 'c'] +
58935 */ +
58936 function functionsIn(object) { +
58937 return object == null ? [] : baseFunctions(object, keysIn(object)); +
58938 } +
58939 +
58940 /** +
58941 * Gets the value at `path` of `object`. If the resolved value is +
58942 * `undefined`, the `defaultValue` is returned in its place. +
58943 * +
58944 * @static +
58945 * @memberOf _ +
58946 * @since 3.7.0 +
58947 * @category Object +
58948 * @param {Object} object The object to query. +
58949 * @param {Array|string} path The path of the property to get. +
58950 * @param {*} [defaultValue] The value returned for `undefined` resolved values. +
58951 * @returns {*} Returns the resolved value. +
58952 * @example +
58953 * +
58954 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
58955 * +
58956 * _.get(object, 'a[0].b.c'); +
58957 * // => 3 +
58958 * +
58959 * _.get(object, ['a', '0', 'b', 'c']); +
58960 * // => 3 +
58961 * +
58962 * _.get(object, 'a.b.c', 'default'); +
58963 * // => 'default' +
58964 */ +
58965 function get(object, path, defaultValue) { +
58966 var result = object == null ? undefined : baseGet(object, path); +
58967 return result === undefined ? defaultValue : result; +
58968 } +
58969 +
58970 /** +
58971 * Checks if `path` is a direct property of `object`. +
58972 * +
58973 * @static +
58974 * @since 0.1.0 +
58975 * @memberOf _ +
58976 * @category Object +
58977 * @param {Object} object The object to query. +
58978 * @param {Array|string} path The path to check. +
58979 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
58980 * @example +
58981 * +
58982 * var object = { 'a': { 'b': 2 } }; +
58983 * var other = _.create({ 'a': _.create({ 'b': 2 }) }); +
58984 * +
58985 * _.has(object, 'a'); +
58986 * // => true +
58987 * +
58988 * _.has(object, 'a.b'); +
58989 * // => true +
58990 * +
58991 * _.has(object, ['a', 'b']); +
58992 * // => true +
58993 * +
58994 * _.has(other, 'a'); +
58995 * // => false +
58996 */ +
58997 function has(object, path) { +
58998 return object != null && hasPath(object, path, baseHas); +
58999 } +
59000 +
59001 /** +
59002 * Checks if `path` is a direct or inherited property of `object`. +
59003 * +
59004 * @static +
59005 * @memberOf _ +
59006 * @since 4.0.0 +
59007 * @category Object +
59008 * @param {Object} object The object to query. +
59009 * @param {Array|string} path The path to check. +
59010 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
59011 * @example +
59012 * +
59013 * var object = _.create({ 'a': _.create({ 'b': 2 }) }); +
59014 * +
59015 * _.hasIn(object, 'a'); +
59016 * // => true +
59017 * +
59018 * _.hasIn(object, 'a.b'); +
59019 * // => true +
59020 * +
59021 * _.hasIn(object, ['a', 'b']); +
59022 * // => true +
59023 * +
59024 * _.hasIn(object, 'b'); +
59025 * // => false +
59026 */ +
59027 function hasIn(object, path) { +
59028 return object != null && hasPath(object, path, baseHasIn); +
59029 } +
59030 +
59031 /** +
59032 * Creates an object composed of the inverted keys and values of `object`. +
59033 * If `object` contains duplicate values, subsequent values overwrite +
59034 * property assignments of previous values. +
59035 * +
59036 * @static +
59037 * @memberOf _ +
59038 * @since 0.7.0 +
59039 * @category Object +
59040 * @param {Object} object The object to invert. +
59041 * @returns {Object} Returns the new inverted object. +
59042 * @example +
59043 * +
59044 * var object = { 'a': 1, 'b': 2, 'c': 1 }; +
59045 * +
59046 * _.invert(object); +
59047 * // => { '1': 'c', '2': 'b' } +
59048 */ +
59049 var invert = createInverter(function(result, value, key) { +
59050 if (value != null && +
59051 typeof value.toString != 'function') { +
59052 value = nativeObjectToString.call(value); +
59053 } +
59054 +
59055 result[value] = key; +
59056 }, constant(identity)); +
59057 +
59058 /** +
59059 * This method is like `_.invert` except that the inverted object is generated +
59060 * from the results of running each element of `object` thru `iteratee`. The +
59061 * corresponding inverted value of each inverted key is an array of keys +
59062 * responsible for generating the inverted value. The iteratee is invoked +
59063 * with one argument: (value). +
59064 * +
59065 * @static +
59066 * @memberOf _ +
59067 * @since 4.1.0 +
59068 * @category Object +
59069 * @param {Object} object The object to invert. +
59070 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
59071 * @returns {Object} Returns the new inverted object. +
59072 * @example +
59073 * +
59074 * var object = { 'a': 1, 'b': 2, 'c': 1 }; +
59075 * +
59076 * _.invertBy(object); +
59077 * // => { '1': ['a', 'c'], '2': ['b'] } +
59078 * +
59079 * _.invertBy(object, function(value) { +
59080 * return 'group' + value; +
59081 * }); +
59082 * // => { 'group1': ['a', 'c'], 'group2': ['b'] } +
59083 */ +
59084 var invertBy = createInverter(function(result, value, key) { +
59085 if (value != null && +
59086 typeof value.toString != 'function') { +
59087 value = nativeObjectToString.call(value); +
59088 } +
59089 +
59090 if (hasOwnProperty.call(result, value)) { +
59091 result[value].push(key); +
59092 } else { +
59093 result[value] = [key]; +
59094 } +
59095 }, getIteratee); +
59096 +
59097 /** +
59098 * Invokes the method at `path` of `object`. +
59099 * +
59100 * @static +
59101 * @memberOf _ +
59102 * @since 4.0.0 +
59103 * @category Object +
59104 * @param {Object} object The object to query. +
59105 * @param {Array|string} path The path of the method to invoke. +
59106 * @param {...*} [args] The arguments to invoke the method with. +
59107 * @returns {*} Returns the result of the invoked method. +
59108 * @example +
59109 * +
59110 * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; +
59111 * +
59112 * _.invoke(object, 'a[0].b.c.slice', 1, 3); +
59113 * // => [2, 3] +
59114 */ +
59115 var invoke = baseRest(baseInvoke); +
59116 +
59117 /** +
59118 * Creates an array of the own enumerable property names of `object`. +
59119 * +
59120 * **Note:** Non-object values are coerced to objects. See the +
59121 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +
59122 * for more details. +
59123 * +
59124 * @static +
59125 * @since 0.1.0 +
59126 * @memberOf _ +
59127 * @category Object +
59128 * @param {Object} object The object to query. +
59129 * @returns {Array} Returns the array of property names. +
59130 * @example +
59131 * +
59132 * function Foo() { +
59133 * this.a = 1; +
59134 * this.b = 2; +
59135 * } +
59136 * +
59137 * Foo.prototype.c = 3; +
59138 * +
59139 * _.keys(new Foo); +
59140 * // => ['a', 'b'] (iteration order is not guaranteed) +
59141 * +
59142 * _.keys('hi'); +
59143 * // => ['0', '1'] +
59144 */ +
59145 function keys(object) { +
59146 return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +
59147 } +
59148 +
59149 /** +
59150 * Creates an array of the own and inherited enumerable property names of `object`. +
59151 * +
59152 * **Note:** Non-object values are coerced to objects. +
59153 * +
59154 * @static +
59155 * @memberOf _ +
59156 * @since 3.0.0 +
59157 * @category Object +
59158 * @param {Object} object The object to query. +
59159 * @returns {Array} Returns the array of property names. +
59160 * @example +
59161 * +
59162 * function Foo() { +
59163 * this.a = 1; +
59164 * this.b = 2; +
59165 * } +
59166 * +
59167 * Foo.prototype.c = 3; +
59168 * +
59169 * _.keysIn(new Foo); +
59170 * // => ['a', 'b', 'c'] (iteration order is not guaranteed) +
59171 */ +
59172 function keysIn(object) { +
59173 return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +
59174 } +
59175 +
59176 /** +
59177 * The opposite of `_.mapValues`; this method creates an object with the +
59178 * same values as `object` and keys generated by running each own enumerable +
59179 * string keyed property of `object` thru `iteratee`. The iteratee is invoked +
59180 * with three arguments: (value, key, object). +
59181 * +
59182 * @static +
59183 * @memberOf _ +
59184 * @since 3.8.0 +
59185 * @category Object +
59186 * @param {Object} object The object to iterate over. +
59187 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
59188 * @returns {Object} Returns the new mapped object. +
59189 * @see _.mapValues +
59190 * @example +
59191 * +
59192 * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { +
59193 * return key + value; +
59194 * }); +
59195 * // => { 'a1': 1, 'b2': 2 } +
59196 */ +
59197 function mapKeys(object, iteratee) { +
59198 var result = {}; +
59199 iteratee = getIteratee(iteratee, 3); +
59200 +
59201 baseForOwn(object, function(value, key, object) { +
59202 baseAssignValue(result, iteratee(value, key, object), value); +
59203 }); +
59204 return result; +
59205 } +
59206 +
59207 /** +
59208 * Creates an object with the same keys as `object` and values generated +
59209 * by running each own enumerable string keyed property of `object` thru +
59210 * `iteratee`. The iteratee is invoked with three arguments: +
59211 * (value, key, object). +
59212 * +
59213 * @static +
59214 * @memberOf _ +
59215 * @since 2.4.0 +
59216 * @category Object +
59217 * @param {Object} object The object to iterate over. +
59218 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
59219 * @returns {Object} Returns the new mapped object. +
59220 * @see _.mapKeys +
59221 * @example +
59222 * +
59223 * var users = { +
59224 * 'fred': { 'user': 'fred', 'age': 40 }, +
59225 * 'pebbles': { 'user': 'pebbles', 'age': 1 } +
59226 * }; +
59227 * +
59228 * _.mapValues(users, function(o) { return o.age; }); +
59229 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +
59230 * +
59231 * // The `_.property` iteratee shorthand. +
59232 * _.mapValues(users, 'age'); +
59233 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +
59234 */ +
59235 function mapValues(object, iteratee) { +
59236 var result = {}; +
59237 iteratee = getIteratee(iteratee, 3); +
59238 +
59239 baseForOwn(object, function(value, key, object) { +
59240 baseAssignValue(result, key, iteratee(value, key, object)); +
59241 }); +
59242 return result; +
59243 } +
59244 +
59245 /** +
59246 * This method is like `_.assign` except that it recursively merges own and +
59247 * inherited enumerable string keyed properties of source objects into the +
59248 * destination object. Source properties that resolve to `undefined` are +
59249 * skipped if a destination value exists. Array and plain object properties +
59250 * are merged recursively. Other objects and value types are overridden by +
59251 * assignment. Source objects are applied from left to right. Subsequent +
59252 * sources overwrite property assignments of previous sources. +
59253 * +
59254 * **Note:** This method mutates `object`. +
59255 * +
59256 * @static +
59257 * @memberOf _ +
59258 * @since 0.5.0 +
59259 * @category Object +
59260 * @param {Object} object The destination object. +
59261 * @param {...Object} [sources] The source objects. +
59262 * @returns {Object} Returns `object`. +
59263 * @example +
59264 * +
59265 * var object = { +
59266 * 'a': [{ 'b': 2 }, { 'd': 4 }] +
59267 * }; +
59268 * +
59269 * var other = { +
59270 * 'a': [{ 'c': 3 }, { 'e': 5 }] +
59271 * }; +
59272 * +
59273 * _.merge(object, other); +
59274 * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } +
59275 */ +
59276 var merge = createAssigner(function(object, source, srcIndex) { +
59277 baseMerge(object, source, srcIndex); +
59278 }); +
59279 +
59280 /** +
59281 * This method is like `_.merge` except that it accepts `customizer` which +
59282 * is invoked to produce the merged values of the destination and source +
59283 * properties. If `customizer` returns `undefined`, merging is handled by the +
59284 * method instead. The `customizer` is invoked with six arguments: +
59285 * (objValue, srcValue, key, object, source, stack). +
59286 * +
59287 * **Note:** This method mutates `object`. +
59288 * +
59289 * @static +
59290 * @memberOf _ +
59291 * @since 4.0.0 +
59292 * @category Object +
59293 * @param {Object} object The destination object. +
59294 * @param {...Object} sources The source objects. +
59295 * @param {Function} customizer The function to customize assigned values. +
59296 * @returns {Object} Returns `object`. +
59297 * @example +
59298 * +
59299 * function customizer(objValue, srcValue) { +
59300 * if (_.isArray(objValue)) { +
59301 * return objValue.concat(srcValue); +
59302 * } +
59303 * } +
59304 * +
59305 * var object = { 'a': [1], 'b': [2] }; +
59306 * var other = { 'a': [3], 'b': [4] }; +
59307 * +
59308 * _.mergeWith(object, other, customizer); +
59309 * // => { 'a': [1, 3], 'b': [2, 4] } +
59310 */ +
59311 var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { +
59312 baseMerge(object, source, srcIndex, customizer); +
59313 }); +
59314 +
59315 /** +
59316 * The opposite of `_.pick`; this method creates an object composed of the +
59317 * own and inherited enumerable property paths of `object` that are not omitted. +
59318 * +
59319 * **Note:** This method is considerably slower than `_.pick`. +
59320 * +
59321 * @static +
59322 * @since 0.1.0 +
59323 * @memberOf _ +
59324 * @category Object +
59325 * @param {Object} object The source object. +
59326 * @param {...(string|string[])} [paths] The property paths to omit. +
59327 * @returns {Object} Returns the new object. +
59328 * @example +
59329 * +
59330 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
59331 * +
59332 * _.omit(object, ['a', 'c']); +
59333 * // => { 'b': '2' } +
59334 */ +
59335 var omit = flatRest(function(object, paths) { +
59336 var result = {}; +
59337 if (object == null) { +
59338 return result; +
59339 } +
59340 var isDeep = false; +
59341 paths = arrayMap(paths, function(path) { +
59342 path = castPath(path, object); +
59343 isDeep || (isDeep = path.length > 1); +
59344 return path; +
59345 }); +
59346 copyObject(object, getAllKeysIn(object), result); +
59347 if (isDeep) { +
59348 result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); +
59349 } +
59350 var length = paths.length; +
59351 while (length--) { +
59352 baseUnset(result, paths[length]); +
59353 } +
59354 return result; +
59355 }); +
59356 +
59357 /** +
59358 * The opposite of `_.pickBy`; this method creates an object composed of +
59359 * the own and inherited enumerable string keyed properties of `object` that +
59360 * `predicate` doesn't return truthy for. The predicate is invoked with two +
59361 * arguments: (value, key). +
59362 * +
59363 * @static +
59364 * @memberOf _ +
59365 * @since 4.0.0 +
59366 * @category Object +
59367 * @param {Object} object The source object. +
59368 * @param {Function} [predicate=_.identity] The function invoked per property. +
59369 * @returns {Object} Returns the new object. +
59370 * @example +
59371 * +
59372 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
59373 * +
59374 * _.omitBy(object, _.isNumber); +
59375 * // => { 'b': '2' } +
59376 */ +
59377 function omitBy(object, predicate) { +
59378 return pickBy(object, negate(getIteratee(predicate))); +
59379 } +
59380 +
59381 /** +
59382 * Creates an object composed of the picked `object` properties. +
59383 * +
59384 * @static +
59385 * @since 0.1.0 +
59386 * @memberOf _ +
59387 * @category Object +
59388 * @param {Object} object The source object. +
59389 * @param {...(string|string[])} [paths] The property paths to pick. +
59390 * @returns {Object} Returns the new object. +
59391 * @example +
59392 * +
59393 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
59394 * +
59395 * _.pick(object, ['a', 'c']); +
59396 * // => { 'a': 1, 'c': 3 } +
59397 */ +
59398 var pick = flatRest(function(object, paths) { +
59399 return object == null ? {} : basePick(object, paths); +
59400 }); +
59401 +
59402 /** +
59403 * Creates an object composed of the `object` properties `predicate` returns +
59404 * truthy for. The predicate is invoked with two arguments: (value, key). +
59405 * +
59406 * @static +
59407 * @memberOf _ +
59408 * @since 4.0.0 +
59409 * @category Object +
59410 * @param {Object} object The source object. +
59411 * @param {Function} [predicate=_.identity] The function invoked per property. +
59412 * @returns {Object} Returns the new object. +
59413 * @example +
59414 * +
59415 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
59416 * +
59417 * _.pickBy(object, _.isNumber); +
59418 * // => { 'a': 1, 'c': 3 } +
59419 */ +
59420 function pickBy(object, predicate) { +
59421 if (object == null) { +
59422 return {}; +
59423 } +
59424 var props = arrayMap(getAllKeysIn(object), function(prop) { +
59425 return [prop]; +
59426 }); +
59427 predicate = getIteratee(predicate); +
59428 return basePickBy(object, props, function(value, path) { +
59429 return predicate(value, path[0]); +
59430 }); +
59431 } +
59432 +
59433 /** +
59434 * This method is like `_.get` except that if the resolved value is a +
59435 * function it's invoked with the `this` binding of its parent object and +
59436 * its result is returned. +
59437 * +
59438 * @static +
59439 * @since 0.1.0 +
59440 * @memberOf _ +
59441 * @category Object +
59442 * @param {Object} object The object to query. +
59443 * @param {Array|string} path The path of the property to resolve. +
59444 * @param {*} [defaultValue] The value returned for `undefined` resolved values. +
59445 * @returns {*} Returns the resolved value. +
59446 * @example +
59447 * +
59448 * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; +
59449 * +
59450 * _.result(object, 'a[0].b.c1'); +
59451 * // => 3 +
59452 * +
59453 * _.result(object, 'a[0].b.c2'); +
59454 * // => 4 +
59455 * +
59456 * _.result(object, 'a[0].b.c3', 'default'); +
59457 * // => 'default' +
59458 * +
59459 * _.result(object, 'a[0].b.c3', _.constant('default')); +
59460 * // => 'default' +
59461 */ +
59462 function result(object, path, defaultValue) { +
59463 path = castPath(path, object); +
59464 +
59465 var index = -1, +
59466 length = path.length; +
59467 +
59468 // Ensure the loop is entered when path is empty. +
59469 if (!length) { +
59470 length = 1; +
59471 object = undefined; +
59472 } +
59473 while (++index < length) { +
59474 var value = object == null ? undefined : object[toKey(path[index])]; +
59475 if (value === undefined) { +
59476 index = length; +
59477 value = defaultValue; +
59478 } +
59479 object = isFunction(value) ? value.call(object) : value; +
59480 } +
59481 return object; +
59482 } +
59483 +
59484 /** +
59485 * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, +
59486 * it's created. Arrays are created for missing index properties while objects +
59487 * are created for all other missing properties. Use `_.setWith` to customize +
59488 * `path` creation. +
59489 * +
59490 * **Note:** This method mutates `object`. +
59491 * +
59492 * @static +
59493 * @memberOf _ +
59494 * @since 3.7.0 +
59495 * @category Object +
59496 * @param {Object} object The object to modify. +
59497 * @param {Array|string} path The path of the property to set. +
59498 * @param {*} value The value to set. +
59499 * @returns {Object} Returns `object`. +
59500 * @example +
59501 * +
59502 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
59503 * +
59504 * _.set(object, 'a[0].b.c', 4); +
59505 * console.log(object.a[0].b.c); +
59506 * // => 4 +
59507 * +
59508 * _.set(object, ['x', '0', 'y', 'z'], 5); +
59509 * console.log(object.x[0].y.z); +
59510 * // => 5 +
59511 */ +
59512 function set(object, path, value) { +
59513 return object == null ? object : baseSet(object, path, value); +
59514 } +
59515 +
59516 /** +
59517 * This method is like `_.set` except that it accepts `customizer` which is +
59518 * invoked to produce the objects of `path`. If `customizer` returns `undefined` +
59519 * path creation is handled by the method instead. The `customizer` is invoked +
59520 * with three arguments: (nsValue, key, nsObject). +
59521 * +
59522 * **Note:** This method mutates `object`. +
59523 * +
59524 * @static +
59525 * @memberOf _ +
59526 * @since 4.0.0 +
59527 * @category Object +
59528 * @param {Object} object The object to modify. +
59529 * @param {Array|string} path The path of the property to set. +
59530 * @param {*} value The value to set. +
59531 * @param {Function} [customizer] The function to customize assigned values. +
59532 * @returns {Object} Returns `object`. +
59533 * @example +
59534 * +
59535 * var object = {}; +
59536 * +
59537 * _.setWith(object, '[0][1]', 'a', Object); +
59538 * // => { '0': { '1': 'a' } } +
59539 */ +
59540 function setWith(object, path, value, customizer) { +
59541 customizer = typeof customizer == 'function' ? customizer : undefined; +
59542 return object == null ? object : baseSet(object, path, value, customizer); +
59543 } +
59544 +
59545 /** +
59546 * Creates an array of own enumerable string keyed-value pairs for `object` +
59547 * which can be consumed by `_.fromPairs`. If `object` is a map or set, its +
59548 * entries are returned. +
59549 * +
59550 * @static +
59551 * @memberOf _ +
59552 * @since 4.0.0 +
59553 * @alias entries +
59554 * @category Object +
59555 * @param {Object} object The object to query. +
59556 * @returns {Array} Returns the key-value pairs. +
59557 * @example +
59558 * +
59559 * function Foo() { +
59560 * this.a = 1; +
59561 * this.b = 2; +
59562 * } +
59563 * +
59564 * Foo.prototype.c = 3; +
59565 * +
59566 * _.toPairs(new Foo); +
59567 * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) +
59568 */ +
59569 var toPairs = createToPairs(keys); +
59570 +
59571 /** +
59572 * Creates an array of own and inherited enumerable string keyed-value pairs +
59573 * for `object` which can be consumed by `_.fromPairs`. If `object` is a map +
59574 * or set, its entries are returned. +
59575 * +
59576 * @static +
59577 * @memberOf _ +
59578 * @since 4.0.0 +
59579 * @alias entriesIn +
59580 * @category Object +
59581 * @param {Object} object The object to query. +
59582 * @returns {Array} Returns the key-value pairs. +
59583 * @example +
59584 * +
59585 * function Foo() { +
59586 * this.a = 1; +
59587 * this.b = 2; +
59588 * } +
59589 * +
59590 * Foo.prototype.c = 3; +
59591 * +
59592 * _.toPairsIn(new Foo); +
59593 * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) +
59594 */ +
59595 var toPairsIn = createToPairs(keysIn); +
59596 +
59597 /** +
59598 * An alternative to `_.reduce`; this method transforms `object` to a new +
59599 * `accumulator` object which is the result of running each of its own +
59600 * enumerable string keyed properties thru `iteratee`, with each invocation +
59601 * potentially mutating the `accumulator` object. If `accumulator` is not +
59602 * provided, a new object with the same `[[Prototype]]` will be used. The +
59603 * iteratee is invoked with four arguments: (accumulator, value, key, object). +
59604 * Iteratee functions may exit iteration early by explicitly returning `false`. +
59605 * +
59606 * @static +
59607 * @memberOf _ +
59608 * @since 1.3.0 +
59609 * @category Object +
59610 * @param {Object} object The object to iterate over. +
59611 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
59612 * @param {*} [accumulator] The custom accumulator value. +
59613 * @returns {*} Returns the accumulated value. +
59614 * @example +
59615 * +
59616 * _.transform([2, 3, 4], function(result, n) { +
59617 * result.push(n *= n); +
59618 * return n % 2 == 0; +
59619 * }, []); +
59620 * // => [4, 9] +
59621 * +
59622 * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +
59623 * (result[value] || (result[value] = [])).push(key); +
59624 * }, {}); +
59625 * // => { '1': ['a', 'c'], '2': ['b'] } +
59626 */ +
59627 function transform(object, iteratee, accumulator) { +
59628 var isArr = isArray(object), +
59629 isArrLike = isArr || isBuffer(object) || isTypedArray(object); +
59630 +
59631 iteratee = getIteratee(iteratee, 4); +
59632 if (accumulator == null) { +
59633 var Ctor = object && object.constructor; +
59634 if (isArrLike) { +
59635 accumulator = isArr ? new Ctor : []; +
59636 } +
59637 else if (isObject(object)) { +
59638 accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; +
59639 } +
59640 else { +
59641 accumulator = {}; +
59642 } +
59643 } +
59644 (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { +
59645 return iteratee(accumulator, value, index, object); +
59646 }); +
59647 return accumulator; +
59648 } +
59649 +
59650 /** +
59651 * Removes the property at `path` of `object`. +
59652 * +
59653 * **Note:** This method mutates `object`. +
59654 * +
59655 * @static +
59656 * @memberOf _ +
59657 * @since 4.0.0 +
59658 * @category Object +
59659 * @param {Object} object The object to modify. +
59660 * @param {Array|string} path The path of the property to unset. +
59661 * @returns {boolean} Returns `true` if the property is deleted, else `false`. +
59662 * @example +
59663 * +
59664 * var object = { 'a': [{ 'b': { 'c': 7 } }] }; +
59665 * _.unset(object, 'a[0].b.c'); +
59666 * // => true +
59667 * +
59668 * console.log(object); +
59669 * // => { 'a': [{ 'b': {} }] }; +
59670 * +
59671 * _.unset(object, ['a', '0', 'b', 'c']); +
59672 * // => true +
59673 * +
59674 * console.log(object); +
59675 * // => { 'a': [{ 'b': {} }] }; +
59676 */ +
59677 function unset(object, path) { +
59678 return object == null ? true : baseUnset(object, path); +
59679 } +
59680 +
59681 /** +
59682 * This method is like `_.set` except that accepts `updater` to produce the +
59683 * value to set. Use `_.updateWith` to customize `path` creation. The `updater` +
59684 * is invoked with one argument: (value). +
59685 * +
59686 * **Note:** This method mutates `object`. +
59687 * +
59688 * @static +
59689 * @memberOf _ +
59690 * @since 4.6.0 +
59691 * @category Object +
59692 * @param {Object} object The object to modify. +
59693 * @param {Array|string} path The path of the property to set. +
59694 * @param {Function} updater The function to produce the updated value. +
59695 * @returns {Object} Returns `object`. +
59696 * @example +
59697 * +
59698 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
59699 * +
59700 * _.update(object, 'a[0].b.c', function(n) { return n * n; }); +
59701 * console.log(object.a[0].b.c); +
59702 * // => 9 +
59703 * +
59704 * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); +
59705 * console.log(object.x[0].y.z); +
59706 * // => 0 +
59707 */ +
59708 function update(object, path, updater) { +
59709 return object == null ? object : baseUpdate(object, path, castFunction(updater)); +
59710 } +
59711 +
59712 /** +
59713 * This method is like `_.update` except that it accepts `customizer` which is +
59714 * invoked to produce the objects of `path`. If `customizer` returns `undefined` +
59715 * path creation is handled by the method instead. The `customizer` is invoked +
59716 * with three arguments: (nsValue, key, nsObject). +
59717 * +
59718 * **Note:** This method mutates `object`. +
59719 * +
59720 * @static +
59721 * @memberOf _ +
59722 * @since 4.6.0 +
59723 * @category Object +
59724 * @param {Object} object The object to modify. +
59725 * @param {Array|string} path The path of the property to set. +
59726 * @param {Function} updater The function to produce the updated value. +
59727 * @param {Function} [customizer] The function to customize assigned values. +
59728 * @returns {Object} Returns `object`. +
59729 * @example +
59730 * +
59731 * var object = {}; +
59732 * +
59733 * _.updateWith(object, '[0][1]', _.constant('a'), Object); +
59734 * // => { '0': { '1': 'a' } } +
59735 */ +
59736 function updateWith(object, path, updater, customizer) { +
59737 customizer = typeof customizer == 'function' ? customizer : undefined; +
59738 return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); +
59739 } +
59740 +
59741 /** +
59742 * Creates an array of the own enumerable string keyed property values of `object`. +
59743 * +
59744 * **Note:** Non-object values are coerced to objects. +
59745 * +
59746 * @static +
59747 * @since 0.1.0 +
59748 * @memberOf _ +
59749 * @category Object +
59750 * @param {Object} object The object to query. +
59751 * @returns {Array} Returns the array of property values. +
59752 * @example +
59753 * +
59754 * function Foo() { +
59755 * this.a = 1; +
59756 * this.b = 2; +
59757 * } +
59758 * +
59759 * Foo.prototype.c = 3; +
59760 * +
59761 * _.values(new Foo); +
59762 * // => [1, 2] (iteration order is not guaranteed) +
59763 * +
59764 * _.values('hi'); +
59765 * // => ['h', 'i'] +
59766 */ +
59767 function values(object) { +
59768 return object == null ? [] : baseValues(object, keys(object)); +
59769 } +
59770 +
59771 /** +
59772 * Creates an array of the own and inherited enumerable string keyed property +
59773 * values of `object`. +
59774 * +
59775 * **Note:** Non-object values are coerced to objects. +
59776 * +
59777 * @static +
59778 * @memberOf _ +
59779 * @since 3.0.0 +
59780 * @category Object +
59781 * @param {Object} object The object to query. +
59782 * @returns {Array} Returns the array of property values. +
59783 * @example +
59784 * +
59785 * function Foo() { +
59786 * this.a = 1; +
59787 * this.b = 2; +
59788 * } +
59789 * +
59790 * Foo.prototype.c = 3; +
59791 * +
59792 * _.valuesIn(new Foo); +
59793 * // => [1, 2, 3] (iteration order is not guaranteed) +
59794 */ +
59795 function valuesIn(object) { +
59796 return object == null ? [] : baseValues(object, keysIn(object)); +
59797 } +
59798 +
59799 /*------------------------------------------------------------------------*/ +
59800 +
59801 /** +
59802 * Clamps `number` within the inclusive `lower` and `upper` bounds. +
59803 * +
59804 * @static +
59805 * @memberOf _ +
59806 * @since 4.0.0 +
59807 * @category Number +
59808 * @param {number} number The number to clamp. +
59809 * @param {number} [lower] The lower bound. +
59810 * @param {number} upper The upper bound. +
59811 * @returns {number} Returns the clamped number. +
59812 * @example +
59813 * +
59814 * _.clamp(-10, -5, 5); +
59815 * // => -5 +
59816 * +
59817 * _.clamp(10, -5, 5); +
59818 * // => 5 +
59819 */ +
59820 function clamp(number, lower, upper) { +
59821 if (upper === undefined) { +
59822 upper = lower; +
59823 lower = undefined; +
59824 } +
59825 if (upper !== undefined) { +
59826 upper = toNumber(upper); +
59827 upper = upper === upper ? upper : 0; +
59828 } +
59829 if (lower !== undefined) { +
59830 lower = toNumber(lower); +
59831 lower = lower === lower ? lower : 0; +
59832 } +
59833 return baseClamp(toNumber(number), lower, upper); +
59834 } +
59835 +
59836 /** +
59837 * Checks if `n` is between `start` and up to, but not including, `end`. If +
59838 * `end` is not specified, it's set to `start` with `start` then set to `0`. +
59839 * If `start` is greater than `end` the params are swapped to support +
59840 * negative ranges. +
59841 * +
59842 * @static +
59843 * @memberOf _ +
59844 * @since 3.3.0 +
59845 * @category Number +
59846 * @param {number} number The number to check. +
59847 * @param {number} [start=0] The start of the range. +
59848 * @param {number} end The end of the range. +
59849 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +
59850 * @see _.range, _.rangeRight +
59851 * @example +
59852 * +
59853 * _.inRange(3, 2, 4); +
59854 * // => true +
59855 * +
59856 * _.inRange(4, 8); +
59857 * // => true +
59858 * +
59859 * _.inRange(4, 2); +
59860 * // => false +
59861 * +
59862 * _.inRange(2, 2); +
59863 * // => false +
59864 * +
59865 * _.inRange(1.2, 2); +
59866 * // => true +
59867 * +
59868 * _.inRange(5.2, 4); +
59869 * // => false +
59870 * +
59871 * _.inRange(-3, -2, -6); +
59872 * // => true +
59873 */ +
59874 function inRange(number, start, end) { +
59875 start = toFinite(start); +
59876 if (end === undefined) { +
59877 end = start; +
59878 start = 0; +
59879 } else { +
59880 end = toFinite(end); +
59881 } +
59882 number = toNumber(number); +
59883 return baseInRange(number, start, end); +
59884 } +
59885 +
59886 /** +
59887 * Produces a random number between the inclusive `lower` and `upper` bounds. +
59888 * If only one argument is provided a number between `0` and the given number +
59889 * is returned. If `floating` is `true`, or either `lower` or `upper` are +
59890 * floats, a floating-point number is returned instead of an integer. +
59891 * +
59892 * **Note:** JavaScript follows the IEEE-754 standard for resolving +
59893 * floating-point values which can produce unexpected results. +
59894 * +
59895 * @static +
59896 * @memberOf _ +
59897 * @since 0.7.0 +
59898 * @category Number +
59899 * @param {number} [lower=0] The lower bound. +
59900 * @param {number} [upper=1] The upper bound. +
59901 * @param {boolean} [floating] Specify returning a floating-point number. +
59902 * @returns {number} Returns the random number. +
59903 * @example +
59904 * +
59905 * _.random(0, 5); +
59906 * // => an integer between 0 and 5 +
59907 * +
59908 * _.random(5); +
59909 * // => also an integer between 0 and 5 +
59910 * +
59911 * _.random(5, true); +
59912 * // => a floating-point number between 0 and 5 +
59913 * +
59914 * _.random(1.2, 5.2); +
59915 * // => a floating-point number between 1.2 and 5.2 +
59916 */ +
59917 function random(lower, upper, floating) { +
59918 if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { +
59919 upper = floating = undefined; +
59920 } +
59921 if (floating === undefined) { +
59922 if (typeof upper == 'boolean') { +
59923 floating = upper; +
59924 upper = undefined; +
59925 } +
59926 else if (typeof lower == 'boolean') { +
59927 floating = lower; +
59928 lower = undefined; +
59929 } +
59930 } +
59931 if (lower === undefined && upper === undefined) { +
59932 lower = 0; +
59933 upper = 1; +
59934 } +
59935 else { +
59936 lower = toFinite(lower); +
59937 if (upper === undefined) { +
59938 upper = lower; +
59939 lower = 0; +
59940 } else { +
59941 upper = toFinite(upper); +
59942 } +
59943 } +
59944 if (lower > upper) { +
59945 var temp = lower; +
59946 lower = upper; +
59947 upper = temp; +
59948 } +
59949 if (floating || lower % 1 || upper % 1) { +
59950 var rand = nativeRandom(); +
59951 return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); +
59952 } +
59953 return baseRandom(lower, upper); +
59954 } +
59955 +
59956 /*------------------------------------------------------------------------*/ +
59957 +
59958 /** +
59959 * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). +
59960 * +
59961 * @static +
59962 * @memberOf _ +
59963 * @since 3.0.0 +
59964 * @category String +
59965 * @param {string} [string=''] The string to convert. +
59966 * @returns {string} Returns the camel cased string. +
59967 * @example +
59968 * +
59969 * _.camelCase('Foo Bar'); +
59970 * // => 'fooBar' +
59971 * +
59972 * _.camelCase('--foo-bar--'); +
59973 * // => 'fooBar' +
59974 * +
59975 * _.camelCase('__FOO_BAR__'); +
59976 * // => 'fooBar' +
59977 */ +
59978 var camelCase = createCompounder(function(result, word, index) { +
59979 word = word.toLowerCase(); +
59980 return result + (index ? capitalize(word) : word); +
59981 }); +
59982 +
59983 /** +
59984 * Converts the first character of `string` to upper case and the remaining +
59985 * to lower case. +
59986 * +
59987 * @static +
59988 * @memberOf _ +
59989 * @since 3.0.0 +
59990 * @category String +
59991 * @param {string} [string=''] The string to capitalize. +
59992 * @returns {string} Returns the capitalized string. +
59993 * @example +
59994 * +
59995 * _.capitalize('FRED'); +
59996 * // => 'Fred' +
59997 */ +
59998 function capitalize(string) { +
59999 return upperFirst(toString(string).toLowerCase()); +
60000 } +
60001 +
60002 /** +
60003 * Deburrs `string` by converting +
60004 * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) +
60005 * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) +
60006 * letters to basic Latin letters and removing +
60007 * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). +
60008 * +
60009 * @static +
60010 * @memberOf _ +
60011 * @since 3.0.0 +
60012 * @category String +
60013 * @param {string} [string=''] The string to deburr. +
60014 * @returns {string} Returns the deburred string. +
60015 * @example +
60016 * +
60017 * _.deburr('déjà vu'); +
60018 * // => 'deja vu' +
60019 */ +
60020 function deburr(string) { +
60021 string = toString(string); +
60022 return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +
60023 } +
60024 +
60025 /** +
60026 * Checks if `string` ends with the given target string. +
60027 * +
60028 * @static +
60029 * @memberOf _ +
60030 * @since 3.0.0 +
60031 * @category String +
60032 * @param {string} [string=''] The string to inspect. +
60033 * @param {string} [target] The string to search for. +
60034 * @param {number} [position=string.length] The position to search up to. +
60035 * @returns {boolean} Returns `true` if `string` ends with `target`, +
60036 * else `false`. +
60037 * @example +
60038 * +
60039 * _.endsWith('abc', 'c'); +
60040 * // => true +
60041 * +
60042 * _.endsWith('abc', 'b'); +
60043 * // => false +
60044 * +
60045 * _.endsWith('abc', 'b', 2); +
60046 * // => true +
60047 */ +
60048 function endsWith(string, target, position) { +
60049 string = toString(string); +
60050 target = baseToString(target); +
60051 +
60052 var length = string.length; +
60053 position = position === undefined +
60054 ? length +
60055 : baseClamp(toInteger(position), 0, length); +
60056 +
60057 var end = position; +
60058 position -= target.length; +
60059 return position >= 0 && string.slice(position, end) == target; +
60060 } +
60061 +
60062 /** +
60063 * Converts the characters "&", "<", ">", '"', and "'" in `string` to their +
60064 * corresponding HTML entities. +
60065 * +
60066 * **Note:** No other characters are escaped. To escape additional +
60067 * characters use a third-party library like [_he_](https://mths.be/he). +
60068 * +
60069 * Though the ">" character is escaped for symmetry, characters like +
60070 * ">" and "/" don't need escaping in HTML and have no special meaning +
60071 * unless they're part of a tag or unquoted attribute value. See +
60072 * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) +
60073 * (under "semi-related fun fact") for more details. +
60074 * +
60075 * When working with HTML you should always +
60076 * [quote attribute values](http://wonko.com/post/html-escaping) to reduce +
60077 * XSS vectors. +
60078 * +
60079 * @static +
60080 * @since 0.1.0 +
60081 * @memberOf _ +
60082 * @category String +
60083 * @param {string} [string=''] The string to escape. +
60084 * @returns {string} Returns the escaped string. +
60085 * @example +
60086 * +
60087 * _.escape('fred, barney, & pebbles'); +
60088 * // => 'fred, barney, &amp; pebbles' +
60089 */ +
60090 function escape(string) { +
60091 string = toString(string); +
60092 return (string && reHasUnescapedHtml.test(string)) +
60093 ? string.replace(reUnescapedHtml, escapeHtmlChar) +
60094 : string; +
60095 } +
60096 +
60097 /** +
60098 * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", +
60099 * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. +
60100 * +
60101 * @static +
60102 * @memberOf _ +
60103 * @since 3.0.0 +
60104 * @category String +
60105 * @param {string} [string=''] The string to escape. +
60106 * @returns {string} Returns the escaped string. +
60107 * @example +
60108 * +
60109 * _.escapeRegExp('[lodash](https://lodash.com/)'); +
60110 * // => '\[lodash\]\(https://lodash\.com/\)' +
60111 */ +
60112 function escapeRegExp(string) { +
60113 string = toString(string); +
60114 return (string && reHasRegExpChar.test(string)) +
60115 ? string.replace(reRegExpChar, '\\$&') +
60116 : string; +
60117 } +
60118 +
60119 /** +
60120 * Converts `string` to +
60121 * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). +
60122 * +
60123 * @static +
60124 * @memberOf _ +
60125 * @since 3.0.0 +
60126 * @category String +
60127 * @param {string} [string=''] The string to convert. +
60128 * @returns {string} Returns the kebab cased string. +
60129 * @example +
60130 * +
60131 * _.kebabCase('Foo Bar'); +
60132 * // => 'foo-bar' +
60133 * +
60134 * _.kebabCase('fooBar'); +
60135 * // => 'foo-bar' +
60136 * +
60137 * _.kebabCase('__FOO_BAR__'); +
60138 * // => 'foo-bar' +
60139 */ +
60140 var kebabCase = createCompounder(function(result, word, index) { +
60141 return result + (index ? '-' : '') + word.toLowerCase(); +
60142 }); +
60143 +
60144 /** +
60145 * Converts `string`, as space separated words, to lower case. +
60146 * +
60147 * @static +
60148 * @memberOf _ +
60149 * @since 4.0.0 +
60150 * @category String +
60151 * @param {string} [string=''] The string to convert. +
60152 * @returns {string} Returns the lower cased string. +
60153 * @example +
60154 * +
60155 * _.lowerCase('--Foo-Bar--'); +
60156 * // => 'foo bar' +
60157 * +
60158 * _.lowerCase('fooBar'); +
60159 * // => 'foo bar' +
60160 * +
60161 * _.lowerCase('__FOO_BAR__'); +
60162 * // => 'foo bar' +
60163 */ +
60164 var lowerCase = createCompounder(function(result, word, index) { +
60165 return result + (index ? ' ' : '') + word.toLowerCase(); +
60166 }); +
60167 +
60168 /** +
60169 * Converts the first character of `string` to lower case. +
60170 * +
60171 * @static +
60172 * @memberOf _ +
60173 * @since 4.0.0 +
60174 * @category String +
60175 * @param {string} [string=''] The string to convert. +
60176 * @returns {string} Returns the converted string. +
60177 * @example +
60178 * +
60179 * _.lowerFirst('Fred'); +
60180 * // => 'fred' +
60181 * +
60182 * _.lowerFirst('FRED'); +
60183 * // => 'fRED' +
60184 */ +
60185 var lowerFirst = createCaseFirst('toLowerCase'); +
60186 +
60187 /** +
60188 * Pads `string` on the left and right sides if it's shorter than `length`. +
60189 * Padding characters are truncated if they can't be evenly divided by `length`. +
60190 * +
60191 * @static +
60192 * @memberOf _ +
60193 * @since 3.0.0 +
60194 * @category String +
60195 * @param {string} [string=''] The string to pad. +
60196 * @param {number} [length=0] The padding length. +
60197 * @param {string} [chars=' '] The string used as padding. +
60198 * @returns {string} Returns the padded string. +
60199 * @example +
60200 * +
60201 * _.pad('abc', 8); +
60202 * // => ' abc ' +
60203 * +
60204 * _.pad('abc', 8, '_-'); +
60205 * // => '_-abc_-_' +
60206 * +
60207 * _.pad('abc', 3); +
60208 * // => 'abc' +
60209 */ +
60210 function pad(string, length, chars) { +
60211 string = toString(string); +
60212 length = toInteger(length); +
60213 +
60214 var strLength = length ? stringSize(string) : 0; +
60215 if (!length || strLength >= length) { +
60216 return string; +
60217 } +
60218 var mid = (length - strLength) / 2; +
60219 return ( +
60220 createPadding(nativeFloor(mid), chars) + +
60221 string + +
60222 createPadding(nativeCeil(mid), chars) +
60223 ); +
60224 } +
60225 +
60226 /** +
60227 * Pads `string` on the right side if it's shorter than `length`. Padding +
60228 * characters are truncated if they exceed `length`. +
60229 * +
60230 * @static +
60231 * @memberOf _ +
60232 * @since 4.0.0 +
60233 * @category String +
60234 * @param {string} [string=''] The string to pad. +
60235 * @param {number} [length=0] The padding length. +
60236 * @param {string} [chars=' '] The string used as padding. +
60237 * @returns {string} Returns the padded string. +
60238 * @example +
60239 * +
60240 * _.padEnd('abc', 6); +
60241 * // => 'abc ' +
60242 * +
60243 * _.padEnd('abc', 6, '_-'); +
60244 * // => 'abc_-_' +
60245 * +
60246 * _.padEnd('abc', 3); +
60247 * // => 'abc' +
60248 */ +
60249 function padEnd(string, length, chars) { +
60250 string = toString(string); +
60251 length = toInteger(length); +
60252 +
60253 var strLength = length ? stringSize(string) : 0; +
60254 return (length && strLength < length) +
60255 ? (string + createPadding(length - strLength, chars)) +
60256 : string; +
60257 } +
60258 +
60259 /** +
60260 * Pads `string` on the left side if it's shorter than `length`. Padding +
60261 * characters are truncated if they exceed `length`. +
60262 * +
60263 * @static +
60264 * @memberOf _ +
60265 * @since 4.0.0 +
60266 * @category String +
60267 * @param {string} [string=''] The string to pad. +
60268 * @param {number} [length=0] The padding length. +
60269 * @param {string} [chars=' '] The string used as padding. +
60270 * @returns {string} Returns the padded string. +
60271 * @example +
60272 * +
60273 * _.padStart('abc', 6); +
60274 * // => ' abc' +
60275 * +
60276 * _.padStart('abc', 6, '_-'); +
60277 * // => '_-_abc' +
60278 * +
60279 * _.padStart('abc', 3); +
60280 * // => 'abc' +
60281 */ +
60282 function padStart(string, length, chars) { +
60283 string = toString(string); +
60284 length = toInteger(length); +
60285 +
60286 var strLength = length ? stringSize(string) : 0; +
60287 return (length && strLength < length) +
60288 ? (createPadding(length - strLength, chars) + string) +
60289 : string; +
60290 } +
60291 +
60292 /** +
60293 * Converts `string` to an integer of the specified radix. If `radix` is +
60294 * `undefined` or `0`, a `radix` of `10` is used unless `value` is a +
60295 * hexadecimal, in which case a `radix` of `16` is used. +
60296 * +
60297 * **Note:** This method aligns with the +
60298 * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. +
60299 * +
60300 * @static +
60301 * @memberOf _ +
60302 * @since 1.1.0 +
60303 * @category String +
60304 * @param {string} string The string to convert. +
60305 * @param {number} [radix=10] The radix to interpret `value` by. +
60306 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
60307 * @returns {number} Returns the converted integer. +
60308 * @example +
60309 * +
60310 * _.parseInt('08'); +
60311 * // => 8 +
60312 * +
60313 * _.map(['6', '08', '10'], _.parseInt); +
60314 * // => [6, 8, 10] +
60315 */ +
60316 function parseInt(string, radix, guard) { +
60317 if (guard || radix == null) { +
60318 radix = 0; +
60319 } else if (radix) { +
60320 radix = +radix; +
60321 } +
60322 return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); +
60323 } +
60324 +
60325 /** +
60326 * Repeats the given string `n` times. +
60327 * +
60328 * @static +
60329 * @memberOf _ +
60330 * @since 3.0.0 +
60331 * @category String +
60332 * @param {string} [string=''] The string to repeat. +
60333 * @param {number} [n=1] The number of times to repeat the string. +
60334 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
60335 * @returns {string} Returns the repeated string. +
60336 * @example +
60337 * +
60338 * _.repeat('*', 3); +
60339 * // => '***' +
60340 * +
60341 * _.repeat('abc', 2); +
60342 * // => 'abcabc' +
60343 * +
60344 * _.repeat('abc', 0); +
60345 * // => '' +
60346 */ +
60347 function repeat(string, n, guard) { +
60348 if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { +
60349 n = 1; +
60350 } else { +
60351 n = toInteger(n); +
60352 } +
60353 return baseRepeat(toString(string), n); +
60354 } +
60355 +
60356 /** +
60357 * Replaces matches for `pattern` in `string` with `replacement`. +
60358 * +
60359 * **Note:** This method is based on +
60360 * [`String#replace`](https://mdn.io/String/replace). +
60361 * +
60362 * @static +
60363 * @memberOf _ +
60364 * @since 4.0.0 +
60365 * @category String +
60366 * @param {string} [string=''] The string to modify. +
60367 * @param {RegExp|string} pattern The pattern to replace. +
60368 * @param {Function|string} replacement The match replacement. +
60369 * @returns {string} Returns the modified string. +
60370 * @example +
60371 * +
60372 * _.replace('Hi Fred', 'Fred', 'Barney'); +
60373 * // => 'Hi Barney' +
60374 */ +
60375 function replace() { +
60376 var args = arguments, +
60377 string = toString(args[0]); +
60378 +
60379 return args.length < 3 ? string : string.replace(args[1], args[2]); +
60380 } +
60381 +
60382 /** +
60383 * Converts `string` to +
60384 * [snake case](https://en.wikipedia.org/wiki/Snake_case). +
60385 * +
60386 * @static +
60387 * @memberOf _ +
60388 * @since 3.0.0 +
60389 * @category String +
60390 * @param {string} [string=''] The string to convert. +
60391 * @returns {string} Returns the snake cased string. +
60392 * @example +
60393 * +
60394 * _.snakeCase('Foo Bar'); +
60395 * // => 'foo_bar' +
60396 * +
60397 * _.snakeCase('fooBar'); +
60398 * // => 'foo_bar' +
60399 * +
60400 * _.snakeCase('--FOO-BAR--'); +
60401 * // => 'foo_bar' +
60402 */ +
60403 var snakeCase = createCompounder(function(result, word, index) { +
60404 return result + (index ? '_' : '') + word.toLowerCase(); +
60405 }); +
60406 +
60407 /** +
60408 * Splits `string` by `separator`. +
60409 * +
60410 * **Note:** This method is based on +
60411 * [`String#split`](https://mdn.io/String/split). +
60412 * +
60413 * @static +
60414 * @memberOf _ +
60415 * @since 4.0.0 +
60416 * @category String +
60417 * @param {string} [string=''] The string to split. +
60418 * @param {RegExp|string} separator The separator pattern to split by. +
60419 * @param {number} [limit] The length to truncate results to. +
60420 * @returns {Array} Returns the string segments. +
60421 * @example +
60422 * +
60423 * _.split('a-b-c', '-', 2); +
60424 * // => ['a', 'b'] +
60425 */ +
60426 function split(string, separator, limit) { +
60427 if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { +
60428 separator = limit = undefined; +
60429 } +
60430 limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; +
60431 if (!limit) { +
60432 return []; +
60433 } +
60434 string = toString(string); +
60435 if (string && ( +
60436 typeof separator == 'string' || +
60437 (separator != null && !isRegExp(separator)) +
60438 )) { +
60439 separator = baseToString(separator); +
60440 if (!separator && hasUnicode(string)) { +
60441 return castSlice(stringToArray(string), 0, limit); +
60442 } +
60443 } +
60444 return string.split(separator, limit); +
60445 } +
60446 +
60447 /** +
60448 * Converts `string` to +
60449 * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). +
60450 * +
60451 * @static +
60452 * @memberOf _ +
60453 * @since 3.1.0 +
60454 * @category String +
60455 * @param {string} [string=''] The string to convert. +
60456 * @returns {string} Returns the start cased string. +
60457 * @example +
60458 * +
60459 * _.startCase('--foo-bar--'); +
60460 * // => 'Foo Bar' +
60461 * +
60462 * _.startCase('fooBar'); +
60463 * // => 'Foo Bar' +
60464 * +
60465 * _.startCase('__FOO_BAR__'); +
60466 * // => 'FOO BAR' +
60467 */ +
60468 var startCase = createCompounder(function(result, word, index) { +
60469 return result + (index ? ' ' : '') + upperFirst(word); +
60470 }); +
60471 +
60472 /** +
60473 * Checks if `string` starts with the given target string. +
60474 * +
60475 * @static +
60476 * @memberOf _ +
60477 * @since 3.0.0 +
60478 * @category String +
60479 * @param {string} [string=''] The string to inspect. +
60480 * @param {string} [target] The string to search for. +
60481 * @param {number} [position=0] The position to search from. +
60482 * @returns {boolean} Returns `true` if `string` starts with `target`, +
60483 * else `false`. +
60484 * @example +
60485 * +
60486 * _.startsWith('abc', 'a'); +
60487 * // => true +
60488 * +
60489 * _.startsWith('abc', 'b'); +
60490 * // => false +
60491 * +
60492 * _.startsWith('abc', 'b', 1); +
60493 * // => true +
60494 */ +
60495 function startsWith(string, target, position) { +
60496 string = toString(string); +
60497 position = position == null +
60498 ? 0 +
60499 : baseClamp(toInteger(position), 0, string.length); +
60500 +
60501 target = baseToString(target); +
60502 return string.slice(position, position + target.length) == target; +
60503 } +
60504 +
60505 /** +
60506 * Creates a compiled template function that can interpolate data properties +
60507 * in "interpolate" delimiters, HTML-escape interpolated data properties in +
60508 * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data +
60509 * properties may be accessed as free variables in the template. If a setting +
60510 * object is given, it takes precedence over `_.templateSettings` values. +
60511 * +
60512 * **Note:** In the development build `_.template` utilizes +
60513 * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) +
60514 * for easier debugging. +
60515 * +
60516 * For more information on precompiling templates see +
60517 * [lodash's custom builds documentation](https://lodash.com/custom-builds). +
60518 * +
60519 * For more information on Chrome extension sandboxes see +
60520 * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). +
60521 * +
60522 * @static +
60523 * @since 0.1.0 +
60524 * @memberOf _ +
60525 * @category String +
60526 * @param {string} [string=''] The template string. +
60527 * @param {Object} [options={}] The options object. +
60528 * @param {RegExp} [options.escape=_.templateSettings.escape] +
60529 * The HTML "escape" delimiter. +
60530 * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] +
60531 * The "evaluate" delimiter. +
60532 * @param {Object} [options.imports=_.templateSettings.imports] +
60533 * An object to import into the template as free variables. +
60534 * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] +
60535 * The "interpolate" delimiter. +
60536 * @param {string} [options.sourceURL='lodash.templateSources[n]'] +
60537 * The sourceURL of the compiled template. +
60538 * @param {string} [options.variable='obj'] +
60539 * The data object variable name. +
60540 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
60541 * @returns {Function} Returns the compiled template function. +
60542 * @example +
60543 * +
60544 * // Use the "interpolate" delimiter to create a compiled template. +
60545 * var compiled = _.template('hello <%= user %>!'); +
60546 * compiled({ 'user': 'fred' }); +
60547 * // => 'hello fred!' +
60548 * +
60549 * // Use the HTML "escape" delimiter to escape data property values. +
60550 * var compiled = _.template('<b><%- value %></b>'); +
60551 * compiled({ 'value': '<script>' }); +
60552 * // => '<b>&lt;script&gt;</b>' +
60553 * +
60554 * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. +
60555 * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); +
60556 * compiled({ 'users': ['fred', 'barney'] }); +
60557 * // => '<li>fred</li><li>barney</li>' +
60558 * +
60559 * // Use the internal `print` function in "evaluate" delimiters. +
60560 * var compiled = _.template('<% print("hello " + user); %>!'); +
60561 * compiled({ 'user': 'barney' }); +
60562 * // => 'hello barney!' +
60563 * +
60564 * // Use the ES template literal delimiter as an "interpolate" delimiter. +
60565 * // Disable support by replacing the "interpolate" delimiter. +
60566 * var compiled = _.template('hello ${ user }!'); +
60567 * compiled({ 'user': 'pebbles' }); +
60568 * // => 'hello pebbles!' +
60569 * +
60570 * // Use backslashes to treat delimiters as plain text. +
60571 * var compiled = _.template('<%= "\\<%- value %\\>" %>'); +
60572 * compiled({ 'value': 'ignored' }); +
60573 * // => '<%- value %>' +
60574 * +
60575 * // Use the `imports` option to import `jQuery` as `jq`. +
60576 * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; +
60577 * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); +
60578 * compiled({ 'users': ['fred', 'barney'] }); +
60579 * // => '<li>fred</li><li>barney</li>' +
60580 * +
60581 * // Use the `sourceURL` option to specify a custom sourceURL for the template. +
60582 * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); +
60583 * compiled(data); +
60584 * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. +
60585 * +
60586 * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. +
60587 * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); +
60588 * compiled.source; +
60589 * // => function(data) { +
60590 * // var __t, __p = ''; +
60591 * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; +
60592 * // return __p; +
60593 * // } +
60594 * +
60595 * // Use custom template delimiters. +
60596 * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; +
60597 * var compiled = _.template('hello {{ user }}!'); +
60598 * compiled({ 'user': 'mustache' }); +
60599 * // => 'hello mustache!' +
60600 * +
60601 * // Use the `source` property to inline compiled templates for meaningful +
60602 * // line numbers in error messages and stack traces. +
60603 * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ +
60604 * var JST = {\ +
60605 * "main": ' + _.template(mainText).source + '\ +
60606 * };\ +
60607 * '); +
60608 */ +
60609 function template(string, options, guard) { +
60610 // Based on John Resig's `tmpl` implementation +
60611 // (http://ejohn.org/blog/javascript-micro-templating/) +
60612 // and Laura Doktorova's doT.js (https://github.com/olado/doT). +
60613 var settings = lodash.templateSettings; +
60614 +
60615 if (guard && isIterateeCall(string, options, guard)) { +
60616 options = undefined; +
60617 } +
60618 string = toString(string); +
60619 options = assignInWith({}, options, settings, customDefaultsAssignIn); +
60620 +
60621 var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), +
60622 importsKeys = keys(imports), +
60623 importsValues = baseValues(imports, importsKeys); +
60624 +
60625 var isEscaping, +
60626 isEvaluating, +
60627 index = 0, +
60628 interpolate = options.interpolate || reNoMatch, +
60629 source = "__p += '"; +
60630 +
60631 // Compile the regexp to match each delimiter. +
60632 var reDelimiters = RegExp( +
60633 (options.escape || reNoMatch).source + '|' + +
60634 interpolate.source + '|' + +
60635 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + +
60636 (options.evaluate || reNoMatch).source + '|$' +
60637 , 'g'); +
60638 +
60639 // Use a sourceURL for easier debugging. +
60640 var sourceURL = '//# sourceURL=' + +
60641 ('sourceURL' in options +
60642 ? options.sourceURL +
60643 : ('lodash.templateSources[' + (++templateCounter) + ']') +
60644 ) + '\n'; +
60645 +
60646 string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { +
60647 interpolateValue || (interpolateValue = esTemplateValue); +
60648 +
60649 // Escape characters that can't be included in string literals. +
60650 source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); +
60651 +
60652 // Replace delimiters with snippets. +
60653 if (escapeValue) { +
60654 isEscaping = true; +
60655 source += "' +\n__e(" + escapeValue + ") +\n'"; +
60656 } +
60657 if (evaluateValue) { +
60658 isEvaluating = true; +
60659 source += "';\n" + evaluateValue + ";\n__p += '"; +
60660 } +
60661 if (interpolateValue) { +
60662 source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; +
60663 } +
60664 index = offset + match.length; +
60665 +
60666 // The JS engine embedded in Adobe products needs `match` returned in +
60667 // order to produce the correct `offset` value. +
60668 return match; +
60669 }); +
60670 +
60671 source += "';\n"; +
60672 +
60673 // If `variable` is not specified wrap a with-statement around the generated +
60674 // code to add the data object to the top of the scope chain. +
60675 var variable = options.variable; +
60676 if (!variable) { +
60677 source = 'with (obj) {\n' + source + '\n}\n'; +
60678 } +
60679 // Cleanup code by stripping empty strings. +
60680 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) +
60681 .replace(reEmptyStringMiddle, '$1') +
60682 .replace(reEmptyStringTrailing, '$1;'); +
60683 +
60684 // Frame code as the function body. +
60685 source = 'function(' + (variable || 'obj') + ') {\n' + +
60686 (variable +
60687 ? '' +
60688 : 'obj || (obj = {});\n' +
60689 ) + +
60690 "var __t, __p = ''" + +
60691 (isEscaping +
60692 ? ', __e = _.escape' +
60693 : '' +
60694 ) + +
60695 (isEvaluating +
60696 ? ', __j = Array.prototype.join;\n' + +
60697 "function print() { __p += __j.call(arguments, '') }\n" +
60698 : ';\n' +
60699 ) + +
60700 source + +
60701 'return __p\n}'; +
60702 +
60703 var result = attempt(function() { +
60704 return Function(importsKeys, sourceURL + 'return ' + source) +
60705 .apply(undefined, importsValues); +
60706 }); +
60707 +
60708 // Provide the compiled function's source by its `toString` method or +
60709 // the `source` property as a convenience for inlining compiled templates. +
60710 result.source = source; +
60711 if (isError(result)) { +
60712 throw result; +
60713 } +
60714 return result; +
60715 } +
60716 +
60717 /** +
60718 * Converts `string`, as a whole, to lower case just like +
60719 * [String#toLowerCase](https://mdn.io/toLowerCase). +
60720 * +
60721 * @static +
60722 * @memberOf _ +
60723 * @since 4.0.0 +
60724 * @category String +
60725 * @param {string} [string=''] The string to convert. +
60726 * @returns {string} Returns the lower cased string. +
60727 * @example +
60728 * +
60729 * _.toLower('--Foo-Bar--'); +
60730 * // => '--foo-bar--' +
60731 * +
60732 * _.toLower('fooBar'); +
60733 * // => 'foobar' +
60734 * +
60735 * _.toLower('__FOO_BAR__'); +
60736 * // => '__foo_bar__' +
60737 */ +
60738 function toLower(value) { +
60739 return toString(value).toLowerCase(); +
60740 } +
60741 +
60742 /** +
60743 * Converts `string`, as a whole, to upper case just like +
60744 * [String#toUpperCase](https://mdn.io/toUpperCase). +
60745 * +
60746 * @static +
60747 * @memberOf _ +
60748 * @since 4.0.0 +
60749 * @category String +
60750 * @param {string} [string=''] The string to convert. +
60751 * @returns {string} Returns the upper cased string. +
60752 * @example +
60753 * +
60754 * _.toUpper('--foo-bar--'); +
60755 * // => '--FOO-BAR--' +
60756 * +
60757 * _.toUpper('fooBar'); +
60758 * // => 'FOOBAR' +
60759 * +
60760 * _.toUpper('__foo_bar__'); +
60761 * // => '__FOO_BAR__' +
60762 */ +
60763 function toUpper(value) { +
60764 return toString(value).toUpperCase(); +
60765 } +
60766 +
60767 /** +
60768 * Removes leading and trailing whitespace or specified characters from `string`. +
60769 * +
60770 * @static +
60771 * @memberOf _ +
60772 * @since 3.0.0 +
60773 * @category String +
60774 * @param {string} [string=''] The string to trim. +
60775 * @param {string} [chars=whitespace] The characters to trim. +
60776 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
60777 * @returns {string} Returns the trimmed string. +
60778 * @example +
60779 * +
60780 * _.trim(' abc '); +
60781 * // => 'abc' +
60782 * +
60783 * _.trim('-_-abc-_-', '_-'); +
60784 * // => 'abc' +
60785 * +
60786 * _.map([' foo ', ' bar '], _.trim); +
60787 * // => ['foo', 'bar'] +
60788 */ +
60789 function trim(string, chars, guard) { +
60790 string = toString(string); +
60791 if (string && (guard || chars === undefined)) { +
60792 return string.replace(reTrim, ''); +
60793 } +
60794 if (!string || !(chars = baseToString(chars))) { +
60795 return string; +
60796 } +
60797 var strSymbols = stringToArray(string), +
60798 chrSymbols = stringToArray(chars), +
60799 start = charsStartIndex(strSymbols, chrSymbols), +
60800 end = charsEndIndex(strSymbols, chrSymbols) + 1; +
60801 +
60802 return castSlice(strSymbols, start, end).join(''); +
60803 } +
60804 +
60805 /** +
60806 * Removes trailing whitespace or specified characters from `string`. +
60807 * +
60808 * @static +
60809 * @memberOf _ +
60810 * @since 4.0.0 +
60811 * @category String +
60812 * @param {string} [string=''] The string to trim. +
60813 * @param {string} [chars=whitespace] The characters to trim. +
60814 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
60815 * @returns {string} Returns the trimmed string. +
60816 * @example +
60817 * +
60818 * _.trimEnd(' abc '); +
60819 * // => ' abc' +
60820 * +
60821 * _.trimEnd('-_-abc-_-', '_-'); +
60822 * // => '-_-abc' +
60823 */ +
60824 function trimEnd(string, chars, guard) { +
60825 string = toString(string); +
60826 if (string && (guard || chars === undefined)) { +
60827 return string.replace(reTrimEnd, ''); +
60828 } +
60829 if (!string || !(chars = baseToString(chars))) { +
60830 return string; +
60831 } +
60832 var strSymbols = stringToArray(string), +
60833 end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; +
60834 +
60835 return castSlice(strSymbols, 0, end).join(''); +
60836 } +
60837 +
60838 /** +
60839 * Removes leading whitespace or specified characters from `string`. +
60840 * +
60841 * @static +
60842 * @memberOf _ +
60843 * @since 4.0.0 +
60844 * @category String +
60845 * @param {string} [string=''] The string to trim. +
60846 * @param {string} [chars=whitespace] The characters to trim. +
60847 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
60848 * @returns {string} Returns the trimmed string. +
60849 * @example +
60850 * +
60851 * _.trimStart(' abc '); +
60852 * // => 'abc ' +
60853 * +
60854 * _.trimStart('-_-abc-_-', '_-'); +
60855 * // => 'abc-_-' +
60856 */ +
60857 function trimStart(string, chars, guard) { +
60858 string = toString(string); +
60859 if (string && (guard || chars === undefined)) { +
60860 return string.replace(reTrimStart, ''); +
60861 } +
60862 if (!string || !(chars = baseToString(chars))) { +
60863 return string; +
60864 } +
60865 var strSymbols = stringToArray(string), +
60866 start = charsStartIndex(strSymbols, stringToArray(chars)); +
60867 +
60868 return castSlice(strSymbols, start).join(''); +
60869 } +
60870 +
60871 /** +
60872 * Truncates `string` if it's longer than the given maximum string length. +
60873 * The last characters of the truncated string are replaced with the omission +
60874 * string which defaults to "...". +
60875 * +
60876 * @static +
60877 * @memberOf _ +
60878 * @since 4.0.0 +
60879 * @category String +
60880 * @param {string} [string=''] The string to truncate. +
60881 * @param {Object} [options={}] The options object. +
60882 * @param {number} [options.length=30] The maximum string length. +
60883 * @param {string} [options.omission='...'] The string to indicate text is omitted. +
60884 * @param {RegExp|string} [options.separator] The separator pattern to truncate to. +
60885 * @returns {string} Returns the truncated string. +
60886 * @example +
60887 * +
60888 * _.truncate('hi-diddly-ho there, neighborino'); +
60889 * // => 'hi-diddly-ho there, neighbo...' +
60890 * +
60891 * _.truncate('hi-diddly-ho there, neighborino', { +
60892 * 'length': 24, +
60893 * 'separator': ' ' +
60894 * }); +
60895 * // => 'hi-diddly-ho there,...' +
60896 * +
60897 * _.truncate('hi-diddly-ho there, neighborino', { +
60898 * 'length': 24, +
60899 * 'separator': /,? +/ +
60900 * }); +
60901 * // => 'hi-diddly-ho there...' +
60902 * +
60903 * _.truncate('hi-diddly-ho there, neighborino', { +
60904 * 'omission': ' [...]' +
60905 * }); +
60906 * // => 'hi-diddly-ho there, neig [...]' +
60907 */ +
60908 function truncate(string, options) { +
60909 var length = DEFAULT_TRUNC_LENGTH, +
60910 omission = DEFAULT_TRUNC_OMISSION; +
60911 +
60912 if (isObject(options)) { +
60913 var separator = 'separator' in options ? options.separator : separator; +
60914 length = 'length' in options ? toInteger(options.length) : length; +
60915 omission = 'omission' in options ? baseToString(options.omission) : omission; +
60916 } +
60917 string = toString(string); +
60918 +
60919 var strLength = string.length; +
60920 if (hasUnicode(string)) { +
60921 var strSymbols = stringToArray(string); +
60922 strLength = strSymbols.length; +
60923 } +
60924 if (length >= strLength) { +
60925 return string; +
60926 } +
60927 var end = length - stringSize(omission); +
60928 if (end < 1) { +
60929 return omission; +
60930 } +
60931 var result = strSymbols +
60932 ? castSlice(strSymbols, 0, end).join('') +
60933 : string.slice(0, end); +
60934 +
60935 if (separator === undefined) { +
60936 return result + omission; +
60937 } +
60938 if (strSymbols) { +
60939 end += (result.length - end); +
60940 } +
60941 if (isRegExp(separator)) { +
60942 if (string.slice(end).search(separator)) { +
60943 var match, +
60944 substring = result; +
60945 +
60946 if (!separator.global) { +
60947 separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); +
60948 } +
60949 separator.lastIndex = 0; +
60950 while ((match = separator.exec(substring))) { +
60951 var newEnd = match.index; +
60952 } +
60953 result = result.slice(0, newEnd === undefined ? end : newEnd); +
60954 } +
60955 } else if (string.indexOf(baseToString(separator), end) != end) { +
60956 var index = result.lastIndexOf(separator); +
60957 if (index > -1) { +
60958 result = result.slice(0, index); +
60959 } +
60960 } +
60961 return result + omission; +
60962 } +
60963 +
60964 /** +
60965 * The inverse of `_.escape`; this method converts the HTML entities +
60966 * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to +
60967 * their corresponding characters. +
60968 * +
60969 * **Note:** No other HTML entities are unescaped. To unescape additional +
60970 * HTML entities use a third-party library like [_he_](https://mths.be/he). +
60971 * +
60972 * @static +
60973 * @memberOf _ +
60974 * @since 0.6.0 +
60975 * @category String +
60976 * @param {string} [string=''] The string to unescape. +
60977 * @returns {string} Returns the unescaped string. +
60978 * @example +
60979 * +
60980 * _.unescape('fred, barney, &amp; pebbles'); +
60981 * // => 'fred, barney, & pebbles' +
60982 */ +
60983 function unescape(string) { +
60984 string = toString(string); +
60985 return (string && reHasEscapedHtml.test(string)) +
60986 ? string.replace(reEscapedHtml, unescapeHtmlChar) +
60987 : string; +
60988 } +
60989 +
60990 /** +
60991 * Converts `string`, as space separated words, to upper case. +
60992 * +
60993 * @static +
60994 * @memberOf _ +
60995 * @since 4.0.0 +
60996 * @category String +
60997 * @param {string} [string=''] The string to convert. +
60998 * @returns {string} Returns the upper cased string. +
60999 * @example +
61000 * +
61001 * _.upperCase('--foo-bar'); +
61002 * // => 'FOO BAR' +
61003 * +
61004 * _.upperCase('fooBar'); +
61005 * // => 'FOO BAR' +
61006 * +
61007 * _.upperCase('__foo_bar__'); +
61008 * // => 'FOO BAR' +
61009 */ +
61010 var upperCase = createCompounder(function(result, word, index) { +
61011 return result + (index ? ' ' : '') + word.toUpperCase(); +
61012 }); +
61013 +
61014 /** +
61015 * Converts the first character of `string` to upper case. +
61016 * +
61017 * @static +
61018 * @memberOf _ +
61019 * @since 4.0.0 +
61020 * @category String +
61021 * @param {string} [string=''] The string to convert. +
61022 * @returns {string} Returns the converted string. +
61023 * @example +
61024 * +
61025 * _.upperFirst('fred'); +
61026 * // => 'Fred' +
61027 * +
61028 * _.upperFirst('FRED'); +
61029 * // => 'FRED' +
61030 */ +
61031 var upperFirst = createCaseFirst('toUpperCase'); +
61032 +
61033 /** +
61034 * Splits `string` into an array of its words. +
61035 * +
61036 * @static +
61037 * @memberOf _ +
61038 * @since 3.0.0 +
61039 * @category String +
61040 * @param {string} [string=''] The string to inspect. +
61041 * @param {RegExp|string} [pattern] The pattern to match words. +
61042 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
61043 * @returns {Array} Returns the words of `string`. +
61044 * @example +
61045 * +
61046 * _.words('fred, barney, & pebbles'); +
61047 * // => ['fred', 'barney', 'pebbles'] +
61048 * +
61049 * _.words('fred, barney, & pebbles', /[^, ]+/g); +
61050 * // => ['fred', 'barney', '&', 'pebbles'] +
61051 */ +
61052 function words(string, pattern, guard) { +
61053 string = toString(string); +
61054 pattern = guard ? undefined : pattern; +
61055 +
61056 if (pattern === undefined) { +
61057 return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); +
61058 } +
61059 return string.match(pattern) || []; +
61060 } +
61061 +
61062 /*------------------------------------------------------------------------*/ +
61063 +
61064 /** +
61065 * Attempts to invoke `func`, returning either the result or the caught error +
61066 * object. Any additional arguments are provided to `func` when it's invoked. +
61067 * +
61068 * @static +
61069 * @memberOf _ +
61070 * @since 3.0.0 +
61071 * @category Util +
61072 * @param {Function} func The function to attempt. +
61073 * @param {...*} [args] The arguments to invoke `func` with. +
61074 * @returns {*} Returns the `func` result or error object. +
61075 * @example +
61076 * +
61077 * // Avoid throwing errors for invalid selectors. +
61078 * var elements = _.attempt(function(selector) { +
61079 * return document.querySelectorAll(selector); +
61080 * }, '>_>'); +
61081 * +
61082 * if (_.isError(elements)) { +
61083 * elements = []; +
61084 * } +
61085 */ +
61086 var attempt = baseRest(function(func, args) { +
61087 try { +
61088 return apply(func, undefined, args); +
61089 } catch (e) { +
61090 return isError(e) ? e : new Error(e); +
61091 } +
61092 }); +
61093 +
61094 /** +
61095 * Binds methods of an object to the object itself, overwriting the existing +
61096 * method. +
61097 * +
61098 * **Note:** This method doesn't set the "length" property of bound functions. +
61099 * +
61100 * @static +
61101 * @since 0.1.0 +
61102 * @memberOf _ +
61103 * @category Util +
61104 * @param {Object} object The object to bind and assign the bound methods to. +
61105 * @param {...(string|string[])} methodNames The object method names to bind. +
61106 * @returns {Object} Returns `object`. +
61107 * @example +
61108 * +
61109 * var view = { +
61110 * 'label': 'docs', +
61111 * 'click': function() { +
61112 * console.log('clicked ' + this.label); +
61113 * } +
61114 * }; +
61115 * +
61116 * _.bindAll(view, ['click']); +
61117 * jQuery(element).on('click', view.click); +
61118 * // => Logs 'clicked docs' when clicked. +
61119 */ +
61120 var bindAll = flatRest(function(object, methodNames) { +
61121 arrayEach(methodNames, function(key) { +
61122 key = toKey(key); +
61123 baseAssignValue(object, key, bind(object[key], object)); +
61124 }); +
61125 return object; +
61126 }); +
61127 +
61128 /** +
61129 * Creates a function that iterates over `pairs` and invokes the corresponding +
61130 * function of the first predicate to return truthy. The predicate-function +
61131 * pairs are invoked with the `this` binding and arguments of the created +
61132 * function. +
61133 * +
61134 * @static +
61135 * @memberOf _ +
61136 * @since 4.0.0 +
61137 * @category Util +
61138 * @param {Array} pairs The predicate-function pairs. +
61139 * @returns {Function} Returns the new composite function. +
61140 * @example +
61141 * +
61142 * var func = _.cond([ +
61143 * [_.matches({ 'a': 1 }), _.constant('matches A')], +
61144 * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], +
61145 * [_.stubTrue, _.constant('no match')] +
61146 * ]); +
61147 * +
61148 * func({ 'a': 1, 'b': 2 }); +
61149 * // => 'matches A' +
61150 * +
61151 * func({ 'a': 0, 'b': 1 }); +
61152 * // => 'matches B' +
61153 * +
61154 * func({ 'a': '1', 'b': '2' }); +
61155 * // => 'no match' +
61156 */ +
61157 function cond(pairs) { +
61158 var length = pairs == null ? 0 : pairs.length, +
61159 toIteratee = getIteratee(); +
61160 +
61161 pairs = !length ? [] : arrayMap(pairs, function(pair) { +
61162 if (typeof pair[1] != 'function') { +
61163 throw new TypeError(FUNC_ERROR_TEXT); +
61164 } +
61165 return [toIteratee(pair[0]), pair[1]]; +
61166 }); +
61167 +
61168 return baseRest(function(args) { +
61169 var index = -1; +
61170 while (++index < length) { +
61171 var pair = pairs[index]; +
61172 if (apply(pair[0], this, args)) { +
61173 return apply(pair[1], this, args); +
61174 } +
61175 } +
61176 }); +
61177 } +
61178 +
61179 /** +
61180 * Creates a function that invokes the predicate properties of `source` with +
61181 * the corresponding property values of a given object, returning `true` if +
61182 * all predicates return truthy, else `false`. +
61183 * +
61184 * **Note:** The created function is equivalent to `_.conformsTo` with +
61185 * `source` partially applied. +
61186 * +
61187 * @static +
61188 * @memberOf _ +
61189 * @since 4.0.0 +
61190 * @category Util +
61191 * @param {Object} source The object of property predicates to conform to. +
61192 * @returns {Function} Returns the new spec function. +
61193 * @example +
61194 * +
61195 * var objects = [ +
61196 * { 'a': 2, 'b': 1 }, +
61197 * { 'a': 1, 'b': 2 } +
61198 * ]; +
61199 * +
61200 * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); +
61201 * // => [{ 'a': 1, 'b': 2 }] +
61202 */ +
61203 function conforms(source) { +
61204 return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); +
61205 } +
61206 +
61207 /** +
61208 * Creates a function that returns `value`. +
61209 * +
61210 * @static +
61211 * @memberOf _ +
61212 * @since 2.4.0 +
61213 * @category Util +
61214 * @param {*} value The value to return from the new function. +
61215 * @returns {Function} Returns the new constant function. +
61216 * @example +
61217 * +
61218 * var objects = _.times(2, _.constant({ 'a': 1 })); +
61219 * +
61220 * console.log(objects); +
61221 * // => [{ 'a': 1 }, { 'a': 1 }] +
61222 * +
61223 * console.log(objects[0] === objects[1]); +
61224 * // => true +
61225 */ +
61226 function constant(value) { +
61227 return function() { +
61228 return value; +
61229 }; +
61230 } +
61231 +
61232 /** +
61233 * Checks `value` to determine whether a default value should be returned in +
61234 * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, +
61235 * or `undefined`. +
61236 * +
61237 * @static +
61238 * @memberOf _ +
61239 * @since 4.14.0 +
61240 * @category Util +
61241 * @param {*} value The value to check. +
61242 * @param {*} defaultValue The default value. +
61243 * @returns {*} Returns the resolved value. +
61244 * @example +
61245 * +
61246 * _.defaultTo(1, 10); +
61247 * // => 1 +
61248 * +
61249 * _.defaultTo(undefined, 10); +
61250 * // => 10 +
61251 */ +
61252 function defaultTo(value, defaultValue) { +
61253 return (value == null || value !== value) ? defaultValue : value; +
61254 } +
61255 +
61256 /** +
61257 * Creates a function that returns the result of invoking the given functions +
61258 * with the `this` binding of the created function, where each successive +
61259 * invocation is supplied the return value of the previous. +
61260 * +
61261 * @static +
61262 * @memberOf _ +
61263 * @since 3.0.0 +
61264 * @category Util +
61265 * @param {...(Function|Function[])} [funcs] The functions to invoke. +
61266 * @returns {Function} Returns the new composite function. +
61267 * @see _.flowRight +
61268 * @example +
61269 * +
61270 * function square(n) { +
61271 * return n * n; +
61272 * } +
61273 * +
61274 * var addSquare = _.flow([_.add, square]); +
61275 * addSquare(1, 2); +
61276 * // => 9 +
61277 */ +
61278 var flow = createFlow(); +
61279 +
61280 /** +
61281 * This method is like `_.flow` except that it creates a function that +
61282 * invokes the given functions from right to left. +
61283 * +
61284 * @static +
61285 * @since 3.0.0 +
61286 * @memberOf _ +
61287 * @category Util +
61288 * @param {...(Function|Function[])} [funcs] The functions to invoke. +
61289 * @returns {Function} Returns the new composite function. +
61290 * @see _.flow +
61291 * @example +
61292 * +
61293 * function square(n) { +
61294 * return n * n; +
61295 * } +
61296 * +
61297 * var addSquare = _.flowRight([square, _.add]); +
61298 * addSquare(1, 2); +
61299 * // => 9 +
61300 */ +
61301 var flowRight = createFlow(true); +
61302 +
61303 /** +
61304 * This method returns the first argument it receives. +
61305 * +
61306 * @static +
61307 * @since 0.1.0 +
61308 * @memberOf _ +
61309 * @category Util +
61310 * @param {*} value Any value. +
61311 * @returns {*} Returns `value`. +
61312 * @example +
61313 * +
61314 * var object = { 'a': 1 }; +
61315 * +
61316 * console.log(_.identity(object) === object); +
61317 * // => true +
61318 */ +
61319 function identity(value) { +
61320 return value; +
61321 } +
61322 +
61323 /** +
61324 * Creates a function that invokes `func` with the arguments of the created +
61325 * function. If `func` is a property name, the created function returns the +
61326 * property value for a given element. If `func` is an array or object, the +
61327 * created function returns `true` for elements that contain the equivalent +
61328 * source properties, otherwise it returns `false`. +
61329 * +
61330 * @static +
61331 * @since 4.0.0 +
61332 * @memberOf _ +
61333 * @category Util +
61334 * @param {*} [func=_.identity] The value to convert to a callback. +
61335 * @returns {Function} Returns the callback. +
61336 * @example +
61337 * +
61338 * var users = [ +
61339 * { 'user': 'barney', 'age': 36, 'active': true }, +
61340 * { 'user': 'fred', 'age': 40, 'active': false } +
61341 * ]; +
61342 * +
61343 * // The `_.matches` iteratee shorthand. +
61344 * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); +
61345 * // => [{ 'user': 'barney', 'age': 36, 'active': true }] +
61346 * +
61347 * // The `_.matchesProperty` iteratee shorthand. +
61348 * _.filter(users, _.iteratee(['user', 'fred'])); +
61349 * // => [{ 'user': 'fred', 'age': 40 }] +
61350 * +
61351 * // The `_.property` iteratee shorthand. +
61352 * _.map(users, _.iteratee('user')); +
61353 * // => ['barney', 'fred'] +
61354 * +
61355 * // Create custom iteratee shorthands. +
61356 * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { +
61357 * return !_.isRegExp(func) ? iteratee(func) : function(string) { +
61358 * return func.test(string); +
61359 * }; +
61360 * }); +
61361 * +
61362 * _.filter(['abc', 'def'], /ef/); +
61363 * // => ['def'] +
61364 */ +
61365 function iteratee(func) { +
61366 return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); +
61367 } +
61368 +
61369 /** +
61370 * Creates a function that performs a partial deep comparison between a given +
61371 * object and `source`, returning `true` if the given object has equivalent +
61372 * property values, else `false`. +
61373 * +
61374 * **Note:** The created function is equivalent to `_.isMatch` with `source` +
61375 * partially applied. +
61376 * +
61377 * Partial comparisons will match empty array and empty object `source` +
61378 * values against any array or object value, respectively. See `_.isEqual` +
61379 * for a list of supported value comparisons. +
61380 * +
61381 * @static +
61382 * @memberOf _ +
61383 * @since 3.0.0 +
61384 * @category Util +
61385 * @param {Object} source The object of property values to match. +
61386 * @returns {Function} Returns the new spec function. +
61387 * @example +
61388 * +
61389 * var objects = [ +
61390 * { 'a': 1, 'b': 2, 'c': 3 }, +
61391 * { 'a': 4, 'b': 5, 'c': 6 } +
61392 * ]; +
61393 * +
61394 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); +
61395 * // => [{ 'a': 4, 'b': 5, 'c': 6 }] +
61396 */ +
61397 function matches(source) { +
61398 return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); +
61399 } +
61400 +
61401 /** +
61402 * Creates a function that performs a partial deep comparison between the +
61403 * value at `path` of a given object to `srcValue`, returning `true` if the +
61404 * object value is equivalent, else `false`. +
61405 * +
61406 * **Note:** Partial comparisons will match empty array and empty object +
61407 * `srcValue` values against any array or object value, respectively. See +
61408 * `_.isEqual` for a list of supported value comparisons. +
61409 * +
61410 * @static +
61411 * @memberOf _ +
61412 * @since 3.2.0 +
61413 * @category Util +
61414 * @param {Array|string} path The path of the property to get. +
61415 * @param {*} srcValue The value to match. +
61416 * @returns {Function} Returns the new spec function. +
61417 * @example +
61418 * +
61419 * var objects = [ +
61420 * { 'a': 1, 'b': 2, 'c': 3 }, +
61421 * { 'a': 4, 'b': 5, 'c': 6 } +
61422 * ]; +
61423 * +
61424 * _.find(objects, _.matchesProperty('a', 4)); +
61425 * // => { 'a': 4, 'b': 5, 'c': 6 } +
61426 */ +
61427 function matchesProperty(path, srcValue) { +
61428 return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); +
61429 } +
61430 +
61431 /** +
61432 * Creates a function that invokes the method at `path` of a given object. +
61433 * Any additional arguments are provided to the invoked method. +
61434 * +
61435 * @static +
61436 * @memberOf _ +
61437 * @since 3.7.0 +
61438 * @category Util +
61439 * @param {Array|string} path The path of the method to invoke. +
61440 * @param {...*} [args] The arguments to invoke the method with. +
61441 * @returns {Function} Returns the new invoker function. +
61442 * @example +
61443 * +
61444 * var objects = [ +
61445 * { 'a': { 'b': _.constant(2) } }, +
61446 * { 'a': { 'b': _.constant(1) } } +
61447 * ]; +
61448 * +
61449 * _.map(objects, _.method('a.b')); +
61450 * // => [2, 1] +
61451 * +
61452 * _.map(objects, _.method(['a', 'b'])); +
61453 * // => [2, 1] +
61454 */ +
61455 var method = baseRest(function(path, args) { +
61456 return function(object) { +
61457 return baseInvoke(object, path, args); +
61458 }; +
61459 }); +
61460 +
61461 /** +
61462 * The opposite of `_.method`; this method creates a function that invokes +
61463 * the method at a given path of `object`. Any additional arguments are +
61464 * provided to the invoked method. +
61465 * +
61466 * @static +
61467 * @memberOf _ +
61468 * @since 3.7.0 +
61469 * @category Util +
61470 * @param {Object} object The object to query. +
61471 * @param {...*} [args] The arguments to invoke the method with. +
61472 * @returns {Function} Returns the new invoker function. +
61473 * @example +
61474 * +
61475 * var array = _.times(3, _.constant), +
61476 * object = { 'a': array, 'b': array, 'c': array }; +
61477 * +
61478 * _.map(['a[2]', 'c[0]'], _.methodOf(object)); +
61479 * // => [2, 0] +
61480 * +
61481 * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); +
61482 * // => [2, 0] +
61483 */ +
61484 var methodOf = baseRest(function(object, args) { +
61485 return function(path) { +
61486 return baseInvoke(object, path, args); +
61487 }; +
61488 }); +
61489 +
61490 /** +
61491 * Adds all own enumerable string keyed function properties of a source +
61492 * object to the destination object. If `object` is a function, then methods +
61493 * are added to its prototype as well. +
61494 * +
61495 * **Note:** Use `_.runInContext` to create a pristine `lodash` function to +
61496 * avoid conflicts caused by modifying the original. +
61497 * +
61498 * @static +
61499 * @since 0.1.0 +
61500 * @memberOf _ +
61501 * @category Util +
61502 * @param {Function|Object} [object=lodash] The destination object. +
61503 * @param {Object} source The object of functions to add. +
61504 * @param {Object} [options={}] The options object. +
61505 * @param {boolean} [options.chain=true] Specify whether mixins are chainable. +
61506 * @returns {Function|Object} Returns `object`. +
61507 * @example +
61508 * +
61509 * function vowels(string) { +
61510 * return _.filter(string, function(v) { +
61511 * return /[aeiou]/i.test(v); +
61512 * }); +
61513 * } +
61514 * +
61515 * _.mixin({ 'vowels': vowels }); +
61516 * _.vowels('fred'); +
61517 * // => ['e'] +
61518 * +
61519 * _('fred').vowels().value(); +
61520 * // => ['e'] +
61521 * +
61522 * _.mixin({ 'vowels': vowels }, { 'chain': false }); +
61523 * _('fred').vowels(); +
61524 * // => ['e'] +
61525 */ +
61526 function mixin(object, source, options) { +
61527 var props = keys(source), +
61528 methodNames = baseFunctions(source, props); +
61529 +
61530 if (options == null && +
61531 !(isObject(source) && (methodNames.length || !props.length))) { +
61532 options = source; +
61533 source = object; +
61534 object = this; +
61535 methodNames = baseFunctions(source, keys(source)); +
61536 } +
61537 var chain = !(isObject(options) && 'chain' in options) || !!options.chain, +
61538 isFunc = isFunction(object); +
61539 +
61540 arrayEach(methodNames, function(methodName) { +
61541 var func = source[methodName]; +
61542 object[methodName] = func; +
61543 if (isFunc) { +
61544 object.prototype[methodName] = function() { +
61545 var chainAll = this.__chain__; +
61546 if (chain || chainAll) { +
61547 var result = object(this.__wrapped__), +
61548 actions = result.__actions__ = copyArray(this.__actions__); +
61549 +
61550 actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); +
61551 result.__chain__ = chainAll; +
61552 return result; +
61553 } +
61554 return func.apply(object, arrayPush([this.value()], arguments)); +
61555 }; +
61556 } +
61557 }); +
61558 +
61559 return object; +
61560 } +
61561 +
61562 /** +
61563 * Reverts the `_` variable to its previous value and returns a reference to +
61564 * the `lodash` function. +
61565 * +
61566 * @static +
61567 * @since 0.1.0 +
61568 * @memberOf _ +
61569 * @category Util +
61570 * @returns {Function} Returns the `lodash` function. +
61571 * @example +
61572 * +
61573 * var lodash = _.noConflict(); +
61574 */ +
61575 function noConflict() { +
61576 if (root._ === this) { +
61577 root._ = oldDash; +
61578 } +
61579 return this; +
61580 } +
61581 +
61582 /** +
61583 * This method returns `undefined`. +
61584 * +
61585 * @static +
61586 * @memberOf _ +
61587 * @since 2.3.0 +
61588 * @category Util +
61589 * @example +
61590 * +
61591 * _.times(2, _.noop); +
61592 * // => [undefined, undefined] +
61593 */ +
61594 function noop() { +
61595 // No operation performed. +
61596 } +
61597 +
61598 /** +
61599 * Creates a function that gets the argument at index `n`. If `n` is negative, +
61600 * the nth argument from the end is returned. +
61601 * +
61602 * @static +
61603 * @memberOf _ +
61604 * @since 4.0.0 +
61605 * @category Util +
61606 * @param {number} [n=0] The index of the argument to return. +
61607 * @returns {Function} Returns the new pass-thru function. +
61608 * @example +
61609 * +
61610 * var func = _.nthArg(1); +
61611 * func('a', 'b', 'c', 'd'); +
61612 * // => 'b' +
61613 * +
61614 * var func = _.nthArg(-2); +
61615 * func('a', 'b', 'c', 'd'); +
61616 * // => 'c' +
61617 */ +
61618 function nthArg(n) { +
61619 n = toInteger(n); +
61620 return baseRest(function(args) { +
61621 return baseNth(args, n); +
61622 }); +
61623 } +
61624 +
61625 /** +
61626 * Creates a function that invokes `iteratees` with the arguments it receives +
61627 * and returns their results. +
61628 * +
61629 * @static +
61630 * @memberOf _ +
61631 * @since 4.0.0 +
61632 * @category Util +
61633 * @param {...(Function|Function[])} [iteratees=[_.identity]] +
61634 * The iteratees to invoke. +
61635 * @returns {Function} Returns the new function. +
61636 * @example +
61637 * +
61638 * var func = _.over([Math.max, Math.min]); +
61639 * +
61640 * func(1, 2, 3, 4); +
61641 * // => [4, 1] +
61642 */ +
61643 var over = createOver(arrayMap); +
61644 +
61645 /** +
61646 * Creates a function that checks if **all** of the `predicates` return +
61647 * truthy when invoked with the arguments it receives. +
61648 * +
61649 * @static +
61650 * @memberOf _ +
61651 * @since 4.0.0 +
61652 * @category Util +
61653 * @param {...(Function|Function[])} [predicates=[_.identity]] +
61654 * The predicates to check. +
61655 * @returns {Function} Returns the new function. +
61656 * @example +
61657 * +
61658 * var func = _.overEvery([Boolean, isFinite]); +
61659 * +
61660 * func('1'); +
61661 * // => true +
61662 * +
61663 * func(null); +
61664 * // => false +
61665 * +
61666 * func(NaN); +
61667 * // => false +
61668 */ +
61669 var overEvery = createOver(arrayEvery); +
61670 +
61671 /** +
61672 * Creates a function that checks if **any** of the `predicates` return +
61673 * truthy when invoked with the arguments it receives. +
61674 * +
61675 * @static +
61676 * @memberOf _ +
61677 * @since 4.0.0 +
61678 * @category Util +
61679 * @param {...(Function|Function[])} [predicates=[_.identity]] +
61680 * The predicates to check. +
61681 * @returns {Function} Returns the new function. +
61682 * @example +
61683 * +
61684 * var func = _.overSome([Boolean, isFinite]); +
61685 * +
61686 * func('1'); +
61687 * // => true +
61688 * +
61689 * func(null); +
61690 * // => true +
61691 * +
61692 * func(NaN); +
61693 * // => false +
61694 */ +
61695 var overSome = createOver(arraySome); +
61696 +
61697 /** +
61698 * Creates a function that returns the value at `path` of a given object. +
61699 * +
61700 * @static +
61701 * @memberOf _ +
61702 * @since 2.4.0 +
61703 * @category Util +
61704 * @param {Array|string} path The path of the property to get. +
61705 * @returns {Function} Returns the new accessor function. +
61706 * @example +
61707 * +
61708 * var objects = [ +
61709 * { 'a': { 'b': 2 } }, +
61710 * { 'a': { 'b': 1 } } +
61711 * ]; +
61712 * +
61713 * _.map(objects, _.property('a.b')); +
61714 * // => [2, 1] +
61715 * +
61716 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); +
61717 * // => [1, 2] +
61718 */ +
61719 function property(path) { +
61720 return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +
61721 } +
61722 +
61723 /** +
61724 * The opposite of `_.property`; this method creates a function that returns +
61725 * the value at a given path of `object`. +
61726 * +
61727 * @static +
61728 * @memberOf _ +
61729 * @since 3.0.0 +
61730 * @category Util +
61731 * @param {Object} object The object to query. +
61732 * @returns {Function} Returns the new accessor function. +
61733 * @example +
61734 * +
61735 * var array = [0, 1, 2], +
61736 * object = { 'a': array, 'b': array, 'c': array }; +
61737 * +
61738 * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); +
61739 * // => [2, 0] +
61740 * +
61741 * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); +
61742 * // => [2, 0] +
61743 */ +
61744 function propertyOf(object) { +
61745 return function(path) { +
61746 return object == null ? undefined : baseGet(object, path); +
61747 }; +
61748 } +
61749 +
61750 /** +
61751 * Creates an array of numbers (positive and/or negative) progressing from +
61752 * `start` up to, but not including, `end`. A step of `-1` is used if a negative +
61753 * `start` is specified without an `end` or `step`. If `end` is not specified, +
61754 * it's set to `start` with `start` then set to `0`. +
61755 * +
61756 * **Note:** JavaScript follows the IEEE-754 standard for resolving +
61757 * floating-point values which can produce unexpected results. +
61758 * +
61759 * @static +
61760 * @since 0.1.0 +
61761 * @memberOf _ +
61762 * @category Util +
61763 * @param {number} [start=0] The start of the range. +
61764 * @param {number} end The end of the range. +
61765 * @param {number} [step=1] The value to increment or decrement by. +
61766 * @returns {Array} Returns the range of numbers. +
61767 * @see _.inRange, _.rangeRight +
61768 * @example +
61769 * +
61770 * _.range(4); +
61771 * // => [0, 1, 2, 3] +
61772 * +
61773 * _.range(-4); +
61774 * // => [0, -1, -2, -3] +
61775 * +
61776 * _.range(1, 5); +
61777 * // => [1, 2, 3, 4] +
61778 * +
61779 * _.range(0, 20, 5); +
61780 * // => [0, 5, 10, 15] +
61781 * +
61782 * _.range(0, -4, -1); +
61783 * // => [0, -1, -2, -3] +
61784 * +
61785 * _.range(1, 4, 0); +
61786 * // => [1, 1, 1] +
61787 * +
61788 * _.range(0); +
61789 * // => [] +
61790 */ +
61791 var range = createRange(); +
61792 +
61793 /** +
61794 * This method is like `_.range` except that it populates values in +
61795 * descending order. +
61796 * +
61797 * @static +
61798 * @memberOf _ +
61799 * @since 4.0.0 +
61800 * @category Util +
61801 * @param {number} [start=0] The start of the range. +
61802 * @param {number} end The end of the range. +
61803 * @param {number} [step=1] The value to increment or decrement by. +
61804 * @returns {Array} Returns the range of numbers. +
61805 * @see _.inRange, _.range +
61806 * @example +
61807 * +
61808 * _.rangeRight(4); +
61809 * // => [3, 2, 1, 0] +
61810 * +
61811 * _.rangeRight(-4); +
61812 * // => [-3, -2, -1, 0] +
61813 * +
61814 * _.rangeRight(1, 5); +
61815 * // => [4, 3, 2, 1] +
61816 * +
61817 * _.rangeRight(0, 20, 5); +
61818 * // => [15, 10, 5, 0] +
61819 * +
61820 * _.rangeRight(0, -4, -1); +
61821 * // => [-3, -2, -1, 0] +
61822 * +
61823 * _.rangeRight(1, 4, 0); +
61824 * // => [1, 1, 1] +
61825 * +
61826 * _.rangeRight(0); +
61827 * // => [] +
61828 */ +
61829 var rangeRight = createRange(true); +
61830 +
61831 /** +
61832 * This method returns a new empty array. +
61833 * +
61834 * @static +
61835 * @memberOf _ +
61836 * @since 4.13.0 +
61837 * @category Util +
61838 * @returns {Array} Returns the new empty array. +
61839 * @example +
61840 * +
61841 * var arrays = _.times(2, _.stubArray); +
61842 * +
61843 * console.log(arrays); +
61844 * // => [[], []] +
61845 * +
61846 * console.log(arrays[0] === arrays[1]); +
61847 * // => false +
61848 */ +
61849 function stubArray() { +
61850 return []; +
61851 } +
61852 +
61853 /** +
61854 * This method returns `false`. +
61855 * +
61856 * @static +
61857 * @memberOf _ +
61858 * @since 4.13.0 +
61859 * @category Util +
61860 * @returns {boolean} Returns `false`. +
61861 * @example +
61862 * +
61863 * _.times(2, _.stubFalse); +
61864 * // => [false, false] +
61865 */ +
61866 function stubFalse() { +
61867 return false; +
61868 } +
61869 +
61870 /** +
61871 * This method returns a new empty object. +
61872 * +
61873 * @static +
61874 * @memberOf _ +
61875 * @since 4.13.0 +
61876 * @category Util +
61877 * @returns {Object} Returns the new empty object. +
61878 * @example +
61879 * +
61880 * var objects = _.times(2, _.stubObject); +
61881 * +
61882 * console.log(objects); +
61883 * // => [{}, {}] +
61884 * +
61885 * console.log(objects[0] === objects[1]); +
61886 * // => false +
61887 */ +
61888 function stubObject() { +
61889 return {}; +
61890 } +
61891 +
61892 /** +
61893 * This method returns an empty string. +
61894 * +
61895 * @static +
61896 * @memberOf _ +
61897 * @since 4.13.0 +
61898 * @category Util +
61899 * @returns {string} Returns the empty string. +
61900 * @example +
61901 * +
61902 * _.times(2, _.stubString); +
61903 * // => ['', ''] +
61904 */ +
61905 function stubString() { +
61906 return ''; +
61907 } +
61908 +
61909 /** +
61910 * This method returns `true`. +
61911 * +
61912 * @static +
61913 * @memberOf _ +
61914 * @since 4.13.0 +
61915 * @category Util +
61916 * @returns {boolean} Returns `true`. +
61917 * @example +
61918 * +
61919 * _.times(2, _.stubTrue); +
61920 * // => [true, true] +
61921 */ +
61922 function stubTrue() { +
61923 return true; +
61924 } +
61925 +
61926 /** +
61927 * Invokes the iteratee `n` times, returning an array of the results of +
61928 * each invocation. The iteratee is invoked with one argument; (index). +
61929 * +
61930 * @static +
61931 * @since 0.1.0 +
61932 * @memberOf _ +
61933 * @category Util +
61934 * @param {number} n The number of times to invoke `iteratee`. +
61935 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
61936 * @returns {Array} Returns the array of results. +
61937 * @example +
61938 * +
61939 * _.times(3, String); +
61940 * // => ['0', '1', '2'] +
61941 * +
61942 * _.times(4, _.constant(0)); +
61943 * // => [0, 0, 0, 0] +
61944 */ +
61945 function times(n, iteratee) { +
61946 n = toInteger(n); +
61947 if (n < 1 || n > MAX_SAFE_INTEGER) { +
61948 return []; +
61949 } +
61950 var index = MAX_ARRAY_LENGTH, +
61951 length = nativeMin(n, MAX_ARRAY_LENGTH); +
61952 +
61953 iteratee = getIteratee(iteratee); +
61954 n -= MAX_ARRAY_LENGTH; +
61955 +
61956 var result = baseTimes(length, iteratee); +
61957 while (++index < n) { +
61958 iteratee(index); +
61959 } +
61960 return result; +
61961 } +
61962 +
61963 /** +
61964 * Converts `value` to a property path array. +
61965 * +
61966 * @static +
61967 * @memberOf _ +
61968 * @since 4.0.0 +
61969 * @category Util +
61970 * @param {*} value The value to convert. +
61971 * @returns {Array} Returns the new property path array. +
61972 * @example +
61973 * +
61974 * _.toPath('a.b.c'); +
61975 * // => ['a', 'b', 'c'] +
61976 * +
61977 * _.toPath('a[0].b.c'); +
61978 * // => ['a', '0', 'b', 'c'] +
61979 */ +
61980 function toPath(value) { +
61981 if (isArray(value)) { +
61982 return arrayMap(value, toKey); +
61983 } +
61984 return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); +
61985 } +
61986 +
61987 /** +
61988 * Generates a unique ID. If `prefix` is given, the ID is appended to it. +
61989 * +
61990 * @static +
61991 * @since 0.1.0 +
61992 * @memberOf _ +
61993 * @category Util +
61994 * @param {string} [prefix=''] The value to prefix the ID with. +
61995 * @returns {string} Returns the unique ID. +
61996 * @example +
61997 * +
61998 * _.uniqueId('contact_'); +
61999 * // => 'contact_104' +
62000 * +
62001 * _.uniqueId(); +
62002 * // => '105' +
62003 */ +
62004 function uniqueId(prefix) { +
62005 var id = ++idCounter; +
62006 return toString(prefix) + id; +
62007 } +
62008 +
62009 /*------------------------------------------------------------------------*/ +
62010 +
62011 /** +
62012 * Adds two numbers. +
62013 * +
62014 * @static +
62015 * @memberOf _ +
62016 * @since 3.4.0 +
62017 * @category Math +
62018 * @param {number} augend The first number in an addition. +
62019 * @param {number} addend The second number in an addition. +
62020 * @returns {number} Returns the total. +
62021 * @example +
62022 * +
62023 * _.add(6, 4); +
62024 * // => 10 +
62025 */ +
62026 var add = createMathOperation(function(augend, addend) { +
62027 return augend + addend; +
62028 }, 0); +
62029 +
62030 /** +
62031 * Computes `number` rounded up to `precision`. +
62032 * +
62033 * @static +
62034 * @memberOf _ +
62035 * @since 3.10.0 +
62036 * @category Math +
62037 * @param {number} number The number to round up. +
62038 * @param {number} [precision=0] The precision to round up to. +
62039 * @returns {number} Returns the rounded up number. +
62040 * @example +
62041 * +
62042 * _.ceil(4.006); +
62043 * // => 5 +
62044 * +
62045 * _.ceil(6.004, 2); +
62046 * // => 6.01 +
62047 * +
62048 * _.ceil(6040, -2); +
62049 * // => 6100 +
62050 */ +
62051 var ceil = createRound('ceil'); +
62052 +
62053 /** +
62054 * Divide two numbers. +
62055 * +
62056 * @static +
62057 * @memberOf _ +
62058 * @since 4.7.0 +
62059 * @category Math +
62060 * @param {number} dividend The first number in a division. +
62061 * @param {number} divisor The second number in a division. +
62062 * @returns {number} Returns the quotient. +
62063 * @example +
62064 * +
62065 * _.divide(6, 4); +
62066 * // => 1.5 +
62067 */ +
62068 var divide = createMathOperation(function(dividend, divisor) { +
62069 return dividend / divisor; +
62070 }, 1); +
62071 +
62072 /** +
62073 * Computes `number` rounded down to `precision`. +
62074 * +
62075 * @static +
62076 * @memberOf _ +
62077 * @since 3.10.0 +
62078 * @category Math +
62079 * @param {number} number The number to round down. +
62080 * @param {number} [precision=0] The precision to round down to. +
62081 * @returns {number} Returns the rounded down number. +
62082 * @example +
62083 * +
62084 * _.floor(4.006); +
62085 * // => 4 +
62086 * +
62087 * _.floor(0.046, 2); +
62088 * // => 0.04 +
62089 * +
62090 * _.floor(4060, -2); +
62091 * // => 4000 +
62092 */ +
62093 var floor = createRound('floor'); +
62094 +
62095 /** +
62096 * Computes the maximum value of `array`. If `array` is empty or falsey, +
62097 * `undefined` is returned. +
62098 * +
62099 * @static +
62100 * @since 0.1.0 +
62101 * @memberOf _ +
62102 * @category Math +
62103 * @param {Array} array The array to iterate over. +
62104 * @returns {*} Returns the maximum value. +
62105 * @example +
62106 * +
62107 * _.max([4, 2, 8, 6]); +
62108 * // => 8 +
62109 * +
62110 * _.max([]); +
62111 * // => undefined +
62112 */ +
62113 function max(array) { +
62114 return (array && array.length) +
62115 ? baseExtremum(array, identity, baseGt) +
62116 : undefined; +
62117 } +
62118 +
62119 /** +
62120 * This method is like `_.max` except that it accepts `iteratee` which is +
62121 * invoked for each element in `array` to generate the criterion by which +
62122 * the value is ranked. The iteratee is invoked with one argument: (value). +
62123 * +
62124 * @static +
62125 * @memberOf _ +
62126 * @since 4.0.0 +
62127 * @category Math +
62128 * @param {Array} array The array to iterate over. +
62129 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
62130 * @returns {*} Returns the maximum value. +
62131 * @example +
62132 * +
62133 * var objects = [{ 'n': 1 }, { 'n': 2 }]; +
62134 * +
62135 * _.maxBy(objects, function(o) { return o.n; }); +
62136 * // => { 'n': 2 } +
62137 * +
62138 * // The `_.property` iteratee shorthand. +
62139 * _.maxBy(objects, 'n'); +
62140 * // => { 'n': 2 } +
62141 */ +
62142 function maxBy(array, iteratee) { +
62143 return (array && array.length) +
62144 ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) +
62145 : undefined; +
62146 } +
62147 +
62148 /** +
62149 * Computes the mean of the values in `array`. +
62150 * +
62151 * @static +
62152 * @memberOf _ +
62153 * @since 4.0.0 +
62154 * @category Math +
62155 * @param {Array} array The array to iterate over. +
62156 * @returns {number} Returns the mean. +
62157 * @example +
62158 * +
62159 * _.mean([4, 2, 8, 6]); +
62160 * // => 5 +
62161 */ +
62162 function mean(array) { +
62163 return baseMean(array, identity); +
62164 } +
62165 +
62166 /** +
62167 * This method is like `_.mean` except that it accepts `iteratee` which is +
62168 * invoked for each element in `array` to generate the value to be averaged. +
62169 * The iteratee is invoked with one argument: (value). +
62170 * +
62171 * @static +
62172 * @memberOf _ +
62173 * @since 4.7.0 +
62174 * @category Math +
62175 * @param {Array} array The array to iterate over. +
62176 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
62177 * @returns {number} Returns the mean. +
62178 * @example +
62179 * +
62180 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +
62181 * +
62182 * _.meanBy(objects, function(o) { return o.n; }); +
62183 * // => 5 +
62184 * +
62185 * // The `_.property` iteratee shorthand. +
62186 * _.meanBy(objects, 'n'); +
62187 * // => 5 +
62188 */ +
62189 function meanBy(array, iteratee) { +
62190 return baseMean(array, getIteratee(iteratee, 2)); +
62191 } +
62192 +
62193 /** +
62194 * Computes the minimum value of `array`. If `array` is empty or falsey, +
62195 * `undefined` is returned. +
62196 * +
62197 * @static +
62198 * @since 0.1.0 +
62199 * @memberOf _ +
62200 * @category Math +
62201 * @param {Array} array The array to iterate over. +
62202 * @returns {*} Returns the minimum value. +
62203 * @example +
62204 * +
62205 * _.min([4, 2, 8, 6]); +
62206 * // => 2 +
62207 * +
62208 * _.min([]); +
62209 * // => undefined +
62210 */ +
62211 function min(array) { +
62212 return (array && array.length) +
62213 ? baseExtremum(array, identity, baseLt) +
62214 : undefined; +
62215 } +
62216 +
62217 /** +
62218 * This method is like `_.min` except that it accepts `iteratee` which is +
62219 * invoked for each element in `array` to generate the criterion by which +
62220 * the value is ranked. The iteratee is invoked with one argument: (value). +
62221 * +
62222 * @static +
62223 * @memberOf _ +
62224 * @since 4.0.0 +
62225 * @category Math +
62226 * @param {Array} array The array to iterate over. +
62227 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
62228 * @returns {*} Returns the minimum value. +
62229 * @example +
62230 * +
62231 * var objects = [{ 'n': 1 }, { 'n': 2 }]; +
62232 * +
62233 * _.minBy(objects, function(o) { return o.n; }); +
62234 * // => { 'n': 1 } +
62235 * +
62236 * // The `_.property` iteratee shorthand. +
62237 * _.minBy(objects, 'n'); +
62238 * // => { 'n': 1 } +
62239 */ +
62240 function minBy(array, iteratee) { +
62241 return (array && array.length) +
62242 ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) +
62243 : undefined; +
62244 } +
62245 +
62246 /** +
62247 * Multiply two numbers. +
62248 * +
62249 * @static +
62250 * @memberOf _ +
62251 * @since 4.7.0 +
62252 * @category Math +
62253 * @param {number} multiplier The first number in a multiplication. +
62254 * @param {number} multiplicand The second number in a multiplication. +
62255 * @returns {number} Returns the product. +
62256 * @example +
62257 * +
62258 * _.multiply(6, 4); +
62259 * // => 24 +
62260 */ +
62261 var multiply = createMathOperation(function(multiplier, multiplicand) { +
62262 return multiplier * multiplicand; +
62263 }, 1); +
62264 +
62265 /** +
62266 * Computes `number` rounded to `precision`. +
62267 * +
62268 * @static +
62269 * @memberOf _ +
62270 * @since 3.10.0 +
62271 * @category Math +
62272 * @param {number} number The number to round. +
62273 * @param {number} [precision=0] The precision to round to. +
62274 * @returns {number} Returns the rounded number. +
62275 * @example +
62276 * +
62277 * _.round(4.006); +
62278 * // => 4 +
62279 * +
62280 * _.round(4.006, 2); +
62281 * // => 4.01 +
62282 * +
62283 * _.round(4060, -2); +
62284 * // => 4100 +
62285 */ +
62286 var round = createRound('round'); +
62287 +
62288 /** +
62289 * Subtract two numbers. +
62290 * +
62291 * @static +
62292 * @memberOf _ +
62293 * @since 4.0.0 +
62294 * @category Math +
62295 * @param {number} minuend The first number in a subtraction. +
62296 * @param {number} subtrahend The second number in a subtraction. +
62297 * @returns {number} Returns the difference. +
62298 * @example +
62299 * +
62300 * _.subtract(6, 4); +
62301 * // => 2 +
62302 */ +
62303 var subtract = createMathOperation(function(minuend, subtrahend) { +
62304 return minuend - subtrahend; +
62305 }, 0); +
62306 +
62307 /** +
62308 * Computes the sum of the values in `array`. +
62309 * +
62310 * @static +
62311 * @memberOf _ +
62312 * @since 3.4.0 +
62313 * @category Math +
62314 * @param {Array} array The array to iterate over. +
62315 * @returns {number} Returns the sum. +
62316 * @example +
62317 * +
62318 * _.sum([4, 2, 8, 6]); +
62319 * // => 20 +
62320 */ +
62321 function sum(array) { +
62322 return (array && array.length) +
62323 ? baseSum(array, identity) +
62324 : 0; +
62325 } +
62326 +
62327 /** +
62328 * This method is like `_.sum` except that it accepts `iteratee` which is +
62329 * invoked for each element in `array` to generate the value to be summed. +
62330 * The iteratee is invoked with one argument: (value). +
62331 * +
62332 * @static +
62333 * @memberOf _ +
62334 * @since 4.0.0 +
62335 * @category Math +
62336 * @param {Array} array The array to iterate over. +
62337 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
62338 * @returns {number} Returns the sum. +
62339 * @example +
62340 * +
62341 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +
62342 * +
62343 * _.sumBy(objects, function(o) { return o.n; }); +
62344 * // => 20 +
62345 * +
62346 * // The `_.property` iteratee shorthand. +
62347 * _.sumBy(objects, 'n'); +
62348 * // => 20 +
62349 */ +
62350 function sumBy(array, iteratee) { +
62351 return (array && array.length) +
62352 ? baseSum(array, getIteratee(iteratee, 2)) +
62353 : 0; +
62354 } +
62355 +
62356 /*------------------------------------------------------------------------*/ +
62357 +
62358 // Add methods that return wrapped values in chain sequences. +
62359 lodash.after = after; +
62360 lodash.ary = ary; +
62361 lodash.assign = assign; +
62362 lodash.assignIn = assignIn; +
62363 lodash.assignInWith = assignInWith; +
62364 lodash.assignWith = assignWith; +
62365 lodash.at = at; +
62366 lodash.before = before; +
62367 lodash.bind = bind; +
62368 lodash.bindAll = bindAll; +
62369 lodash.bindKey = bindKey; +
62370 lodash.castArray = castArray; +
62371 lodash.chain = chain; +
62372 lodash.chunk = chunk; +
62373 lodash.compact = compact; +
62374 lodash.concat = concat; +
62375 lodash.cond = cond; +
62376 lodash.conforms = conforms; +
62377 lodash.constant = constant; +
62378 lodash.countBy = countBy; +
62379 lodash.create = create; +
62380 lodash.curry = curry; +
62381 lodash.curryRight = curryRight; +
62382 lodash.debounce = debounce; +
62383 lodash.defaults = defaults; +
62384 lodash.defaultsDeep = defaultsDeep; +
62385 lodash.defer = defer; +
62386 lodash.delay = delay; +
62387 lodash.difference = difference; +
62388 lodash.differenceBy = differenceBy; +
62389 lodash.differenceWith = differenceWith; +
62390 lodash.drop = drop; +
62391 lodash.dropRight = dropRight; +
62392 lodash.dropRightWhile = dropRightWhile; +
62393 lodash.dropWhile = dropWhile; +
62394 lodash.fill = fill; +
62395 lodash.filter = filter; +
62396 lodash.flatMap = flatMap; +
62397 lodash.flatMapDeep = flatMapDeep; +
62398 lodash.flatMapDepth = flatMapDepth; +
62399 lodash.flatten = flatten; +
62400 lodash.flattenDeep = flattenDeep; +
62401 lodash.flattenDepth = flattenDepth; +
62402 lodash.flip = flip; +
62403 lodash.flow = flow; +
62404 lodash.flowRight = flowRight; +
62405 lodash.fromPairs = fromPairs; +
62406 lodash.functions = functions; +
62407 lodash.functionsIn = functionsIn; +
62408 lodash.groupBy = groupBy; +
62409 lodash.initial = initial; +
62410 lodash.intersection = intersection; +
62411 lodash.intersectionBy = intersectionBy; +
62412 lodash.intersectionWith = intersectionWith; +
62413 lodash.invert = invert; +
62414 lodash.invertBy = invertBy; +
62415 lodash.invokeMap = invokeMap; +
62416 lodash.iteratee = iteratee; +
62417 lodash.keyBy = keyBy; +
62418 lodash.keys = keys; +
62419 lodash.keysIn = keysIn; +
62420 lodash.map = map; +
62421 lodash.mapKeys = mapKeys; +
62422 lodash.mapValues = mapValues; +
62423 lodash.matches = matches; +
62424 lodash.matchesProperty = matchesProperty; +
62425 lodash.memoize = memoize; +
62426 lodash.merge = merge; +
62427 lodash.mergeWith = mergeWith; +
62428 lodash.method = method; +
62429 lodash.methodOf = methodOf; +
62430 lodash.mixin = mixin; +
62431 lodash.negate = negate; +
62432 lodash.nthArg = nthArg; +
62433 lodash.omit = omit; +
62434 lodash.omitBy = omitBy; +
62435 lodash.once = once; +
62436 lodash.orderBy = orderBy; +
62437 lodash.over = over; +
62438 lodash.overArgs = overArgs; +
62439 lodash.overEvery = overEvery; +
62440 lodash.overSome = overSome; +
62441 lodash.partial = partial; +
62442 lodash.partialRight = partialRight; +
62443 lodash.partition = partition; +
62444 lodash.pick = pick; +
62445 lodash.pickBy = pickBy; +
62446 lodash.property = property; +
62447 lodash.propertyOf = propertyOf; +
62448 lodash.pull = pull; +
62449 lodash.pullAll = pullAll; +
62450 lodash.pullAllBy = pullAllBy; +
62451 lodash.pullAllWith = pullAllWith; +
62452 lodash.pullAt = pullAt; +
62453 lodash.range = range; +
62454 lodash.rangeRight = rangeRight; +
62455 lodash.rearg = rearg; +
62456 lodash.reject = reject; +
62457 lodash.remove = remove; +
62458 lodash.rest = rest; +
62459 lodash.reverse = reverse; +
62460 lodash.sampleSize = sampleSize; +
62461 lodash.set = set; +
62462 lodash.setWith = setWith; +
62463 lodash.shuffle = shuffle; +
62464 lodash.slice = slice; +
62465 lodash.sortBy = sortBy; +
62466 lodash.sortedUniq = sortedUniq; +
62467 lodash.sortedUniqBy = sortedUniqBy; +
62468 lodash.split = split; +
62469 lodash.spread = spread; +
62470 lodash.tail = tail; +
62471 lodash.take = take; +
62472 lodash.takeRight = takeRight; +
62473 lodash.takeRightWhile = takeRightWhile; +
62474 lodash.takeWhile = takeWhile; +
62475 lodash.tap = tap; +
62476 lodash.throttle = throttle; +
62477 lodash.thru = thru; +
62478 lodash.toArray = toArray; +
62479 lodash.toPairs = toPairs; +
62480 lodash.toPairsIn = toPairsIn; +
62481 lodash.toPath = toPath; +
62482 lodash.toPlainObject = toPlainObject; +
62483 lodash.transform = transform; +
62484 lodash.unary = unary; +
62485 lodash.union = union; +
62486 lodash.unionBy = unionBy; +
62487 lodash.unionWith = unionWith; +
62488 lodash.uniq = uniq; +
62489 lodash.uniqBy = uniqBy; +
62490 lodash.uniqWith = uniqWith; +
62491 lodash.unset = unset; +
62492 lodash.unzip = unzip; +
62493 lodash.unzipWith = unzipWith; +
62494 lodash.update = update; +
62495 lodash.updateWith = updateWith; +
62496 lodash.values = values; +
62497 lodash.valuesIn = valuesIn; +
62498 lodash.without = without; +
62499 lodash.words = words; +
62500 lodash.wrap = wrap; +
62501 lodash.xor = xor; +
62502 lodash.xorBy = xorBy; +
62503 lodash.xorWith = xorWith; +
62504 lodash.zip = zip; +
62505 lodash.zipObject = zipObject; +
62506 lodash.zipObjectDeep = zipObjectDeep; +
62507 lodash.zipWith = zipWith; +
62508 +
62509 // Add aliases. +
62510 lodash.entries = toPairs; +
62511 lodash.entriesIn = toPairsIn; +
62512 lodash.extend = assignIn; +
62513 lodash.extendWith = assignInWith; +
62514 +
62515 // Add methods to `lodash.prototype`. +
62516 mixin(lodash, lodash); +
62517 +
62518 /*------------------------------------------------------------------------*/ +
62519 +
62520 // Add methods that return unwrapped values in chain sequences. +
62521 lodash.add = add; +
62522 lodash.attempt = attempt; +
62523 lodash.camelCase = camelCase; +
62524 lodash.capitalize = capitalize; +
62525 lodash.ceil = ceil; +
62526 lodash.clamp = clamp; +
62527 lodash.clone = clone; +
62528 lodash.cloneDeep = cloneDeep; +
62529 lodash.cloneDeepWith = cloneDeepWith; +
62530 lodash.cloneWith = cloneWith; +
62531 lodash.conformsTo = conformsTo; +
62532 lodash.deburr = deburr; +
62533 lodash.defaultTo = defaultTo; +
62534 lodash.divide = divide; +
62535 lodash.endsWith = endsWith; +
62536 lodash.eq = eq; +
62537 lodash.escape = escape; +
62538 lodash.escapeRegExp = escapeRegExp; +
62539 lodash.every = every; +
62540 lodash.find = find; +
62541 lodash.findIndex = findIndex; +
62542 lodash.findKey = findKey; +
62543 lodash.findLast = findLast; +
62544 lodash.findLastIndex = findLastIndex; +
62545 lodash.findLastKey = findLastKey; +
62546 lodash.floor = floor; +
62547 lodash.forEach = forEach; +
62548 lodash.forEachRight = forEachRight; +
62549 lodash.forIn = forIn; +
62550 lodash.forInRight = forInRight; +
62551 lodash.forOwn = forOwn; +
62552 lodash.forOwnRight = forOwnRight; +
62553 lodash.get = get; +
62554 lodash.gt = gt; +
62555 lodash.gte = gte; +
62556 lodash.has = has; +
62557 lodash.hasIn = hasIn; +
62558 lodash.head = head; +
62559 lodash.identity = identity; +
62560 lodash.includes = includes; +
62561 lodash.indexOf = indexOf; +
62562 lodash.inRange = inRange; +
62563 lodash.invoke = invoke; +
62564 lodash.isArguments = isArguments; +
62565 lodash.isArray = isArray; +
62566 lodash.isArrayBuffer = isArrayBuffer; +
62567 lodash.isArrayLike = isArrayLike; +
62568 lodash.isArrayLikeObject = isArrayLikeObject; +
62569 lodash.isBoolean = isBoolean; +
62570 lodash.isBuffer = isBuffer; +
62571 lodash.isDate = isDate; +
62572 lodash.isElement = isElement; +
62573 lodash.isEmpty = isEmpty; +
62574 lodash.isEqual = isEqual; +
62575 lodash.isEqualWith = isEqualWith; +
62576 lodash.isError = isError; +
62577 lodash.isFinite = isFinite; +
62578 lodash.isFunction = isFunction; +
62579 lodash.isInteger = isInteger; +
62580 lodash.isLength = isLength; +
62581 lodash.isMap = isMap; +
62582 lodash.isMatch = isMatch; +
62583 lodash.isMatchWith = isMatchWith; +
62584 lodash.isNaN = isNaN; +
62585 lodash.isNative = isNative; +
62586 lodash.isNil = isNil; +
62587 lodash.isNull = isNull; +
62588 lodash.isNumber = isNumber; +
62589 lodash.isObject = isObject; +
62590 lodash.isObjectLike = isObjectLike; +
62591 lodash.isPlainObject = isPlainObject; +
62592 lodash.isRegExp = isRegExp; +
62593 lodash.isSafeInteger = isSafeInteger; +
62594 lodash.isSet = isSet; +
62595 lodash.isString = isString; +
62596 lodash.isSymbol = isSymbol; +
62597 lodash.isTypedArray = isTypedArray; +
62598 lodash.isUndefined = isUndefined; +
62599 lodash.isWeakMap = isWeakMap; +
62600 lodash.isWeakSet = isWeakSet; +
62601 lodash.join = join; +
62602 lodash.kebabCase = kebabCase; +
62603 lodash.last = last; +
62604 lodash.lastIndexOf = lastIndexOf; +
62605 lodash.lowerCase = lowerCase; +
62606 lodash.lowerFirst = lowerFirst; +
62607 lodash.lt = lt; +
62608 lodash.lte = lte; +
62609 lodash.max = max; +
62610 lodash.maxBy = maxBy; +
62611 lodash.mean = mean; +
62612 lodash.meanBy = meanBy; +
62613 lodash.min = min; +
62614 lodash.minBy = minBy; +
62615 lodash.stubArray = stubArray; +
62616 lodash.stubFalse = stubFalse; +
62617 lodash.stubObject = stubObject; +
62618 lodash.stubString = stubString; +
62619 lodash.stubTrue = stubTrue; +
62620 lodash.multiply = multiply; +
62621 lodash.nth = nth; +
62622 lodash.noConflict = noConflict; +
62623 lodash.noop = noop; +
62624 lodash.now = now; +
62625 lodash.pad = pad; +
62626 lodash.padEnd = padEnd; +
62627 lodash.padStart = padStart; +
62628 lodash.parseInt = parseInt; +
62629 lodash.random = random; +
62630 lodash.reduce = reduce; +
62631 lodash.reduceRight = reduceRight; +
62632 lodash.repeat = repeat; +
62633 lodash.replace = replace; +
62634 lodash.result = result; +
62635 lodash.round = round; +
62636 lodash.runInContext = runInContext; +
62637 lodash.sample = sample; +
62638 lodash.size = size; +
62639 lodash.snakeCase = snakeCase; +
62640 lodash.some = some; +
62641 lodash.sortedIndex = sortedIndex; +
62642 lodash.sortedIndexBy = sortedIndexBy; +
62643 lodash.sortedIndexOf = sortedIndexOf; +
62644 lodash.sortedLastIndex = sortedLastIndex; +
62645 lodash.sortedLastIndexBy = sortedLastIndexBy; +
62646 lodash.sortedLastIndexOf = sortedLastIndexOf; +
62647 lodash.startCase = startCase; +
62648 lodash.startsWith = startsWith; +
62649 lodash.subtract = subtract; +
62650 lodash.sum = sum; +
62651 lodash.sumBy = sumBy; +
62652 lodash.template = template; +
62653 lodash.times = times; +
62654 lodash.toFinite = toFinite; +
62655 lodash.toInteger = toInteger; +
62656 lodash.toLength = toLength; +
62657 lodash.toLower = toLower; +
62658 lodash.toNumber = toNumber; +
62659 lodash.toSafeInteger = toSafeInteger; +
62660 lodash.toString = toString; +
62661 lodash.toUpper = toUpper; +
62662 lodash.trim = trim; +
62663 lodash.trimEnd = trimEnd; +
62664 lodash.trimStart = trimStart; +
62665 lodash.truncate = truncate; +
62666 lodash.unescape = unescape; +
62667 lodash.uniqueId = uniqueId; +
62668 lodash.upperCase = upperCase; +
62669 lodash.upperFirst = upperFirst; +
62670 +
62671 // Add aliases. +
62672 lodash.each = forEach; +
62673 lodash.eachRight = forEachRight; +
62674 lodash.first = head; +
62675 +
62676 mixin(lodash, (function() { +
62677 var source = {}; +
62678 baseForOwn(lodash, function(func, methodName) { +
62679 if (!hasOwnProperty.call(lodash.prototype, methodName)) { +
62680 source[methodName] = func; +
62681 } +
62682 }); +
62683 return source; +
62684 }()), { 'chain': false }); +
62685 +
62686 /*------------------------------------------------------------------------*/ +
62687 +
62688 /** +
62689 * The semantic version number. +
62690 * +
62691 * @static +
62692 * @memberOf _ +
62693 * @type {string} +
62694 */ +
62695 lodash.VERSION = VERSION; +
62696 +
62697 // Assign default placeholders. +
62698 arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { +
62699 lodash[methodName].placeholder = lodash; +
62700 }); +
62701 +
62702 // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. +
62703 arrayEach(['drop', 'take'], function(methodName, index) { +
62704 LazyWrapper.prototype[methodName] = function(n) { +
62705 n = n === undefined ? 1 : nativeMax(toInteger(n), 0); +
62706 +
62707 var result = (this.__filtered__ && !index) +
62708 ? new LazyWrapper(this) +
62709 : this.clone(); +
62710 +
62711 if (result.__filtered__) { +
62712 result.__takeCount__ = nativeMin(n, result.__takeCount__); +
62713 } else { +
62714 result.__views__.push({ +
62715 'size': nativeMin(n, MAX_ARRAY_LENGTH), +
62716 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') +
62717 }); +
62718 } +
62719 return result; +
62720 }; +
62721 +
62722 LazyWrapper.prototype[methodName + 'Right'] = function(n) { +
62723 return this.reverse()[methodName](n).reverse(); +
62724 }; +
62725 }); +
62726 +
62727 // Add `LazyWrapper` methods that accept an `iteratee` value. +
62728 arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { +
62729 var type = index + 1, +
62730 isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; +
62731 +
62732 LazyWrapper.prototype[methodName] = function(iteratee) { +
62733 var result = this.clone(); +
62734 result.__iteratees__.push({ +
62735 'iteratee': getIteratee(iteratee, 3), +
62736 'type': type +
62737 }); +
62738 result.__filtered__ = result.__filtered__ || isFilter; +
62739 return result; +
62740 }; +
62741 }); +
62742 +
62743 // Add `LazyWrapper` methods for `_.head` and `_.last`. +
62744 arrayEach(['head', 'last'], function(methodName, index) { +
62745 var takeName = 'take' + (index ? 'Right' : ''); +
62746 +
62747 LazyWrapper.prototype[methodName] = function() { +
62748 return this[takeName](1).value()[0]; +
62749 }; +
62750 }); +
62751 +
62752 // Add `LazyWrapper` methods for `_.initial` and `_.tail`. +
62753 arrayEach(['initial', 'tail'], function(methodName, index) { +
62754 var dropName = 'drop' + (index ? '' : 'Right'); +
62755 +
62756 LazyWrapper.prototype[methodName] = function() { +
62757 return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); +
62758 }; +
62759 }); +
62760 +
62761 LazyWrapper.prototype.compact = function() { +
62762 return this.filter(identity); +
62763 }; +
62764 +
62765 LazyWrapper.prototype.find = function(predicate) { +
62766 return this.filter(predicate).head(); +
62767 }; +
62768 +
62769 LazyWrapper.prototype.findLast = function(predicate) { +
62770 return this.reverse().find(predicate); +
62771 }; +
62772 +
62773 LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { +
62774 if (typeof path == 'function') { +
62775 return new LazyWrapper(this); +
62776 } +
62777 return this.map(function(value) { +
62778 return baseInvoke(value, path, args); +
62779 }); +
62780 }); +
62781 +
62782 LazyWrapper.prototype.reject = function(predicate) { +
62783 return this.filter(negate(getIteratee(predicate))); +
62784 }; +
62785 +
62786 LazyWrapper.prototype.slice = function(start, end) { +
62787 start = toInteger(start); +
62788 +
62789 var result = this; +
62790 if (result.__filtered__ && (start > 0 || end < 0)) { +
62791 return new LazyWrapper(result); +
62792 } +
62793 if (start < 0) { +
62794 result = result.takeRight(-start); +
62795 } else if (start) { +
62796 result = result.drop(start); +
62797 } +
62798 if (end !== undefined) { +
62799 end = toInteger(end); +
62800 result = end < 0 ? result.dropRight(-end) : result.take(end - start); +
62801 } +
62802 return result; +
62803 }; +
62804 +
62805 LazyWrapper.prototype.takeRightWhile = function(predicate) { +
62806 return this.reverse().takeWhile(predicate).reverse(); +
62807 }; +
62808 +
62809 LazyWrapper.prototype.toArray = function() { +
62810 return this.take(MAX_ARRAY_LENGTH); +
62811 }; +
62812 +
62813 // Add `LazyWrapper` methods to `lodash.prototype`. +
62814 baseForOwn(LazyWrapper.prototype, function(func, methodName) { +
62815 var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), +
62816 isTaker = /^(?:head|last)$/.test(methodName), +
62817 lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], +
62818 retUnwrapped = isTaker || /^find/.test(methodName); +
62819 +
62820 if (!lodashFunc) { +
62821 return; +
62822 } +
62823 lodash.prototype[methodName] = function() { +
62824 var value = this.__wrapped__, +
62825 args = isTaker ? [1] : arguments, +
62826 isLazy = value instanceof LazyWrapper, +
62827 iteratee = args[0], +
62828 useLazy = isLazy || isArray(value); +
62829 +
62830 var interceptor = function(value) { +
62831 var result = lodashFunc.apply(lodash, arrayPush([value], args)); +
62832 return (isTaker && chainAll) ? result[0] : result; +
62833 }; +
62834 +
62835 if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { +
62836 // Avoid lazy use if the iteratee has a "length" value other than `1`. +
62837 isLazy = useLazy = false; +
62838 } +
62839 var chainAll = this.__chain__, +
62840 isHybrid = !!this.__actions__.length, +
62841 isUnwrapped = retUnwrapped && !chainAll, +
62842 onlyLazy = isLazy && !isHybrid; +
62843 +
62844 if (!retUnwrapped && useLazy) { +
62845 value = onlyLazy ? value : new LazyWrapper(this); +
62846 var result = func.apply(value, args); +
62847 result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); +
62848 return new LodashWrapper(result, chainAll); +
62849 } +
62850 if (isUnwrapped && onlyLazy) { +
62851 return func.apply(this, args); +
62852 } +
62853 result = this.thru(interceptor); +
62854 return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; +
62855 }; +
62856 }); +
62857 +
62858 // Add `Array` methods to `lodash.prototype`. +
62859 arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { +
62860 var func = arrayProto[methodName], +
62861 chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', +
62862 retUnwrapped = /^(?:pop|shift)$/.test(methodName); +
62863 +
62864 lodash.prototype[methodName] = function() { +
62865 var args = arguments; +
62866 if (retUnwrapped && !this.__chain__) { +
62867 var value = this.value(); +
62868 return func.apply(isArray(value) ? value : [], args); +
62869 } +
62870 return this[chainName](function(value) { +
62871 return func.apply(isArray(value) ? value : [], args); +
62872 }); +
62873 }; +
62874 }); +
62875 +
62876 // Map minified method names to their real names. +
62877 baseForOwn(LazyWrapper.prototype, function(func, methodName) { +
62878 var lodashFunc = lodash[methodName]; +
62879 if (lodashFunc) { +
62880 var key = (lodashFunc.name + ''), +
62881 names = realNames[key] || (realNames[key] = []); +
62882 +
62883 names.push({ 'name': methodName, 'func': lodashFunc }); +
62884 } +
62885 }); +
62886 +
62887 realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ +
62888 'name': 'wrapper', +
62889 'func': undefined +
62890 }]; +
62891 +
62892 // Add methods to `LazyWrapper`. +
62893 LazyWrapper.prototype.clone = lazyClone; +
62894 LazyWrapper.prototype.reverse = lazyReverse; +
62895 LazyWrapper.prototype.value = lazyValue; +
62896 +
62897 // Add chain sequence methods to the `lodash` wrapper. +
62898 lodash.prototype.at = wrapperAt; +
62899 lodash.prototype.chain = wrapperChain; +
62900 lodash.prototype.commit = wrapperCommit; +
62901 lodash.prototype.next = wrapperNext; +
62902 lodash.prototype.plant = wrapperPlant; +
62903 lodash.prototype.reverse = wrapperReverse; +
62904 lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; +
62905 +
62906 // Add lazy aliases. +
62907 lodash.prototype.first = lodash.prototype.head; +
62908 +
62909 if (symIterator) { +
62910 lodash.prototype[symIterator] = wrapperToIterator; +
62911 } +
62912 return lodash; +
62913 }); +
62914 +
62915 /*--------------------------------------------------------------------------*/ +
62916 +
62917 // Export lodash. +
62918 var _ = runInContext(); +
62919 +
62920 // Some AMD build optimizers, like r.js, check for condition patterns like: +
62921 if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { +
62922 // Expose Lodash on the global object to prevent errors when Lodash is +
62923 // loaded by a script tag in the presence of an AMD loader. +
62924 // See http://requirejs.org/docs/errors.html#mismatch for more details. +
62925 // Use `_.noConflict` to remove Lodash from the global object. +
62926 root._ = _; +
62927 +
62928 // Define as an anonymous module so, through path mapping, it can be +
62929 // referenced as the "underscore" module. +
62930 define(function() { +
62931 return _; +
62932 }); +
62933 } +
62934 // Check for `exports` after `define` in case a build optimizer adds it. +
62935 else if (freeModule) { +
62936 // Export for Node.js. +
62937 (freeModule.exports = _)._ = _; +
62938 // Export for CommonJS support. +
62939 freeExports._ = _; +
62940 } +
62941 else { +
62942 // Export to the global object. +
62943 root._ = _; +
62944 } +
62945}.call(this)); +
62946 +
62947/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
62948 +
62949/***/ }), +
62950 +
62951/***/ "./node_modules/escaper/dist/escaper.js": +
62952/*!**********************************************!*\ +
62953 !*** ./node_modules/escaper/dist/escaper.js ***! +
62954 \**********************************************/ +
62955/*! no static exports found */ +
62956/***/ (function(module, exports, __webpack_require__) { +
62957 +
62958/*! +
62959 * Escaper v2.5.3 +
62960 * https://github.com/kobezzza/Escaper +
62961 * +
62962 * Released under the MIT license +
62963 * https://github.com/kobezzza/Escaper/blob/master/LICENSE +
62964 * +
62965 * Date: Tue, 23 Jan 2018 15:58:45 GMT +
62966 */ +
62967 +
62968(function (global, factory) { +
62969 true ? factory(exports) : +
62970 undefined; +
62971}(this, (function (exports) { 'use strict'; +
62972 +
62973var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { +
62974 return typeof obj; +
62975} : function (obj) { +
62976 return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +
62977}; +
62978 +
62979var Escaper = void 0; +
62980var escaper = Escaper = { +
62981 VERSION: [2, 5, 3], +
62982 content: [], +
62983 cache: {}, +
62984 snakeskinRgxp: null, +
62985 symbols: null, +
62986 replace: replace, +
62987 paste: paste +
62988}; +
62989 +
62990var stringLiterals = { +
62991 '"': true, +
62992 '\'': true, +
62993 '`': true +
62994}; +
62995 +
62996var literals = { +
62997 '/': true +
62998}; +
62999 +
63000for (var key in stringLiterals) { +
63001 if (!stringLiterals.hasOwnProperty(key)) { +
63002 break; +
63003 } +
63004 +
63005 literals[key] = true; +
63006} +
63007 +
63008var singleComments = { +
63009 '//': true, +
63010 '//*': true, +
63011 '//!': true, +
63012 '//#': true, +
63013 '//@': true, +
63014 '//$': true +
63015}; +
63016 +
63017var multComments = { +
63018 '/*': true, +
63019 '/**': true, +
63020 '/*!': true, +
63021 '/*#': true, +
63022 '/*@': true, +
63023 '/*$': true +
63024}; +
63025 +
63026var keyArr = []; +
63027var finalMap = {}; +
63028 +
63029for (var _key in literals) { +
63030 if (!literals.hasOwnProperty(_key)) { +
63031 break; +
63032 } +
63033 +
63034 keyArr.push(_key); +
63035 finalMap[_key] = true; +
63036} +
63037 +
63038for (var _key2 in singleComments) { +
63039 if (!singleComments.hasOwnProperty(_key2)) { +
63040 break; +
63041 } +
63042 +
63043 keyArr.push(_key2); +
63044 finalMap[_key2] = true; +
63045} +
63046 +
63047for (var _key3 in multComments) { +
63048 if (!multComments.hasOwnProperty(_key3)) { +
63049 break; +
63050 } +
63051 +
63052 keyArr.push(_key3); +
63053 finalMap[_key3] = true; +
63054} +
63055 +
63056var rgxpFlags = []; +
63057var rgxpFlagsMap = { +
63058 'g': true, +
63059 'm': true, +
63060 'i': true, +
63061 'y': true, +
63062 'u': true +
63063}; +
63064 +
63065for (var _key4 in rgxpFlagsMap) { +
63066 if (!rgxpFlagsMap.hasOwnProperty(_key4)) { +
63067 break; +
63068 } +
63069 +
63070 rgxpFlags.push(_key4); +
63071} +
63072 +
63073var escapeEndMap = { +
63074 '-': true, +
63075 '+': true, +
63076 '*': true, +
63077 '%': true, +
63078 '~': true, +
63079 '>': true, +
63080 '<': true, +
63081 '^': true, +
63082 ',': true, +
63083 ';': true, +
63084 '=': true, +
63085 '|': true, +
63086 '&': true, +
63087 '!': true, +
63088 '?': true, +
63089 ':': true, +
63090 '(': true, +
63091 '{': true, +
63092 '[': true +
63093}; +
63094 +
63095var escapeEndWordMap = { +
63096 'return': true, +
63097 'yield': true, +
63098 'await': true, +
63099 'typeof': true, +
63100 'void': true, +
63101 'instanceof': true, +
63102 'delete': true, +
63103 'in': true, +
63104 'new': true, +
63105 'of': true +
63106}; +
63107 +
63108/** +
63109 * @param {!Object} obj +
63110 * @param {!Object} p +
63111 * @param {(boolean|number)} val +
63112 */ +
63113function mix(obj, p, val) { +
63114 for (var _key5 in obj) { +
63115 if (!obj.hasOwnProperty(_key5)) { +
63116 break; +
63117 } +
63118 +
63119 if (_key5 in p === false) { +
63120 p[_key5] = val; +
63121 } +
63122 } +
63123} +
63124 +
63125var symbols = void 0; +
63126var snakeskinRgxp = void 0; +
63127 +
63128var uSRgxp = /[^\s/]/; +
63129var wRgxp = /[a-z]/; +
63130var sRgxp = /\s/; +
63131var nRgxp = /[\r\n]/; +
63132var posRgxp = /\${pos}/g; +
63133 +
63134var objMap = { +
63135 'object': true, +
63136 'function': true +
63137}; +
63138 +
63139/** +
63140 * Replaces all found blocks ' ... ', " ... ", ` ... `, / ... /, // ..., /* ... *\/ to +
63141 * __ESCAPER_QUOT__number_ in a string and returns a new string +
63142 * +
63143 * @param {string} str - source string +
63144 * @param {(Object<string, boolean>|boolean)=} [opt_withCommentsOrParams=false] - parameters: +
63145 * +
63146 * (if a parameter value is set to -1, then all found matches will be removed from the final string, +
63147 * or if the value will be set to true/false they will be included/excluded) +
63148 * +
63149 * *) @label - template for replacement, e.g. __ESCAPER_QUOT__${pos}_ +
63150 * *) @all - replaces all found matches +
63151 * *) @comments - replaces all kinds of comments +
63152 * *) @strings - replaces all kinds of string literals +
63153 * *) @literals - replaces all kinds of string literals and regular expressions +
63154 * *) ` +
63155 * *) ' +
63156 * *) " +
63157 * *) / +
63158 * *) // +
63159 * *) //* +
63160 * *) //! +
63161 * *) //# +
63162 * *) //@ +
63163 * *) //$ +
63164 * *) /* +
63165 * *) /** +
63166 * *) /*! +
63167 * *) /*# +
63168 * *) /*@ +
63169 * *) /*$ +
63170 * +
63171 * OR if the value is boolean, then will be replaced all found comments (true) / literals (false) +
63172 * +
63173 * @param {Array=} [opt_content=Escaper.content] - array for matches +
63174 * @param {?boolean=} [opt_snakeskin] - private parameter for using with Snakeskin +
63175 * @return {string} +
63176 */ +
63177function replace(str, opt_withCommentsOrParams, opt_content, opt_snakeskin) { +
63178 symbols = symbols || Escaper.symbols || 'a-z'; +
63179 snakeskinRgxp = snakeskinRgxp || Escaper.snakeskinRgxp || new RegExp('[!$' + symbols + '_]', 'i'); +
63180 +
63181 var _Escaper = Escaper, +
63182 cache = _Escaper.cache, +
63183 content = _Escaper.content; +
63184 +
63185 +
63186 var isObj = Boolean(opt_withCommentsOrParams && objMap[typeof opt_withCommentsOrParams === 'undefined' ? 'undefined' : _typeof(opt_withCommentsOrParams)]); +
63187 +
63188 var p = isObj ? Object(opt_withCommentsOrParams) : {}; +
63189 +
63190 function mark(pos) { +
63191 if (p['@label']) { +
63192 return p['@label'].replace(posRgxp, pos); +
63193 } +
63194 +
63195 return '__ESCAPER_QUOT__' + pos + '_'; +
63196 } +
63197 +
63198 var withComments = false; +
63199 if (typeof opt_withCommentsOrParams === 'boolean') { +
63200 withComments = Boolean(opt_withCommentsOrParams); +
63201 } +
63202 +
63203 if ('@comments' in p) { +
63204 mix(multComments, p, p['@comments']); +
63205 mix(singleComments, p, p['@comments']); +
63206 delete p['@comments']; +
63207 } +
63208 +
63209 if ('@strings' in p) { +
63210 mix(stringLiterals, p, p['@strings']); +
63211 delete p['@strings']; +
63212 } +
63213 +
63214 if ('@literals' in p) { +
63215 mix(literals, p, p['@literals']); +
63216 delete p['@literals']; +
63217 } +
63218 +
63219 if ('@all' in p) { +
63220 mix(finalMap, p, p['@all']); +
63221 delete p['@all']; +
63222 } +
63223 +
63224 var cacheKey = ''; +
63225 for (var i = -1; ++i < keyArr.length;) { +
63226 var el = keyArr[i]; +
63227 +
63228 if (multComments[el] || singleComments[el]) { +
63229 p[el] = withComments || p[el]; +
63230 } else { +
63231 p[el] = p[el] || !isObj; +
63232 } +
63233 +
63234 cacheKey += p[el] + ','; +
63235 } +
63236 +
63237 var initStr = str, +
63238 stack = opt_content || content; +
63239 +
63240 if (stack === content && cache[cacheKey] && cache[cacheKey][initStr]) { +
63241 return cache[cacheKey][initStr]; +
63242 } +
63243 +
63244 var begin = false, +
63245 end = true; +
63246 +
63247 var escape = false, +
63248 comment = false; +
63249 +
63250 var selectionStart = 0, +
63251 block = false; +
63252 +
63253 var templateVar = 0, +
63254 filterStart = false; +
63255 +
63256 var cut = void 0, +
63257 label = void 0; +
63258 +
63259 var part = '', +
63260 rPart = ''; +
63261 +
63262 for (var _i = -1; ++_i < str.length;) { +
63263 var _el = str.charAt(_i); +
63264 +
63265 var next = str.charAt(_i + 1), +
63266 word = str.substr(_i, 2), +
63267 extWord = str.substr(_i, 3); +
63268 +
63269 if (!comment) { +
63270 if (!begin) { +
63271 if (_el === '/') { +
63272 if (singleComments[word] || multComments[word]) { +
63273 if (singleComments[extWord] || multComments[extWord]) { +
63274 comment = extWord; +
63275 } else { +
63276 comment = word; +
63277 } +
63278 } +
63279 +
63280 if (comment) { +
63281 selectionStart = _i; +
63282 continue; +
63283 } +
63284 } +
63285 +
63286 if (escapeEndMap[_el] || escapeEndWordMap[rPart]) { +
63287 end = true; +
63288 rPart = ''; +
63289 } else if (uSRgxp.test(_el)) { +
63290 end = false; +
63291 } +
63292 +
63293 if (wRgxp.test(_el)) { +
63294 part += _el; +
63295 } else { +
63296 rPart = part; +
63297 part = ''; +
63298 } +
63299 +
63300 var skip = false; +
63301 if (opt_snakeskin) { +
63302 if (_el === '|' && snakeskinRgxp.test(next)) { +
63303 filterStart = true; +
63304 end = false; +
63305 skip = true; +
63306 } else if (filterStart && sRgxp.test(_el)) { +
63307 filterStart = false; +
63308 end = true; +
63309 skip = true; +
63310 } +
63311 } +
63312 +
63313 if (!skip) { +
63314 if (escapeEndMap[_el]) { +
63315 end = true; +
63316 } else if (uSRgxp.test(_el)) { +
63317 end = false; +
63318 } +
63319 } +
63320 } +
63321 +
63322 // [] inside RegExp +
63323 if (begin === '/' && !escape) { +
63324 if (_el === '[') { +
63325 block = true; +
63326 } else if (_el === ']') { +
63327 block = false; +
63328 } +
63329 } +
63330 +
63331 if (!begin && templateVar) { +
63332 if (_el === '}') { +
63333 templateVar--; +
63334 } else if (_el === '{') { +
63335 templateVar++; +
63336 } +
63337 +
63338 if (!templateVar) { +
63339 _el = '`'; +
63340 } +
63341 } +
63342 +
63343 if (begin === '`' && !escape && word === '${') { +
63344 _el = '`'; +
63345 _i++; +
63346 templateVar++; +
63347 } +
63348 +
63349 if (finalMap[_el] && (_el !== '/' || end) && !begin) { +
63350 begin = _el; +
63351 selectionStart = _i; +
63352 } else if (begin && (_el === '\\' || escape)) { +
63353 escape = !escape; +
63354 } else if (finalMap[_el] && begin === _el && !escape && (begin !== '/' || !block)) { +
63355 if (_el === '/') { +
63356 for (var j = -1; ++j < rgxpFlags.length;) { +
63357 if (rgxpFlagsMap[str.charAt(_i + 1)]) { +
63358 _i++; +
63359 } +
63360 } +
63361 } +
63362 +
63363 begin = false; +
63364 end = false; +
63365 +
63366 if (p[_el]) { +
63367 cut = str.substring(selectionStart, _i + 1); +
63368 +
63369 if (p[_el] === -1) { +
63370 label = ''; +
63371 } else { +
63372 label = mark(stack.length); +
63373 stack.push(cut); +
63374 } +
63375 +
63376 str = str.substring(0, selectionStart) + label + str.substring(_i + 1); +
63377 _i += label.length - cut.length; +
63378 } +
63379 } +
63380 } else if (nRgxp.test(next) && singleComments[comment] || multComments[_el + str.charAt(_i - 1)] && _i - selectionStart > 2 && multComments[comment]) { +
63381 if (p[comment]) { +
63382 cut = str.substring(selectionStart, _i + 1); +
63383 +
63384 if (p[comment] === -1) { +
63385 label = ''; +
63386 } else { +
63387 label = mark(stack.length); +
63388 stack.push(cut); +
63389 } +
63390 +
63391 str = str.substring(0, selectionStart) + label + str.substring(_i + 1); +
63392 _i += label.length - cut.length; +
63393 } +
63394 +
63395 comment = false; +
63396 } +
63397 } +
63398 +
63399 if (stack === content) { +
63400 cache[cacheKey] = cache[cacheKey] || {}; +
63401 cache[cacheKey][initStr] = str; +
63402 } +
63403 +
63404 return str; +
63405} +
63406 +
63407var pasteRgxp = /__ESCAPER_QUOT__(\d+)_/g; +
63408 +
63409/** +
63410 * Replaces all found blocks __ESCAPER_QUOT__number_ to real content in a string +
63411 * and returns a new string +
63412 * +
63413 * @param {string} str - source string +
63414 * @param {Array=} [opt_content=Escaper.content] - array of matches +
63415 * @param {RegExp=} [opt_rgxp] - RegExp for searching, e.g. /__ESCAPER_QUOT__(\d+)_/g +
63416 * @return {string} +
63417 */ +
63418function paste(str, opt_content, opt_rgxp) { +
63419 return str.replace(opt_rgxp || pasteRgxp, function (str, pos) { +
63420 return (opt_content || Escaper.content)[pos]; +
63421 }); +
63422} +
63423 +
63424exports['default'] = escaper; +
63425exports.replace = replace; +
63426exports.paste = paste; +
63427 +
63428Object.defineProperty(exports, '__esModule', { value: true }); +
63429 +
63430}))); +
63431 +
63432 +
63433/***/ }), +
63434 +
63435/***/ "./node_modules/graphlibrary/index.js": +
63436/*!********************************************!*\ +
63437 !*** ./node_modules/graphlibrary/index.js ***! +
63438 \********************************************/ +
63439/*! no static exports found */ +
63440/***/ (function(module, exports, __webpack_require__) { +
63441 +
63442module.exports = { +
63443 Graph: __webpack_require__(/*! ./lib/graph */ "./node_modules/graphlibrary/lib/graph.js"), +
63444 json: __webpack_require__(/*! ./lib/json */ "./node_modules/graphlibrary/lib/json.js"), +
63445 alg: __webpack_require__(/*! ./lib/alg */ "./node_modules/graphlibrary/lib/alg/index.js") +
63446} +
63447 +
63448 +
63449/***/ }), +
63450 +
63451/***/ "./node_modules/graphlibrary/lib/alg/components.js": +
63452/*!*********************************************************!*\ +
63453 !*** ./node_modules/graphlibrary/lib/alg/components.js ***! +
63454 \*********************************************************/ +
63455/*! no static exports found */ +
63456/***/ (function(module, exports, __webpack_require__) { +
63457 +
63458var _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63459 +
63460module.exports = components +
63461 +
63462function components (g) { +
63463 const visited = {} +
63464 const cmpts = [] +
63465 let cmpt +
63466 +
63467 function dfs (v) { +
63468 if (_.has(visited, v)) return +
63469 visited[v] = true +
63470 cmpt.push(v) +
63471 _.each(g.successors(v), dfs) +
63472 _.each(g.predecessors(v), dfs) +
63473 } +
63474 +
63475 _.each(g.nodes(), function (v) { +
63476 cmpt = [] +
63477 dfs(v) +
63478 if (cmpt.length) { +
63479 cmpts.push(cmpt) +
63480 } +
63481 }) +
63482 +
63483 return cmpts +
63484} +
63485 +
63486 +
63487/***/ }), +
63488 +
63489/***/ "./node_modules/graphlibrary/lib/alg/dfs.js": +
63490/*!**************************************************!*\ +
63491 !*** ./node_modules/graphlibrary/lib/alg/dfs.js ***! +
63492 \**************************************************/ +
63493/*! no static exports found */ +
63494/***/ (function(module, exports, __webpack_require__) { +
63495 +
63496var _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63497 +
63498module.exports = dfs +
63499 +
63500/* +
63501 * A helper that preforms a pre- or post-order traversal on the input graph +
63502 * and returns the nodes in the order they were visited. If the graph is +
63503 * undirected then this algorithm will navigate using neighbors. If the graph +
63504 * is directed then this algorithm will navigate using successors. +
63505 * +
63506 * Order must be one of "pre" or "post". +
63507 */ +
63508function dfs (g, vs, order) { +
63509 if (!_.isArray(vs)) { +
63510 vs = [vs] +
63511 } +
63512 +
63513 var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g) +
63514 +
63515 const acc = [] +
63516 const visited = {} +
63517 _.each(vs, function (v) { +
63518 if (!g.hasNode(v)) { +
63519 throw new Error('Graph does not have node: ' + v) +
63520 } +
63521 +
63522 doDfs(g, v, order === 'post', visited, navigation, acc) +
63523 }) +
63524 return acc +
63525} +
63526 +
63527function doDfs (g, v, postorder, visited, navigation, acc) { +
63528 if (!_.has(visited, v)) { +
63529 visited[v] = true +
63530 +
63531 if (!postorder) { acc.push(v) } +
63532 _.each(navigation(v), function (w) { +
63533 doDfs(g, w, postorder, visited, navigation, acc) +
63534 }) +
63535 if (postorder) { acc.push(v) } +
63536 } +
63537} +
63538 +
63539 +
63540/***/ }), +
63541 +
63542/***/ "./node_modules/graphlibrary/lib/alg/dijkstra-all.js": +
63543/*!***********************************************************!*\ +
63544 !*** ./node_modules/graphlibrary/lib/alg/dijkstra-all.js ***! +
63545 \***********************************************************/ +
63546/*! no static exports found */ +
63547/***/ (function(module, exports, __webpack_require__) { +
63548 +
63549const dijkstra = __webpack_require__(/*! ./dijkstra */ "./node_modules/graphlibrary/lib/alg/dijkstra.js") +
63550const _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63551 +
63552module.exports = dijkstraAll +
63553 +
63554function dijkstraAll (g, weightFunc, edgeFunc) { +
63555 return _.transform(g.nodes(), function (acc, v) { +
63556 acc[v] = dijkstra(g, v, weightFunc, edgeFunc) +
63557 }, {}) +
63558} +
63559 +
63560 +
63561/***/ }), +
63562 +
63563/***/ "./node_modules/graphlibrary/lib/alg/dijkstra.js": +
63564/*!*******************************************************!*\ +
63565 !*** ./node_modules/graphlibrary/lib/alg/dijkstra.js ***! +
63566 \*******************************************************/ +
63567/*! no static exports found */ +
63568/***/ (function(module, exports, __webpack_require__) { +
63569 +
63570const _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63571const PriorityQueue = __webpack_require__(/*! ../data/priority-queue */ "./node_modules/graphlibrary/lib/data/priority-queue.js") +
63572 +
63573module.exports = dijkstra +
63574 +
63575var DEFAULT_WEIGHT_FUNC = _.constant(1) +
63576 +
63577function dijkstra (g, source, weightFn, edgeFn) { +
63578 return runDijkstra(g, String(source), +
63579 weightFn || DEFAULT_WEIGHT_FUNC, +
63580 edgeFn || function (v) { return g.outEdges(v) }) +
63581} +
63582 +
63583function runDijkstra (g, source, weightFn, edgeFn) { +
63584 const results = {} +
63585 const pq = new PriorityQueue() +
63586 let v, vEntry +
63587 +
63588 var updateNeighbors = function (edge) { +
63589 const w = edge.v !== v ? edge.v : edge.w +
63590 const wEntry = results[w] +
63591 const weight = weightFn(edge) +
63592 const distance = vEntry.distance + weight +
63593 +
63594 if (weight < 0) { +
63595 throw new Error('dijkstra does not allow negative edge weights. ' + +
63596 'Bad edge: ' + edge + ' Weight: ' + weight) +
63597 } +
63598 +
63599 if (distance < wEntry.distance) { +
63600 wEntry.distance = distance +
63601 wEntry.predecessor = v +
63602 pq.decrease(w, distance) +
63603 } +
63604 } +
63605 +
63606 g.nodes().forEach(function (v) { +
63607 var distance = v === source ? 0 : Number.POSITIVE_INFINITY +
63608 results[v] = { distance: distance } +
63609 pq.add(v, distance) +
63610 }) +
63611 +
63612 while (pq.size() > 0) { +
63613 v = pq.removeMin() +
63614 vEntry = results[v] +
63615 if (vEntry.distance === Number.POSITIVE_INFINITY) { +
63616 break +
63617 } +
63618 +
63619 edgeFn(v).forEach(updateNeighbors) +
63620 } +
63621 +
63622 return results +
63623} +
63624 +
63625 +
63626/***/ }), +
63627 +
63628/***/ "./node_modules/graphlibrary/lib/alg/find-cycles.js": +
63629/*!**********************************************************!*\ +
63630 !*** ./node_modules/graphlibrary/lib/alg/find-cycles.js ***! +
63631 \**********************************************************/ +
63632/*! no static exports found */ +
63633/***/ (function(module, exports, __webpack_require__) { +
63634 +
63635const _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63636const tarjan = __webpack_require__(/*! ./tarjan */ "./node_modules/graphlibrary/lib/alg/tarjan.js") +
63637 +
63638module.exports = findCycles +
63639 +
63640function findCycles (g) { +
63641 return _.filter(tarjan(g), function (cmpt) { +
63642 return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0])) +
63643 }) +
63644} +
63645 +
63646 +
63647/***/ }), +
63648 +
63649/***/ "./node_modules/graphlibrary/lib/alg/floyd-warshall.js": +
63650/*!*************************************************************!*\ +
63651 !*** ./node_modules/graphlibrary/lib/alg/floyd-warshall.js ***! +
63652 \*************************************************************/ +
63653/*! no static exports found */ +
63654/***/ (function(module, exports, __webpack_require__) { +
63655 +
63656var _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63657 +
63658module.exports = floydWarshall +
63659 +
63660var DEFAULT_WEIGHT_FUNC = _.constant(1) +
63661 +
63662function floydWarshall (g, weightFn, edgeFn) { +
63663 return runFloydWarshall(g, +
63664 weightFn || DEFAULT_WEIGHT_FUNC, +
63665 edgeFn || function (v) { return g.outEdges(v) }) +
63666} +
63667 +
63668function runFloydWarshall (g, weightFn, edgeFn) { +
63669 const results = {} +
63670 const nodes = g.nodes() +
63671 +
63672 nodes.forEach(function (v) { +
63673 results[v] = {} +
63674 results[v][v] = { distance: 0 } +
63675 nodes.forEach(function (w) { +
63676 if (v !== w) { +
63677 results[v][w] = { distance: Number.POSITIVE_INFINITY } +
63678 } +
63679 }) +
63680 edgeFn(v).forEach(function (edge) { +
63681 const w = edge.v === v ? edge.w : edge.v +
63682 const d = weightFn(edge) +
63683 results[v][w] = { distance: d, predecessor: v } +
63684 }) +
63685 }) +
63686 +
63687 nodes.forEach(function (k) { +
63688 var rowK = results[k] +
63689 nodes.forEach(function (i) { +
63690 var rowI = results[i] +
63691 nodes.forEach(function (j) { +
63692 var ik = rowI[k] +
63693 var kj = rowK[j] +
63694 var ij = rowI[j] +
63695 var altDistance = ik.distance + kj.distance +
63696 if (altDistance < ij.distance) { +
63697 ij.distance = altDistance +
63698 ij.predecessor = kj.predecessor +
63699 } +
63700 }) +
63701 }) +
63702 }) +
63703 +
63704 return results +
63705} +
63706 +
63707 +
63708/***/ }), +
63709 +
63710/***/ "./node_modules/graphlibrary/lib/alg/index.js": +
63711/*!****************************************************!*\ +
63712 !*** ./node_modules/graphlibrary/lib/alg/index.js ***! +
63713 \****************************************************/ +
63714/*! no static exports found */ +
63715/***/ (function(module, exports, __webpack_require__) { +
63716 +
63717module.exports = { +
63718 components: __webpack_require__(/*! ./components */ "./node_modules/graphlibrary/lib/alg/components.js"), +
63719 dijkstra: __webpack_require__(/*! ./dijkstra */ "./node_modules/graphlibrary/lib/alg/dijkstra.js"), +
63720 dijkstraAll: __webpack_require__(/*! ./dijkstra-all */ "./node_modules/graphlibrary/lib/alg/dijkstra-all.js"), +
63721 findCycles: __webpack_require__(/*! ./find-cycles */ "./node_modules/graphlibrary/lib/alg/find-cycles.js"), +
63722 floydWarshall: __webpack_require__(/*! ./floyd-warshall */ "./node_modules/graphlibrary/lib/alg/floyd-warshall.js"), +
63723 isAcyclic: __webpack_require__(/*! ./is-acyclic */ "./node_modules/graphlibrary/lib/alg/is-acyclic.js"), +
63724 postorder: __webpack_require__(/*! ./postorder */ "./node_modules/graphlibrary/lib/alg/postorder.js"), +
63725 preorder: __webpack_require__(/*! ./preorder */ "./node_modules/graphlibrary/lib/alg/preorder.js"), +
63726 prim: __webpack_require__(/*! ./prim */ "./node_modules/graphlibrary/lib/alg/prim.js"), +
63727 tarjan: __webpack_require__(/*! ./tarjan */ "./node_modules/graphlibrary/lib/alg/tarjan.js"), +
63728 topsort: __webpack_require__(/*! ./topsort */ "./node_modules/graphlibrary/lib/alg/topsort.js") +
63729} +
63730 +
63731 +
63732/***/ }), +
63733 +
63734/***/ "./node_modules/graphlibrary/lib/alg/is-acyclic.js": +
63735/*!*********************************************************!*\ +
63736 !*** ./node_modules/graphlibrary/lib/alg/is-acyclic.js ***! +
63737 \*********************************************************/ +
63738/*! no static exports found */ +
63739/***/ (function(module, exports, __webpack_require__) { +
63740 +
63741var topsort = __webpack_require__(/*! ./topsort */ "./node_modules/graphlibrary/lib/alg/topsort.js") +
63742 +
63743module.exports = isAcyclic +
63744 +
63745function isAcyclic (g) { +
63746 try { +
63747 topsort(g) +
63748 } catch (e) { +
63749 if (e instanceof topsort.CycleException) { +
63750 return false +
63751 } +
63752 throw e +
63753 } +
63754 return true +
63755} +
63756 +
63757 +
63758/***/ }), +
63759 +
63760/***/ "./node_modules/graphlibrary/lib/alg/postorder.js": +
63761/*!********************************************************!*\ +
63762 !*** ./node_modules/graphlibrary/lib/alg/postorder.js ***! +
63763 \********************************************************/ +
63764/*! no static exports found */ +
63765/***/ (function(module, exports, __webpack_require__) { +
63766 +
63767var dfs = __webpack_require__(/*! ./dfs */ "./node_modules/graphlibrary/lib/alg/dfs.js") +
63768 +
63769module.exports = postorder +
63770 +
63771function postorder (g, vs) { +
63772 return dfs(g, vs, 'post') +
63773} +
63774 +
63775 +
63776/***/ }), +
63777 +
63778/***/ "./node_modules/graphlibrary/lib/alg/preorder.js": +
63779/*!*******************************************************!*\ +
63780 !*** ./node_modules/graphlibrary/lib/alg/preorder.js ***! +
63781 \*******************************************************/ +
63782/*! no static exports found */ +
63783/***/ (function(module, exports, __webpack_require__) { +
63784 +
63785var dfs = __webpack_require__(/*! ./dfs */ "./node_modules/graphlibrary/lib/alg/dfs.js") +
63786 +
63787module.exports = preorder +
63788 +
63789function preorder (g, vs) { +
63790 return dfs(g, vs, 'pre') +
63791} +
63792 +
63793 +
63794/***/ }), +
63795 +
63796/***/ "./node_modules/graphlibrary/lib/alg/prim.js": +
63797/*!***************************************************!*\ +
63798 !*** ./node_modules/graphlibrary/lib/alg/prim.js ***! +
63799 \***************************************************/ +
63800/*! no static exports found */ +
63801/***/ (function(module, exports, __webpack_require__) { +
63802 +
63803const _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63804const Graph = __webpack_require__(/*! ../graph */ "./node_modules/graphlibrary/lib/graph.js") +
63805const PriorityQueue = __webpack_require__(/*! ../data/priority-queue */ "./node_modules/graphlibrary/lib/data/priority-queue.js") +
63806 +
63807module.exports = prim +
63808 +
63809function prim (g, weightFunc) { +
63810 const result = new Graph() +
63811 const parents = {} +
63812 const pq = new PriorityQueue() +
63813 let v +
63814 +
63815 function updateNeighbors (edge) { +
63816 const w = edge.v === v ? edge.w : edge.v +
63817 const pri = pq.priority(w) +
63818 if (pri !== undefined) { +
63819 var edgeWeight = weightFunc(edge) +
63820 if (edgeWeight < pri) { +
63821 parents[w] = v +
63822 pq.decrease(w, edgeWeight) +
63823 } +
63824 } +
63825 } +
63826 +
63827 if (g.nodeCount() === 0) { +
63828 return result +
63829 } +
63830 +
63831 _.each(g.nodes(), function (v) { +
63832 pq.add(v, Number.POSITIVE_INFINITY) +
63833 result.setNode(v) +
63834 }) +
63835 +
63836 // Start from an arbitrary node +
63837 pq.decrease(g.nodes()[0], 0) +
63838 +
63839 var init = false +
63840 while (pq.size() > 0) { +
63841 v = pq.removeMin() +
63842 if (_.has(parents, v)) { +
63843 result.setEdge(v, parents[v]) +
63844 } else if (init) { +
63845 throw new Error('Input graph is not connected: ' + g) +
63846 } else { +
63847 init = true +
63848 } +
63849 +
63850 g.nodeEdges(v).forEach(updateNeighbors) +
63851 } +
63852 +
63853 return result +
63854} +
63855 +
63856 +
63857/***/ }), +
63858 +
63859/***/ "./node_modules/graphlibrary/lib/alg/tarjan.js": +
63860/*!*****************************************************!*\ +
63861 !*** ./node_modules/graphlibrary/lib/alg/tarjan.js ***! +
63862 \*****************************************************/ +
63863/*! no static exports found */ +
63864/***/ (function(module, exports, __webpack_require__) { +
63865 +
63866var _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63867 +
63868module.exports = tarjan +
63869 +
63870function tarjan (g) { +
63871 let index = 0 +
63872 const stack = [] +
63873 const visited = {} // node id -> { onStack, lowlink, index } +
63874 const results = [] +
63875 +
63876 function dfs (v) { +
63877 var entry = visited[v] = { +
63878 onStack: true, +
63879 lowlink: index, +
63880 index: index++ +
63881 } +
63882 stack.push(v) +
63883 +
63884 g.successors(v).forEach(function (w) { +
63885 if (!_.has(visited, w)) { +
63886 dfs(w) +
63887 entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink) +
63888 } else if (visited[w].onStack) { +
63889 entry.lowlink = Math.min(entry.lowlink, visited[w].index) +
63890 } +
63891 }) +
63892 +
63893 if (entry.lowlink === entry.index) { +
63894 const cmpt = [] +
63895 let w +
63896 do { +
63897 w = stack.pop() +
63898 visited[w].onStack = false +
63899 cmpt.push(w) +
63900 } while (v !== w) +
63901 results.push(cmpt) +
63902 } +
63903 } +
63904 +
63905 g.nodes().forEach(function (v) { +
63906 if (!_.has(visited, v)) { +
63907 dfs(v) +
63908 } +
63909 }) +
63910 +
63911 return results +
63912} +
63913 +
63914 +
63915/***/ }), +
63916 +
63917/***/ "./node_modules/graphlibrary/lib/alg/topsort.js": +
63918/*!******************************************************!*\ +
63919 !*** ./node_modules/graphlibrary/lib/alg/topsort.js ***! +
63920 \******************************************************/ +
63921/*! no static exports found */ +
63922/***/ (function(module, exports, __webpack_require__) { +
63923 +
63924const _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63925 +
63926module.exports = topsort +
63927topsort.CycleException = CycleException +
63928 +
63929function topsort (g) { +
63930 const visited = {} +
63931 const stack = {} +
63932 const results = [] +
63933 +
63934 function visit (node) { +
63935 if (_.has(stack, node)) { +
63936 throw new CycleException() +
63937 } +
63938 +
63939 if (!_.has(visited, node)) { +
63940 stack[node] = true +
63941 visited[node] = true +
63942 _.each(g.predecessors(node), visit) +
63943 delete stack[node] +
63944 results.push(node) +
63945 } +
63946 } +
63947 +
63948 _.each(g.sinks(), visit) +
63949 +
63950 if (_.size(visited) !== g.nodeCount()) { +
63951 throw new CycleException() +
63952 } +
63953 +
63954 return results +
63955} +
63956 +
63957function CycleException () {} +
63958CycleException.prototype = new Error() // must be an instance of Error to pass testing +
63959 +
63960 +
63961/***/ }), +
63962 +
63963/***/ "./node_modules/graphlibrary/lib/data/priority-queue.js": +
63964/*!**************************************************************!*\ +
63965 !*** ./node_modules/graphlibrary/lib/data/priority-queue.js ***! +
63966 \**************************************************************/ +
63967/*! no static exports found */ +
63968/***/ (function(module, exports, __webpack_require__) { +
63969 +
63970const _ = __webpack_require__(/*! ../lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
63971 +
63972module.exports = PriorityQueue +
63973 +
63974/** +
63975 * A min-priority queue data structure. This algorithm is derived from Cormen, +
63976 * et al., "Introduction to Algorithms". The basic idea of a min-priority +
63977 * queue is that you can efficiently (in O(1) time) get the smallest key in +
63978 * the queue. Adding and removing elements takes O(log n) time. A key can +
63979 * have its priority decreased in O(log n) time. +
63980 */ +
63981function PriorityQueue () { +
63982 this._arr = [] +
63983 this._keyIndices = {} +
63984} +
63985 +
63986/** +
63987 * Returns the number of elements in the queue. Takes `O(1)` time. +
63988 */ +
63989PriorityQueue.prototype.size = function () { +
63990 return this._arr.length +
63991} +
63992 +
63993/** +
63994 * Returns the keys that are in the queue. Takes `O(n)` time. +
63995 */ +
63996PriorityQueue.prototype.keys = function () { +
63997 return this._arr.map(function (x) { return x.key }) +
63998} +
63999 +
64000/** +
64001 * Returns `true` if **key** is in the queue and `false` if not. +
64002 */ +
64003PriorityQueue.prototype.has = function (key) { +
64004 return _.has(this._keyIndices, key) +
64005} +
64006 +
64007/** +
64008 * Returns the priority for **key**. If **key** is not present in the queue +
64009 * then this function returns `undefined`. Takes `O(1)` time. +
64010 * +
64011 * @param {Object} key +
64012 */ +
64013PriorityQueue.prototype.priority = function (key) { +
64014 var index = this._keyIndices[key] +
64015 if (index !== undefined) { +
64016 return this._arr[index].priority +
64017 } +
64018} +
64019 +
64020/** +
64021 * Returns the key for the minimum element in this queue. If the queue is +
64022 * empty this function throws an Error. Takes `O(1)` time. +
64023 */ +
64024PriorityQueue.prototype.min = function () { +
64025 if (this.size() === 0) { +
64026 throw new Error('Queue underflow') +
64027 } +
64028 return this._arr[0].key +
64029} +
64030 +
64031/** +
64032 * Inserts a new key into the priority queue. If the key already exists in +
64033 * the queue this function returns `false`; otherwise it will return `true`. +
64034 * Takes `O(n)` time. +
64035 * +
64036 * @param {Object} key the key to add +
64037 * @param {Number} priority the initial priority for the key +
64038 */ +
64039PriorityQueue.prototype.add = function (key, priority) { +
64040 var keyIndices = this._keyIndices +
64041 key = String(key) +
64042 if (!_.has(keyIndices, key)) { +
64043 var arr = this._arr +
64044 var index = arr.length +
64045 keyIndices[key] = index +
64046 arr.push({key: key, priority: priority}) +
64047 this._decrease(index) +
64048 return true +
64049 } +
64050 return false +
64051} +
64052 +
64053/** +
64054 * Removes and returns the smallest key in the queue. Takes `O(log n)` time. +
64055 */ +
64056PriorityQueue.prototype.removeMin = function () { +
64057 this._swap(0, this._arr.length - 1) +
64058 var min = this._arr.pop() +
64059 delete this._keyIndices[min.key] +
64060 this._heapify(0) +
64061 return min.key +
64062} +
64063 +
64064/** +
64065 * Decreases the priority for **key** to **priority**. If the new priority is +
64066 * greater than the previous priority, this function will throw an Error. +
64067 * +
64068 * @param {Object} key the key for which to raise priority +
64069 * @param {Number} priority the new priority for the key +
64070 */ +
64071PriorityQueue.prototype.decrease = function (key, priority) { +
64072 var index = this._keyIndices[key] +
64073 if (priority > this._arr[index].priority) { +
64074 throw new Error('New priority is greater than current priority. ' + +
64075 'Key: ' + key + ' Old: ' + this._arr[index].priority + ' New: ' + priority) +
64076 } +
64077 this._arr[index].priority = priority +
64078 this._decrease(index) +
64079} +
64080 +
64081PriorityQueue.prototype._heapify = function (i) { +
64082 const arr = this._arr +
64083 const l = 2 * i +
64084 const r = l + 1 +
64085 let largest = i +
64086 if (l < arr.length) { +
64087 largest = arr[l].priority < arr[largest].priority ? l : largest +
64088 if (r < arr.length) { +
64089 largest = arr[r].priority < arr[largest].priority ? r : largest +
64090 } +
64091 if (largest !== i) { +
64092 this._swap(i, largest) +
64093 this._heapify(largest) +
64094 } +
64095 } +
64096} +
64097 +
64098PriorityQueue.prototype._decrease = function (index) { +
64099 var arr = this._arr +
64100 var priority = arr[index].priority +
64101 var parent +
64102 while (index !== 0) { +
64103 parent = index >> 1 +
64104 if (arr[parent].priority < priority) { +
64105 break +
64106 } +
64107 this._swap(index, parent) +
64108 index = parent +
64109 } +
64110} +
64111 +
64112PriorityQueue.prototype._swap = function (i, j) { +
64113 var arr = this._arr +
64114 var keyIndices = this._keyIndices +
64115 var origArrI = arr[i] +
64116 var origArrJ = arr[j] +
64117 arr[i] = origArrJ +
64118 arr[j] = origArrI +
64119 keyIndices[origArrJ.key] = i +
64120 keyIndices[origArrI.key] = j +
64121} +
64122 +
64123 +
64124/***/ }), +
64125 +
64126/***/ "./node_modules/graphlibrary/lib/graph.js": +
64127/*!************************************************!*\ +
64128 !*** ./node_modules/graphlibrary/lib/graph.js ***! +
64129 \************************************************/ +
64130/*! no static exports found */ +
64131/***/ (function(module, exports, __webpack_require__) { +
64132 +
64133const _ = __webpack_require__(/*! ./lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
64134 +
64135module.exports = Graph +
64136 +
64137const DEFAULT_EDGE_NAME = '\x00' +
64138const GRAPH_NODE = '\x00' +
64139const EDGE_KEY_DELIM = '\x01' +
64140 +
64141// Implementation notes: +
64142// +
64143// * Node id query functions should return string ids for the nodes +
64144// * Edge id query functions should return an "edgeObj", edge object, that is +
64145// composed of enough information to uniquely identify an edge: {v, w, name}. +
64146// * Internally we use an "edgeId", a stringified form of the edgeObj, to +
64147// reference edges. This is because we need a performant way to look these +
64148// edges up and, object properties, which have string keys, are the closest +
64149// we're going to get to a performant hashtable in JavaScript. +
64150 +
64151function Graph (opts) { +
64152 this._isDirected = _.has(opts, 'directed') ? opts.directed : true +
64153 this._isMultigraph = _.has(opts, 'multigraph') ? opts.multigraph : false +
64154 this._isCompound = _.has(opts, 'compound') ? opts.compound : false +
64155 +
64156 // Label for the graph itself +
64157 this._label = undefined +
64158 +
64159 // Defaults to be set when creating a new node +
64160 this._defaultNodeLabelFn = _.constant(undefined) +
64161 +
64162 // Defaults to be set when creating a new edge +
64163 this._defaultEdgeLabelFn = _.constant(undefined) +
64164 +
64165 // v -> label +
64166 this._nodes = {} +
64167 +
64168 if (this._isCompound) { +
64169 // v -> parent +
64170 this._parent = {} +
64171 +
64172 // v -> children +
64173 this._children = {} +
64174 this._children[GRAPH_NODE] = {} +
64175 } +
64176 +
64177 // v -> edgeObj +
64178 this._in = {} +
64179 +
64180 // u -> v -> Number +
64181 this._preds = {} +
64182 +
64183 // v -> edgeObj +
64184 this._out = {} +
64185 +
64186 // v -> w -> Number +
64187 this._sucs = {} +
64188 +
64189 // e -> edgeObj +
64190 this._edgeObjs = {} +
64191 +
64192 // e -> label +
64193 this._edgeLabels = {} +
64194} +
64195 +
64196/* Number of nodes in the graph. Should only be changed by the implementation. */ +
64197Graph.prototype._nodeCount = 0 +
64198 +
64199/* Number of edges in the graph. Should only be changed by the implementation. */ +
64200Graph.prototype._edgeCount = 0 +
64201 +
64202/* === Graph functions ========= */ +
64203 +
64204Graph.prototype.isDirected = function () { +
64205 return this._isDirected +
64206} +
64207 +
64208Graph.prototype.isMultigraph = function () { +
64209 return this._isMultigraph +
64210} +
64211 +
64212Graph.prototype.isCompound = function () { +
64213 return this._isCompound +
64214} +
64215 +
64216Graph.prototype.setGraph = function (label) { +
64217 this._label = label +
64218 return this +
64219} +
64220 +
64221Graph.prototype.graph = function () { +
64222 return this._label +
64223} +
64224 +
64225/* === Node functions ========== */ +
64226 +
64227Graph.prototype.setDefaultNodeLabel = function (newDefault) { +
64228 if (!_.isFunction(newDefault)) { +
64229 newDefault = _.constant(newDefault) +
64230 } +
64231 this._defaultNodeLabelFn = newDefault +
64232 return this +
64233} +
64234 +
64235Graph.prototype.nodeCount = function () { +
64236 return this._nodeCount +
64237} +
64238 +
64239Graph.prototype.nodes = function () { +
64240 return _.keys(this._nodes) +
64241} +
64242 +
64243Graph.prototype.sources = function () { +
64244 var self = this +
64245 return _.filter(this.nodes(), function (v) { +
64246 return _.isEmpty(self._in[v]) +
64247 }) +
64248} +
64249 +
64250Graph.prototype.sinks = function () { +
64251 var self = this +
64252 return _.filter(this.nodes(), function (v) { +
64253 return _.isEmpty(self._out[v]) +
64254 }) +
64255} +
64256 +
64257Graph.prototype.setNodes = function (vs, value) { +
64258 var args = arguments +
64259 var self = this +
64260 _.each(vs, function (v) { +
64261 if (args.length > 1) { +
64262 self.setNode(v, value) +
64263 } else { +
64264 self.setNode(v) +
64265 } +
64266 }) +
64267 return this +
64268} +
64269 +
64270Graph.prototype.setNode = function (v, value) { +
64271 if (_.has(this._nodes, v)) { +
64272 if (arguments.length > 1) { +
64273 this._nodes[v] = value +
64274 } +
64275 return this +
64276 } +
64277 +
64278 this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v) +
64279 if (this._isCompound) { +
64280 this._parent[v] = GRAPH_NODE +
64281 this._children[v] = {} +
64282 this._children[GRAPH_NODE][v] = true +
64283 } +
64284 this._in[v] = {} +
64285 this._preds[v] = {} +
64286 this._out[v] = {} +
64287 this._sucs[v] = {} +
64288 ++this._nodeCount +
64289 return this +
64290} +
64291 +
64292Graph.prototype.node = function (v) { +
64293 return this._nodes[v] +
64294} +
64295 +
64296Graph.prototype.hasNode = function (v) { +
64297 return _.has(this._nodes, v) +
64298} +
64299 +
64300Graph.prototype.removeNode = function (v) { +
64301 var self = this +
64302 if (_.has(this._nodes, v)) { +
64303 var removeEdge = function (e) { self.removeEdge(self._edgeObjs[e]) } +
64304 delete this._nodes[v] +
64305 if (this._isCompound) { +
64306 this._removeFromParentsChildList(v) +
64307 delete this._parent[v] +
64308 _.each(this.children(v), function (child) { +
64309 self.setParent(child) +
64310 }) +
64311 delete this._children[v] +
64312 } +
64313 _.each(_.keys(this._in[v]), removeEdge) +
64314 delete this._in[v] +
64315 delete this._preds[v] +
64316 _.each(_.keys(this._out[v]), removeEdge) +
64317 delete this._out[v] +
64318 delete this._sucs[v] +
64319 --this._nodeCount +
64320 } +
64321 return this +
64322} +
64323 +
64324Graph.prototype.setParent = function (v, parent) { +
64325 if (!this._isCompound) { +
64326 throw new Error('Cannot set parent in a non-compound graph') +
64327 } +
64328 +
64329 if (_.isUndefined(parent)) { +
64330 parent = GRAPH_NODE +
64331 } else { +
64332 // Coerce parent to string +
64333 parent += '' +
64334 for (var ancestor = parent; +
64335 !_.isUndefined(ancestor); +
64336 ancestor = this.parent(ancestor)) { +
64337 if (ancestor === v) { +
64338 throw new Error('Setting ' + parent + ' as parent of ' + v + +
64339 ' would create a cycle') +
64340 } +
64341 } +
64342 +
64343 this.setNode(parent) +
64344 } +
64345 +
64346 this.setNode(v) +
64347 this._removeFromParentsChildList(v) +
64348 this._parent[v] = parent +
64349 this._children[parent][v] = true +
64350 return this +
64351} +
64352 +
64353Graph.prototype._removeFromParentsChildList = function (v) { +
64354 delete this._children[this._parent[v]][v] +
64355} +
64356 +
64357Graph.prototype.parent = function (v) { +
64358 if (this._isCompound) { +
64359 var parent = this._parent[v] +
64360 if (parent !== GRAPH_NODE) { +
64361 return parent +
64362 } +
64363 } +
64364} +
64365 +
64366Graph.prototype.children = function (v) { +
64367 if (_.isUndefined(v)) { +
64368 v = GRAPH_NODE +
64369 } +
64370 +
64371 if (this._isCompound) { +
64372 var children = this._children[v] +
64373 if (children) { +
64374 return _.keys(children) +
64375 } +
64376 } else if (v === GRAPH_NODE) { +
64377 return this.nodes() +
64378 } else if (this.hasNode(v)) { +
64379 return [] +
64380 } +
64381} +
64382 +
64383Graph.prototype.predecessors = function (v) { +
64384 var predsV = this._preds[v] +
64385 if (predsV) { +
64386 return _.keys(predsV) +
64387 } +
64388} +
64389 +
64390Graph.prototype.successors = function (v) { +
64391 var sucsV = this._sucs[v] +
64392 if (sucsV) { +
64393 return _.keys(sucsV) +
64394 } +
64395} +
64396 +
64397Graph.prototype.neighbors = function (v) { +
64398 var preds = this.predecessors(v) +
64399 if (preds) { +
64400 return _.union(preds, this.successors(v)) +
64401 } +
64402} +
64403 +
64404Graph.prototype.isLeaf = function (v) { +
64405 var neighbors +
64406 if (this.isDirected()) { +
64407 neighbors = this.successors(v) +
64408 } else { +
64409 neighbors = this.neighbors(v) +
64410 } +
64411 return neighbors.length === 0 +
64412} +
64413 +
64414Graph.prototype.filterNodes = function (filter) { +
64415 var copy = new this.constructor({ +
64416 directed: this._isDirected, +
64417 multigraph: this._isMultigraph, +
64418 compound: this._isCompound +
64419 }) +
64420 +
64421 copy.setGraph(this.graph()) +
64422 +
64423 var self = this +
64424 _.each(this._nodes, function (value, v) { +
64425 if (filter(v)) { +
64426 copy.setNode(v, value) +
64427 } +
64428 }) +
64429 +
64430 _.each(this._edgeObjs, function (e) { +
64431 if (copy.hasNode(e.v) && copy.hasNode(e.w)) { +
64432 copy.setEdge(e, self.edge(e)) +
64433 } +
64434 }) +
64435 +
64436 var parents = {} +
64437 function findParent (v) { +
64438 var parent = self.parent(v) +
64439 if (parent === undefined || copy.hasNode(parent)) { +
64440 parents[v] = parent +
64441 return parent +
64442 } else if (parent in parents) { +
64443 return parents[parent] +
64444 } else { +
64445 return findParent(parent) +
64446 } +
64447 } +
64448 +
64449 if (this._isCompound) { +
64450 _.each(copy.nodes(), function (v) { +
64451 copy.setParent(v, findParent(v)) +
64452 }) +
64453 } +
64454 +
64455 return copy +
64456} +
64457 +
64458/* === Edge functions ========== */ +
64459 +
64460Graph.prototype.setDefaultEdgeLabel = function (newDefault) { +
64461 if (!_.isFunction(newDefault)) { +
64462 newDefault = _.constant(newDefault) +
64463 } +
64464 this._defaultEdgeLabelFn = newDefault +
64465 return this +
64466} +
64467 +
64468Graph.prototype.edgeCount = function () { +
64469 return this._edgeCount +
64470} +
64471 +
64472Graph.prototype.edges = function () { +
64473 return _.values(this._edgeObjs) +
64474} +
64475 +
64476Graph.prototype.setPath = function (vs, value) { +
64477 const self = this +
64478 const args = arguments +
64479 _.reduce(vs, function (v, w) { +
64480 if (args.length > 1) { +
64481 self.setEdge(v, w, value) +
64482 } else { +
64483 self.setEdge(v, w) +
64484 } +
64485 return w +
64486 }) +
64487 return this +
64488} +
64489 +
64490/* +
64491 * setEdge(v, w, [value, [name]]) +
64492 * setEdge({ v, w, [name] }, [value]) +
64493 */ +
64494Graph.prototype.setEdge = function () { +
64495 let v, w, name, value +
64496 let valueSpecified = false +
64497 const arg0 = arguments[0] +
64498 +
64499 if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) { +
64500 v = arg0.v +
64501 w = arg0.w +
64502 name = arg0.name +
64503 if (arguments.length === 2) { +
64504 value = arguments[1] +
64505 valueSpecified = true +
64506 } +
64507 } else { +
64508 v = arg0 +
64509 w = arguments[1] +
64510 name = arguments[3] +
64511 if (arguments.length > 2) { +
64512 value = arguments[2] +
64513 valueSpecified = true +
64514 } +
64515 } +
64516 +
64517 v = '' + v +
64518 w = '' + w +
64519 if (!_.isUndefined(name)) { +
64520 name = '' + name +
64521 } +
64522 +
64523 var e = edgeArgsToId(this._isDirected, v, w, name) +
64524 if (_.has(this._edgeLabels, e)) { +
64525 if (valueSpecified) { +
64526 this._edgeLabels[e] = value +
64527 } +
64528 return this +
64529 } +
64530 +
64531 if (!_.isUndefined(name) && !this._isMultigraph) { +
64532 throw new Error('Cannot set a named edge when isMultigraph = false') +
64533 } +
64534 +
64535 // It didn't exist, so we need to create it. +
64536 // First ensure the nodes exist. +
64537 this.setNode(v) +
64538 this.setNode(w) +
64539 +
64540 this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name) +
64541 +
64542 var edgeObj = edgeArgsToObj(this._isDirected, v, w, name) +
64543 // Ensure we add undirected edges in a consistent way. +
64544 v = edgeObj.v +
64545 w = edgeObj.w +
64546 +
64547 Object.freeze(edgeObj) +
64548 this._edgeObjs[e] = edgeObj +
64549 incrementOrInitEntry(this._preds[w], v) +
64550 incrementOrInitEntry(this._sucs[v], w) +
64551 this._in[w][e] = edgeObj +
64552 this._out[v][e] = edgeObj +
64553 this._edgeCount++ +
64554 return this +
64555} +
64556 +
64557Graph.prototype.edge = function (v, w, name) { +
64558 var e = (arguments.length === 1 +
64559 ? edgeObjToId(this._isDirected, arguments[0]) +
64560 : edgeArgsToId(this._isDirected, v, w, name)) +
64561 return this._edgeLabels[e] +
64562} +
64563 +
64564Graph.prototype.hasEdge = function (v, w, name) { +
64565 var e = (arguments.length === 1 +
64566 ? edgeObjToId(this._isDirected, arguments[0]) +
64567 : edgeArgsToId(this._isDirected, v, w, name)) +
64568 return _.has(this._edgeLabels, e) +
64569} +
64570 +
64571Graph.prototype.removeEdge = function (v, w, name) { +
64572 const e = (arguments.length === 1 +
64573 ? edgeObjToId(this._isDirected, arguments[0]) +
64574 : edgeArgsToId(this._isDirected, v, w, name)) +
64575 const edge = this._edgeObjs[e] +
64576 if (edge) { +
64577 v = edge.v +
64578 w = edge.w +
64579 delete this._edgeLabels[e] +
64580 delete this._edgeObjs[e] +
64581 decrementOrRemoveEntry(this._preds[w], v) +
64582 decrementOrRemoveEntry(this._sucs[v], w) +
64583 delete this._in[w][e] +
64584 delete this._out[v][e] +
64585 this._edgeCount-- +
64586 } +
64587 return this +
64588} +
64589 +
64590Graph.prototype.inEdges = function (v, u) { +
64591 var inV = this._in[v] +
64592 if (inV) { +
64593 var edges = _.values(inV) +
64594 if (!u) { +
64595 return edges +
64596 } +
64597 return _.filter(edges, function (edge) { return edge.v === u }) +
64598 } +
64599} +
64600 +
64601Graph.prototype.outEdges = function (v, w) { +
64602 var outV = this._out[v] +
64603 if (outV) { +
64604 var edges = _.values(outV) +
64605 if (!w) { +
64606 return edges +
64607 } +
64608 return _.filter(edges, function (edge) { return edge.w === w }) +
64609 } +
64610} +
64611 +
64612Graph.prototype.nodeEdges = function (v, w) { +
64613 var inEdges = this.inEdges(v, w) +
64614 if (inEdges) { +
64615 return inEdges.concat(this.outEdges(v, w)) +
64616 } +
64617} +
64618 +
64619function incrementOrInitEntry (map, k) { +
64620 if (map[k]) { +
64621 map[k]++ +
64622 } else { +
64623 map[k] = 1 +
64624 } +
64625} +
64626 +
64627function decrementOrRemoveEntry (map, k) { +
64628 if (!--map[k]) { delete map[k] } +
64629} +
64630 +
64631function edgeArgsToId (isDirected, v_, w_, name) { +
64632 var v = '' + v_ +
64633 var w = '' + w_ +
64634 if (!isDirected && v > w) { +
64635 var tmp = v +
64636 v = w +
64637 w = tmp +
64638 } +
64639 return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + +
64640 (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name) +
64641} +
64642 +
64643function edgeArgsToObj (isDirected, v_, w_, name) { +
64644 var v = '' + v_ +
64645 var w = '' + w_ +
64646 if (!isDirected && v > w) { +
64647 var tmp = v +
64648 v = w +
64649 w = tmp +
64650 } +
64651 var edgeObj = { v: v, w: w } +
64652 if (name) { +
64653 edgeObj.name = name +
64654 } +
64655 return edgeObj +
64656} +
64657 +
64658function edgeObjToId (isDirected, edgeObj) { +
64659 return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name) +
64660} +
64661 +
64662 +
64663/***/ }), +
64664 +
64665/***/ "./node_modules/graphlibrary/lib/json.js": +
64666/*!***********************************************!*\ +
64667 !*** ./node_modules/graphlibrary/lib/json.js ***! +
64668 \***********************************************/ +
64669/*! no static exports found */ +
64670/***/ (function(module, exports, __webpack_require__) { +
64671 +
64672const _ = __webpack_require__(/*! ./lodash */ "./node_modules/graphlibrary/lib/lodash.js") +
64673const Graph = __webpack_require__(/*! ./graph */ "./node_modules/graphlibrary/lib/graph.js") +
64674 +
64675module.exports = { +
64676 write: write, +
64677 read: read +
64678} +
64679 +
64680function write (g) { +
64681 var json = { +
64682 options: { +
64683 directed: g.isDirected(), +
64684 multigraph: g.isMultigraph(), +
64685 compound: g.isCompound() +
64686 }, +
64687 nodes: writeNodes(g), +
64688 edges: writeEdges(g) +
64689 } +
64690 if (!_.isUndefined(g.graph())) { +
64691 json.value = _.clone(g.graph()) +
64692 } +
64693 return json +
64694} +
64695 +
64696function writeNodes (g) { +
64697 return _.map(g.nodes(), function (v) { +
64698 const nodeValue = g.node(v) +
64699 const parent = g.parent(v) +
64700 const node = { v: v } +
64701 if (!_.isUndefined(nodeValue)) { +
64702 node.value = nodeValue +
64703 } +
64704 if (!_.isUndefined(parent)) { +
64705 node.parent = parent +
64706 } +
64707 return node +
64708 }) +
64709} +
64710 +
64711function writeEdges (g) { +
64712 return _.map(g.edges(), function (e) { +
64713 const edgeValue = g.edge(e) +
64714 const edge = { v: e.v, w: e.w } +
64715 if (!_.isUndefined(e.name)) { +
64716 edge.name = e.name +
64717 } +
64718 if (!_.isUndefined(edgeValue)) { +
64719 edge.value = edgeValue +
64720 } +
64721 return edge +
64722 }) +
64723} +
64724 +
64725function read (json) { +
64726 var g = new Graph(json.options).setGraph(json.value) +
64727 _.each(json.nodes, function (entry) { +
64728 g.setNode(entry.v, entry.value) +
64729 if (entry.parent) { +
64730 g.setParent(entry.v, entry.parent) +
64731 } +
64732 }) +
64733 _.each(json.edges, function (entry) { +
64734 g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value) +
64735 }) +
64736 return g +
64737} +
64738 +
64739 +
64740/***/ }), +
64741 +
64742/***/ "./node_modules/graphlibrary/lib/lodash.js": +
64743/*!*************************************************!*\ +
64744 !*** ./node_modules/graphlibrary/lib/lodash.js ***! +
64745 \*************************************************/ +
64746/*! no static exports found */ +
64747/***/ (function(module, exports, __webpack_require__) { +
64748 +
64749/* global window */ +
64750 +
64751var lodash +
64752 +
64753if (true) { +
64754 try { +
64755 lodash = __webpack_require__(/*! lodash */ "./node_modules/graphlibrary/node_modules/lodash/lodash.js") +
64756 } catch (e) {} +
64757} +
64758 +
64759if (!lodash) { +
64760 lodash = window._ +
64761} +
64762 +
64763module.exports = lodash +
64764 +
64765 +
64766/***/ }), +
64767 +
64768/***/ "./node_modules/graphlibrary/node_modules/lodash/lodash.js": +
64769/*!*****************************************************************!*\ +
64770 !*** ./node_modules/graphlibrary/node_modules/lodash/lodash.js ***! +
64771 \*****************************************************************/ +
64772/*! no static exports found */ +
64773/***/ (function(module, exports, __webpack_require__) { +
64774 +
64775/* WEBPACK VAR INJECTION */(function(global, module) {/** +
64776 * @license +
64777 * Lodash <https://lodash.com/> +
64778 * Copyright JS Foundation and other contributors <https://js.foundation/> +
64779 * Released under MIT license <https://lodash.com/license> +
64780 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> +
64781 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +
64782 */ +
64783;(function() { +
64784 +
64785 /** Used as a safe reference for `undefined` in pre-ES5 environments. */ +
64786 var undefined; +
64787 +
64788 /** Used as the semantic version number. */ +
64789 var VERSION = '4.17.5'; +
64790 +
64791 /** Used as the size to enable large array optimizations. */ +
64792 var LARGE_ARRAY_SIZE = 200; +
64793 +
64794 /** Error message constants. */ +
64795 var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', +
64796 FUNC_ERROR_TEXT = 'Expected a function'; +
64797 +
64798 /** Used to stand-in for `undefined` hash values. */ +
64799 var HASH_UNDEFINED = '__lodash_hash_undefined__'; +
64800 +
64801 /** Used as the maximum memoize cache size. */ +
64802 var MAX_MEMOIZE_SIZE = 500; +
64803 +
64804 /** Used as the internal argument placeholder. */ +
64805 var PLACEHOLDER = '__lodash_placeholder__'; +
64806 +
64807 /** Used to compose bitmasks for cloning. */ +
64808 var CLONE_DEEP_FLAG = 1, +
64809 CLONE_FLAT_FLAG = 2, +
64810 CLONE_SYMBOLS_FLAG = 4; +
64811 +
64812 /** Used to compose bitmasks for value comparisons. */ +
64813 var COMPARE_PARTIAL_FLAG = 1, +
64814 COMPARE_UNORDERED_FLAG = 2; +
64815 +
64816 /** Used to compose bitmasks for function metadata. */ +
64817 var WRAP_BIND_FLAG = 1, +
64818 WRAP_BIND_KEY_FLAG = 2, +
64819 WRAP_CURRY_BOUND_FLAG = 4, +
64820 WRAP_CURRY_FLAG = 8, +
64821 WRAP_CURRY_RIGHT_FLAG = 16, +
64822 WRAP_PARTIAL_FLAG = 32, +
64823 WRAP_PARTIAL_RIGHT_FLAG = 64, +
64824 WRAP_ARY_FLAG = 128, +
64825 WRAP_REARG_FLAG = 256, +
64826 WRAP_FLIP_FLAG = 512; +
64827 +
64828 /** Used as default options for `_.truncate`. */ +
64829 var DEFAULT_TRUNC_LENGTH = 30, +
64830 DEFAULT_TRUNC_OMISSION = '...'; +
64831 +
64832 /** Used to detect hot functions by number of calls within a span of milliseconds. */ +
64833 var HOT_COUNT = 800, +
64834 HOT_SPAN = 16; +
64835 +
64836 /** Used to indicate the type of lazy iteratees. */ +
64837 var LAZY_FILTER_FLAG = 1, +
64838 LAZY_MAP_FLAG = 2, +
64839 LAZY_WHILE_FLAG = 3; +
64840 +
64841 /** Used as references for various `Number` constants. */ +
64842 var INFINITY = 1 / 0, +
64843 MAX_SAFE_INTEGER = 9007199254740991, +
64844 MAX_INTEGER = 1.7976931348623157e+308, +
64845 NAN = 0 / 0; +
64846 +
64847 /** Used as references for the maximum length and index of an array. */ +
64848 var MAX_ARRAY_LENGTH = 4294967295, +
64849 MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, +
64850 HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; +
64851 +
64852 /** Used to associate wrap methods with their bit flags. */ +
64853 var wrapFlags = [ +
64854 ['ary', WRAP_ARY_FLAG], +
64855 ['bind', WRAP_BIND_FLAG], +
64856 ['bindKey', WRAP_BIND_KEY_FLAG], +
64857 ['curry', WRAP_CURRY_FLAG], +
64858 ['curryRight', WRAP_CURRY_RIGHT_FLAG], +
64859 ['flip', WRAP_FLIP_FLAG], +
64860 ['partial', WRAP_PARTIAL_FLAG], +
64861 ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], +
64862 ['rearg', WRAP_REARG_FLAG] +
64863 ]; +
64864 +
64865 /** `Object#toString` result references. */ +
64866 var argsTag = '[object Arguments]', +
64867 arrayTag = '[object Array]', +
64868 asyncTag = '[object AsyncFunction]', +
64869 boolTag = '[object Boolean]', +
64870 dateTag = '[object Date]', +
64871 domExcTag = '[object DOMException]', +
64872 errorTag = '[object Error]', +
64873 funcTag = '[object Function]', +
64874 genTag = '[object GeneratorFunction]', +
64875 mapTag = '[object Map]', +
64876 numberTag = '[object Number]', +
64877 nullTag = '[object Null]', +
64878 objectTag = '[object Object]', +
64879 promiseTag = '[object Promise]', +
64880 proxyTag = '[object Proxy]', +
64881 regexpTag = '[object RegExp]', +
64882 setTag = '[object Set]', +
64883 stringTag = '[object String]', +
64884 symbolTag = '[object Symbol]', +
64885 undefinedTag = '[object Undefined]', +
64886 weakMapTag = '[object WeakMap]', +
64887 weakSetTag = '[object WeakSet]'; +
64888 +
64889 var arrayBufferTag = '[object ArrayBuffer]', +
64890 dataViewTag = '[object DataView]', +
64891 float32Tag = '[object Float32Array]', +
64892 float64Tag = '[object Float64Array]', +
64893 int8Tag = '[object Int8Array]', +
64894 int16Tag = '[object Int16Array]', +
64895 int32Tag = '[object Int32Array]', +
64896 uint8Tag = '[object Uint8Array]', +
64897 uint8ClampedTag = '[object Uint8ClampedArray]', +
64898 uint16Tag = '[object Uint16Array]', +
64899 uint32Tag = '[object Uint32Array]'; +
64900 +
64901 /** Used to match empty string literals in compiled template source. */ +
64902 var reEmptyStringLeading = /\b__p \+= '';/g, +
64903 reEmptyStringMiddle = /\b(__p \+=) '' \+/g, +
64904 reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; +
64905 +
64906 /** Used to match HTML entities and HTML characters. */ +
64907 var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, +
64908 reUnescapedHtml = /[&<>"']/g, +
64909 reHasEscapedHtml = RegExp(reEscapedHtml.source), +
64910 reHasUnescapedHtml = RegExp(reUnescapedHtml.source); +
64911 +
64912 /** Used to match template delimiters. */ +
64913 var reEscape = /<%-([\s\S]+?)%>/g, +
64914 reEvaluate = /<%([\s\S]+?)%>/g, +
64915 reInterpolate = /<%=([\s\S]+?)%>/g; +
64916 +
64917 /** Used to match property names within property paths. */ +
64918 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, +
64919 reIsPlainProp = /^\w*$/, +
64920 rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; +
64921 +
64922 /** +
64923 * Used to match `RegExp` +
64924 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). +
64925 */ +
64926 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, +
64927 reHasRegExpChar = RegExp(reRegExpChar.source); +
64928 +
64929 /** Used to match leading and trailing whitespace. */ +
64930 var reTrim = /^\s+|\s+$/g, +
64931 reTrimStart = /^\s+/, +
64932 reTrimEnd = /\s+$/; +
64933 +
64934 /** Used to match wrap detail comments. */ +
64935 var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, +
64936 reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, +
64937 reSplitDetails = /,? & /; +
64938 +
64939 /** Used to match words composed of alphanumeric characters. */ +
64940 var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; +
64941 +
64942 /** Used to match backslashes in property paths. */ +
64943 var reEscapeChar = /\\(\\)?/g; +
64944 +
64945 /** +
64946 * Used to match +
64947 * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). +
64948 */ +
64949 var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; +
64950 +
64951 /** Used to match `RegExp` flags from their coerced string values. */ +
64952 var reFlags = /\w*$/; +
64953 +
64954 /** Used to detect bad signed hexadecimal string values. */ +
64955 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; +
64956 +
64957 /** Used to detect binary string values. */ +
64958 var reIsBinary = /^0b[01]+$/i; +
64959 +
64960 /** Used to detect host constructors (Safari). */ +
64961 var reIsHostCtor = /^\[object .+?Constructor\]$/; +
64962 +
64963 /** Used to detect octal string values. */ +
64964 var reIsOctal = /^0o[0-7]+$/i; +
64965 +
64966 /** Used to detect unsigned integer values. */ +
64967 var reIsUint = /^(?:0|[1-9]\d*)$/; +
64968 +
64969 /** Used to match Latin Unicode letters (excluding mathematical operators). */ +
64970 var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; +
64971 +
64972 /** Used to ensure capturing order of template delimiters. */ +
64973 var reNoMatch = /($^)/; +
64974 +
64975 /** Used to match unescaped characters in compiled string literals. */ +
64976 var reUnescapedString = /['\n\r\u2028\u2029\\]/g; +
64977 +
64978 /** Used to compose unicode character classes. */ +
64979 var rsAstralRange = '\\ud800-\\udfff', +
64980 rsComboMarksRange = '\\u0300-\\u036f', +
64981 reComboHalfMarksRange = '\\ufe20-\\ufe2f', +
64982 rsComboSymbolsRange = '\\u20d0-\\u20ff', +
64983 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, +
64984 rsDingbatRange = '\\u2700-\\u27bf', +
64985 rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', +
64986 rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', +
64987 rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', +
64988 rsPunctuationRange = '\\u2000-\\u206f', +
64989 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', +
64990 rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', +
64991 rsVarRange = '\\ufe0e\\ufe0f', +
64992 rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; +
64993 +
64994 /** Used to compose unicode capture groups. */ +
64995 var rsApos = "['\u2019]", +
64996 rsAstral = '[' + rsAstralRange + ']', +
64997 rsBreak = '[' + rsBreakRange + ']', +
64998 rsCombo = '[' + rsComboRange + ']', +
64999 rsDigits = '\\d+', +
65000 rsDingbat = '[' + rsDingbatRange + ']', +
65001 rsLower = '[' + rsLowerRange + ']', +
65002 rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', +
65003 rsFitz = '\\ud83c[\\udffb-\\udfff]', +
65004 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', +
65005 rsNonAstral = '[^' + rsAstralRange + ']', +
65006 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', +
65007 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', +
65008 rsUpper = '[' + rsUpperRange + ']', +
65009 rsZWJ = '\\u200d'; +
65010 +
65011 /** Used to compose unicode regexes. */ +
65012 var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', +
65013 rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', +
65014 rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', +
65015 rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', +
65016 reOptMod = rsModifier + '?', +
65017 rsOptVar = '[' + rsVarRange + ']?', +
65018 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', +
65019 rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', +
65020 rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', +
65021 rsSeq = rsOptVar + reOptMod + rsOptJoin, +
65022 rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, +
65023 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; +
65024 +
65025 /** Used to match apostrophes. */ +
65026 var reApos = RegExp(rsApos, 'g'); +
65027 +
65028 /** +
65029 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and +
65030 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). +
65031 */ +
65032 var reComboMark = RegExp(rsCombo, 'g'); +
65033 +
65034 /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +
65035 var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); +
65036 +
65037 /** Used to match complex or compound words. */ +
65038 var reUnicodeWord = RegExp([ +
65039 rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', +
65040 rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', +
65041 rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, +
65042 rsUpper + '+' + rsOptContrUpper, +
65043 rsOrdUpper, +
65044 rsOrdLower, +
65045 rsDigits, +
65046 rsEmoji +
65047 ].join('|'), 'g'); +
65048 +
65049 /** 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/). */ +
65050 var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); +
65051 +
65052 /** Used to detect strings that need a more robust regexp to match words. */ +
65053 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 ]/; +
65054 +
65055 /** Used to assign default `context` object properties. */ +
65056 var contextProps = [ +
65057 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', +
65058 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', +
65059 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', +
65060 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', +
65061 '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' +
65062 ]; +
65063 +
65064 /** Used to make template sourceURLs easier to identify. */ +
65065 var templateCounter = -1; +
65066 +
65067 /** Used to identify `toStringTag` values of typed arrays. */ +
65068 var typedArrayTags = {}; +
65069 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +
65070 typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +
65071 typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +
65072 typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +
65073 typedArrayTags[uint32Tag] = true; +
65074 typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +
65075 typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +
65076 typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +
65077 typedArrayTags[errorTag] = typedArrayTags[funcTag] = +
65078 typedArrayTags[mapTag] = typedArrayTags[numberTag] = +
65079 typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +
65080 typedArrayTags[setTag] = typedArrayTags[stringTag] = +
65081 typedArrayTags[weakMapTag] = false; +
65082 +
65083 /** Used to identify `toStringTag` values supported by `_.clone`. */ +
65084 var cloneableTags = {}; +
65085 cloneableTags[argsTag] = cloneableTags[arrayTag] = +
65086 cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +
65087 cloneableTags[boolTag] = cloneableTags[dateTag] = +
65088 cloneableTags[float32Tag] = cloneableTags[float64Tag] = +
65089 cloneableTags[int8Tag] = cloneableTags[int16Tag] = +
65090 cloneableTags[int32Tag] = cloneableTags[mapTag] = +
65091 cloneableTags[numberTag] = cloneableTags[objectTag] = +
65092 cloneableTags[regexpTag] = cloneableTags[setTag] = +
65093 cloneableTags[stringTag] = cloneableTags[symbolTag] = +
65094 cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +
65095 cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +
65096 cloneableTags[errorTag] = cloneableTags[funcTag] = +
65097 cloneableTags[weakMapTag] = false; +
65098 +
65099 /** Used to map Latin Unicode letters to basic Latin letters. */ +
65100 var deburredLetters = { +
65101 // Latin-1 Supplement block. +
65102 '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', +
65103 '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', +
65104 '\xc7': 'C', '\xe7': 'c', +
65105 '\xd0': 'D', '\xf0': 'd', +
65106 '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', +
65107 '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', +
65108 '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', +
65109 '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', +
65110 '\xd1': 'N', '\xf1': 'n', +
65111 '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', +
65112 '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', +
65113 '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', +
65114 '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', +
65115 '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', +
65116 '\xc6': 'Ae', '\xe6': 'ae', +
65117 '\xde': 'Th', '\xfe': 'th', +
65118 '\xdf': 'ss', +
65119 // Latin Extended-A block. +
65120 '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', +
65121 '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', +
65122 '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', +
65123 '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', +
65124 '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', +
65125 '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', +
65126 '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', +
65127 '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', +
65128 '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', +
65129 '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', +
65130 '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', +
65131 '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', +
65132 '\u0134': 'J', '\u0135': 'j', +
65133 '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', +
65134 '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', +
65135 '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', +
65136 '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', +
65137 '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', +
65138 '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', +
65139 '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', +
65140 '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', +
65141 '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', +
65142 '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', +
65143 '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', +
65144 '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', +
65145 '\u0163': 't', '\u0165': 't', '\u0167': 't', +
65146 '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', +
65147 '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', +
65148 '\u0174': 'W', '\u0175': 'w', +
65149 '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', +
65150 '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', +
65151 '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', +
65152 '\u0132': 'IJ', '\u0133': 'ij', +
65153 '\u0152': 'Oe', '\u0153': 'oe', +
65154 '\u0149': "'n", '\u017f': 's' +
65155 }; +
65156 +
65157 /** Used to map characters to HTML entities. */ +
65158 var htmlEscapes = { +
65159 '&': '&amp;', +
65160 '<': '&lt;', +
65161 '>': '&gt;', +
65162 '"': '&quot;', +
65163 "'": '&#39;' +
65164 }; +
65165 +
65166 /** Used to map HTML entities to characters. */ +
65167 var htmlUnescapes = { +
65168 '&amp;': '&', +
65169 '&lt;': '<', +
65170 '&gt;': '>', +
65171 '&quot;': '"', +
65172 '&#39;': "'" +
65173 }; +
65174 +
65175 /** Used to escape characters for inclusion in compiled string literals. */ +
65176 var stringEscapes = { +
65177 '\\': '\\', +
65178 "'": "'", +
65179 '\n': 'n', +
65180 '\r': 'r', +
65181 '\u2028': 'u2028', +
65182 '\u2029': 'u2029' +
65183 }; +
65184 +
65185 /** Built-in method references without a dependency on `root`. */ +
65186 var freeParseFloat = parseFloat, +
65187 freeParseInt = parseInt; +
65188 +
65189 /** Detect free variable `global` from Node.js. */ +
65190 var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; +
65191 +
65192 /** Detect free variable `self`. */ +
65193 var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +
65194 +
65195 /** Used as a reference to the global object. */ +
65196 var root = freeGlobal || freeSelf || Function('return this')(); +
65197 +
65198 /** Detect free variable `exports`. */ +
65199 var freeExports = true && exports && !exports.nodeType && exports; +
65200 +
65201 /** Detect free variable `module`. */ +
65202 var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; +
65203 +
65204 /** Detect the popular CommonJS extension `module.exports`. */ +
65205 var moduleExports = freeModule && freeModule.exports === freeExports; +
65206 +
65207 /** Detect free variable `process` from Node.js. */ +
65208 var freeProcess = moduleExports && freeGlobal.process; +
65209 +
65210 /** Used to access faster Node.js helpers. */ +
65211 var nodeUtil = (function() { +
65212 try { +
65213 return freeProcess && freeProcess.binding && freeProcess.binding('util'); +
65214 } catch (e) {} +
65215 }()); +
65216 +
65217 /* Node.js helper references. */ +
65218 var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, +
65219 nodeIsDate = nodeUtil && nodeUtil.isDate, +
65220 nodeIsMap = nodeUtil && nodeUtil.isMap, +
65221 nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, +
65222 nodeIsSet = nodeUtil && nodeUtil.isSet, +
65223 nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; +
65224 +
65225 /*--------------------------------------------------------------------------*/ +
65226 +
65227 /** +
65228 * A faster alternative to `Function#apply`, this function invokes `func` +
65229 * with the `this` binding of `thisArg` and the arguments of `args`. +
65230 * +
65231 * @private +
65232 * @param {Function} func The function to invoke. +
65233 * @param {*} thisArg The `this` binding of `func`. +
65234 * @param {Array} args The arguments to invoke `func` with. +
65235 * @returns {*} Returns the result of `func`. +
65236 */ +
65237 function apply(func, thisArg, args) { +
65238 switch (args.length) { +
65239 case 0: return func.call(thisArg); +
65240 case 1: return func.call(thisArg, args[0]); +
65241 case 2: return func.call(thisArg, args[0], args[1]); +
65242 case 3: return func.call(thisArg, args[0], args[1], args[2]); +
65243 } +
65244 return func.apply(thisArg, args); +
65245 } +
65246 +
65247 /** +
65248 * A specialized version of `baseAggregator` for arrays. +
65249 * +
65250 * @private +
65251 * @param {Array} [array] The array to iterate over. +
65252 * @param {Function} setter The function to set `accumulator` values. +
65253 * @param {Function} iteratee The iteratee to transform keys. +
65254 * @param {Object} accumulator The initial aggregated object. +
65255 * @returns {Function} Returns `accumulator`. +
65256 */ +
65257 function arrayAggregator(array, setter, iteratee, accumulator) { +
65258 var index = -1, +
65259 length = array == null ? 0 : array.length; +
65260 +
65261 while (++index < length) { +
65262 var value = array[index]; +
65263 setter(accumulator, value, iteratee(value), array); +
65264 } +
65265 return accumulator; +
65266 } +
65267 +
65268 /** +
65269 * A specialized version of `_.forEach` for arrays without support for +
65270 * iteratee shorthands. +
65271 * +
65272 * @private +
65273 * @param {Array} [array] The array to iterate over. +
65274 * @param {Function} iteratee The function invoked per iteration. +
65275 * @returns {Array} Returns `array`. +
65276 */ +
65277 function arrayEach(array, iteratee) { +
65278 var index = -1, +
65279 length = array == null ? 0 : array.length; +
65280 +
65281 while (++index < length) { +
65282 if (iteratee(array[index], index, array) === false) { +
65283 break; +
65284 } +
65285 } +
65286 return array; +
65287 } +
65288 +
65289 /** +
65290 * A specialized version of `_.forEachRight` for arrays without support for +
65291 * iteratee shorthands. +
65292 * +
65293 * @private +
65294 * @param {Array} [array] The array to iterate over. +
65295 * @param {Function} iteratee The function invoked per iteration. +
65296 * @returns {Array} Returns `array`. +
65297 */ +
65298 function arrayEachRight(array, iteratee) { +
65299 var length = array == null ? 0 : array.length; +
65300 +
65301 while (length--) { +
65302 if (iteratee(array[length], length, array) === false) { +
65303 break; +
65304 } +
65305 } +
65306 return array; +
65307 } +
65308 +
65309 /** +
65310 * A specialized version of `_.every` for arrays without support for +
65311 * iteratee shorthands. +
65312 * +
65313 * @private +
65314 * @param {Array} [array] The array to iterate over. +
65315 * @param {Function} predicate The function invoked per iteration. +
65316 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
65317 * else `false`. +
65318 */ +
65319 function arrayEvery(array, predicate) { +
65320 var index = -1, +
65321 length = array == null ? 0 : array.length; +
65322 +
65323 while (++index < length) { +
65324 if (!predicate(array[index], index, array)) { +
65325 return false; +
65326 } +
65327 } +
65328 return true; +
65329 } +
65330 +
65331 /** +
65332 * A specialized version of `_.filter` for arrays without support for +
65333 * iteratee shorthands. +
65334 * +
65335 * @private +
65336 * @param {Array} [array] The array to iterate over. +
65337 * @param {Function} predicate The function invoked per iteration. +
65338 * @returns {Array} Returns the new filtered array. +
65339 */ +
65340 function arrayFilter(array, predicate) { +
65341 var index = -1, +
65342 length = array == null ? 0 : array.length, +
65343 resIndex = 0, +
65344 result = []; +
65345 +
65346 while (++index < length) { +
65347 var value = array[index]; +
65348 if (predicate(value, index, array)) { +
65349 result[resIndex++] = value; +
65350 } +
65351 } +
65352 return result; +
65353 } +
65354 +
65355 /** +
65356 * A specialized version of `_.includes` for arrays without support for +
65357 * specifying an index to search from. +
65358 * +
65359 * @private +
65360 * @param {Array} [array] The array to inspect. +
65361 * @param {*} target The value to search for. +
65362 * @returns {boolean} Returns `true` if `target` is found, else `false`. +
65363 */ +
65364 function arrayIncludes(array, value) { +
65365 var length = array == null ? 0 : array.length; +
65366 return !!length && baseIndexOf(array, value, 0) > -1; +
65367 } +
65368 +
65369 /** +
65370 * This function is like `arrayIncludes` except that it accepts a comparator. +
65371 * +
65372 * @private +
65373 * @param {Array} [array] The array to inspect. +
65374 * @param {*} target The value to search for. +
65375 * @param {Function} comparator The comparator invoked per element. +
65376 * @returns {boolean} Returns `true` if `target` is found, else `false`. +
65377 */ +
65378 function arrayIncludesWith(array, value, comparator) { +
65379 var index = -1, +
65380 length = array == null ? 0 : array.length; +
65381 +
65382 while (++index < length) { +
65383 if (comparator(value, array[index])) { +
65384 return true; +
65385 } +
65386 } +
65387 return false; +
65388 } +
65389 +
65390 /** +
65391 * A specialized version of `_.map` for arrays without support for iteratee +
65392 * shorthands. +
65393 * +
65394 * @private +
65395 * @param {Array} [array] The array to iterate over. +
65396 * @param {Function} iteratee The function invoked per iteration. +
65397 * @returns {Array} Returns the new mapped array. +
65398 */ +
65399 function arrayMap(array, iteratee) { +
65400 var index = -1, +
65401 length = array == null ? 0 : array.length, +
65402 result = Array(length); +
65403 +
65404 while (++index < length) { +
65405 result[index] = iteratee(array[index], index, array); +
65406 } +
65407 return result; +
65408 } +
65409 +
65410 /** +
65411 * Appends the elements of `values` to `array`. +
65412 * +
65413 * @private +
65414 * @param {Array} array The array to modify. +
65415 * @param {Array} values The values to append. +
65416 * @returns {Array} Returns `array`. +
65417 */ +
65418 function arrayPush(array, values) { +
65419 var index = -1, +
65420 length = values.length, +
65421 offset = array.length; +
65422 +
65423 while (++index < length) { +
65424 array[offset + index] = values[index]; +
65425 } +
65426 return array; +
65427 } +
65428 +
65429 /** +
65430 * A specialized version of `_.reduce` for arrays without support for +
65431 * iteratee shorthands. +
65432 * +
65433 * @private +
65434 * @param {Array} [array] The array to iterate over. +
65435 * @param {Function} iteratee The function invoked per iteration. +
65436 * @param {*} [accumulator] The initial value. +
65437 * @param {boolean} [initAccum] Specify using the first element of `array` as +
65438 * the initial value. +
65439 * @returns {*} Returns the accumulated value. +
65440 */ +
65441 function arrayReduce(array, iteratee, accumulator, initAccum) { +
65442 var index = -1, +
65443 length = array == null ? 0 : array.length; +
65444 +
65445 if (initAccum && length) { +
65446 accumulator = array[++index]; +
65447 } +
65448 while (++index < length) { +
65449 accumulator = iteratee(accumulator, array[index], index, array); +
65450 } +
65451 return accumulator; +
65452 } +
65453 +
65454 /** +
65455 * A specialized version of `_.reduceRight` for arrays without support for +
65456 * iteratee shorthands. +
65457 * +
65458 * @private +
65459 * @param {Array} [array] The array to iterate over. +
65460 * @param {Function} iteratee The function invoked per iteration. +
65461 * @param {*} [accumulator] The initial value. +
65462 * @param {boolean} [initAccum] Specify using the last element of `array` as +
65463 * the initial value. +
65464 * @returns {*} Returns the accumulated value. +
65465 */ +
65466 function arrayReduceRight(array, iteratee, accumulator, initAccum) { +
65467 var length = array == null ? 0 : array.length; +
65468 if (initAccum && length) { +
65469 accumulator = array[--length]; +
65470 } +
65471 while (length--) { +
65472 accumulator = iteratee(accumulator, array[length], length, array); +
65473 } +
65474 return accumulator; +
65475 } +
65476 +
65477 /** +
65478 * A specialized version of `_.some` for arrays without support for iteratee +
65479 * shorthands. +
65480 * +
65481 * @private +
65482 * @param {Array} [array] The array to iterate over. +
65483 * @param {Function} predicate The function invoked per iteration. +
65484 * @returns {boolean} Returns `true` if any element passes the predicate check, +
65485 * else `false`. +
65486 */ +
65487 function arraySome(array, predicate) { +
65488 var index = -1, +
65489 length = array == null ? 0 : array.length; +
65490 +
65491 while (++index < length) { +
65492 if (predicate(array[index], index, array)) { +
65493 return true; +
65494 } +
65495 } +
65496 return false; +
65497 } +
65498 +
65499 /** +
65500 * Gets the size of an ASCII `string`. +
65501 * +
65502 * @private +
65503 * @param {string} string The string inspect. +
65504 * @returns {number} Returns the string size. +
65505 */ +
65506 var asciiSize = baseProperty('length'); +
65507 +
65508 /** +
65509 * Converts an ASCII `string` to an array. +
65510 * +
65511 * @private +
65512 * @param {string} string The string to convert. +
65513 * @returns {Array} Returns the converted array. +
65514 */ +
65515 function asciiToArray(string) { +
65516 return string.split(''); +
65517 } +
65518 +
65519 /** +
65520 * Splits an ASCII `string` into an array of its words. +
65521 * +
65522 * @private +
65523 * @param {string} The string to inspect. +
65524 * @returns {Array} Returns the words of `string`. +
65525 */ +
65526 function asciiWords(string) { +
65527 return string.match(reAsciiWord) || []; +
65528 } +
65529 +
65530 /** +
65531 * The base implementation of methods like `_.findKey` and `_.findLastKey`, +
65532 * without support for iteratee shorthands, which iterates over `collection` +
65533 * using `eachFunc`. +
65534 * +
65535 * @private +
65536 * @param {Array|Object} collection The collection to inspect. +
65537 * @param {Function} predicate The function invoked per iteration. +
65538 * @param {Function} eachFunc The function to iterate over `collection`. +
65539 * @returns {*} Returns the found element or its key, else `undefined`. +
65540 */ +
65541 function baseFindKey(collection, predicate, eachFunc) { +
65542 var result; +
65543 eachFunc(collection, function(value, key, collection) { +
65544 if (predicate(value, key, collection)) { +
65545 result = key; +
65546 return false; +
65547 } +
65548 }); +
65549 return result; +
65550 } +
65551 +
65552 /** +
65553 * The base implementation of `_.findIndex` and `_.findLastIndex` without +
65554 * support for iteratee shorthands. +
65555 * +
65556 * @private +
65557 * @param {Array} array The array to inspect. +
65558 * @param {Function} predicate The function invoked per iteration. +
65559 * @param {number} fromIndex The index to search from. +
65560 * @param {boolean} [fromRight] Specify iterating from right to left. +
65561 * @returns {number} Returns the index of the matched value, else `-1`. +
65562 */ +
65563 function baseFindIndex(array, predicate, fromIndex, fromRight) { +
65564 var length = array.length, +
65565 index = fromIndex + (fromRight ? 1 : -1); +
65566 +
65567 while ((fromRight ? index-- : ++index < length)) { +
65568 if (predicate(array[index], index, array)) { +
65569 return index; +
65570 } +
65571 } +
65572 return -1; +
65573 } +
65574 +
65575 /** +
65576 * The base implementation of `_.indexOf` without `fromIndex` bounds checks. +
65577 * +
65578 * @private +
65579 * @param {Array} array The array to inspect. +
65580 * @param {*} value The value to search for. +
65581 * @param {number} fromIndex The index to search from. +
65582 * @returns {number} Returns the index of the matched value, else `-1`. +
65583 */ +
65584 function baseIndexOf(array, value, fromIndex) { +
65585 return value === value +
65586 ? strictIndexOf(array, value, fromIndex) +
65587 : baseFindIndex(array, baseIsNaN, fromIndex); +
65588 } +
65589 +
65590 /** +
65591 * This function is like `baseIndexOf` except that it accepts a comparator. +
65592 * +
65593 * @private +
65594 * @param {Array} array The array to inspect. +
65595 * @param {*} value The value to search for. +
65596 * @param {number} fromIndex The index to search from. +
65597 * @param {Function} comparator The comparator invoked per element. +
65598 * @returns {number} Returns the index of the matched value, else `-1`. +
65599 */ +
65600 function baseIndexOfWith(array, value, fromIndex, comparator) { +
65601 var index = fromIndex - 1, +
65602 length = array.length; +
65603 +
65604 while (++index < length) { +
65605 if (comparator(array[index], value)) { +
65606 return index; +
65607 } +
65608 } +
65609 return -1; +
65610 } +
65611 +
65612 /** +
65613 * The base implementation of `_.isNaN` without support for number objects. +
65614 * +
65615 * @private +
65616 * @param {*} value The value to check. +
65617 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +
65618 */ +
65619 function baseIsNaN(value) { +
65620 return value !== value; +
65621 } +
65622 +
65623 /** +
65624 * The base implementation of `_.mean` and `_.meanBy` without support for +
65625 * iteratee shorthands. +
65626 * +
65627 * @private +
65628 * @param {Array} array The array to iterate over. +
65629 * @param {Function} iteratee The function invoked per iteration. +
65630 * @returns {number} Returns the mean. +
65631 */ +
65632 function baseMean(array, iteratee) { +
65633 var length = array == null ? 0 : array.length; +
65634 return length ? (baseSum(array, iteratee) / length) : NAN; +
65635 } +
65636 +
65637 /** +
65638 * The base implementation of `_.property` without support for deep paths. +
65639 * +
65640 * @private +
65641 * @param {string} key The key of the property to get. +
65642 * @returns {Function} Returns the new accessor function. +
65643 */ +
65644 function baseProperty(key) { +
65645 return function(object) { +
65646 return object == null ? undefined : object[key]; +
65647 }; +
65648 } +
65649 +
65650 /** +
65651 * The base implementation of `_.propertyOf` without support for deep paths. +
65652 * +
65653 * @private +
65654 * @param {Object} object The object to query. +
65655 * @returns {Function} Returns the new accessor function. +
65656 */ +
65657 function basePropertyOf(object) { +
65658 return function(key) { +
65659 return object == null ? undefined : object[key]; +
65660 }; +
65661 } +
65662 +
65663 /** +
65664 * The base implementation of `_.reduce` and `_.reduceRight`, without support +
65665 * for iteratee shorthands, which iterates over `collection` using `eachFunc`. +
65666 * +
65667 * @private +
65668 * @param {Array|Object} collection The collection to iterate over. +
65669 * @param {Function} iteratee The function invoked per iteration. +
65670 * @param {*} accumulator The initial value. +
65671 * @param {boolean} initAccum Specify using the first or last element of +
65672 * `collection` as the initial value. +
65673 * @param {Function} eachFunc The function to iterate over `collection`. +
65674 * @returns {*} Returns the accumulated value. +
65675 */ +
65676 function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { +
65677 eachFunc(collection, function(value, index, collection) { +
65678 accumulator = initAccum +
65679 ? (initAccum = false, value) +
65680 : iteratee(accumulator, value, index, collection); +
65681 }); +
65682 return accumulator; +
65683 } +
65684 +
65685 /** +
65686 * The base implementation of `_.sortBy` which uses `comparer` to define the +
65687 * sort order of `array` and replaces criteria objects with their corresponding +
65688 * values. +
65689 * +
65690 * @private +
65691 * @param {Array} array The array to sort. +
65692 * @param {Function} comparer The function to define sort order. +
65693 * @returns {Array} Returns `array`. +
65694 */ +
65695 function baseSortBy(array, comparer) { +
65696 var length = array.length; +
65697 +
65698 array.sort(comparer); +
65699 while (length--) { +
65700 array[length] = array[length].value; +
65701 } +
65702 return array; +
65703 } +
65704 +
65705 /** +
65706 * The base implementation of `_.sum` and `_.sumBy` without support for +
65707 * iteratee shorthands. +
65708 * +
65709 * @private +
65710 * @param {Array} array The array to iterate over. +
65711 * @param {Function} iteratee The function invoked per iteration. +
65712 * @returns {number} Returns the sum. +
65713 */ +
65714 function baseSum(array, iteratee) { +
65715 var result, +
65716 index = -1, +
65717 length = array.length; +
65718 +
65719 while (++index < length) { +
65720 var current = iteratee(array[index]); +
65721 if (current !== undefined) { +
65722 result = result === undefined ? current : (result + current); +
65723 } +
65724 } +
65725 return result; +
65726 } +
65727 +
65728 /** +
65729 * The base implementation of `_.times` without support for iteratee shorthands +
65730 * or max array length checks. +
65731 * +
65732 * @private +
65733 * @param {number} n The number of times to invoke `iteratee`. +
65734 * @param {Function} iteratee The function invoked per iteration. +
65735 * @returns {Array} Returns the array of results. +
65736 */ +
65737 function baseTimes(n, iteratee) { +
65738 var index = -1, +
65739 result = Array(n); +
65740 +
65741 while (++index < n) { +
65742 result[index] = iteratee(index); +
65743 } +
65744 return result; +
65745 } +
65746 +
65747 /** +
65748 * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array +
65749 * of key-value pairs for `object` corresponding to the property names of `props`. +
65750 * +
65751 * @private +
65752 * @param {Object} object The object to query. +
65753 * @param {Array} props The property names to get values for. +
65754 * @returns {Object} Returns the key-value pairs. +
65755 */ +
65756 function baseToPairs(object, props) { +
65757 return arrayMap(props, function(key) { +
65758 return [key, object[key]]; +
65759 }); +
65760 } +
65761 +
65762 /** +
65763 * The base implementation of `_.unary` without support for storing metadata. +
65764 * +
65765 * @private +
65766 * @param {Function} func The function to cap arguments for. +
65767 * @returns {Function} Returns the new capped function. +
65768 */ +
65769 function baseUnary(func) { +
65770 return function(value) { +
65771 return func(value); +
65772 }; +
65773 } +
65774 +
65775 /** +
65776 * The base implementation of `_.values` and `_.valuesIn` which creates an +
65777 * array of `object` property values corresponding to the property names +
65778 * of `props`. +
65779 * +
65780 * @private +
65781 * @param {Object} object The object to query. +
65782 * @param {Array} props The property names to get values for. +
65783 * @returns {Object} Returns the array of property values. +
65784 */ +
65785 function baseValues(object, props) { +
65786 return arrayMap(props, function(key) { +
65787 return object[key]; +
65788 }); +
65789 } +
65790 +
65791 /** +
65792 * Checks if a `cache` value for `key` exists. +
65793 * +
65794 * @private +
65795 * @param {Object} cache The cache to query. +
65796 * @param {string} key The key of the entry to check. +
65797 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
65798 */ +
65799 function cacheHas(cache, key) { +
65800 return cache.has(key); +
65801 } +
65802 +
65803 /** +
65804 * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol +
65805 * that is not found in the character symbols. +
65806 * +
65807 * @private +
65808 * @param {Array} strSymbols The string symbols to inspect. +
65809 * @param {Array} chrSymbols The character symbols to find. +
65810 * @returns {number} Returns the index of the first unmatched string symbol. +
65811 */ +
65812 function charsStartIndex(strSymbols, chrSymbols) { +
65813 var index = -1, +
65814 length = strSymbols.length; +
65815 +
65816 while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +
65817 return index; +
65818 } +
65819 +
65820 /** +
65821 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol +
65822 * that is not found in the character symbols. +
65823 * +
65824 * @private +
65825 * @param {Array} strSymbols The string symbols to inspect. +
65826 * @param {Array} chrSymbols The character symbols to find. +
65827 * @returns {number} Returns the index of the last unmatched string symbol. +
65828 */ +
65829 function charsEndIndex(strSymbols, chrSymbols) { +
65830 var index = strSymbols.length; +
65831 +
65832 while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +
65833 return index; +
65834 } +
65835 +
65836 /** +
65837 * Gets the number of `placeholder` occurrences in `array`. +
65838 * +
65839 * @private +
65840 * @param {Array} array The array to inspect. +
65841 * @param {*} placeholder The placeholder to search for. +
65842 * @returns {number} Returns the placeholder count. +
65843 */ +
65844 function countHolders(array, placeholder) { +
65845 var length = array.length, +
65846 result = 0; +
65847 +
65848 while (length--) { +
65849 if (array[length] === placeholder) { +
65850 ++result; +
65851 } +
65852 } +
65853 return result; +
65854 } +
65855 +
65856 /** +
65857 * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A +
65858 * letters to basic Latin letters. +
65859 * +
65860 * @private +
65861 * @param {string} letter The matched letter to deburr. +
65862 * @returns {string} Returns the deburred letter. +
65863 */ +
65864 var deburrLetter = basePropertyOf(deburredLetters); +
65865 +
65866 /** +
65867 * Used by `_.escape` to convert characters to HTML entities. +
65868 * +
65869 * @private +
65870 * @param {string} chr The matched character to escape. +
65871 * @returns {string} Returns the escaped character. +
65872 */ +
65873 var escapeHtmlChar = basePropertyOf(htmlEscapes); +
65874 +
65875 /** +
65876 * Used by `_.template` to escape characters for inclusion in compiled string literals. +
65877 * +
65878 * @private +
65879 * @param {string} chr The matched character to escape. +
65880 * @returns {string} Returns the escaped character. +
65881 */ +
65882 function escapeStringChar(chr) { +
65883 return '\\' + stringEscapes[chr]; +
65884 } +
65885 +
65886 /** +
65887 * Gets the value at `key` of `object`. +
65888 * +
65889 * @private +
65890 * @param {Object} [object] The object to query. +
65891 * @param {string} key The key of the property to get. +
65892 * @returns {*} Returns the property value. +
65893 */ +
65894 function getValue(object, key) { +
65895 return object == null ? undefined : object[key]; +
65896 } +
65897 +
65898 /** +
65899 * Checks if `string` contains Unicode symbols. +
65900 * +
65901 * @private +
65902 * @param {string} string The string to inspect. +
65903 * @returns {boolean} Returns `true` if a symbol is found, else `false`. +
65904 */ +
65905 function hasUnicode(string) { +
65906 return reHasUnicode.test(string); +
65907 } +
65908 +
65909 /** +
65910 * Checks if `string` contains a word composed of Unicode symbols. +
65911 * +
65912 * @private +
65913 * @param {string} string The string to inspect. +
65914 * @returns {boolean} Returns `true` if a word is found, else `false`. +
65915 */ +
65916 function hasUnicodeWord(string) { +
65917 return reHasUnicodeWord.test(string); +
65918 } +
65919 +
65920 /** +
65921 * Converts `iterator` to an array. +
65922 * +
65923 * @private +
65924 * @param {Object} iterator The iterator to convert. +
65925 * @returns {Array} Returns the converted array. +
65926 */ +
65927 function iteratorToArray(iterator) { +
65928 var data, +
65929 result = []; +
65930 +
65931 while (!(data = iterator.next()).done) { +
65932 result.push(data.value); +
65933 } +
65934 return result; +
65935 } +
65936 +
65937 /** +
65938 * Converts `map` to its key-value pairs. +
65939 * +
65940 * @private +
65941 * @param {Object} map The map to convert. +
65942 * @returns {Array} Returns the key-value pairs. +
65943 */ +
65944 function mapToArray(map) { +
65945 var index = -1, +
65946 result = Array(map.size); +
65947 +
65948 map.forEach(function(value, key) { +
65949 result[++index] = [key, value]; +
65950 }); +
65951 return result; +
65952 } +
65953 +
65954 /** +
65955 * Creates a unary function that invokes `func` with its argument transformed. +
65956 * +
65957 * @private +
65958 * @param {Function} func The function to wrap. +
65959 * @param {Function} transform The argument transform. +
65960 * @returns {Function} Returns the new function. +
65961 */ +
65962 function overArg(func, transform) { +
65963 return function(arg) { +
65964 return func(transform(arg)); +
65965 }; +
65966 } +
65967 +
65968 /** +
65969 * Replaces all `placeholder` elements in `array` with an internal placeholder +
65970 * and returns an array of their indexes. +
65971 * +
65972 * @private +
65973 * @param {Array} array The array to modify. +
65974 * @param {*} placeholder The placeholder to replace. +
65975 * @returns {Array} Returns the new array of placeholder indexes. +
65976 */ +
65977 function replaceHolders(array, placeholder) { +
65978 var index = -1, +
65979 length = array.length, +
65980 resIndex = 0, +
65981 result = []; +
65982 +
65983 while (++index < length) { +
65984 var value = array[index]; +
65985 if (value === placeholder || value === PLACEHOLDER) { +
65986 array[index] = PLACEHOLDER; +
65987 result[resIndex++] = index; +
65988 } +
65989 } +
65990 return result; +
65991 } +
65992 +
65993 /** +
65994 * Gets the value at `key`, unless `key` is "__proto__". +
65995 * +
65996 * @private +
65997 * @param {Object} object The object to query. +
65998 * @param {string} key The key of the property to get. +
65999 * @returns {*} Returns the property value. +
66000 */ +
66001 function safeGet(object, key) { +
66002 return key == '__proto__' +
66003 ? undefined +
66004 : object[key]; +
66005 } +
66006 +
66007 /** +
66008 * Converts `set` to an array of its values. +
66009 * +
66010 * @private +
66011 * @param {Object} set The set to convert. +
66012 * @returns {Array} Returns the values. +
66013 */ +
66014 function setToArray(set) { +
66015 var index = -1, +
66016 result = Array(set.size); +
66017 +
66018 set.forEach(function(value) { +
66019 result[++index] = value; +
66020 }); +
66021 return result; +
66022 } +
66023 +
66024 /** +
66025 * Converts `set` to its value-value pairs. +
66026 * +
66027 * @private +
66028 * @param {Object} set The set to convert. +
66029 * @returns {Array} Returns the value-value pairs. +
66030 */ +
66031 function setToPairs(set) { +
66032 var index = -1, +
66033 result = Array(set.size); +
66034 +
66035 set.forEach(function(value) { +
66036 result[++index] = [value, value]; +
66037 }); +
66038 return result; +
66039 } +
66040 +
66041 /** +
66042 * A specialized version of `_.indexOf` which performs strict equality +
66043 * comparisons of values, i.e. `===`. +
66044 * +
66045 * @private +
66046 * @param {Array} array The array to inspect. +
66047 * @param {*} value The value to search for. +
66048 * @param {number} fromIndex The index to search from. +
66049 * @returns {number} Returns the index of the matched value, else `-1`. +
66050 */ +
66051 function strictIndexOf(array, value, fromIndex) { +
66052 var index = fromIndex - 1, +
66053 length = array.length; +
66054 +
66055 while (++index < length) { +
66056 if (array[index] === value) { +
66057 return index; +
66058 } +
66059 } +
66060 return -1; +
66061 } +
66062 +
66063 /** +
66064 * A specialized version of `_.lastIndexOf` which performs strict equality +
66065 * comparisons of values, i.e. `===`. +
66066 * +
66067 * @private +
66068 * @param {Array} array The array to inspect. +
66069 * @param {*} value The value to search for. +
66070 * @param {number} fromIndex The index to search from. +
66071 * @returns {number} Returns the index of the matched value, else `-1`. +
66072 */ +
66073 function strictLastIndexOf(array, value, fromIndex) { +
66074 var index = fromIndex + 1; +
66075 while (index--) { +
66076 if (array[index] === value) { +
66077 return index; +
66078 } +
66079 } +
66080 return index; +
66081 } +
66082 +
66083 /** +
66084 * Gets the number of symbols in `string`. +
66085 * +
66086 * @private +
66087 * @param {string} string The string to inspect. +
66088 * @returns {number} Returns the string size. +
66089 */ +
66090 function stringSize(string) { +
66091 return hasUnicode(string) +
66092 ? unicodeSize(string) +
66093 : asciiSize(string); +
66094 } +
66095 +
66096 /** +
66097 * Converts `string` to an array. +
66098 * +
66099 * @private +
66100 * @param {string} string The string to convert. +
66101 * @returns {Array} Returns the converted array. +
66102 */ +
66103 function stringToArray(string) { +
66104 return hasUnicode(string) +
66105 ? unicodeToArray(string) +
66106 : asciiToArray(string); +
66107 } +
66108 +
66109 /** +
66110 * Used by `_.unescape` to convert HTML entities to characters. +
66111 * +
66112 * @private +
66113 * @param {string} chr The matched character to unescape. +
66114 * @returns {string} Returns the unescaped character. +
66115 */ +
66116 var unescapeHtmlChar = basePropertyOf(htmlUnescapes); +
66117 +
66118 /** +
66119 * Gets the size of a Unicode `string`. +
66120 * +
66121 * @private +
66122 * @param {string} string The string inspect. +
66123 * @returns {number} Returns the string size. +
66124 */ +
66125 function unicodeSize(string) { +
66126 var result = reUnicode.lastIndex = 0; +
66127 while (reUnicode.test(string)) { +
66128 ++result; +
66129 } +
66130 return result; +
66131 } +
66132 +
66133 /** +
66134 * Converts a Unicode `string` to an array. +
66135 * +
66136 * @private +
66137 * @param {string} string The string to convert. +
66138 * @returns {Array} Returns the converted array. +
66139 */ +
66140 function unicodeToArray(string) { +
66141 return string.match(reUnicode) || []; +
66142 } +
66143 +
66144 /** +
66145 * Splits a Unicode `string` into an array of its words. +
66146 * +
66147 * @private +
66148 * @param {string} The string to inspect. +
66149 * @returns {Array} Returns the words of `string`. +
66150 */ +
66151 function unicodeWords(string) { +
66152 return string.match(reUnicodeWord) || []; +
66153 } +
66154 +
66155 /*--------------------------------------------------------------------------*/ +
66156 +
66157 /** +
66158 * Create a new pristine `lodash` function using the `context` object. +
66159 * +
66160 * @static +
66161 * @memberOf _ +
66162 * @since 1.1.0 +
66163 * @category Util +
66164 * @param {Object} [context=root] The context object. +
66165 * @returns {Function} Returns a new `lodash` function. +
66166 * @example +
66167 * +
66168 * _.mixin({ 'foo': _.constant('foo') }); +
66169 * +
66170 * var lodash = _.runInContext(); +
66171 * lodash.mixin({ 'bar': lodash.constant('bar') }); +
66172 * +
66173 * _.isFunction(_.foo); +
66174 * // => true +
66175 * _.isFunction(_.bar); +
66176 * // => false +
66177 * +
66178 * lodash.isFunction(lodash.foo); +
66179 * // => false +
66180 * lodash.isFunction(lodash.bar); +
66181 * // => true +
66182 * +
66183 * // Create a suped-up `defer` in Node.js. +
66184 * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; +
66185 */ +
66186 var runInContext = (function runInContext(context) { +
66187 context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); +
66188 +
66189 /** Built-in constructor references. */ +
66190 var Array = context.Array, +
66191 Date = context.Date, +
66192 Error = context.Error, +
66193 Function = context.Function, +
66194 Math = context.Math, +
66195 Object = context.Object, +
66196 RegExp = context.RegExp, +
66197 String = context.String, +
66198 TypeError = context.TypeError; +
66199 +
66200 /** Used for built-in method references. */ +
66201 var arrayProto = Array.prototype, +
66202 funcProto = Function.prototype, +
66203 objectProto = Object.prototype; +
66204 +
66205 /** Used to detect overreaching core-js shims. */ +
66206 var coreJsData = context['__core-js_shared__']; +
66207 +
66208 /** Used to resolve the decompiled source of functions. */ +
66209 var funcToString = funcProto.toString; +
66210 +
66211 /** Used to check objects for own properties. */ +
66212 var hasOwnProperty = objectProto.hasOwnProperty; +
66213 +
66214 /** Used to generate unique IDs. */ +
66215 var idCounter = 0; +
66216 +
66217 /** Used to detect methods masquerading as native. */ +
66218 var maskSrcKey = (function() { +
66219 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); +
66220 return uid ? ('Symbol(src)_1.' + uid) : ''; +
66221 }()); +
66222 +
66223 /** +
66224 * Used to resolve the +
66225 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) +
66226 * of values. +
66227 */ +
66228 var nativeObjectToString = objectProto.toString; +
66229 +
66230 /** Used to infer the `Object` constructor. */ +
66231 var objectCtorString = funcToString.call(Object); +
66232 +
66233 /** Used to restore the original `_` reference in `_.noConflict`. */ +
66234 var oldDash = root._; +
66235 +
66236 /** Used to detect if a method is native. */ +
66237 var reIsNative = RegExp('^' + +
66238 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') +
66239 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +
66240 ); +
66241 +
66242 /** Built-in value references. */ +
66243 var Buffer = moduleExports ? context.Buffer : undefined, +
66244 Symbol = context.Symbol, +
66245 Uint8Array = context.Uint8Array, +
66246 allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, +
66247 getPrototype = overArg(Object.getPrototypeOf, Object), +
66248 objectCreate = Object.create, +
66249 propertyIsEnumerable = objectProto.propertyIsEnumerable, +
66250 splice = arrayProto.splice, +
66251 spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, +
66252 symIterator = Symbol ? Symbol.iterator : undefined, +
66253 symToStringTag = Symbol ? Symbol.toStringTag : undefined; +
66254 +
66255 var defineProperty = (function() { +
66256 try { +
66257 var func = getNative(Object, 'defineProperty'); +
66258 func({}, '', {}); +
66259 return func; +
66260 } catch (e) {} +
66261 }()); +
66262 +
66263 /** Mocked built-ins. */ +
66264 var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, +
66265 ctxNow = Date && Date.now !== root.Date.now && Date.now, +
66266 ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; +
66267 +
66268 /* Built-in method references for those with the same name as other `lodash` methods. */ +
66269 var nativeCeil = Math.ceil, +
66270 nativeFloor = Math.floor, +
66271 nativeGetSymbols = Object.getOwnPropertySymbols, +
66272 nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, +
66273 nativeIsFinite = context.isFinite, +
66274 nativeJoin = arrayProto.join, +
66275 nativeKeys = overArg(Object.keys, Object), +
66276 nativeMax = Math.max, +
66277 nativeMin = Math.min, +
66278 nativeNow = Date.now, +
66279 nativeParseInt = context.parseInt, +
66280 nativeRandom = Math.random, +
66281 nativeReverse = arrayProto.reverse; +
66282 +
66283 /* Built-in method references that are verified to be native. */ +
66284 var DataView = getNative(context, 'DataView'), +
66285 Map = getNative(context, 'Map'), +
66286 Promise = getNative(context, 'Promise'), +
66287 Set = getNative(context, 'Set'), +
66288 WeakMap = getNative(context, 'WeakMap'), +
66289 nativeCreate = getNative(Object, 'create'); +
66290 +
66291 /** Used to store function metadata. */ +
66292 var metaMap = WeakMap && new WeakMap; +
66293 +
66294 /** Used to lookup unminified function names. */ +
66295 var realNames = {}; +
66296 +
66297 /** Used to detect maps, sets, and weakmaps. */ +
66298 var dataViewCtorString = toSource(DataView), +
66299 mapCtorString = toSource(Map), +
66300 promiseCtorString = toSource(Promise), +
66301 setCtorString = toSource(Set), +
66302 weakMapCtorString = toSource(WeakMap); +
66303 +
66304 /** Used to convert symbols to primitives and strings. */ +
66305 var symbolProto = Symbol ? Symbol.prototype : undefined, +
66306 symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, +
66307 symbolToString = symbolProto ? symbolProto.toString : undefined; +
66308 +
66309 /*------------------------------------------------------------------------*/ +
66310 +
66311 /** +
66312 * Creates a `lodash` object which wraps `value` to enable implicit method +
66313 * chain sequences. Methods that operate on and return arrays, collections, +
66314 * and functions can be chained together. Methods that retrieve a single value +
66315 * or may return a primitive value will automatically end the chain sequence +
66316 * and return the unwrapped value. Otherwise, the value must be unwrapped +
66317 * with `_#value`. +
66318 * +
66319 * Explicit chain sequences, which must be unwrapped with `_#value`, may be +
66320 * enabled using `_.chain`. +
66321 * +
66322 * The execution of chained methods is lazy, that is, it's deferred until +
66323 * `_#value` is implicitly or explicitly called. +
66324 * +
66325 * Lazy evaluation allows several methods to support shortcut fusion. +
66326 * Shortcut fusion is an optimization to merge iteratee calls; this avoids +
66327 * the creation of intermediate arrays and can greatly reduce the number of +
66328 * iteratee executions. Sections of a chain sequence qualify for shortcut +
66329 * fusion if the section is applied to an array and iteratees accept only +
66330 * one argument. The heuristic for whether a section qualifies for shortcut +
66331 * fusion is subject to change. +
66332 * +
66333 * Chaining is supported in custom builds as long as the `_#value` method is +
66334 * directly or indirectly included in the build. +
66335 * +
66336 * In addition to lodash methods, wrappers have `Array` and `String` methods. +
66337 * +
66338 * The wrapper `Array` methods are: +
66339 * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` +
66340 * +
66341 * The wrapper `String` methods are: +
66342 * `replace` and `split` +
66343 * +
66344 * The wrapper methods that support shortcut fusion are: +
66345 * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, +
66346 * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, +
66347 * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` +
66348 * +
66349 * The chainable wrapper methods are: +
66350 * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, +
66351 * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, +
66352 * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, +
66353 * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, +
66354 * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, +
66355 * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, +
66356 * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, +
66357 * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, +
66358 * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, +
66359 * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, +
66360 * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, +
66361 * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, +
66362 * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, +
66363 * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, +
66364 * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, +
66365 * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, +
66366 * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, +
66367 * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, +
66368 * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, +
66369 * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, +
66370 * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, +
66371 * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, +
66372 * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, +
66373 * `zipObject`, `zipObjectDeep`, and `zipWith` +
66374 * +
66375 * The wrapper methods that are **not** chainable by default are: +
66376 * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, +
66377 * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, +
66378 * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, +
66379 * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, +
66380 * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, +
66381 * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, +
66382 * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, +
66383 * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, +
66384 * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, +
66385 * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, +
66386 * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, +
66387 * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, +
66388 * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, +
66389 * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, +
66390 * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, +
66391 * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, +
66392 * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, +
66393 * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, +
66394 * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, +
66395 * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, +
66396 * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, +
66397 * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, +
66398 * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, +
66399 * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, +
66400 * `upperFirst`, `value`, and `words` +
66401 * +
66402 * @name _ +
66403 * @constructor +
66404 * @category Seq +
66405 * @param {*} value The value to wrap in a `lodash` instance. +
66406 * @returns {Object} Returns the new `lodash` wrapper instance. +
66407 * @example +
66408 * +
66409 * function square(n) { +
66410 * return n * n; +
66411 * } +
66412 * +
66413 * var wrapped = _([1, 2, 3]); +
66414 * +
66415 * // Returns an unwrapped value. +
66416 * wrapped.reduce(_.add); +
66417 * // => 6 +
66418 * +
66419 * // Returns a wrapped value. +
66420 * var squares = wrapped.map(square); +
66421 * +
66422 * _.isArray(squares); +
66423 * // => false +
66424 * +
66425 * _.isArray(squares.value()); +
66426 * // => true +
66427 */ +
66428 function lodash(value) { +
66429 if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { +
66430 if (value instanceof LodashWrapper) { +
66431 return value; +
66432 } +
66433 if (hasOwnProperty.call(value, '__wrapped__')) { +
66434 return wrapperClone(value); +
66435 } +
66436 } +
66437 return new LodashWrapper(value); +
66438 } +
66439 +
66440 /** +
66441 * The base implementation of `_.create` without support for assigning +
66442 * properties to the created object. +
66443 * +
66444 * @private +
66445 * @param {Object} proto The object to inherit from. +
66446 * @returns {Object} Returns the new object. +
66447 */ +
66448 var baseCreate = (function() { +
66449 function object() {} +
66450 return function(proto) { +
66451 if (!isObject(proto)) { +
66452 return {}; +
66453 } +
66454 if (objectCreate) { +
66455 return objectCreate(proto); +
66456 } +
66457 object.prototype = proto; +
66458 var result = new object; +
66459 object.prototype = undefined; +
66460 return result; +
66461 }; +
66462 }()); +
66463 +
66464 /** +
66465 * The function whose prototype chain sequence wrappers inherit from. +
66466 * +
66467 * @private +
66468 */ +
66469 function baseLodash() { +
66470 // No operation performed. +
66471 } +
66472 +
66473 /** +
66474 * The base constructor for creating `lodash` wrapper objects. +
66475 * +
66476 * @private +
66477 * @param {*} value The value to wrap. +
66478 * @param {boolean} [chainAll] Enable explicit method chain sequences. +
66479 */ +
66480 function LodashWrapper(value, chainAll) { +
66481 this.__wrapped__ = value; +
66482 this.__actions__ = []; +
66483 this.__chain__ = !!chainAll; +
66484 this.__index__ = 0; +
66485 this.__values__ = undefined; +
66486 } +
66487 +
66488 /** +
66489 * By default, the template delimiters used by lodash are like those in +
66490 * embedded Ruby (ERB) as well as ES2015 template strings. Change the +
66491 * following template settings to use alternative delimiters. +
66492 * +
66493 * @static +
66494 * @memberOf _ +
66495 * @type {Object} +
66496 */ +
66497 lodash.templateSettings = { +
66498 +
66499 /** +
66500 * Used to detect `data` property values to be HTML-escaped. +
66501 * +
66502 * @memberOf _.templateSettings +
66503 * @type {RegExp} +
66504 */ +
66505 'escape': reEscape, +
66506 +
66507 /** +
66508 * Used to detect code to be evaluated. +
66509 * +
66510 * @memberOf _.templateSettings +
66511 * @type {RegExp} +
66512 */ +
66513 'evaluate': reEvaluate, +
66514 +
66515 /** +
66516 * Used to detect `data` property values to inject. +
66517 * +
66518 * @memberOf _.templateSettings +
66519 * @type {RegExp} +
66520 */ +
66521 'interpolate': reInterpolate, +
66522 +
66523 /** +
66524 * Used to reference the data object in the template text. +
66525 * +
66526 * @memberOf _.templateSettings +
66527 * @type {string} +
66528 */ +
66529 'variable': '', +
66530 +
66531 /** +
66532 * Used to import variables into the compiled template. +
66533 * +
66534 * @memberOf _.templateSettings +
66535 * @type {Object} +
66536 */ +
66537 'imports': { +
66538 +
66539 /** +
66540 * A reference to the `lodash` function. +
66541 * +
66542 * @memberOf _.templateSettings.imports +
66543 * @type {Function} +
66544 */ +
66545 '_': lodash +
66546 } +
66547 }; +
66548 +
66549 // Ensure wrappers are instances of `baseLodash`. +
66550 lodash.prototype = baseLodash.prototype; +
66551 lodash.prototype.constructor = lodash; +
66552 +
66553 LodashWrapper.prototype = baseCreate(baseLodash.prototype); +
66554 LodashWrapper.prototype.constructor = LodashWrapper; +
66555 +
66556 /*------------------------------------------------------------------------*/ +
66557 +
66558 /** +
66559 * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. +
66560 * +
66561 * @private +
66562 * @constructor +
66563 * @param {*} value The value to wrap. +
66564 */ +
66565 function LazyWrapper(value) { +
66566 this.__wrapped__ = value; +
66567 this.__actions__ = []; +
66568 this.__dir__ = 1; +
66569 this.__filtered__ = false; +
66570 this.__iteratees__ = []; +
66571 this.__takeCount__ = MAX_ARRAY_LENGTH; +
66572 this.__views__ = []; +
66573 } +
66574 +
66575 /** +
66576 * Creates a clone of the lazy wrapper object. +
66577 * +
66578 * @private +
66579 * @name clone +
66580 * @memberOf LazyWrapper +
66581 * @returns {Object} Returns the cloned `LazyWrapper` object. +
66582 */ +
66583 function lazyClone() { +
66584 var result = new LazyWrapper(this.__wrapped__); +
66585 result.__actions__ = copyArray(this.__actions__); +
66586 result.__dir__ = this.__dir__; +
66587 result.__filtered__ = this.__filtered__; +
66588 result.__iteratees__ = copyArray(this.__iteratees__); +
66589 result.__takeCount__ = this.__takeCount__; +
66590 result.__views__ = copyArray(this.__views__); +
66591 return result; +
66592 } +
66593 +
66594 /** +
66595 * Reverses the direction of lazy iteration. +
66596 * +
66597 * @private +
66598 * @name reverse +
66599 * @memberOf LazyWrapper +
66600 * @returns {Object} Returns the new reversed `LazyWrapper` object. +
66601 */ +
66602 function lazyReverse() { +
66603 if (this.__filtered__) { +
66604 var result = new LazyWrapper(this); +
66605 result.__dir__ = -1; +
66606 result.__filtered__ = true; +
66607 } else { +
66608 result = this.clone(); +
66609 result.__dir__ *= -1; +
66610 } +
66611 return result; +
66612 } +
66613 +
66614 /** +
66615 * Extracts the unwrapped value from its lazy wrapper. +
66616 * +
66617 * @private +
66618 * @name value +
66619 * @memberOf LazyWrapper +
66620 * @returns {*} Returns the unwrapped value. +
66621 */ +
66622 function lazyValue() { +
66623 var array = this.__wrapped__.value(), +
66624 dir = this.__dir__, +
66625 isArr = isArray(array), +
66626 isRight = dir < 0, +
66627 arrLength = isArr ? array.length : 0, +
66628 view = getView(0, arrLength, this.__views__), +
66629 start = view.start, +
66630 end = view.end, +
66631 length = end - start, +
66632 index = isRight ? end : (start - 1), +
66633 iteratees = this.__iteratees__, +
66634 iterLength = iteratees.length, +
66635 resIndex = 0, +
66636 takeCount = nativeMin(length, this.__takeCount__); +
66637 +
66638 if (!isArr || (!isRight && arrLength == length && takeCount == length)) { +
66639 return baseWrapperValue(array, this.__actions__); +
66640 } +
66641 var result = []; +
66642 +
66643 outer: +
66644 while (length-- && resIndex < takeCount) { +
66645 index += dir; +
66646 +
66647 var iterIndex = -1, +
66648 value = array[index]; +
66649 +
66650 while (++iterIndex < iterLength) { +
66651 var data = iteratees[iterIndex], +
66652 iteratee = data.iteratee, +
66653 type = data.type, +
66654 computed = iteratee(value); +
66655 +
66656 if (type == LAZY_MAP_FLAG) { +
66657 value = computed; +
66658 } else if (!computed) { +
66659 if (type == LAZY_FILTER_FLAG) { +
66660 continue outer; +
66661 } else { +
66662 break outer; +
66663 } +
66664 } +
66665 } +
66666 result[resIndex++] = value; +
66667 } +
66668 return result; +
66669 } +
66670 +
66671 // Ensure `LazyWrapper` is an instance of `baseLodash`. +
66672 LazyWrapper.prototype = baseCreate(baseLodash.prototype); +
66673 LazyWrapper.prototype.constructor = LazyWrapper; +
66674 +
66675 /*------------------------------------------------------------------------*/ +
66676 +
66677 /** +
66678 * Creates a hash object. +
66679 * +
66680 * @private +
66681 * @constructor +
66682 * @param {Array} [entries] The key-value pairs to cache. +
66683 */ +
66684 function Hash(entries) { +
66685 var index = -1, +
66686 length = entries == null ? 0 : entries.length; +
66687 +
66688 this.clear(); +
66689 while (++index < length) { +
66690 var entry = entries[index]; +
66691 this.set(entry[0], entry[1]); +
66692 } +
66693 } +
66694 +
66695 /** +
66696 * Removes all key-value entries from the hash. +
66697 * +
66698 * @private +
66699 * @name clear +
66700 * @memberOf Hash +
66701 */ +
66702 function hashClear() { +
66703 this.__data__ = nativeCreate ? nativeCreate(null) : {}; +
66704 this.size = 0; +
66705 } +
66706 +
66707 /** +
66708 * Removes `key` and its value from the hash. +
66709 * +
66710 * @private +
66711 * @name delete +
66712 * @memberOf Hash +
66713 * @param {Object} hash The hash to modify. +
66714 * @param {string} key The key of the value to remove. +
66715 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
66716 */ +
66717 function hashDelete(key) { +
66718 var result = this.has(key) && delete this.__data__[key]; +
66719 this.size -= result ? 1 : 0; +
66720 return result; +
66721 } +
66722 +
66723 /** +
66724 * Gets the hash value for `key`. +
66725 * +
66726 * @private +
66727 * @name get +
66728 * @memberOf Hash +
66729 * @param {string} key The key of the value to get. +
66730 * @returns {*} Returns the entry value. +
66731 */ +
66732 function hashGet(key) { +
66733 var data = this.__data__; +
66734 if (nativeCreate) { +
66735 var result = data[key]; +
66736 return result === HASH_UNDEFINED ? undefined : result; +
66737 } +
66738 return hasOwnProperty.call(data, key) ? data[key] : undefined; +
66739 } +
66740 +
66741 /** +
66742 * Checks if a hash value for `key` exists. +
66743 * +
66744 * @private +
66745 * @name has +
66746 * @memberOf Hash +
66747 * @param {string} key The key of the entry to check. +
66748 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
66749 */ +
66750 function hashHas(key) { +
66751 var data = this.__data__; +
66752 return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +
66753 } +
66754 +
66755 /** +
66756 * Sets the hash `key` to `value`. +
66757 * +
66758 * @private +
66759 * @name set +
66760 * @memberOf Hash +
66761 * @param {string} key The key of the value to set. +
66762 * @param {*} value The value to set. +
66763 * @returns {Object} Returns the hash instance. +
66764 */ +
66765 function hashSet(key, value) { +
66766 var data = this.__data__; +
66767 this.size += this.has(key) ? 0 : 1; +
66768 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; +
66769 return this; +
66770 } +
66771 +
66772 // Add methods to `Hash`. +
66773 Hash.prototype.clear = hashClear; +
66774 Hash.prototype['delete'] = hashDelete; +
66775 Hash.prototype.get = hashGet; +
66776 Hash.prototype.has = hashHas; +
66777 Hash.prototype.set = hashSet; +
66778 +
66779 /*------------------------------------------------------------------------*/ +
66780 +
66781 /** +
66782 * Creates an list cache object. +
66783 * +
66784 * @private +
66785 * @constructor +
66786 * @param {Array} [entries] The key-value pairs to cache. +
66787 */ +
66788 function ListCache(entries) { +
66789 var index = -1, +
66790 length = entries == null ? 0 : entries.length; +
66791 +
66792 this.clear(); +
66793 while (++index < length) { +
66794 var entry = entries[index]; +
66795 this.set(entry[0], entry[1]); +
66796 } +
66797 } +
66798 +
66799 /** +
66800 * Removes all key-value entries from the list cache. +
66801 * +
66802 * @private +
66803 * @name clear +
66804 * @memberOf ListCache +
66805 */ +
66806 function listCacheClear() { +
66807 this.__data__ = []; +
66808 this.size = 0; +
66809 } +
66810 +
66811 /** +
66812 * Removes `key` and its value from the list cache. +
66813 * +
66814 * @private +
66815 * @name delete +
66816 * @memberOf ListCache +
66817 * @param {string} key The key of the value to remove. +
66818 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
66819 */ +
66820 function listCacheDelete(key) { +
66821 var data = this.__data__, +
66822 index = assocIndexOf(data, key); +
66823 +
66824 if (index < 0) { +
66825 return false; +
66826 } +
66827 var lastIndex = data.length - 1; +
66828 if (index == lastIndex) { +
66829 data.pop(); +
66830 } else { +
66831 splice.call(data, index, 1); +
66832 } +
66833 --this.size; +
66834 return true; +
66835 } +
66836 +
66837 /** +
66838 * Gets the list cache value for `key`. +
66839 * +
66840 * @private +
66841 * @name get +
66842 * @memberOf ListCache +
66843 * @param {string} key The key of the value to get. +
66844 * @returns {*} Returns the entry value. +
66845 */ +
66846 function listCacheGet(key) { +
66847 var data = this.__data__, +
66848 index = assocIndexOf(data, key); +
66849 +
66850 return index < 0 ? undefined : data[index][1]; +
66851 } +
66852 +
66853 /** +
66854 * Checks if a list cache value for `key` exists. +
66855 * +
66856 * @private +
66857 * @name has +
66858 * @memberOf ListCache +
66859 * @param {string} key The key of the entry to check. +
66860 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
66861 */ +
66862 function listCacheHas(key) { +
66863 return assocIndexOf(this.__data__, key) > -1; +
66864 } +
66865 +
66866 /** +
66867 * Sets the list cache `key` to `value`. +
66868 * +
66869 * @private +
66870 * @name set +
66871 * @memberOf ListCache +
66872 * @param {string} key The key of the value to set. +
66873 * @param {*} value The value to set. +
66874 * @returns {Object} Returns the list cache instance. +
66875 */ +
66876 function listCacheSet(key, value) { +
66877 var data = this.__data__, +
66878 index = assocIndexOf(data, key); +
66879 +
66880 if (index < 0) { +
66881 ++this.size; +
66882 data.push([key, value]); +
66883 } else { +
66884 data[index][1] = value; +
66885 } +
66886 return this; +
66887 } +
66888 +
66889 // Add methods to `ListCache`. +
66890 ListCache.prototype.clear = listCacheClear; +
66891 ListCache.prototype['delete'] = listCacheDelete; +
66892 ListCache.prototype.get = listCacheGet; +
66893 ListCache.prototype.has = listCacheHas; +
66894 ListCache.prototype.set = listCacheSet; +
66895 +
66896 /*------------------------------------------------------------------------*/ +
66897 +
66898 /** +
66899 * Creates a map cache object to store key-value pairs. +
66900 * +
66901 * @private +
66902 * @constructor +
66903 * @param {Array} [entries] The key-value pairs to cache. +
66904 */ +
66905 function MapCache(entries) { +
66906 var index = -1, +
66907 length = entries == null ? 0 : entries.length; +
66908 +
66909 this.clear(); +
66910 while (++index < length) { +
66911 var entry = entries[index]; +
66912 this.set(entry[0], entry[1]); +
66913 } +
66914 } +
66915 +
66916 /** +
66917 * Removes all key-value entries from the map. +
66918 * +
66919 * @private +
66920 * @name clear +
66921 * @memberOf MapCache +
66922 */ +
66923 function mapCacheClear() { +
66924 this.size = 0; +
66925 this.__data__ = { +
66926 'hash': new Hash, +
66927 'map': new (Map || ListCache), +
66928 'string': new Hash +
66929 }; +
66930 } +
66931 +
66932 /** +
66933 * Removes `key` and its value from the map. +
66934 * +
66935 * @private +
66936 * @name delete +
66937 * @memberOf MapCache +
66938 * @param {string} key The key of the value to remove. +
66939 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
66940 */ +
66941 function mapCacheDelete(key) { +
66942 var result = getMapData(this, key)['delete'](key); +
66943 this.size -= result ? 1 : 0; +
66944 return result; +
66945 } +
66946 +
66947 /** +
66948 * Gets the map value for `key`. +
66949 * +
66950 * @private +
66951 * @name get +
66952 * @memberOf MapCache +
66953 * @param {string} key The key of the value to get. +
66954 * @returns {*} Returns the entry value. +
66955 */ +
66956 function mapCacheGet(key) { +
66957 return getMapData(this, key).get(key); +
66958 } +
66959 +
66960 /** +
66961 * Checks if a map value for `key` exists. +
66962 * +
66963 * @private +
66964 * @name has +
66965 * @memberOf MapCache +
66966 * @param {string} key The key of the entry to check. +
66967 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
66968 */ +
66969 function mapCacheHas(key) { +
66970 return getMapData(this, key).has(key); +
66971 } +
66972 +
66973 /** +
66974 * Sets the map `key` to `value`. +
66975 * +
66976 * @private +
66977 * @name set +
66978 * @memberOf MapCache +
66979 * @param {string} key The key of the value to set. +
66980 * @param {*} value The value to set. +
66981 * @returns {Object} Returns the map cache instance. +
66982 */ +
66983 function mapCacheSet(key, value) { +
66984 var data = getMapData(this, key), +
66985 size = data.size; +
66986 +
66987 data.set(key, value); +
66988 this.size += data.size == size ? 0 : 1; +
66989 return this; +
66990 } +
66991 +
66992 // Add methods to `MapCache`. +
66993 MapCache.prototype.clear = mapCacheClear; +
66994 MapCache.prototype['delete'] = mapCacheDelete; +
66995 MapCache.prototype.get = mapCacheGet; +
66996 MapCache.prototype.has = mapCacheHas; +
66997 MapCache.prototype.set = mapCacheSet; +
66998 +
66999 /*------------------------------------------------------------------------*/ +
67000 +
67001 /** +
67002 * +
67003 * Creates an array cache object to store unique values. +
67004 * +
67005 * @private +
67006 * @constructor +
67007 * @param {Array} [values] The values to cache. +
67008 */ +
67009 function SetCache(values) { +
67010 var index = -1, +
67011 length = values == null ? 0 : values.length; +
67012 +
67013 this.__data__ = new MapCache; +
67014 while (++index < length) { +
67015 this.add(values[index]); +
67016 } +
67017 } +
67018 +
67019 /** +
67020 * Adds `value` to the array cache. +
67021 * +
67022 * @private +
67023 * @name add +
67024 * @memberOf SetCache +
67025 * @alias push +
67026 * @param {*} value The value to cache. +
67027 * @returns {Object} Returns the cache instance. +
67028 */ +
67029 function setCacheAdd(value) { +
67030 this.__data__.set(value, HASH_UNDEFINED); +
67031 return this; +
67032 } +
67033 +
67034 /** +
67035 * Checks if `value` is in the array cache. +
67036 * +
67037 * @private +
67038 * @name has +
67039 * @memberOf SetCache +
67040 * @param {*} value The value to search for. +
67041 * @returns {number} Returns `true` if `value` is found, else `false`. +
67042 */ +
67043 function setCacheHas(value) { +
67044 return this.__data__.has(value); +
67045 } +
67046 +
67047 // Add methods to `SetCache`. +
67048 SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +
67049 SetCache.prototype.has = setCacheHas; +
67050 +
67051 /*------------------------------------------------------------------------*/ +
67052 +
67053 /** +
67054 * Creates a stack cache object to store key-value pairs. +
67055 * +
67056 * @private +
67057 * @constructor +
67058 * @param {Array} [entries] The key-value pairs to cache. +
67059 */ +
67060 function Stack(entries) { +
67061 var data = this.__data__ = new ListCache(entries); +
67062 this.size = data.size; +
67063 } +
67064 +
67065 /** +
67066 * Removes all key-value entries from the stack. +
67067 * +
67068 * @private +
67069 * @name clear +
67070 * @memberOf Stack +
67071 */ +
67072 function stackClear() { +
67073 this.__data__ = new ListCache; +
67074 this.size = 0; +
67075 } +
67076 +
67077 /** +
67078 * Removes `key` and its value from the stack. +
67079 * +
67080 * @private +
67081 * @name delete +
67082 * @memberOf Stack +
67083 * @param {string} key The key of the value to remove. +
67084 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
67085 */ +
67086 function stackDelete(key) { +
67087 var data = this.__data__, +
67088 result = data['delete'](key); +
67089 +
67090 this.size = data.size; +
67091 return result; +
67092 } +
67093 +
67094 /** +
67095 * Gets the stack value for `key`. +
67096 * +
67097 * @private +
67098 * @name get +
67099 * @memberOf Stack +
67100 * @param {string} key The key of the value to get. +
67101 * @returns {*} Returns the entry value. +
67102 */ +
67103 function stackGet(key) { +
67104 return this.__data__.get(key); +
67105 } +
67106 +
67107 /** +
67108 * Checks if a stack value for `key` exists. +
67109 * +
67110 * @private +
67111 * @name has +
67112 * @memberOf Stack +
67113 * @param {string} key The key of the entry to check. +
67114 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
67115 */ +
67116 function stackHas(key) { +
67117 return this.__data__.has(key); +
67118 } +
67119 +
67120 /** +
67121 * Sets the stack `key` to `value`. +
67122 * +
67123 * @private +
67124 * @name set +
67125 * @memberOf Stack +
67126 * @param {string} key The key of the value to set. +
67127 * @param {*} value The value to set. +
67128 * @returns {Object} Returns the stack cache instance. +
67129 */ +
67130 function stackSet(key, value) { +
67131 var data = this.__data__; +
67132 if (data instanceof ListCache) { +
67133 var pairs = data.__data__; +
67134 if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { +
67135 pairs.push([key, value]); +
67136 this.size = ++data.size; +
67137 return this; +
67138 } +
67139 data = this.__data__ = new MapCache(pairs); +
67140 } +
67141 data.set(key, value); +
67142 this.size = data.size; +
67143 return this; +
67144 } +
67145 +
67146 // Add methods to `Stack`. +
67147 Stack.prototype.clear = stackClear; +
67148 Stack.prototype['delete'] = stackDelete; +
67149 Stack.prototype.get = stackGet; +
67150 Stack.prototype.has = stackHas; +
67151 Stack.prototype.set = stackSet; +
67152 +
67153 /*------------------------------------------------------------------------*/ +
67154 +
67155 /** +
67156 * Creates an array of the enumerable property names of the array-like `value`. +
67157 * +
67158 * @private +
67159 * @param {*} value The value to query. +
67160 * @param {boolean} inherited Specify returning inherited property names. +
67161 * @returns {Array} Returns the array of property names. +
67162 */ +
67163 function arrayLikeKeys(value, inherited) { +
67164 var isArr = isArray(value), +
67165 isArg = !isArr && isArguments(value), +
67166 isBuff = !isArr && !isArg && isBuffer(value), +
67167 isType = !isArr && !isArg && !isBuff && isTypedArray(value), +
67168 skipIndexes = isArr || isArg || isBuff || isType, +
67169 result = skipIndexes ? baseTimes(value.length, String) : [], +
67170 length = result.length; +
67171 +
67172 for (var key in value) { +
67173 if ((inherited || hasOwnProperty.call(value, key)) && +
67174 !(skipIndexes && ( +
67175 // Safari 9 has enumerable `arguments.length` in strict mode. +
67176 key == 'length' || +
67177 // Node.js 0.10 has enumerable non-index properties on buffers. +
67178 (isBuff && (key == 'offset' || key == 'parent')) || +
67179 // PhantomJS 2 has enumerable non-index properties on typed arrays. +
67180 (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || +
67181 // Skip index properties. +
67182 isIndex(key, length) +
67183 ))) { +
67184 result.push(key); +
67185 } +
67186 } +
67187 return result; +
67188 } +
67189 +
67190 /** +
67191 * A specialized version of `_.sample` for arrays. +
67192 * +
67193 * @private +
67194 * @param {Array} array The array to sample. +
67195 * @returns {*} Returns the random element. +
67196 */ +
67197 function arraySample(array) { +
67198 var length = array.length; +
67199 return length ? array[baseRandom(0, length - 1)] : undefined; +
67200 } +
67201 +
67202 /** +
67203 * A specialized version of `_.sampleSize` for arrays. +
67204 * +
67205 * @private +
67206 * @param {Array} array The array to sample. +
67207 * @param {number} n The number of elements to sample. +
67208 * @returns {Array} Returns the random elements. +
67209 */ +
67210 function arraySampleSize(array, n) { +
67211 return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +
67212 } +
67213 +
67214 /** +
67215 * A specialized version of `_.shuffle` for arrays. +
67216 * +
67217 * @private +
67218 * @param {Array} array The array to shuffle. +
67219 * @returns {Array} Returns the new shuffled array. +
67220 */ +
67221 function arrayShuffle(array) { +
67222 return shuffleSelf(copyArray(array)); +
67223 } +
67224 +
67225 /** +
67226 * This function is like `assignValue` except that it doesn't assign +
67227 * `undefined` values. +
67228 * +
67229 * @private +
67230 * @param {Object} object The object to modify. +
67231 * @param {string} key The key of the property to assign. +
67232 * @param {*} value The value to assign. +
67233 */ +
67234 function assignMergeValue(object, key, value) { +
67235 if ((value !== undefined && !eq(object[key], value)) || +
67236 (value === undefined && !(key in object))) { +
67237 baseAssignValue(object, key, value); +
67238 } +
67239 } +
67240 +
67241 /** +
67242 * Assigns `value` to `key` of `object` if the existing value is not equivalent +
67243 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
67244 * for equality comparisons. +
67245 * +
67246 * @private +
67247 * @param {Object} object The object to modify. +
67248 * @param {string} key The key of the property to assign. +
67249 * @param {*} value The value to assign. +
67250 */ +
67251 function assignValue(object, key, value) { +
67252 var objValue = object[key]; +
67253 if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || +
67254 (value === undefined && !(key in object))) { +
67255 baseAssignValue(object, key, value); +
67256 } +
67257 } +
67258 +
67259 /** +
67260 * Gets the index at which the `key` is found in `array` of key-value pairs. +
67261 * +
67262 * @private +
67263 * @param {Array} array The array to inspect. +
67264 * @param {*} key The key to search for. +
67265 * @returns {number} Returns the index of the matched value, else `-1`. +
67266 */ +
67267 function assocIndexOf(array, key) { +
67268 var length = array.length; +
67269 while (length--) { +
67270 if (eq(array[length][0], key)) { +
67271 return length; +
67272 } +
67273 } +
67274 return -1; +
67275 } +
67276 +
67277 /** +
67278 * Aggregates elements of `collection` on `accumulator` with keys transformed +
67279 * by `iteratee` and values set by `setter`. +
67280 * +
67281 * @private +
67282 * @param {Array|Object} collection The collection to iterate over. +
67283 * @param {Function} setter The function to set `accumulator` values. +
67284 * @param {Function} iteratee The iteratee to transform keys. +
67285 * @param {Object} accumulator The initial aggregated object. +
67286 * @returns {Function} Returns `accumulator`. +
67287 */ +
67288 function baseAggregator(collection, setter, iteratee, accumulator) { +
67289 baseEach(collection, function(value, key, collection) { +
67290 setter(accumulator, value, iteratee(value), collection); +
67291 }); +
67292 return accumulator; +
67293 } +
67294 +
67295 /** +
67296 * The base implementation of `_.assign` without support for multiple sources +
67297 * or `customizer` functions. +
67298 * +
67299 * @private +
67300 * @param {Object} object The destination object. +
67301 * @param {Object} source The source object. +
67302 * @returns {Object} Returns `object`. +
67303 */ +
67304 function baseAssign(object, source) { +
67305 return object && copyObject(source, keys(source), object); +
67306 } +
67307 +
67308 /** +
67309 * The base implementation of `_.assignIn` without support for multiple sources +
67310 * or `customizer` functions. +
67311 * +
67312 * @private +
67313 * @param {Object} object The destination object. +
67314 * @param {Object} source The source object. +
67315 * @returns {Object} Returns `object`. +
67316 */ +
67317 function baseAssignIn(object, source) { +
67318 return object && copyObject(source, keysIn(source), object); +
67319 } +
67320 +
67321 /** +
67322 * The base implementation of `assignValue` and `assignMergeValue` without +
67323 * value checks. +
67324 * +
67325 * @private +
67326 * @param {Object} object The object to modify. +
67327 * @param {string} key The key of the property to assign. +
67328 * @param {*} value The value to assign. +
67329 */ +
67330 function baseAssignValue(object, key, value) { +
67331 if (key == '__proto__' && defineProperty) { +
67332 defineProperty(object, key, { +
67333 'configurable': true, +
67334 'enumerable': true, +
67335 'value': value, +
67336 'writable': true +
67337 }); +
67338 } else { +
67339 object[key] = value; +
67340 } +
67341 } +
67342 +
67343 /** +
67344 * The base implementation of `_.at` without support for individual paths. +
67345 * +
67346 * @private +
67347 * @param {Object} object The object to iterate over. +
67348 * @param {string[]} paths The property paths to pick. +
67349 * @returns {Array} Returns the picked elements. +
67350 */ +
67351 function baseAt(object, paths) { +
67352 var index = -1, +
67353 length = paths.length, +
67354 result = Array(length), +
67355 skip = object == null; +
67356 +
67357 while (++index < length) { +
67358 result[index] = skip ? undefined : get(object, paths[index]); +
67359 } +
67360 return result; +
67361 } +
67362 +
67363 /** +
67364 * The base implementation of `_.clamp` which doesn't coerce arguments. +
67365 * +
67366 * @private +
67367 * @param {number} number The number to clamp. +
67368 * @param {number} [lower] The lower bound. +
67369 * @param {number} upper The upper bound. +
67370 * @returns {number} Returns the clamped number. +
67371 */ +
67372 function baseClamp(number, lower, upper) { +
67373 if (number === number) { +
67374 if (upper !== undefined) { +
67375 number = number <= upper ? number : upper; +
67376 } +
67377 if (lower !== undefined) { +
67378 number = number >= lower ? number : lower; +
67379 } +
67380 } +
67381 return number; +
67382 } +
67383 +
67384 /** +
67385 * The base implementation of `_.clone` and `_.cloneDeep` which tracks +
67386 * traversed objects. +
67387 * +
67388 * @private +
67389 * @param {*} value The value to clone. +
67390 * @param {boolean} bitmask The bitmask flags. +
67391 * 1 - Deep clone +
67392 * 2 - Flatten inherited properties +
67393 * 4 - Clone symbols +
67394 * @param {Function} [customizer] The function to customize cloning. +
67395 * @param {string} [key] The key of `value`. +
67396 * @param {Object} [object] The parent object of `value`. +
67397 * @param {Object} [stack] Tracks traversed objects and their clone counterparts. +
67398 * @returns {*} Returns the cloned value. +
67399 */ +
67400 function baseClone(value, bitmask, customizer, key, object, stack) { +
67401 var result, +
67402 isDeep = bitmask & CLONE_DEEP_FLAG, +
67403 isFlat = bitmask & CLONE_FLAT_FLAG, +
67404 isFull = bitmask & CLONE_SYMBOLS_FLAG; +
67405 +
67406 if (customizer) { +
67407 result = object ? customizer(value, key, object, stack) : customizer(value); +
67408 } +
67409 if (result !== undefined) { +
67410 return result; +
67411 } +
67412 if (!isObject(value)) { +
67413 return value; +
67414 } +
67415 var isArr = isArray(value); +
67416 if (isArr) { +
67417 result = initCloneArray(value); +
67418 if (!isDeep) { +
67419 return copyArray(value, result); +
67420 } +
67421 } else { +
67422 var tag = getTag(value), +
67423 isFunc = tag == funcTag || tag == genTag; +
67424 +
67425 if (isBuffer(value)) { +
67426 return cloneBuffer(value, isDeep); +
67427 } +
67428 if (tag == objectTag || tag == argsTag || (isFunc && !object)) { +
67429 result = (isFlat || isFunc) ? {} : initCloneObject(value); +
67430 if (!isDeep) { +
67431 return isFlat +
67432 ? copySymbolsIn(value, baseAssignIn(result, value)) +
67433 : copySymbols(value, baseAssign(result, value)); +
67434 } +
67435 } else { +
67436 if (!cloneableTags[tag]) { +
67437 return object ? value : {}; +
67438 } +
67439 result = initCloneByTag(value, tag, isDeep); +
67440 } +
67441 } +
67442 // Check for circular references and return its corresponding clone. +
67443 stack || (stack = new Stack); +
67444 var stacked = stack.get(value); +
67445 if (stacked) { +
67446 return stacked; +
67447 } +
67448 stack.set(value, result); +
67449 +
67450 if (isSet(value)) { +
67451 value.forEach(function(subValue) { +
67452 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); +
67453 }); +
67454 +
67455 return result; +
67456 } +
67457 +
67458 if (isMap(value)) { +
67459 value.forEach(function(subValue, key) { +
67460 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); +
67461 }); +
67462 +
67463 return result; +
67464 } +
67465 +
67466 var keysFunc = isFull +
67467 ? (isFlat ? getAllKeysIn : getAllKeys) +
67468 : (isFlat ? keysIn : keys); +
67469 +
67470 var props = isArr ? undefined : keysFunc(value); +
67471 arrayEach(props || value, function(subValue, key) { +
67472 if (props) { +
67473 key = subValue; +
67474 subValue = value[key]; +
67475 } +
67476 // Recursively populate clone (susceptible to call stack limits). +
67477 assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); +
67478 }); +
67479 return result; +
67480 } +
67481 +
67482 /** +
67483 * The base implementation of `_.conforms` which doesn't clone `source`. +
67484 * +
67485 * @private +
67486 * @param {Object} source The object of property predicates to conform to. +
67487 * @returns {Function} Returns the new spec function. +
67488 */ +
67489 function baseConforms(source) { +
67490 var props = keys(source); +
67491 return function(object) { +
67492 return baseConformsTo(object, source, props); +
67493 }; +
67494 } +
67495 +
67496 /** +
67497 * The base implementation of `_.conformsTo` which accepts `props` to check. +
67498 * +
67499 * @private +
67500 * @param {Object} object The object to inspect. +
67501 * @param {Object} source The object of property predicates to conform to. +
67502 * @returns {boolean} Returns `true` if `object` conforms, else `false`. +
67503 */ +
67504 function baseConformsTo(object, source, props) { +
67505 var length = props.length; +
67506 if (object == null) { +
67507 return !length; +
67508 } +
67509 object = Object(object); +
67510 while (length--) { +
67511 var key = props[length], +
67512 predicate = source[key], +
67513 value = object[key]; +
67514 +
67515 if ((value === undefined && !(key in object)) || !predicate(value)) { +
67516 return false; +
67517 } +
67518 } +
67519 return true; +
67520 } +
67521 +
67522 /** +
67523 * The base implementation of `_.delay` and `_.defer` which accepts `args` +
67524 * to provide to `func`. +
67525 * +
67526 * @private +
67527 * @param {Function} func The function to delay. +
67528 * @param {number} wait The number of milliseconds to delay invocation. +
67529 * @param {Array} args The arguments to provide to `func`. +
67530 * @returns {number|Object} Returns the timer id or timeout object. +
67531 */ +
67532 function baseDelay(func, wait, args) { +
67533 if (typeof func != 'function') { +
67534 throw new TypeError(FUNC_ERROR_TEXT); +
67535 } +
67536 return setTimeout(function() { func.apply(undefined, args); }, wait); +
67537 } +
67538 +
67539 /** +
67540 * The base implementation of methods like `_.difference` without support +
67541 * for excluding multiple arrays or iteratee shorthands. +
67542 * +
67543 * @private +
67544 * @param {Array} array The array to inspect. +
67545 * @param {Array} values The values to exclude. +
67546 * @param {Function} [iteratee] The iteratee invoked per element. +
67547 * @param {Function} [comparator] The comparator invoked per element. +
67548 * @returns {Array} Returns the new array of filtered values. +
67549 */ +
67550 function baseDifference(array, values, iteratee, comparator) { +
67551 var index = -1, +
67552 includes = arrayIncludes, +
67553 isCommon = true, +
67554 length = array.length, +
67555 result = [], +
67556 valuesLength = values.length; +
67557 +
67558 if (!length) { +
67559 return result; +
67560 } +
67561 if (iteratee) { +
67562 values = arrayMap(values, baseUnary(iteratee)); +
67563 } +
67564 if (comparator) { +
67565 includes = arrayIncludesWith; +
67566 isCommon = false; +
67567 } +
67568 else if (values.length >= LARGE_ARRAY_SIZE) { +
67569 includes = cacheHas; +
67570 isCommon = false; +
67571 values = new SetCache(values); +
67572 } +
67573 outer: +
67574 while (++index < length) { +
67575 var value = array[index], +
67576 computed = iteratee == null ? value : iteratee(value); +
67577 +
67578 value = (comparator || value !== 0) ? value : 0; +
67579 if (isCommon && computed === computed) { +
67580 var valuesIndex = valuesLength; +
67581 while (valuesIndex--) { +
67582 if (values[valuesIndex] === computed) { +
67583 continue outer; +
67584 } +
67585 } +
67586 result.push(value); +
67587 } +
67588 else if (!includes(values, computed, comparator)) { +
67589 result.push(value); +
67590 } +
67591 } +
67592 return result; +
67593 } +
67594 +
67595 /** +
67596 * The base implementation of `_.forEach` without support for iteratee shorthands. +
67597 * +
67598 * @private +
67599 * @param {Array|Object} collection The collection to iterate over. +
67600 * @param {Function} iteratee The function invoked per iteration. +
67601 * @returns {Array|Object} Returns `collection`. +
67602 */ +
67603 var baseEach = createBaseEach(baseForOwn); +
67604 +
67605 /** +
67606 * The base implementation of `_.forEachRight` without support for iteratee shorthands. +
67607 * +
67608 * @private +
67609 * @param {Array|Object} collection The collection to iterate over. +
67610 * @param {Function} iteratee The function invoked per iteration. +
67611 * @returns {Array|Object} Returns `collection`. +
67612 */ +
67613 var baseEachRight = createBaseEach(baseForOwnRight, true); +
67614 +
67615 /** +
67616 * The base implementation of `_.every` without support for iteratee shorthands. +
67617 * +
67618 * @private +
67619 * @param {Array|Object} collection The collection to iterate over. +
67620 * @param {Function} predicate The function invoked per iteration. +
67621 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
67622 * else `false` +
67623 */ +
67624 function baseEvery(collection, predicate) { +
67625 var result = true; +
67626 baseEach(collection, function(value, index, collection) { +
67627 result = !!predicate(value, index, collection); +
67628 return result; +
67629 }); +
67630 return result; +
67631 } +
67632 +
67633 /** +
67634 * The base implementation of methods like `_.max` and `_.min` which accepts a +
67635 * `comparator` to determine the extremum value. +
67636 * +
67637 * @private +
67638 * @param {Array} array The array to iterate over. +
67639 * @param {Function} iteratee The iteratee invoked per iteration. +
67640 * @param {Function} comparator The comparator used to compare values. +
67641 * @returns {*} Returns the extremum value. +
67642 */ +
67643 function baseExtremum(array, iteratee, comparator) { +
67644 var index = -1, +
67645 length = array.length; +
67646 +
67647 while (++index < length) { +
67648 var value = array[index], +
67649 current = iteratee(value); +
67650 +
67651 if (current != null && (computed === undefined +
67652 ? (current === current && !isSymbol(current)) +
67653 : comparator(current, computed) +
67654 )) { +
67655 var computed = current, +
67656 result = value; +
67657 } +
67658 } +
67659 return result; +
67660 } +
67661 +
67662 /** +
67663 * The base implementation of `_.fill` without an iteratee call guard. +
67664 * +
67665 * @private +
67666 * @param {Array} array The array to fill. +
67667 * @param {*} value The value to fill `array` with. +
67668 * @param {number} [start=0] The start position. +
67669 * @param {number} [end=array.length] The end position. +
67670 * @returns {Array} Returns `array`. +
67671 */ +
67672 function baseFill(array, value, start, end) { +
67673 var length = array.length; +
67674 +
67675 start = toInteger(start); +
67676 if (start < 0) { +
67677 start = -start > length ? 0 : (length + start); +
67678 } +
67679 end = (end === undefined || end > length) ? length : toInteger(end); +
67680 if (end < 0) { +
67681 end += length; +
67682 } +
67683 end = start > end ? 0 : toLength(end); +
67684 while (start < end) { +
67685 array[start++] = value; +
67686 } +
67687 return array; +
67688 } +
67689 +
67690 /** +
67691 * The base implementation of `_.filter` without support for iteratee shorthands. +
67692 * +
67693 * @private +
67694 * @param {Array|Object} collection The collection to iterate over. +
67695 * @param {Function} predicate The function invoked per iteration. +
67696 * @returns {Array} Returns the new filtered array. +
67697 */ +
67698 function baseFilter(collection, predicate) { +
67699 var result = []; +
67700 baseEach(collection, function(value, index, collection) { +
67701 if (predicate(value, index, collection)) { +
67702 result.push(value); +
67703 } +
67704 }); +
67705 return result; +
67706 } +
67707 +
67708 /** +
67709 * The base implementation of `_.flatten` with support for restricting flattening. +
67710 * +
67711 * @private +
67712 * @param {Array} array The array to flatten. +
67713 * @param {number} depth The maximum recursion depth. +
67714 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. +
67715 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. +
67716 * @param {Array} [result=[]] The initial result value. +
67717 * @returns {Array} Returns the new flattened array. +
67718 */ +
67719 function baseFlatten(array, depth, predicate, isStrict, result) { +
67720 var index = -1, +
67721 length = array.length; +
67722 +
67723 predicate || (predicate = isFlattenable); +
67724 result || (result = []); +
67725 +
67726 while (++index < length) { +
67727 var value = array[index]; +
67728 if (depth > 0 && predicate(value)) { +
67729 if (depth > 1) { +
67730 // Recursively flatten arrays (susceptible to call stack limits). +
67731 baseFlatten(value, depth - 1, predicate, isStrict, result); +
67732 } else { +
67733 arrayPush(result, value); +
67734 } +
67735 } else if (!isStrict) { +
67736 result[result.length] = value; +
67737 } +
67738 } +
67739 return result; +
67740 } +
67741 +
67742 /** +
67743 * The base implementation of `baseForOwn` which iterates over `object` +
67744 * properties returned by `keysFunc` and invokes `iteratee` for each property. +
67745 * Iteratee functions may exit iteration early by explicitly returning `false`. +
67746 * +
67747 * @private +
67748 * @param {Object} object The object to iterate over. +
67749 * @param {Function} iteratee The function invoked per iteration. +
67750 * @param {Function} keysFunc The function to get the keys of `object`. +
67751 * @returns {Object} Returns `object`. +
67752 */ +
67753 var baseFor = createBaseFor(); +
67754 +
67755 /** +
67756 * This function is like `baseFor` except that it iterates over properties +
67757 * in the opposite order. +
67758 * +
67759 * @private +
67760 * @param {Object} object The object to iterate over. +
67761 * @param {Function} iteratee The function invoked per iteration. +
67762 * @param {Function} keysFunc The function to get the keys of `object`. +
67763 * @returns {Object} Returns `object`. +
67764 */ +
67765 var baseForRight = createBaseFor(true); +
67766 +
67767 /** +
67768 * The base implementation of `_.forOwn` without support for iteratee shorthands. +
67769 * +
67770 * @private +
67771 * @param {Object} object The object to iterate over. +
67772 * @param {Function} iteratee The function invoked per iteration. +
67773 * @returns {Object} Returns `object`. +
67774 */ +
67775 function baseForOwn(object, iteratee) { +
67776 return object && baseFor(object, iteratee, keys); +
67777 } +
67778 +
67779 /** +
67780 * The base implementation of `_.forOwnRight` without support for iteratee shorthands. +
67781 * +
67782 * @private +
67783 * @param {Object} object The object to iterate over. +
67784 * @param {Function} iteratee The function invoked per iteration. +
67785 * @returns {Object} Returns `object`. +
67786 */ +
67787 function baseForOwnRight(object, iteratee) { +
67788 return object && baseForRight(object, iteratee, keys); +
67789 } +
67790 +
67791 /** +
67792 * The base implementation of `_.functions` which creates an array of +
67793 * `object` function property names filtered from `props`. +
67794 * +
67795 * @private +
67796 * @param {Object} object The object to inspect. +
67797 * @param {Array} props The property names to filter. +
67798 * @returns {Array} Returns the function names. +
67799 */ +
67800 function baseFunctions(object, props) { +
67801 return arrayFilter(props, function(key) { +
67802 return isFunction(object[key]); +
67803 }); +
67804 } +
67805 +
67806 /** +
67807 * The base implementation of `_.get` without support for default values. +
67808 * +
67809 * @private +
67810 * @param {Object} object The object to query. +
67811 * @param {Array|string} path The path of the property to get. +
67812 * @returns {*} Returns the resolved value. +
67813 */ +
67814 function baseGet(object, path) { +
67815 path = castPath(path, object); +
67816 +
67817 var index = 0, +
67818 length = path.length; +
67819 +
67820 while (object != null && index < length) { +
67821 object = object[toKey(path[index++])]; +
67822 } +
67823 return (index && index == length) ? object : undefined; +
67824 } +
67825 +
67826 /** +
67827 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses +
67828 * `keysFunc` and `symbolsFunc` to get the enumerable property names and +
67829 * symbols of `object`. +
67830 * +
67831 * @private +
67832 * @param {Object} object The object to query. +
67833 * @param {Function} keysFunc The function to get the keys of `object`. +
67834 * @param {Function} symbolsFunc The function to get the symbols of `object`. +
67835 * @returns {Array} Returns the array of property names and symbols. +
67836 */ +
67837 function baseGetAllKeys(object, keysFunc, symbolsFunc) { +
67838 var result = keysFunc(object); +
67839 return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +
67840 } +
67841 +
67842 /** +
67843 * The base implementation of `getTag` without fallbacks for buggy environments. +
67844 * +
67845 * @private +
67846 * @param {*} value The value to query. +
67847 * @returns {string} Returns the `toStringTag`. +
67848 */ +
67849 function baseGetTag(value) { +
67850 if (value == null) { +
67851 return value === undefined ? undefinedTag : nullTag; +
67852 } +
67853 return (symToStringTag && symToStringTag in Object(value)) +
67854 ? getRawTag(value) +
67855 : objectToString(value); +
67856 } +
67857 +
67858 /** +
67859 * The base implementation of `_.gt` which doesn't coerce arguments. +
67860 * +
67861 * @private +
67862 * @param {*} value The value to compare. +
67863 * @param {*} other The other value to compare. +
67864 * @returns {boolean} Returns `true` if `value` is greater than `other`, +
67865 * else `false`. +
67866 */ +
67867 function baseGt(value, other) { +
67868 return value > other; +
67869 } +
67870 +
67871 /** +
67872 * The base implementation of `_.has` without support for deep paths. +
67873 * +
67874 * @private +
67875 * @param {Object} [object] The object to query. +
67876 * @param {Array|string} key The key to check. +
67877 * @returns {boolean} Returns `true` if `key` exists, else `false`. +
67878 */ +
67879 function baseHas(object, key) { +
67880 return object != null && hasOwnProperty.call(object, key); +
67881 } +
67882 +
67883 /** +
67884 * The base implementation of `_.hasIn` without support for deep paths. +
67885 * +
67886 * @private +
67887 * @param {Object} [object] The object to query. +
67888 * @param {Array|string} key The key to check. +
67889 * @returns {boolean} Returns `true` if `key` exists, else `false`. +
67890 */ +
67891 function baseHasIn(object, key) { +
67892 return object != null && key in Object(object); +
67893 } +
67894 +
67895 /** +
67896 * The base implementation of `_.inRange` which doesn't coerce arguments. +
67897 * +
67898 * @private +
67899 * @param {number} number The number to check. +
67900 * @param {number} start The start of the range. +
67901 * @param {number} end The end of the range. +
67902 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +
67903 */ +
67904 function baseInRange(number, start, end) { +
67905 return number >= nativeMin(start, end) && number < nativeMax(start, end); +
67906 } +
67907 +
67908 /** +
67909 * The base implementation of methods like `_.intersection`, without support +
67910 * for iteratee shorthands, that accepts an array of arrays to inspect. +
67911 * +
67912 * @private +
67913 * @param {Array} arrays The arrays to inspect. +
67914 * @param {Function} [iteratee] The iteratee invoked per element. +
67915 * @param {Function} [comparator] The comparator invoked per element. +
67916 * @returns {Array} Returns the new array of shared values. +
67917 */ +
67918 function baseIntersection(arrays, iteratee, comparator) { +
67919 var includes = comparator ? arrayIncludesWith : arrayIncludes, +
67920 length = arrays[0].length, +
67921 othLength = arrays.length, +
67922 othIndex = othLength, +
67923 caches = Array(othLength), +
67924 maxLength = Infinity, +
67925 result = []; +
67926 +
67927 while (othIndex--) { +
67928 var array = arrays[othIndex]; +
67929 if (othIndex && iteratee) { +
67930 array = arrayMap(array, baseUnary(iteratee)); +
67931 } +
67932 maxLength = nativeMin(array.length, maxLength); +
67933 caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) +
67934 ? new SetCache(othIndex && array) +
67935 : undefined; +
67936 } +
67937 array = arrays[0]; +
67938 +
67939 var index = -1, +
67940 seen = caches[0]; +
67941 +
67942 outer: +
67943 while (++index < length && result.length < maxLength) { +
67944 var value = array[index], +
67945 computed = iteratee ? iteratee(value) : value; +
67946 +
67947 value = (comparator || value !== 0) ? value : 0; +
67948 if (!(seen +
67949 ? cacheHas(seen, computed) +
67950 : includes(result, computed, comparator) +
67951 )) { +
67952 othIndex = othLength; +
67953 while (--othIndex) { +
67954 var cache = caches[othIndex]; +
67955 if (!(cache +
67956 ? cacheHas(cache, computed) +
67957 : includes(arrays[othIndex], computed, comparator)) +
67958 ) { +
67959 continue outer; +
67960 } +
67961 } +
67962 if (seen) { +
67963 seen.push(computed); +
67964 } +
67965 result.push(value); +
67966 } +
67967 } +
67968 return result; +
67969 } +
67970 +
67971 /** +
67972 * The base implementation of `_.invert` and `_.invertBy` which inverts +
67973 * `object` with values transformed by `iteratee` and set by `setter`. +
67974 * +
67975 * @private +
67976 * @param {Object} object The object to iterate over. +
67977 * @param {Function} setter The function to set `accumulator` values. +
67978 * @param {Function} iteratee The iteratee to transform values. +
67979 * @param {Object} accumulator The initial inverted object. +
67980 * @returns {Function} Returns `accumulator`. +
67981 */ +
67982 function baseInverter(object, setter, iteratee, accumulator) { +
67983 baseForOwn(object, function(value, key, object) { +
67984 setter(accumulator, iteratee(value), key, object); +
67985 }); +
67986 return accumulator; +
67987 } +
67988 +
67989 /** +
67990 * The base implementation of `_.invoke` without support for individual +
67991 * method arguments. +
67992 * +
67993 * @private +
67994 * @param {Object} object The object to query. +
67995 * @param {Array|string} path The path of the method to invoke. +
67996 * @param {Array} args The arguments to invoke the method with. +
67997 * @returns {*} Returns the result of the invoked method. +
67998 */ +
67999 function baseInvoke(object, path, args) { +
68000 path = castPath(path, object); +
68001 object = parent(object, path); +
68002 var func = object == null ? object : object[toKey(last(path))]; +
68003 return func == null ? undefined : apply(func, object, args); +
68004 } +
68005 +
68006 /** +
68007 * The base implementation of `_.isArguments`. +
68008 * +
68009 * @private +
68010 * @param {*} value The value to check. +
68011 * @returns {boolean} Returns `true` if `value` is an `arguments` object, +
68012 */ +
68013 function baseIsArguments(value) { +
68014 return isObjectLike(value) && baseGetTag(value) == argsTag; +
68015 } +
68016 +
68017 /** +
68018 * The base implementation of `_.isArrayBuffer` without Node.js optimizations. +
68019 * +
68020 * @private +
68021 * @param {*} value The value to check. +
68022 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +
68023 */ +
68024 function baseIsArrayBuffer(value) { +
68025 return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +
68026 } +
68027 +
68028 /** +
68029 * The base implementation of `_.isDate` without Node.js optimizations. +
68030 * +
68031 * @private +
68032 * @param {*} value The value to check. +
68033 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +
68034 */ +
68035 function baseIsDate(value) { +
68036 return isObjectLike(value) && baseGetTag(value) == dateTag; +
68037 } +
68038 +
68039 /** +
68040 * The base implementation of `_.isEqual` which supports partial comparisons +
68041 * and tracks traversed objects. +
68042 * +
68043 * @private +
68044 * @param {*} value The value to compare. +
68045 * @param {*} other The other value to compare. +
68046 * @param {boolean} bitmask The bitmask flags. +
68047 * 1 - Unordered comparison +
68048 * 2 - Partial comparison +
68049 * @param {Function} [customizer] The function to customize comparisons. +
68050 * @param {Object} [stack] Tracks traversed `value` and `other` objects. +
68051 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
68052 */ +
68053 function baseIsEqual(value, other, bitmask, customizer, stack) { +
68054 if (value === other) { +
68055 return true; +
68056 } +
68057 if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { +
68058 return value !== value && other !== other; +
68059 } +
68060 return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +
68061 } +
68062 +
68063 /** +
68064 * A specialized version of `baseIsEqual` for arrays and objects which performs +
68065 * deep comparisons and tracks traversed objects enabling objects with circular +
68066 * references to be compared. +
68067 * +
68068 * @private +
68069 * @param {Object} object The object to compare. +
68070 * @param {Object} other The other object to compare. +
68071 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
68072 * @param {Function} customizer The function to customize comparisons. +
68073 * @param {Function} equalFunc The function to determine equivalents of values. +
68074 * @param {Object} [stack] Tracks traversed `object` and `other` objects. +
68075 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
68076 */ +
68077 function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { +
68078 var objIsArr = isArray(object), +
68079 othIsArr = isArray(other), +
68080 objTag = objIsArr ? arrayTag : getTag(object), +
68081 othTag = othIsArr ? arrayTag : getTag(other); +
68082 +
68083 objTag = objTag == argsTag ? objectTag : objTag; +
68084 othTag = othTag == argsTag ? objectTag : othTag; +
68085 +
68086 var objIsObj = objTag == objectTag, +
68087 othIsObj = othTag == objectTag, +
68088 isSameTag = objTag == othTag; +
68089 +
68090 if (isSameTag && isBuffer(object)) { +
68091 if (!isBuffer(other)) { +
68092 return false; +
68093 } +
68094 objIsArr = true; +
68095 objIsObj = false; +
68096 } +
68097 if (isSameTag && !objIsObj) { +
68098 stack || (stack = new Stack); +
68099 return (objIsArr || isTypedArray(object)) +
68100 ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) +
68101 : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); +
68102 } +
68103 if (!(bitmask & COMPARE_PARTIAL_FLAG)) { +
68104 var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), +
68105 othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); +
68106 +
68107 if (objIsWrapped || othIsWrapped) { +
68108 var objUnwrapped = objIsWrapped ? object.value() : object, +
68109 othUnwrapped = othIsWrapped ? other.value() : other; +
68110 +
68111 stack || (stack = new Stack); +
68112 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); +
68113 } +
68114 } +
68115 if (!isSameTag) { +
68116 return false; +
68117 } +
68118 stack || (stack = new Stack); +
68119 return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +
68120 } +
68121 +
68122 /** +
68123 * The base implementation of `_.isMap` without Node.js optimizations. +
68124 * +
68125 * @private +
68126 * @param {*} value The value to check. +
68127 * @returns {boolean} Returns `true` if `value` is a map, else `false`. +
68128 */ +
68129 function baseIsMap(value) { +
68130 return isObjectLike(value) && getTag(value) == mapTag; +
68131 } +
68132 +
68133 /** +
68134 * The base implementation of `_.isMatch` without support for iteratee shorthands. +
68135 * +
68136 * @private +
68137 * @param {Object} object The object to inspect. +
68138 * @param {Object} source The object of property values to match. +
68139 * @param {Array} matchData The property names, values, and compare flags to match. +
68140 * @param {Function} [customizer] The function to customize comparisons. +
68141 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
68142 */ +
68143 function baseIsMatch(object, source, matchData, customizer) { +
68144 var index = matchData.length, +
68145 length = index, +
68146 noCustomizer = !customizer; +
68147 +
68148 if (object == null) { +
68149 return !length; +
68150 } +
68151 object = Object(object); +
68152 while (index--) { +
68153 var data = matchData[index]; +
68154 if ((noCustomizer && data[2]) +
68155 ? data[1] !== object[data[0]] +
68156 : !(data[0] in object) +
68157 ) { +
68158 return false; +
68159 } +
68160 } +
68161 while (++index < length) { +
68162 data = matchData[index]; +
68163 var key = data[0], +
68164 objValue = object[key], +
68165 srcValue = data[1]; +
68166 +
68167 if (noCustomizer && data[2]) { +
68168 if (objValue === undefined && !(key in object)) { +
68169 return false; +
68170 } +
68171 } else { +
68172 var stack = new Stack; +
68173 if (customizer) { +
68174 var result = customizer(objValue, srcValue, key, object, source, stack); +
68175 } +
68176 if (!(result === undefined +
68177 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) +
68178 : result +
68179 )) { +
68180 return false; +
68181 } +
68182 } +
68183 } +
68184 return true; +
68185 } +
68186 +
68187 /** +
68188 * The base implementation of `_.isNative` without bad shim checks. +
68189 * +
68190 * @private +
68191 * @param {*} value The value to check. +
68192 * @returns {boolean} Returns `true` if `value` is a native function, +
68193 * else `false`. +
68194 */ +
68195 function baseIsNative(value) { +
68196 if (!isObject(value) || isMasked(value)) { +
68197 return false; +
68198 } +
68199 var pattern = isFunction(value) ? reIsNative : reIsHostCtor; +
68200 return pattern.test(toSource(value)); +
68201 } +
68202 +
68203 /** +
68204 * The base implementation of `_.isRegExp` without Node.js optimizations. +
68205 * +
68206 * @private +
68207 * @param {*} value The value to check. +
68208 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +
68209 */ +
68210 function baseIsRegExp(value) { +
68211 return isObjectLike(value) && baseGetTag(value) == regexpTag; +
68212 } +
68213 +
68214 /** +
68215 * The base implementation of `_.isSet` without Node.js optimizations. +
68216 * +
68217 * @private +
68218 * @param {*} value The value to check. +
68219 * @returns {boolean} Returns `true` if `value` is a set, else `false`. +
68220 */ +
68221 function baseIsSet(value) { +
68222 return isObjectLike(value) && getTag(value) == setTag; +
68223 } +
68224 +
68225 /** +
68226 * The base implementation of `_.isTypedArray` without Node.js optimizations. +
68227 * +
68228 * @private +
68229 * @param {*} value The value to check. +
68230 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +
68231 */ +
68232 function baseIsTypedArray(value) { +
68233 return isObjectLike(value) && +
68234 isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +
68235 } +
68236 +
68237 /** +
68238 * The base implementation of `_.iteratee`. +
68239 * +
68240 * @private +
68241 * @param {*} [value=_.identity] The value to convert to an iteratee. +
68242 * @returns {Function} Returns the iteratee. +
68243 */ +
68244 function baseIteratee(value) { +
68245 // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. +
68246 // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. +
68247 if (typeof value == 'function') { +
68248 return value; +
68249 } +
68250 if (value == null) { +
68251 return identity; +
68252 } +
68253 if (typeof value == 'object') { +
68254 return isArray(value) +
68255 ? baseMatchesProperty(value[0], value[1]) +
68256 : baseMatches(value); +
68257 } +
68258 return property(value); +
68259 } +
68260 +
68261 /** +
68262 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. +
68263 * +
68264 * @private +
68265 * @param {Object} object The object to query. +
68266 * @returns {Array} Returns the array of property names. +
68267 */ +
68268 function baseKeys(object) { +
68269 if (!isPrototype(object)) { +
68270 return nativeKeys(object); +
68271 } +
68272 var result = []; +
68273 for (var key in Object(object)) { +
68274 if (hasOwnProperty.call(object, key) && key != 'constructor') { +
68275 result.push(key); +
68276 } +
68277 } +
68278 return result; +
68279 } +
68280 +
68281 /** +
68282 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. +
68283 * +
68284 * @private +
68285 * @param {Object} object The object to query. +
68286 * @returns {Array} Returns the array of property names. +
68287 */ +
68288 function baseKeysIn(object) { +
68289 if (!isObject(object)) { +
68290 return nativeKeysIn(object); +
68291 } +
68292 var isProto = isPrototype(object), +
68293 result = []; +
68294 +
68295 for (var key in object) { +
68296 if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { +
68297 result.push(key); +
68298 } +
68299 } +
68300 return result; +
68301 } +
68302 +
68303 /** +
68304 * The base implementation of `_.lt` which doesn't coerce arguments. +
68305 * +
68306 * @private +
68307 * @param {*} value The value to compare. +
68308 * @param {*} other The other value to compare. +
68309 * @returns {boolean} Returns `true` if `value` is less than `other`, +
68310 * else `false`. +
68311 */ +
68312 function baseLt(value, other) { +
68313 return value < other; +
68314 } +
68315 +
68316 /** +
68317 * The base implementation of `_.map` without support for iteratee shorthands. +
68318 * +
68319 * @private +
68320 * @param {Array|Object} collection The collection to iterate over. +
68321 * @param {Function} iteratee The function invoked per iteration. +
68322 * @returns {Array} Returns the new mapped array. +
68323 */ +
68324 function baseMap(collection, iteratee) { +
68325 var index = -1, +
68326 result = isArrayLike(collection) ? Array(collection.length) : []; +
68327 +
68328 baseEach(collection, function(value, key, collection) { +
68329 result[++index] = iteratee(value, key, collection); +
68330 }); +
68331 return result; +
68332 } +
68333 +
68334 /** +
68335 * The base implementation of `_.matches` which doesn't clone `source`. +
68336 * +
68337 * @private +
68338 * @param {Object} source The object of property values to match. +
68339 * @returns {Function} Returns the new spec function. +
68340 */ +
68341 function baseMatches(source) { +
68342 var matchData = getMatchData(source); +
68343 if (matchData.length == 1 && matchData[0][2]) { +
68344 return matchesStrictComparable(matchData[0][0], matchData[0][1]); +
68345 } +
68346 return function(object) { +
68347 return object === source || baseIsMatch(object, source, matchData); +
68348 }; +
68349 } +
68350 +
68351 /** +
68352 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. +
68353 * +
68354 * @private +
68355 * @param {string} path The path of the property to get. +
68356 * @param {*} srcValue The value to match. +
68357 * @returns {Function} Returns the new spec function. +
68358 */ +
68359 function baseMatchesProperty(path, srcValue) { +
68360 if (isKey(path) && isStrictComparable(srcValue)) { +
68361 return matchesStrictComparable(toKey(path), srcValue); +
68362 } +
68363 return function(object) { +
68364 var objValue = get(object, path); +
68365 return (objValue === undefined && objValue === srcValue) +
68366 ? hasIn(object, path) +
68367 : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); +
68368 }; +
68369 } +
68370 +
68371 /** +
68372 * The base implementation of `_.merge` without support for multiple sources. +
68373 * +
68374 * @private +
68375 * @param {Object} object The destination object. +
68376 * @param {Object} source The source object. +
68377 * @param {number} srcIndex The index of `source`. +
68378 * @param {Function} [customizer] The function to customize merged values. +
68379 * @param {Object} [stack] Tracks traversed source values and their merged +
68380 * counterparts. +
68381 */ +
68382 function baseMerge(object, source, srcIndex, customizer, stack) { +
68383 if (object === source) { +
68384 return; +
68385 } +
68386 baseFor(source, function(srcValue, key) { +
68387 if (isObject(srcValue)) { +
68388 stack || (stack = new Stack); +
68389 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); +
68390 } +
68391 else { +
68392 var newValue = customizer +
68393 ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) +
68394 : undefined; +
68395 +
68396 if (newValue === undefined) { +
68397 newValue = srcValue; +
68398 } +
68399 assignMergeValue(object, key, newValue); +
68400 } +
68401 }, keysIn); +
68402 } +
68403 +
68404 /** +
68405 * A specialized version of `baseMerge` for arrays and objects which performs +
68406 * deep merges and tracks traversed objects enabling objects with circular +
68407 * references to be merged. +
68408 * +
68409 * @private +
68410 * @param {Object} object The destination object. +
68411 * @param {Object} source The source object. +
68412 * @param {string} key The key of the value to merge. +
68413 * @param {number} srcIndex The index of `source`. +
68414 * @param {Function} mergeFunc The function to merge values. +
68415 * @param {Function} [customizer] The function to customize assigned values. +
68416 * @param {Object} [stack] Tracks traversed source values and their merged +
68417 * counterparts. +
68418 */ +
68419 function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { +
68420 var objValue = safeGet(object, key), +
68421 srcValue = safeGet(source, key), +
68422 stacked = stack.get(srcValue); +
68423 +
68424 if (stacked) { +
68425 assignMergeValue(object, key, stacked); +
68426 return; +
68427 } +
68428 var newValue = customizer +
68429 ? customizer(objValue, srcValue, (key + ''), object, source, stack) +
68430 : undefined; +
68431 +
68432 var isCommon = newValue === undefined; +
68433 +
68434 if (isCommon) { +
68435 var isArr = isArray(srcValue), +
68436 isBuff = !isArr && isBuffer(srcValue), +
68437 isTyped = !isArr && !isBuff && isTypedArray(srcValue); +
68438 +
68439 newValue = srcValue; +
68440 if (isArr || isBuff || isTyped) { +
68441 if (isArray(objValue)) { +
68442 newValue = objValue; +
68443 } +
68444 else if (isArrayLikeObject(objValue)) { +
68445 newValue = copyArray(objValue); +
68446 } +
68447 else if (isBuff) { +
68448 isCommon = false; +
68449 newValue = cloneBuffer(srcValue, true); +
68450 } +
68451 else if (isTyped) { +
68452 isCommon = false; +
68453 newValue = cloneTypedArray(srcValue, true); +
68454 } +
68455 else { +
68456 newValue = []; +
68457 } +
68458 } +
68459 else if (isPlainObject(srcValue) || isArguments(srcValue)) { +
68460 newValue = objValue; +
68461 if (isArguments(objValue)) { +
68462 newValue = toPlainObject(objValue); +
68463 } +
68464 else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { +
68465 newValue = initCloneObject(srcValue); +
68466 } +
68467 } +
68468 else { +
68469 isCommon = false; +
68470 } +
68471 } +
68472 if (isCommon) { +
68473 // Recursively merge objects and arrays (susceptible to call stack limits). +
68474 stack.set(srcValue, newValue); +
68475 mergeFunc(newValue, srcValue, srcIndex, customizer, stack); +
68476 stack['delete'](srcValue); +
68477 } +
68478 assignMergeValue(object, key, newValue); +
68479 } +
68480 +
68481 /** +
68482 * The base implementation of `_.nth` which doesn't coerce arguments. +
68483 * +
68484 * @private +
68485 * @param {Array} array The array to query. +
68486 * @param {number} n The index of the element to return. +
68487 * @returns {*} Returns the nth element of `array`. +
68488 */ +
68489 function baseNth(array, n) { +
68490 var length = array.length; +
68491 if (!length) { +
68492 return; +
68493 } +
68494 n += n < 0 ? length : 0; +
68495 return isIndex(n, length) ? array[n] : undefined; +
68496 } +
68497 +
68498 /** +
68499 * The base implementation of `_.orderBy` without param guards. +
68500 * +
68501 * @private +
68502 * @param {Array|Object} collection The collection to iterate over. +
68503 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. +
68504 * @param {string[]} orders The sort orders of `iteratees`. +
68505 * @returns {Array} Returns the new sorted array. +
68506 */ +
68507 function baseOrderBy(collection, iteratees, orders) { +
68508 var index = -1; +
68509 iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); +
68510 +
68511 var result = baseMap(collection, function(value, key, collection) { +
68512 var criteria = arrayMap(iteratees, function(iteratee) { +
68513 return iteratee(value); +
68514 }); +
68515 return { 'criteria': criteria, 'index': ++index, 'value': value }; +
68516 }); +
68517 +
68518 return baseSortBy(result, function(object, other) { +
68519 return compareMultiple(object, other, orders); +
68520 }); +
68521 } +
68522 +
68523 /** +
68524 * The base implementation of `_.pick` without support for individual +
68525 * property identifiers. +
68526 * +
68527 * @private +
68528 * @param {Object} object The source object. +
68529 * @param {string[]} paths The property paths to pick. +
68530 * @returns {Object} Returns the new object. +
68531 */ +
68532 function basePick(object, paths) { +
68533 return basePickBy(object, paths, function(value, path) { +
68534 return hasIn(object, path); +
68535 }); +
68536 } +
68537 +
68538 /** +
68539 * The base implementation of `_.pickBy` without support for iteratee shorthands. +
68540 * +
68541 * @private +
68542 * @param {Object} object The source object. +
68543 * @param {string[]} paths The property paths to pick. +
68544 * @param {Function} predicate The function invoked per property. +
68545 * @returns {Object} Returns the new object. +
68546 */ +
68547 function basePickBy(object, paths, predicate) { +
68548 var index = -1, +
68549 length = paths.length, +
68550 result = {}; +
68551 +
68552 while (++index < length) { +
68553 var path = paths[index], +
68554 value = baseGet(object, path); +
68555 +
68556 if (predicate(value, path)) { +
68557 baseSet(result, castPath(path, object), value); +
68558 } +
68559 } +
68560 return result; +
68561 } +
68562 +
68563 /** +
68564 * A specialized version of `baseProperty` which supports deep paths. +
68565 * +
68566 * @private +
68567 * @param {Array|string} path The path of the property to get. +
68568 * @returns {Function} Returns the new accessor function. +
68569 */ +
68570 function basePropertyDeep(path) { +
68571 return function(object) { +
68572 return baseGet(object, path); +
68573 }; +
68574 } +
68575 +
68576 /** +
68577 * The base implementation of `_.pullAllBy` without support for iteratee +
68578 * shorthands. +
68579 * +
68580 * @private +
68581 * @param {Array} array The array to modify. +
68582 * @param {Array} values The values to remove. +
68583 * @param {Function} [iteratee] The iteratee invoked per element. +
68584 * @param {Function} [comparator] The comparator invoked per element. +
68585 * @returns {Array} Returns `array`. +
68586 */ +
68587 function basePullAll(array, values, iteratee, comparator) { +
68588 var indexOf = comparator ? baseIndexOfWith : baseIndexOf, +
68589 index = -1, +
68590 length = values.length, +
68591 seen = array; +
68592 +
68593 if (array === values) { +
68594 values = copyArray(values); +
68595 } +
68596 if (iteratee) { +
68597 seen = arrayMap(array, baseUnary(iteratee)); +
68598 } +
68599 while (++index < length) { +
68600 var fromIndex = 0, +
68601 value = values[index], +
68602 computed = iteratee ? iteratee(value) : value; +
68603 +
68604 while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { +
68605 if (seen !== array) { +
68606 splice.call(seen, fromIndex, 1); +
68607 } +
68608 splice.call(array, fromIndex, 1); +
68609 } +
68610 } +
68611 return array; +
68612 } +
68613 +
68614 /** +
68615 * The base implementation of `_.pullAt` without support for individual +
68616 * indexes or capturing the removed elements. +
68617 * +
68618 * @private +
68619 * @param {Array} array The array to modify. +
68620 * @param {number[]} indexes The indexes of elements to remove. +
68621 * @returns {Array} Returns `array`. +
68622 */ +
68623 function basePullAt(array, indexes) { +
68624 var length = array ? indexes.length : 0, +
68625 lastIndex = length - 1; +
68626 +
68627 while (length--) { +
68628 var index = indexes[length]; +
68629 if (length == lastIndex || index !== previous) { +
68630 var previous = index; +
68631 if (isIndex(index)) { +
68632 splice.call(array, index, 1); +
68633 } else { +
68634 baseUnset(array, index); +
68635 } +
68636 } +
68637 } +
68638 return array; +
68639 } +
68640 +
68641 /** +
68642 * The base implementation of `_.random` without support for returning +
68643 * floating-point numbers. +
68644 * +
68645 * @private +
68646 * @param {number} lower The lower bound. +
68647 * @param {number} upper The upper bound. +
68648 * @returns {number} Returns the random number. +
68649 */ +
68650 function baseRandom(lower, upper) { +
68651 return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +
68652 } +
68653 +
68654 /** +
68655 * The base implementation of `_.range` and `_.rangeRight` which doesn't +
68656 * coerce arguments. +
68657 * +
68658 * @private +
68659 * @param {number} start The start of the range. +
68660 * @param {number} end The end of the range. +
68661 * @param {number} step The value to increment or decrement by. +
68662 * @param {boolean} [fromRight] Specify iterating from right to left. +
68663 * @returns {Array} Returns the range of numbers. +
68664 */ +
68665 function baseRange(start, end, step, fromRight) { +
68666 var index = -1, +
68667 length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), +
68668 result = Array(length); +
68669 +
68670 while (length--) { +
68671 result[fromRight ? length : ++index] = start; +
68672 start += step; +
68673 } +
68674 return result; +
68675 } +
68676 +
68677 /** +
68678 * The base implementation of `_.repeat` which doesn't coerce arguments. +
68679 * +
68680 * @private +
68681 * @param {string} string The string to repeat. +
68682 * @param {number} n The number of times to repeat the string. +
68683 * @returns {string} Returns the repeated string. +
68684 */ +
68685 function baseRepeat(string, n) { +
68686 var result = ''; +
68687 if (!string || n < 1 || n > MAX_SAFE_INTEGER) { +
68688 return result; +
68689 } +
68690 // Leverage the exponentiation by squaring algorithm for a faster repeat. +
68691 // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. +
68692 do { +
68693 if (n % 2) { +
68694 result += string; +
68695 } +
68696 n = nativeFloor(n / 2); +
68697 if (n) { +
68698 string += string; +
68699 } +
68700 } while (n); +
68701 +
68702 return result; +
68703 } +
68704 +
68705 /** +
68706 * The base implementation of `_.rest` which doesn't validate or coerce arguments. +
68707 * +
68708 * @private +
68709 * @param {Function} func The function to apply a rest parameter to. +
68710 * @param {number} [start=func.length-1] The start position of the rest parameter. +
68711 * @returns {Function} Returns the new function. +
68712 */ +
68713 function baseRest(func, start) { +
68714 return setToString(overRest(func, start, identity), func + ''); +
68715 } +
68716 +
68717 /** +
68718 * The base implementation of `_.sample`. +
68719 * +
68720 * @private +
68721 * @param {Array|Object} collection The collection to sample. +
68722 * @returns {*} Returns the random element. +
68723 */ +
68724 function baseSample(collection) { +
68725 return arraySample(values(collection)); +
68726 } +
68727 +
68728 /** +
68729 * The base implementation of `_.sampleSize` without param guards. +
68730 * +
68731 * @private +
68732 * @param {Array|Object} collection The collection to sample. +
68733 * @param {number} n The number of elements to sample. +
68734 * @returns {Array} Returns the random elements. +
68735 */ +
68736 function baseSampleSize(collection, n) { +
68737 var array = values(collection); +
68738 return shuffleSelf(array, baseClamp(n, 0, array.length)); +
68739 } +
68740 +
68741 /** +
68742 * The base implementation of `_.set`. +
68743 * +
68744 * @private +
68745 * @param {Object} object The object to modify. +
68746 * @param {Array|string} path The path of the property to set. +
68747 * @param {*} value The value to set. +
68748 * @param {Function} [customizer] The function to customize path creation. +
68749 * @returns {Object} Returns `object`. +
68750 */ +
68751 function baseSet(object, path, value, customizer) { +
68752 if (!isObject(object)) { +
68753 return object; +
68754 } +
68755 path = castPath(path, object); +
68756 +
68757 var index = -1, +
68758 length = path.length, +
68759 lastIndex = length - 1, +
68760 nested = object; +
68761 +
68762 while (nested != null && ++index < length) { +
68763 var key = toKey(path[index]), +
68764 newValue = value; +
68765 +
68766 if (index != lastIndex) { +
68767 var objValue = nested[key]; +
68768 newValue = customizer ? customizer(objValue, key, nested) : undefined; +
68769 if (newValue === undefined) { +
68770 newValue = isObject(objValue) +
68771 ? objValue +
68772 : (isIndex(path[index + 1]) ? [] : {}); +
68773 } +
68774 } +
68775 assignValue(nested, key, newValue); +
68776 nested = nested[key]; +
68777 } +
68778 return object; +
68779 } +
68780 +
68781 /** +
68782 * The base implementation of `setData` without support for hot loop shorting. +
68783 * +
68784 * @private +
68785 * @param {Function} func The function to associate metadata with. +
68786 * @param {*} data The metadata. +
68787 * @returns {Function} Returns `func`. +
68788 */ +
68789 var baseSetData = !metaMap ? identity : function(func, data) { +
68790 metaMap.set(func, data); +
68791 return func; +
68792 }; +
68793 +
68794 /** +
68795 * The base implementation of `setToString` without support for hot loop shorting. +
68796 * +
68797 * @private +
68798 * @param {Function} func The function to modify. +
68799 * @param {Function} string The `toString` result. +
68800 * @returns {Function} Returns `func`. +
68801 */ +
68802 var baseSetToString = !defineProperty ? identity : function(func, string) { +
68803 return defineProperty(func, 'toString', { +
68804 'configurable': true, +
68805 'enumerable': false, +
68806 'value': constant(string), +
68807 'writable': true +
68808 }); +
68809 }; +
68810 +
68811 /** +
68812 * The base implementation of `_.shuffle`. +
68813 * +
68814 * @private +
68815 * @param {Array|Object} collection The collection to shuffle. +
68816 * @returns {Array} Returns the new shuffled array. +
68817 */ +
68818 function baseShuffle(collection) { +
68819 return shuffleSelf(values(collection)); +
68820 } +
68821 +
68822 /** +
68823 * The base implementation of `_.slice` without an iteratee call guard. +
68824 * +
68825 * @private +
68826 * @param {Array} array The array to slice. +
68827 * @param {number} [start=0] The start position. +
68828 * @param {number} [end=array.length] The end position. +
68829 * @returns {Array} Returns the slice of `array`. +
68830 */ +
68831 function baseSlice(array, start, end) { +
68832 var index = -1, +
68833 length = array.length; +
68834 +
68835 if (start < 0) { +
68836 start = -start > length ? 0 : (length + start); +
68837 } +
68838 end = end > length ? length : end; +
68839 if (end < 0) { +
68840 end += length; +
68841 } +
68842 length = start > end ? 0 : ((end - start) >>> 0); +
68843 start >>>= 0; +
68844 +
68845 var result = Array(length); +
68846 while (++index < length) { +
68847 result[index] = array[index + start]; +
68848 } +
68849 return result; +
68850 } +
68851 +
68852 /** +
68853 * The base implementation of `_.some` without support for iteratee shorthands. +
68854 * +
68855 * @private +
68856 * @param {Array|Object} collection The collection to iterate over. +
68857 * @param {Function} predicate The function invoked per iteration. +
68858 * @returns {boolean} Returns `true` if any element passes the predicate check, +
68859 * else `false`. +
68860 */ +
68861 function baseSome(collection, predicate) { +
68862 var result; +
68863 +
68864 baseEach(collection, function(value, index, collection) { +
68865 result = predicate(value, index, collection); +
68866 return !result; +
68867 }); +
68868 return !!result; +
68869 } +
68870 +
68871 /** +
68872 * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which +
68873 * performs a binary search of `array` to determine the index at which `value` +
68874 * should be inserted into `array` in order to maintain its sort order. +
68875 * +
68876 * @private +
68877 * @param {Array} array The sorted array to inspect. +
68878 * @param {*} value The value to evaluate. +
68879 * @param {boolean} [retHighest] Specify returning the highest qualified index. +
68880 * @returns {number} Returns the index at which `value` should be inserted +
68881 * into `array`. +
68882 */ +
68883 function baseSortedIndex(array, value, retHighest) { +
68884 var low = 0, +
68885 high = array == null ? low : array.length; +
68886 +
68887 if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { +
68888 while (low < high) { +
68889 var mid = (low + high) >>> 1, +
68890 computed = array[mid]; +
68891 +
68892 if (computed !== null && !isSymbol(computed) && +
68893 (retHighest ? (computed <= value) : (computed < value))) { +
68894 low = mid + 1; +
68895 } else { +
68896 high = mid; +
68897 } +
68898 } +
68899 return high; +
68900 } +
68901 return baseSortedIndexBy(array, value, identity, retHighest); +
68902 } +
68903 +
68904 /** +
68905 * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` +
68906 * which invokes `iteratee` for `value` and each element of `array` to compute +
68907 * their sort ranking. The iteratee is invoked with one argument; (value). +
68908 * +
68909 * @private +
68910 * @param {Array} array The sorted array to inspect. +
68911 * @param {*} value The value to evaluate. +
68912 * @param {Function} iteratee The iteratee invoked per element. +
68913 * @param {boolean} [retHighest] Specify returning the highest qualified index. +
68914 * @returns {number} Returns the index at which `value` should be inserted +
68915 * into `array`. +
68916 */ +
68917 function baseSortedIndexBy(array, value, iteratee, retHighest) { +
68918 value = iteratee(value); +
68919 +
68920 var low = 0, +
68921 high = array == null ? 0 : array.length, +
68922 valIsNaN = value !== value, +
68923 valIsNull = value === null, +
68924 valIsSymbol = isSymbol(value), +
68925 valIsUndefined = value === undefined; +
68926 +
68927 while (low < high) { +
68928 var mid = nativeFloor((low + high) / 2), +
68929 computed = iteratee(array[mid]), +
68930 othIsDefined = computed !== undefined, +
68931 othIsNull = computed === null, +
68932 othIsReflexive = computed === computed, +
68933 othIsSymbol = isSymbol(computed); +
68934 +
68935 if (valIsNaN) { +
68936 var setLow = retHighest || othIsReflexive; +
68937 } else if (valIsUndefined) { +
68938 setLow = othIsReflexive && (retHighest || othIsDefined); +
68939 } else if (valIsNull) { +
68940 setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); +
68941 } else if (valIsSymbol) { +
68942 setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); +
68943 } else if (othIsNull || othIsSymbol) { +
68944 setLow = false; +
68945 } else { +
68946 setLow = retHighest ? (computed <= value) : (computed < value); +
68947 } +
68948 if (setLow) { +
68949 low = mid + 1; +
68950 } else { +
68951 high = mid; +
68952 } +
68953 } +
68954 return nativeMin(high, MAX_ARRAY_INDEX); +
68955 } +
68956 +
68957 /** +
68958 * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without +
68959 * support for iteratee shorthands. +
68960 * +
68961 * @private +
68962 * @param {Array} array The array to inspect. +
68963 * @param {Function} [iteratee] The iteratee invoked per element. +
68964 * @returns {Array} Returns the new duplicate free array. +
68965 */ +
68966 function baseSortedUniq(array, iteratee) { +
68967 var index = -1, +
68968 length = array.length, +
68969 resIndex = 0, +
68970 result = []; +
68971 +
68972 while (++index < length) { +
68973 var value = array[index], +
68974 computed = iteratee ? iteratee(value) : value; +
68975 +
68976 if (!index || !eq(computed, seen)) { +
68977 var seen = computed; +
68978 result[resIndex++] = value === 0 ? 0 : value; +
68979 } +
68980 } +
68981 return result; +
68982 } +
68983 +
68984 /** +
68985 * The base implementation of `_.toNumber` which doesn't ensure correct +
68986 * conversions of binary, hexadecimal, or octal string values. +
68987 * +
68988 * @private +
68989 * @param {*} value The value to process. +
68990 * @returns {number} Returns the number. +
68991 */ +
68992 function baseToNumber(value) { +
68993 if (typeof value == 'number') { +
68994 return value; +
68995 } +
68996 if (isSymbol(value)) { +
68997 return NAN; +
68998 } +
68999 return +value; +
69000 } +
69001 +
69002 /** +
69003 * The base implementation of `_.toString` which doesn't convert nullish +
69004 * values to empty strings. +
69005 * +
69006 * @private +
69007 * @param {*} value The value to process. +
69008 * @returns {string} Returns the string. +
69009 */ +
69010 function baseToString(value) { +
69011 // Exit early for strings to avoid a performance hit in some environments. +
69012 if (typeof value == 'string') { +
69013 return value; +
69014 } +
69015 if (isArray(value)) { +
69016 // Recursively convert values (susceptible to call stack limits). +
69017 return arrayMap(value, baseToString) + ''; +
69018 } +
69019 if (isSymbol(value)) { +
69020 return symbolToString ? symbolToString.call(value) : ''; +
69021 } +
69022 var result = (value + ''); +
69023 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +
69024 } +
69025 +
69026 /** +
69027 * The base implementation of `_.uniqBy` without support for iteratee shorthands. +
69028 * +
69029 * @private +
69030 * @param {Array} array The array to inspect. +
69031 * @param {Function} [iteratee] The iteratee invoked per element. +
69032 * @param {Function} [comparator] The comparator invoked per element. +
69033 * @returns {Array} Returns the new duplicate free array. +
69034 */ +
69035 function baseUniq(array, iteratee, comparator) { +
69036 var index = -1, +
69037 includes = arrayIncludes, +
69038 length = array.length, +
69039 isCommon = true, +
69040 result = [], +
69041 seen = result; +
69042 +
69043 if (comparator) { +
69044 isCommon = false; +
69045 includes = arrayIncludesWith; +
69046 } +
69047 else if (length >= LARGE_ARRAY_SIZE) { +
69048 var set = iteratee ? null : createSet(array); +
69049 if (set) { +
69050 return setToArray(set); +
69051 } +
69052 isCommon = false; +
69053 includes = cacheHas; +
69054 seen = new SetCache; +
69055 } +
69056 else { +
69057 seen = iteratee ? [] : result; +
69058 } +
69059 outer: +
69060 while (++index < length) { +
69061 var value = array[index], +
69062 computed = iteratee ? iteratee(value) : value; +
69063 +
69064 value = (comparator || value !== 0) ? value : 0; +
69065 if (isCommon && computed === computed) { +
69066 var seenIndex = seen.length; +
69067 while (seenIndex--) { +
69068 if (seen[seenIndex] === computed) { +
69069 continue outer; +
69070 } +
69071 } +
69072 if (iteratee) { +
69073 seen.push(computed); +
69074 } +
69075 result.push(value); +
69076 } +
69077 else if (!includes(seen, computed, comparator)) { +
69078 if (seen !== result) { +
69079 seen.push(computed); +
69080 } +
69081 result.push(value); +
69082 } +
69083 } +
69084 return result; +
69085 } +
69086 +
69087 /** +
69088 * The base implementation of `_.unset`. +
69089 * +
69090 * @private +
69091 * @param {Object} object The object to modify. +
69092 * @param {Array|string} path The property path to unset. +
69093 * @returns {boolean} Returns `true` if the property is deleted, else `false`. +
69094 */ +
69095 function baseUnset(object, path) { +
69096 path = castPath(path, object); +
69097 object = parent(object, path); +
69098 return object == null || delete object[toKey(last(path))]; +
69099 } +
69100 +
69101 /** +
69102 * The base implementation of `_.update`. +
69103 * +
69104 * @private +
69105 * @param {Object} object The object to modify. +
69106 * @param {Array|string} path The path of the property to update. +
69107 * @param {Function} updater The function to produce the updated value. +
69108 * @param {Function} [customizer] The function to customize path creation. +
69109 * @returns {Object} Returns `object`. +
69110 */ +
69111 function baseUpdate(object, path, updater, customizer) { +
69112 return baseSet(object, path, updater(baseGet(object, path)), customizer); +
69113 } +
69114 +
69115 /** +
69116 * The base implementation of methods like `_.dropWhile` and `_.takeWhile` +
69117 * without support for iteratee shorthands. +
69118 * +
69119 * @private +
69120 * @param {Array} array The array to query. +
69121 * @param {Function} predicate The function invoked per iteration. +
69122 * @param {boolean} [isDrop] Specify dropping elements instead of taking them. +
69123 * @param {boolean} [fromRight] Specify iterating from right to left. +
69124 * @returns {Array} Returns the slice of `array`. +
69125 */ +
69126 function baseWhile(array, predicate, isDrop, fromRight) { +
69127 var length = array.length, +
69128 index = fromRight ? length : -1; +
69129 +
69130 while ((fromRight ? index-- : ++index < length) && +
69131 predicate(array[index], index, array)) {} +
69132 +
69133 return isDrop +
69134 ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) +
69135 : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +
69136 } +
69137 +
69138 /** +
69139 * The base implementation of `wrapperValue` which returns the result of +
69140 * performing a sequence of actions on the unwrapped `value`, where each +
69141 * successive action is supplied the return value of the previous. +
69142 * +
69143 * @private +
69144 * @param {*} value The unwrapped value. +
69145 * @param {Array} actions Actions to perform to resolve the unwrapped value. +
69146 * @returns {*} Returns the resolved value. +
69147 */ +
69148 function baseWrapperValue(value, actions) { +
69149 var result = value; +
69150 if (result instanceof LazyWrapper) { +
69151 result = result.value(); +
69152 } +
69153 return arrayReduce(actions, function(result, action) { +
69154 return action.func.apply(action.thisArg, arrayPush([result], action.args)); +
69155 }, result); +
69156 } +
69157 +
69158 /** +
69159 * The base implementation of methods like `_.xor`, without support for +
69160 * iteratee shorthands, that accepts an array of arrays to inspect. +
69161 * +
69162 * @private +
69163 * @param {Array} arrays The arrays to inspect. +
69164 * @param {Function} [iteratee] The iteratee invoked per element. +
69165 * @param {Function} [comparator] The comparator invoked per element. +
69166 * @returns {Array} Returns the new array of values. +
69167 */ +
69168 function baseXor(arrays, iteratee, comparator) { +
69169 var length = arrays.length; +
69170 if (length < 2) { +
69171 return length ? baseUniq(arrays[0]) : []; +
69172 } +
69173 var index = -1, +
69174 result = Array(length); +
69175 +
69176 while (++index < length) { +
69177 var array = arrays[index], +
69178 othIndex = -1; +
69179 +
69180 while (++othIndex < length) { +
69181 if (othIndex != index) { +
69182 result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); +
69183 } +
69184 } +
69185 } +
69186 return baseUniq(baseFlatten(result, 1), iteratee, comparator); +
69187 } +
69188 +
69189 /** +
69190 * This base implementation of `_.zipObject` which assigns values using `assignFunc`. +
69191 * +
69192 * @private +
69193 * @param {Array} props The property identifiers. +
69194 * @param {Array} values The property values. +
69195 * @param {Function} assignFunc The function to assign values. +
69196 * @returns {Object} Returns the new object. +
69197 */ +
69198 function baseZipObject(props, values, assignFunc) { +
69199 var index = -1, +
69200 length = props.length, +
69201 valsLength = values.length, +
69202 result = {}; +
69203 +
69204 while (++index < length) { +
69205 var value = index < valsLength ? values[index] : undefined; +
69206 assignFunc(result, props[index], value); +
69207 } +
69208 return result; +
69209 } +
69210 +
69211 /** +
69212 * Casts `value` to an empty array if it's not an array like object. +
69213 * +
69214 * @private +
69215 * @param {*} value The value to inspect. +
69216 * @returns {Array|Object} Returns the cast array-like object. +
69217 */ +
69218 function castArrayLikeObject(value) { +
69219 return isArrayLikeObject(value) ? value : []; +
69220 } +
69221 +
69222 /** +
69223 * Casts `value` to `identity` if it's not a function. +
69224 * +
69225 * @private +
69226 * @param {*} value The value to inspect. +
69227 * @returns {Function} Returns cast function. +
69228 */ +
69229 function castFunction(value) { +
69230 return typeof value == 'function' ? value : identity; +
69231 } +
69232 +
69233 /** +
69234 * Casts `value` to a path array if it's not one. +
69235 * +
69236 * @private +
69237 * @param {*} value The value to inspect. +
69238 * @param {Object} [object] The object to query keys on. +
69239 * @returns {Array} Returns the cast property path array. +
69240 */ +
69241 function castPath(value, object) { +
69242 if (isArray(value)) { +
69243 return value; +
69244 } +
69245 return isKey(value, object) ? [value] : stringToPath(toString(value)); +
69246 } +
69247 +
69248 /** +
69249 * A `baseRest` alias which can be replaced with `identity` by module +
69250 * replacement plugins. +
69251 * +
69252 * @private +
69253 * @type {Function} +
69254 * @param {Function} func The function to apply a rest parameter to. +
69255 * @returns {Function} Returns the new function. +
69256 */ +
69257 var castRest = baseRest; +
69258 +
69259 /** +
69260 * Casts `array` to a slice if it's needed. +
69261 * +
69262 * @private +
69263 * @param {Array} array The array to inspect. +
69264 * @param {number} start The start position. +
69265 * @param {number} [end=array.length] The end position. +
69266 * @returns {Array} Returns the cast slice. +
69267 */ +
69268 function castSlice(array, start, end) { +
69269 var length = array.length; +
69270 end = end === undefined ? length : end; +
69271 return (!start && end >= length) ? array : baseSlice(array, start, end); +
69272 } +
69273 +
69274 /** +
69275 * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). +
69276 * +
69277 * @private +
69278 * @param {number|Object} id The timer id or timeout object of the timer to clear. +
69279 */ +
69280 var clearTimeout = ctxClearTimeout || function(id) { +
69281 return root.clearTimeout(id); +
69282 }; +
69283 +
69284 /** +
69285 * Creates a clone of `buffer`. +
69286 * +
69287 * @private +
69288 * @param {Buffer} buffer The buffer to clone. +
69289 * @param {boolean} [isDeep] Specify a deep clone. +
69290 * @returns {Buffer} Returns the cloned buffer. +
69291 */ +
69292 function cloneBuffer(buffer, isDeep) { +
69293 if (isDeep) { +
69294 return buffer.slice(); +
69295 } +
69296 var length = buffer.length, +
69297 result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); +
69298 +
69299 buffer.copy(result); +
69300 return result; +
69301 } +
69302 +
69303 /** +
69304 * Creates a clone of `arrayBuffer`. +
69305 * +
69306 * @private +
69307 * @param {ArrayBuffer} arrayBuffer The array buffer to clone. +
69308 * @returns {ArrayBuffer} Returns the cloned array buffer. +
69309 */ +
69310 function cloneArrayBuffer(arrayBuffer) { +
69311 var result = new arrayBuffer.constructor(arrayBuffer.byteLength); +
69312 new Uint8Array(result).set(new Uint8Array(arrayBuffer)); +
69313 return result; +
69314 } +
69315 +
69316 /** +
69317 * Creates a clone of `dataView`. +
69318 * +
69319 * @private +
69320 * @param {Object} dataView The data view to clone. +
69321 * @param {boolean} [isDeep] Specify a deep clone. +
69322 * @returns {Object} Returns the cloned data view. +
69323 */ +
69324 function cloneDataView(dataView, isDeep) { +
69325 var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; +
69326 return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +
69327 } +
69328 +
69329 /** +
69330 * Creates a clone of `regexp`. +
69331 * +
69332 * @private +
69333 * @param {Object} regexp The regexp to clone. +
69334 * @returns {Object} Returns the cloned regexp. +
69335 */ +
69336 function cloneRegExp(regexp) { +
69337 var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); +
69338 result.lastIndex = regexp.lastIndex; +
69339 return result; +
69340 } +
69341 +
69342 /** +
69343 * Creates a clone of the `symbol` object. +
69344 * +
69345 * @private +
69346 * @param {Object} symbol The symbol object to clone. +
69347 * @returns {Object} Returns the cloned symbol object. +
69348 */ +
69349 function cloneSymbol(symbol) { +
69350 return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +
69351 } +
69352 +
69353 /** +
69354 * Creates a clone of `typedArray`. +
69355 * +
69356 * @private +
69357 * @param {Object} typedArray The typed array to clone. +
69358 * @param {boolean} [isDeep] Specify a deep clone. +
69359 * @returns {Object} Returns the cloned typed array. +
69360 */ +
69361 function cloneTypedArray(typedArray, isDeep) { +
69362 var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; +
69363 return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +
69364 } +
69365 +
69366 /** +
69367 * Compares values to sort them in ascending order. +
69368 * +
69369 * @private +
69370 * @param {*} value The value to compare. +
69371 * @param {*} other The other value to compare. +
69372 * @returns {number} Returns the sort order indicator for `value`. +
69373 */ +
69374 function compareAscending(value, other) { +
69375 if (value !== other) { +
69376 var valIsDefined = value !== undefined, +
69377 valIsNull = value === null, +
69378 valIsReflexive = value === value, +
69379 valIsSymbol = isSymbol(value); +
69380 +
69381 var othIsDefined = other !== undefined, +
69382 othIsNull = other === null, +
69383 othIsReflexive = other === other, +
69384 othIsSymbol = isSymbol(other); +
69385 +
69386 if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || +
69387 (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || +
69388 (valIsNull && othIsDefined && othIsReflexive) || +
69389 (!valIsDefined && othIsReflexive) || +
69390 !valIsReflexive) { +
69391 return 1; +
69392 } +
69393 if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || +
69394 (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || +
69395 (othIsNull && valIsDefined && valIsReflexive) || +
69396 (!othIsDefined && valIsReflexive) || +
69397 !othIsReflexive) { +
69398 return -1; +
69399 } +
69400 } +
69401 return 0; +
69402 } +
69403 +
69404 /** +
69405 * Used by `_.orderBy` to compare multiple properties of a value to another +
69406 * and stable sort them. +
69407 * +
69408 * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, +
69409 * specify an order of "desc" for descending or "asc" for ascending sort order +
69410 * of corresponding values. +
69411 * +
69412 * @private +
69413 * @param {Object} object The object to compare. +
69414 * @param {Object} other The other object to compare. +
69415 * @param {boolean[]|string[]} orders The order to sort by for each property. +
69416 * @returns {number} Returns the sort order indicator for `object`. +
69417 */ +
69418 function compareMultiple(object, other, orders) { +
69419 var index = -1, +
69420 objCriteria = object.criteria, +
69421 othCriteria = other.criteria, +
69422 length = objCriteria.length, +
69423 ordersLength = orders.length; +
69424 +
69425 while (++index < length) { +
69426 var result = compareAscending(objCriteria[index], othCriteria[index]); +
69427 if (result) { +
69428 if (index >= ordersLength) { +
69429 return result; +
69430 } +
69431 var order = orders[index]; +
69432 return result * (order == 'desc' ? -1 : 1); +
69433 } +
69434 } +
69435 // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications +
69436 // that causes it, under certain circumstances, to provide the same value for +
69437 // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 +
69438 // for more details. +
69439 // +
69440 // This also ensures a stable sort in V8 and other engines. +
69441 // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. +
69442 return object.index - other.index; +
69443 } +
69444 +
69445 /** +
69446 * Creates an array that is the composition of partially applied arguments, +
69447 * placeholders, and provided arguments into a single array of arguments. +
69448 * +
69449 * @private +
69450 * @param {Array} args The provided arguments. +
69451 * @param {Array} partials The arguments to prepend to those provided. +
69452 * @param {Array} holders The `partials` placeholder indexes. +
69453 * @params {boolean} [isCurried] Specify composing for a curried function. +
69454 * @returns {Array} Returns the new array of composed arguments. +
69455 */ +
69456 function composeArgs(args, partials, holders, isCurried) { +
69457 var argsIndex = -1, +
69458 argsLength = args.length, +
69459 holdersLength = holders.length, +
69460 leftIndex = -1, +
69461 leftLength = partials.length, +
69462 rangeLength = nativeMax(argsLength - holdersLength, 0), +
69463 result = Array(leftLength + rangeLength), +
69464 isUncurried = !isCurried; +
69465 +
69466 while (++leftIndex < leftLength) { +
69467 result[leftIndex] = partials[leftIndex]; +
69468 } +
69469 while (++argsIndex < holdersLength) { +
69470 if (isUncurried || argsIndex < argsLength) { +
69471 result[holders[argsIndex]] = args[argsIndex]; +
69472 } +
69473 } +
69474 while (rangeLength--) { +
69475 result[leftIndex++] = args[argsIndex++]; +
69476 } +
69477 return result; +
69478 } +
69479 +
69480 /** +
69481 * This function is like `composeArgs` except that the arguments composition +
69482 * is tailored for `_.partialRight`. +
69483 * +
69484 * @private +
69485 * @param {Array} args The provided arguments. +
69486 * @param {Array} partials The arguments to append to those provided. +
69487 * @param {Array} holders The `partials` placeholder indexes. +
69488 * @params {boolean} [isCurried] Specify composing for a curried function. +
69489 * @returns {Array} Returns the new array of composed arguments. +
69490 */ +
69491 function composeArgsRight(args, partials, holders, isCurried) { +
69492 var argsIndex = -1, +
69493 argsLength = args.length, +
69494 holdersIndex = -1, +
69495 holdersLength = holders.length, +
69496 rightIndex = -1, +
69497 rightLength = partials.length, +
69498 rangeLength = nativeMax(argsLength - holdersLength, 0), +
69499 result = Array(rangeLength + rightLength), +
69500 isUncurried = !isCurried; +
69501 +
69502 while (++argsIndex < rangeLength) { +
69503 result[argsIndex] = args[argsIndex]; +
69504 } +
69505 var offset = argsIndex; +
69506 while (++rightIndex < rightLength) { +
69507 result[offset + rightIndex] = partials[rightIndex]; +
69508 } +
69509 while (++holdersIndex < holdersLength) { +
69510 if (isUncurried || argsIndex < argsLength) { +
69511 result[offset + holders[holdersIndex]] = args[argsIndex++]; +
69512 } +
69513 } +
69514 return result; +
69515 } +
69516 +
69517 /** +
69518 * Copies the values of `source` to `array`. +
69519 * +
69520 * @private +
69521 * @param {Array} source The array to copy values from. +
69522 * @param {Array} [array=[]] The array to copy values to. +
69523 * @returns {Array} Returns `array`. +
69524 */ +
69525 function copyArray(source, array) { +
69526 var index = -1, +
69527 length = source.length; +
69528 +
69529 array || (array = Array(length)); +
69530 while (++index < length) { +
69531 array[index] = source[index]; +
69532 } +
69533 return array; +
69534 } +
69535 +
69536 /** +
69537 * Copies properties of `source` to `object`. +
69538 * +
69539 * @private +
69540 * @param {Object} source The object to copy properties from. +
69541 * @param {Array} props The property identifiers to copy. +
69542 * @param {Object} [object={}] The object to copy properties to. +
69543 * @param {Function} [customizer] The function to customize copied values. +
69544 * @returns {Object} Returns `object`. +
69545 */ +
69546 function copyObject(source, props, object, customizer) { +
69547 var isNew = !object; +
69548 object || (object = {}); +
69549 +
69550 var index = -1, +
69551 length = props.length; +
69552 +
69553 while (++index < length) { +
69554 var key = props[index]; +
69555 +
69556 var newValue = customizer +
69557 ? customizer(object[key], source[key], key, object, source) +
69558 : undefined; +
69559 +
69560 if (newValue === undefined) { +
69561 newValue = source[key]; +
69562 } +
69563 if (isNew) { +
69564 baseAssignValue(object, key, newValue); +
69565 } else { +
69566 assignValue(object, key, newValue); +
69567 } +
69568 } +
69569 return object; +
69570 } +
69571 +
69572 /** +
69573 * Copies own symbols of `source` to `object`. +
69574 * +
69575 * @private +
69576 * @param {Object} source The object to copy symbols from. +
69577 * @param {Object} [object={}] The object to copy symbols to. +
69578 * @returns {Object} Returns `object`. +
69579 */ +
69580 function copySymbols(source, object) { +
69581 return copyObject(source, getSymbols(source), object); +
69582 } +
69583 +
69584 /** +
69585 * Copies own and inherited symbols of `source` to `object`. +
69586 * +
69587 * @private +
69588 * @param {Object} source The object to copy symbols from. +
69589 * @param {Object} [object={}] The object to copy symbols to. +
69590 * @returns {Object} Returns `object`. +
69591 */ +
69592 function copySymbolsIn(source, object) { +
69593 return copyObject(source, getSymbolsIn(source), object); +
69594 } +
69595 +
69596 /** +
69597 * Creates a function like `_.groupBy`. +
69598 * +
69599 * @private +
69600 * @param {Function} setter The function to set accumulator values. +
69601 * @param {Function} [initializer] The accumulator object initializer. +
69602 * @returns {Function} Returns the new aggregator function. +
69603 */ +
69604 function createAggregator(setter, initializer) { +
69605 return function(collection, iteratee) { +
69606 var func = isArray(collection) ? arrayAggregator : baseAggregator, +
69607 accumulator = initializer ? initializer() : {}; +
69608 +
69609 return func(collection, setter, getIteratee(iteratee, 2), accumulator); +
69610 }; +
69611 } +
69612 +
69613 /** +
69614 * Creates a function like `_.assign`. +
69615 * +
69616 * @private +
69617 * @param {Function} assigner The function to assign values. +
69618 * @returns {Function} Returns the new assigner function. +
69619 */ +
69620 function createAssigner(assigner) { +
69621 return baseRest(function(object, sources) { +
69622 var index = -1, +
69623 length = sources.length, +
69624 customizer = length > 1 ? sources[length - 1] : undefined, +
69625 guard = length > 2 ? sources[2] : undefined; +
69626 +
69627 customizer = (assigner.length > 3 && typeof customizer == 'function') +
69628 ? (length--, customizer) +
69629 : undefined; +
69630 +
69631 if (guard && isIterateeCall(sources[0], sources[1], guard)) { +
69632 customizer = length < 3 ? undefined : customizer; +
69633 length = 1; +
69634 } +
69635 object = Object(object); +
69636 while (++index < length) { +
69637 var source = sources[index]; +
69638 if (source) { +
69639 assigner(object, source, index, customizer); +
69640 } +
69641 } +
69642 return object; +
69643 }); +
69644 } +
69645 +
69646 /** +
69647 * Creates a `baseEach` or `baseEachRight` function. +
69648 * +
69649 * @private +
69650 * @param {Function} eachFunc The function to iterate over a collection. +
69651 * @param {boolean} [fromRight] Specify iterating from right to left. +
69652 * @returns {Function} Returns the new base function. +
69653 */ +
69654 function createBaseEach(eachFunc, fromRight) { +
69655 return function(collection, iteratee) { +
69656 if (collection == null) { +
69657 return collection; +
69658 } +
69659 if (!isArrayLike(collection)) { +
69660 return eachFunc(collection, iteratee); +
69661 } +
69662 var length = collection.length, +
69663 index = fromRight ? length : -1, +
69664 iterable = Object(collection); +
69665 +
69666 while ((fromRight ? index-- : ++index < length)) { +
69667 if (iteratee(iterable[index], index, iterable) === false) { +
69668 break; +
69669 } +
69670 } +
69671 return collection; +
69672 }; +
69673 } +
69674 +
69675 /** +
69676 * Creates a base function for methods like `_.forIn` and `_.forOwn`. +
69677 * +
69678 * @private +
69679 * @param {boolean} [fromRight] Specify iterating from right to left. +
69680 * @returns {Function} Returns the new base function. +
69681 */ +
69682 function createBaseFor(fromRight) { +
69683 return function(object, iteratee, keysFunc) { +
69684 var index = -1, +
69685 iterable = Object(object), +
69686 props = keysFunc(object), +
69687 length = props.length; +
69688 +
69689 while (length--) { +
69690 var key = props[fromRight ? length : ++index]; +
69691 if (iteratee(iterable[key], key, iterable) === false) { +
69692 break; +
69693 } +
69694 } +
69695 return object; +
69696 }; +
69697 } +
69698 +
69699 /** +
69700 * Creates a function that wraps `func` to invoke it with the optional `this` +
69701 * binding of `thisArg`. +
69702 * +
69703 * @private +
69704 * @param {Function} func The function to wrap. +
69705 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
69706 * @param {*} [thisArg] The `this` binding of `func`. +
69707 * @returns {Function} Returns the new wrapped function. +
69708 */ +
69709 function createBind(func, bitmask, thisArg) { +
69710 var isBind = bitmask & WRAP_BIND_FLAG, +
69711 Ctor = createCtor(func); +
69712 +
69713 function wrapper() { +
69714 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
69715 return fn.apply(isBind ? thisArg : this, arguments); +
69716 } +
69717 return wrapper; +
69718 } +
69719 +
69720 /** +
69721 * Creates a function like `_.lowerFirst`. +
69722 * +
69723 * @private +
69724 * @param {string} methodName The name of the `String` case method to use. +
69725 * @returns {Function} Returns the new case function. +
69726 */ +
69727 function createCaseFirst(methodName) { +
69728 return function(string) { +
69729 string = toString(string); +
69730 +
69731 var strSymbols = hasUnicode(string) +
69732 ? stringToArray(string) +
69733 : undefined; +
69734 +
69735 var chr = strSymbols +
69736 ? strSymbols[0] +
69737 : string.charAt(0); +
69738 +
69739 var trailing = strSymbols +
69740 ? castSlice(strSymbols, 1).join('') +
69741 : string.slice(1); +
69742 +
69743 return chr[methodName]() + trailing; +
69744 }; +
69745 } +
69746 +
69747 /** +
69748 * Creates a function like `_.camelCase`. +
69749 * +
69750 * @private +
69751 * @param {Function} callback The function to combine each word. +
69752 * @returns {Function} Returns the new compounder function. +
69753 */ +
69754 function createCompounder(callback) { +
69755 return function(string) { +
69756 return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); +
69757 }; +
69758 } +
69759 +
69760 /** +
69761 * Creates a function that produces an instance of `Ctor` regardless of +
69762 * whether it was invoked as part of a `new` expression or by `call` or `apply`. +
69763 * +
69764 * @private +
69765 * @param {Function} Ctor The constructor to wrap. +
69766 * @returns {Function} Returns the new wrapped function. +
69767 */ +
69768 function createCtor(Ctor) { +
69769 return function() { +
69770 // Use a `switch` statement to work with class constructors. See +
69771 // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist +
69772 // for more details. +
69773 var args = arguments; +
69774 switch (args.length) { +
69775 case 0: return new Ctor; +
69776 case 1: return new Ctor(args[0]); +
69777 case 2: return new Ctor(args[0], args[1]); +
69778 case 3: return new Ctor(args[0], args[1], args[2]); +
69779 case 4: return new Ctor(args[0], args[1], args[2], args[3]); +
69780 case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); +
69781 case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); +
69782 case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); +
69783 } +
69784 var thisBinding = baseCreate(Ctor.prototype), +
69785 result = Ctor.apply(thisBinding, args); +
69786 +
69787 // Mimic the constructor's `return` behavior. +
69788 // See https://es5.github.io/#x13.2.2 for more details. +
69789 return isObject(result) ? result : thisBinding; +
69790 }; +
69791 } +
69792 +
69793 /** +
69794 * Creates a function that wraps `func` to enable currying. +
69795 * +
69796 * @private +
69797 * @param {Function} func The function to wrap. +
69798 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
69799 * @param {number} arity The arity of `func`. +
69800 * @returns {Function} Returns the new wrapped function. +
69801 */ +
69802 function createCurry(func, bitmask, arity) { +
69803 var Ctor = createCtor(func); +
69804 +
69805 function wrapper() { +
69806 var length = arguments.length, +
69807 args = Array(length), +
69808 index = length, +
69809 placeholder = getHolder(wrapper); +
69810 +
69811 while (index--) { +
69812 args[index] = arguments[index]; +
69813 } +
69814 var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) +
69815 ? [] +
69816 : replaceHolders(args, placeholder); +
69817 +
69818 length -= holders.length; +
69819 if (length < arity) { +
69820 return createRecurry( +
69821 func, bitmask, createHybrid, wrapper.placeholder, undefined, +
69822 args, holders, undefined, undefined, arity - length); +
69823 } +
69824 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
69825 return apply(fn, this, args); +
69826 } +
69827 return wrapper; +
69828 } +
69829 +
69830 /** +
69831 * Creates a `_.find` or `_.findLast` function. +
69832 * +
69833 * @private +
69834 * @param {Function} findIndexFunc The function to find the collection index. +
69835 * @returns {Function} Returns the new find function. +
69836 */ +
69837 function createFind(findIndexFunc) { +
69838 return function(collection, predicate, fromIndex) { +
69839 var iterable = Object(collection); +
69840 if (!isArrayLike(collection)) { +
69841 var iteratee = getIteratee(predicate, 3); +
69842 collection = keys(collection); +
69843 predicate = function(key) { return iteratee(iterable[key], key, iterable); }; +
69844 } +
69845 var index = findIndexFunc(collection, predicate, fromIndex); +
69846 return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; +
69847 }; +
69848 } +
69849 +
69850 /** +
69851 * Creates a `_.flow` or `_.flowRight` function. +
69852 * +
69853 * @private +
69854 * @param {boolean} [fromRight] Specify iterating from right to left. +
69855 * @returns {Function} Returns the new flow function. +
69856 */ +
69857 function createFlow(fromRight) { +
69858 return flatRest(function(funcs) { +
69859 var length = funcs.length, +
69860 index = length, +
69861 prereq = LodashWrapper.prototype.thru; +
69862 +
69863 if (fromRight) { +
69864 funcs.reverse(); +
69865 } +
69866 while (index--) { +
69867 var func = funcs[index]; +
69868 if (typeof func != 'function') { +
69869 throw new TypeError(FUNC_ERROR_TEXT); +
69870 } +
69871 if (prereq && !wrapper && getFuncName(func) == 'wrapper') { +
69872 var wrapper = new LodashWrapper([], true); +
69873 } +
69874 } +
69875 index = wrapper ? index : length; +
69876 while (++index < length) { +
69877 func = funcs[index]; +
69878 +
69879 var funcName = getFuncName(func), +
69880 data = funcName == 'wrapper' ? getData(func) : undefined; +
69881 +
69882 if (data && isLaziable(data[0]) && +
69883 data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && +
69884 !data[4].length && data[9] == 1 +
69885 ) { +
69886 wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); +
69887 } else { +
69888 wrapper = (func.length == 1 && isLaziable(func)) +
69889 ? wrapper[funcName]() +
69890 : wrapper.thru(func); +
69891 } +
69892 } +
69893 return function() { +
69894 var args = arguments, +
69895 value = args[0]; +
69896 +
69897 if (wrapper && args.length == 1 && isArray(value)) { +
69898 return wrapper.plant(value).value(); +
69899 } +
69900 var index = 0, +
69901 result = length ? funcs[index].apply(this, args) : value; +
69902 +
69903 while (++index < length) { +
69904 result = funcs[index].call(this, result); +
69905 } +
69906 return result; +
69907 }; +
69908 }); +
69909 } +
69910 +
69911 /** +
69912 * Creates a function that wraps `func` to invoke it with optional `this` +
69913 * binding of `thisArg`, partial application, and currying. +
69914 * +
69915 * @private +
69916 * @param {Function|string} func The function or method name to wrap. +
69917 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
69918 * @param {*} [thisArg] The `this` binding of `func`. +
69919 * @param {Array} [partials] The arguments to prepend to those provided to +
69920 * the new function. +
69921 * @param {Array} [holders] The `partials` placeholder indexes. +
69922 * @param {Array} [partialsRight] The arguments to append to those provided +
69923 * to the new function. +
69924 * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. +
69925 * @param {Array} [argPos] The argument positions of the new function. +
69926 * @param {number} [ary] The arity cap of `func`. +
69927 * @param {number} [arity] The arity of `func`. +
69928 * @returns {Function} Returns the new wrapped function. +
69929 */ +
69930 function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { +
69931 var isAry = bitmask & WRAP_ARY_FLAG, +
69932 isBind = bitmask & WRAP_BIND_FLAG, +
69933 isBindKey = bitmask & WRAP_BIND_KEY_FLAG, +
69934 isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), +
69935 isFlip = bitmask & WRAP_FLIP_FLAG, +
69936 Ctor = isBindKey ? undefined : createCtor(func); +
69937 +
69938 function wrapper() { +
69939 var length = arguments.length, +
69940 args = Array(length), +
69941 index = length; +
69942 +
69943 while (index--) { +
69944 args[index] = arguments[index]; +
69945 } +
69946 if (isCurried) { +
69947 var placeholder = getHolder(wrapper), +
69948 holdersCount = countHolders(args, placeholder); +
69949 } +
69950 if (partials) { +
69951 args = composeArgs(args, partials, holders, isCurried); +
69952 } +
69953 if (partialsRight) { +
69954 args = composeArgsRight(args, partialsRight, holdersRight, isCurried); +
69955 } +
69956 length -= holdersCount; +
69957 if (isCurried && length < arity) { +
69958 var newHolders = replaceHolders(args, placeholder); +
69959 return createRecurry( +
69960 func, bitmask, createHybrid, wrapper.placeholder, thisArg, +
69961 args, newHolders, argPos, ary, arity - length +
69962 ); +
69963 } +
69964 var thisBinding = isBind ? thisArg : this, +
69965 fn = isBindKey ? thisBinding[func] : func; +
69966 +
69967 length = args.length; +
69968 if (argPos) { +
69969 args = reorder(args, argPos); +
69970 } else if (isFlip && length > 1) { +
69971 args.reverse(); +
69972 } +
69973 if (isAry && ary < length) { +
69974 args.length = ary; +
69975 } +
69976 if (this && this !== root && this instanceof wrapper) { +
69977 fn = Ctor || createCtor(fn); +
69978 } +
69979 return fn.apply(thisBinding, args); +
69980 } +
69981 return wrapper; +
69982 } +
69983 +
69984 /** +
69985 * Creates a function like `_.invertBy`. +
69986 * +
69987 * @private +
69988 * @param {Function} setter The function to set accumulator values. +
69989 * @param {Function} toIteratee The function to resolve iteratees. +
69990 * @returns {Function} Returns the new inverter function. +
69991 */ +
69992 function createInverter(setter, toIteratee) { +
69993 return function(object, iteratee) { +
69994 return baseInverter(object, setter, toIteratee(iteratee), {}); +
69995 }; +
69996 } +
69997 +
69998 /** +
69999 * Creates a function that performs a mathematical operation on two values. +
70000 * +
70001 * @private +
70002 * @param {Function} operator The function to perform the operation. +
70003 * @param {number} [defaultValue] The value used for `undefined` arguments. +
70004 * @returns {Function} Returns the new mathematical operation function. +
70005 */ +
70006 function createMathOperation(operator, defaultValue) { +
70007 return function(value, other) { +
70008 var result; +
70009 if (value === undefined && other === undefined) { +
70010 return defaultValue; +
70011 } +
70012 if (value !== undefined) { +
70013 result = value; +
70014 } +
70015 if (other !== undefined) { +
70016 if (result === undefined) { +
70017 return other; +
70018 } +
70019 if (typeof value == 'string' || typeof other == 'string') { +
70020 value = baseToString(value); +
70021 other = baseToString(other); +
70022 } else { +
70023 value = baseToNumber(value); +
70024 other = baseToNumber(other); +
70025 } +
70026 result = operator(value, other); +
70027 } +
70028 return result; +
70029 }; +
70030 } +
70031 +
70032 /** +
70033 * Creates a function like `_.over`. +
70034 * +
70035 * @private +
70036 * @param {Function} arrayFunc The function to iterate over iteratees. +
70037 * @returns {Function} Returns the new over function. +
70038 */ +
70039 function createOver(arrayFunc) { +
70040 return flatRest(function(iteratees) { +
70041 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); +
70042 return baseRest(function(args) { +
70043 var thisArg = this; +
70044 return arrayFunc(iteratees, function(iteratee) { +
70045 return apply(iteratee, thisArg, args); +
70046 }); +
70047 }); +
70048 }); +
70049 } +
70050 +
70051 /** +
70052 * Creates the padding for `string` based on `length`. The `chars` string +
70053 * is truncated if the number of characters exceeds `length`. +
70054 * +
70055 * @private +
70056 * @param {number} length The padding length. +
70057 * @param {string} [chars=' '] The string used as padding. +
70058 * @returns {string} Returns the padding for `string`. +
70059 */ +
70060 function createPadding(length, chars) { +
70061 chars = chars === undefined ? ' ' : baseToString(chars); +
70062 +
70063 var charsLength = chars.length; +
70064 if (charsLength < 2) { +
70065 return charsLength ? baseRepeat(chars, length) : chars; +
70066 } +
70067 var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); +
70068 return hasUnicode(chars) +
70069 ? castSlice(stringToArray(result), 0, length).join('') +
70070 : result.slice(0, length); +
70071 } +
70072 +
70073 /** +
70074 * Creates a function that wraps `func` to invoke it with the `this` binding +
70075 * of `thisArg` and `partials` prepended to the arguments it receives. +
70076 * +
70077 * @private +
70078 * @param {Function} func The function to wrap. +
70079 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
70080 * @param {*} thisArg The `this` binding of `func`. +
70081 * @param {Array} partials The arguments to prepend to those provided to +
70082 * the new function. +
70083 * @returns {Function} Returns the new wrapped function. +
70084 */ +
70085 function createPartial(func, bitmask, thisArg, partials) { +
70086 var isBind = bitmask & WRAP_BIND_FLAG, +
70087 Ctor = createCtor(func); +
70088 +
70089 function wrapper() { +
70090 var argsIndex = -1, +
70091 argsLength = arguments.length, +
70092 leftIndex = -1, +
70093 leftLength = partials.length, +
70094 args = Array(leftLength + argsLength), +
70095 fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
70096 +
70097 while (++leftIndex < leftLength) { +
70098 args[leftIndex] = partials[leftIndex]; +
70099 } +
70100 while (argsLength--) { +
70101 args[leftIndex++] = arguments[++argsIndex]; +
70102 } +
70103 return apply(fn, isBind ? thisArg : this, args); +
70104 } +
70105 return wrapper; +
70106 } +
70107 +
70108 /** +
70109 * Creates a `_.range` or `_.rangeRight` function. +
70110 * +
70111 * @private +
70112 * @param {boolean} [fromRight] Specify iterating from right to left. +
70113 * @returns {Function} Returns the new range function. +
70114 */ +
70115 function createRange(fromRight) { +
70116 return function(start, end, step) { +
70117 if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { +
70118 end = step = undefined; +
70119 } +
70120 // Ensure the sign of `-0` is preserved. +
70121 start = toFinite(start); +
70122 if (end === undefined) { +
70123 end = start; +
70124 start = 0; +
70125 } else { +
70126 end = toFinite(end); +
70127 } +
70128 step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); +
70129 return baseRange(start, end, step, fromRight); +
70130 }; +
70131 } +
70132 +
70133 /** +
70134 * Creates a function that performs a relational operation on two values. +
70135 * +
70136 * @private +
70137 * @param {Function} operator The function to perform the operation. +
70138 * @returns {Function} Returns the new relational operation function. +
70139 */ +
70140 function createRelationalOperation(operator) { +
70141 return function(value, other) { +
70142 if (!(typeof value == 'string' && typeof other == 'string')) { +
70143 value = toNumber(value); +
70144 other = toNumber(other); +
70145 } +
70146 return operator(value, other); +
70147 }; +
70148 } +
70149 +
70150 /** +
70151 * Creates a function that wraps `func` to continue currying. +
70152 * +
70153 * @private +
70154 * @param {Function} func The function to wrap. +
70155 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
70156 * @param {Function} wrapFunc The function to create the `func` wrapper. +
70157 * @param {*} placeholder The placeholder value. +
70158 * @param {*} [thisArg] The `this` binding of `func`. +
70159 * @param {Array} [partials] The arguments to prepend to those provided to +
70160 * the new function. +
70161 * @param {Array} [holders] The `partials` placeholder indexes. +
70162 * @param {Array} [argPos] The argument positions of the new function. +
70163 * @param {number} [ary] The arity cap of `func`. +
70164 * @param {number} [arity] The arity of `func`. +
70165 * @returns {Function} Returns the new wrapped function. +
70166 */ +
70167 function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { +
70168 var isCurry = bitmask & WRAP_CURRY_FLAG, +
70169 newHolders = isCurry ? holders : undefined, +
70170 newHoldersRight = isCurry ? undefined : holders, +
70171 newPartials = isCurry ? partials : undefined, +
70172 newPartialsRight = isCurry ? undefined : partials; +
70173 +
70174 bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); +
70175 bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); +
70176 +
70177 if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { +
70178 bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); +
70179 } +
70180 var newData = [ +
70181 func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, +
70182 newHoldersRight, argPos, ary, arity +
70183 ]; +
70184 +
70185 var result = wrapFunc.apply(undefined, newData); +
70186 if (isLaziable(func)) { +
70187 setData(result, newData); +
70188 } +
70189 result.placeholder = placeholder; +
70190 return setWrapToString(result, func, bitmask); +
70191 } +
70192 +
70193 /** +
70194 * Creates a function like `_.round`. +
70195 * +
70196 * @private +
70197 * @param {string} methodName The name of the `Math` method to use when rounding. +
70198 * @returns {Function} Returns the new round function. +
70199 */ +
70200 function createRound(methodName) { +
70201 var func = Math[methodName]; +
70202 return function(number, precision) { +
70203 number = toNumber(number); +
70204 precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); +
70205 if (precision) { +
70206 // Shift with exponential notation to avoid floating-point issues. +
70207 // See [MDN](https://mdn.io/round#Examples) for more details. +
70208 var pair = (toString(number) + 'e').split('e'), +
70209 value = func(pair[0] + 'e' + (+pair[1] + precision)); +
70210 +
70211 pair = (toString(value) + 'e').split('e'); +
70212 return +(pair[0] + 'e' + (+pair[1] - precision)); +
70213 } +
70214 return func(number); +
70215 }; +
70216 } +
70217 +
70218 /** +
70219 * Creates a set object of `values`. +
70220 * +
70221 * @private +
70222 * @param {Array} values The values to add to the set. +
70223 * @returns {Object} Returns the new set. +
70224 */ +
70225 var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { +
70226 return new Set(values); +
70227 }; +
70228 +
70229 /** +
70230 * Creates a `_.toPairs` or `_.toPairsIn` function. +
70231 * +
70232 * @private +
70233 * @param {Function} keysFunc The function to get the keys of a given object. +
70234 * @returns {Function} Returns the new pairs function. +
70235 */ +
70236 function createToPairs(keysFunc) { +
70237 return function(object) { +
70238 var tag = getTag(object); +
70239 if (tag == mapTag) { +
70240 return mapToArray(object); +
70241 } +
70242 if (tag == setTag) { +
70243 return setToPairs(object); +
70244 } +
70245 return baseToPairs(object, keysFunc(object)); +
70246 }; +
70247 } +
70248 +
70249 /** +
70250 * Creates a function that either curries or invokes `func` with optional +
70251 * `this` binding and partially applied arguments. +
70252 * +
70253 * @private +
70254 * @param {Function|string} func The function or method name to wrap. +
70255 * @param {number} bitmask The bitmask flags. +
70256 * 1 - `_.bind` +
70257 * 2 - `_.bindKey` +
70258 * 4 - `_.curry` or `_.curryRight` of a bound function +
70259 * 8 - `_.curry` +
70260 * 16 - `_.curryRight` +
70261 * 32 - `_.partial` +
70262 * 64 - `_.partialRight` +
70263 * 128 - `_.rearg` +
70264 * 256 - `_.ary` +
70265 * 512 - `_.flip` +
70266 * @param {*} [thisArg] The `this` binding of `func`. +
70267 * @param {Array} [partials] The arguments to be partially applied. +
70268 * @param {Array} [holders] The `partials` placeholder indexes. +
70269 * @param {Array} [argPos] The argument positions of the new function. +
70270 * @param {number} [ary] The arity cap of `func`. +
70271 * @param {number} [arity] The arity of `func`. +
70272 * @returns {Function} Returns the new wrapped function. +
70273 */ +
70274 function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { +
70275 var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; +
70276 if (!isBindKey && typeof func != 'function') { +
70277 throw new TypeError(FUNC_ERROR_TEXT); +
70278 } +
70279 var length = partials ? partials.length : 0; +
70280 if (!length) { +
70281 bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); +
70282 partials = holders = undefined; +
70283 } +
70284 ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); +
70285 arity = arity === undefined ? arity : toInteger(arity); +
70286 length -= holders ? holders.length : 0; +
70287 +
70288 if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { +
70289 var partialsRight = partials, +
70290 holdersRight = holders; +
70291 +
70292 partials = holders = undefined; +
70293 } +
70294 var data = isBindKey ? undefined : getData(func); +
70295 +
70296 var newData = [ +
70297 func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, +
70298 argPos, ary, arity +
70299 ]; +
70300 +
70301 if (data) { +
70302 mergeData(newData, data); +
70303 } +
70304 func = newData[0]; +
70305 bitmask = newData[1]; +
70306 thisArg = newData[2]; +
70307 partials = newData[3]; +
70308 holders = newData[4]; +
70309 arity = newData[9] = newData[9] === undefined +
70310 ? (isBindKey ? 0 : func.length) +
70311 : nativeMax(newData[9] - length, 0); +
70312 +
70313 if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { +
70314 bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); +
70315 } +
70316 if (!bitmask || bitmask == WRAP_BIND_FLAG) { +
70317 var result = createBind(func, bitmask, thisArg); +
70318 } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { +
70319 result = createCurry(func, bitmask, arity); +
70320 } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { +
70321 result = createPartial(func, bitmask, thisArg, partials); +
70322 } else { +
70323 result = createHybrid.apply(undefined, newData); +
70324 } +
70325 var setter = data ? baseSetData : setData; +
70326 return setWrapToString(setter(result, newData), func, bitmask); +
70327 } +
70328 +
70329 /** +
70330 * Used by `_.defaults` to customize its `_.assignIn` use to assign properties +
70331 * of source objects to the destination object for all destination properties +
70332 * that resolve to `undefined`. +
70333 * +
70334 * @private +
70335 * @param {*} objValue The destination value. +
70336 * @param {*} srcValue The source value. +
70337 * @param {string} key The key of the property to assign. +
70338 * @param {Object} object The parent object of `objValue`. +
70339 * @returns {*} Returns the value to assign. +
70340 */ +
70341 function customDefaultsAssignIn(objValue, srcValue, key, object) { +
70342 if (objValue === undefined || +
70343 (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { +
70344 return srcValue; +
70345 } +
70346 return objValue; +
70347 } +
70348 +
70349 /** +
70350 * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source +
70351 * objects into destination objects that are passed thru. +
70352 * +
70353 * @private +
70354 * @param {*} objValue The destination value. +
70355 * @param {*} srcValue The source value. +
70356 * @param {string} key The key of the property to merge. +
70357 * @param {Object} object The parent object of `objValue`. +
70358 * @param {Object} source The parent object of `srcValue`. +
70359 * @param {Object} [stack] Tracks traversed source values and their merged +
70360 * counterparts. +
70361 * @returns {*} Returns the value to assign. +
70362 */ +
70363 function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { +
70364 if (isObject(objValue) && isObject(srcValue)) { +
70365 // Recursively merge objects and arrays (susceptible to call stack limits). +
70366 stack.set(srcValue, objValue); +
70367 baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); +
70368 stack['delete'](srcValue); +
70369 } +
70370 return objValue; +
70371 } +
70372 +
70373 /** +
70374 * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain +
70375 * objects. +
70376 * +
70377 * @private +
70378 * @param {*} value The value to inspect. +
70379 * @param {string} key The key of the property to inspect. +
70380 * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. +
70381 */ +
70382 function customOmitClone(value) { +
70383 return isPlainObject(value) ? undefined : value; +
70384 } +
70385 +
70386 /** +
70387 * A specialized version of `baseIsEqualDeep` for arrays with support for +
70388 * partial deep comparisons. +
70389 * +
70390 * @private +
70391 * @param {Array} array The array to compare. +
70392 * @param {Array} other The other array to compare. +
70393 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
70394 * @param {Function} customizer The function to customize comparisons. +
70395 * @param {Function} equalFunc The function to determine equivalents of values. +
70396 * @param {Object} stack Tracks traversed `array` and `other` objects. +
70397 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. +
70398 */ +
70399 function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { +
70400 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +
70401 arrLength = array.length, +
70402 othLength = other.length; +
70403 +
70404 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { +
70405 return false; +
70406 } +
70407 // Assume cyclic values are equal. +
70408 var stacked = stack.get(array); +
70409 if (stacked && stack.get(other)) { +
70410 return stacked == other; +
70411 } +
70412 var index = -1, +
70413 result = true, +
70414 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; +
70415 +
70416 stack.set(array, other); +
70417 stack.set(other, array); +
70418 +
70419 // Ignore non-index properties. +
70420 while (++index < arrLength) { +
70421 var arrValue = array[index], +
70422 othValue = other[index]; +
70423 +
70424 if (customizer) { +
70425 var compared = isPartial +
70426 ? customizer(othValue, arrValue, index, other, array, stack) +
70427 : customizer(arrValue, othValue, index, array, other, stack); +
70428 } +
70429 if (compared !== undefined) { +
70430 if (compared) { +
70431 continue; +
70432 } +
70433 result = false; +
70434 break; +
70435 } +
70436 // Recursively compare arrays (susceptible to call stack limits). +
70437 if (seen) { +
70438 if (!arraySome(other, function(othValue, othIndex) { +
70439 if (!cacheHas(seen, othIndex) && +
70440 (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { +
70441 return seen.push(othIndex); +
70442 } +
70443 })) { +
70444 result = false; +
70445 break; +
70446 } +
70447 } else if (!( +
70448 arrValue === othValue || +
70449 equalFunc(arrValue, othValue, bitmask, customizer, stack) +
70450 )) { +
70451 result = false; +
70452 break; +
70453 } +
70454 } +
70455 stack['delete'](array); +
70456 stack['delete'](other); +
70457 return result; +
70458 } +
70459 +
70460 /** +
70461 * A specialized version of `baseIsEqualDeep` for comparing objects of +
70462 * the same `toStringTag`. +
70463 * +
70464 * **Note:** This function only supports comparing values with tags of +
70465 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. +
70466 * +
70467 * @private +
70468 * @param {Object} object The object to compare. +
70469 * @param {Object} other The other object to compare. +
70470 * @param {string} tag The `toStringTag` of the objects to compare. +
70471 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
70472 * @param {Function} customizer The function to customize comparisons. +
70473 * @param {Function} equalFunc The function to determine equivalents of values. +
70474 * @param {Object} stack Tracks traversed `object` and `other` objects. +
70475 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
70476 */ +
70477 function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { +
70478 switch (tag) { +
70479 case dataViewTag: +
70480 if ((object.byteLength != other.byteLength) || +
70481 (object.byteOffset != other.byteOffset)) { +
70482 return false; +
70483 } +
70484 object = object.buffer; +
70485 other = other.buffer; +
70486 +
70487 case arrayBufferTag: +
70488 if ((object.byteLength != other.byteLength) || +
70489 !equalFunc(new Uint8Array(object), new Uint8Array(other))) { +
70490 return false; +
70491 } +
70492 return true; +
70493 +
70494 case boolTag: +
70495 case dateTag: +
70496 case numberTag: +
70497 // Coerce booleans to `1` or `0` and dates to milliseconds. +
70498 // Invalid dates are coerced to `NaN`. +
70499 return eq(+object, +other); +
70500 +
70501 case errorTag: +
70502 return object.name == other.name && object.message == other.message; +
70503 +
70504 case regexpTag: +
70505 case stringTag: +
70506 // Coerce regexes to strings and treat strings, primitives and objects, +
70507 // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring +
70508 // for more details. +
70509 return object == (other + ''); +
70510 +
70511 case mapTag: +
70512 var convert = mapToArray; +
70513 +
70514 case setTag: +
70515 var isPartial = bitmask & COMPARE_PARTIAL_FLAG; +
70516 convert || (convert = setToArray); +
70517 +
70518 if (object.size != other.size && !isPartial) { +
70519 return false; +
70520 } +
70521 // Assume cyclic values are equal. +
70522 var stacked = stack.get(object); +
70523 if (stacked) { +
70524 return stacked == other; +
70525 } +
70526 bitmask |= COMPARE_UNORDERED_FLAG; +
70527 +
70528 // Recursively compare objects (susceptible to call stack limits). +
70529 stack.set(object, other); +
70530 var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); +
70531 stack['delete'](object); +
70532 return result; +
70533 +
70534 case symbolTag: +
70535 if (symbolValueOf) { +
70536 return symbolValueOf.call(object) == symbolValueOf.call(other); +
70537 } +
70538 } +
70539 return false; +
70540 } +
70541 +
70542 /** +
70543 * A specialized version of `baseIsEqualDeep` for objects with support for +
70544 * partial deep comparisons. +
70545 * +
70546 * @private +
70547 * @param {Object} object The object to compare. +
70548 * @param {Object} other The other object to compare. +
70549 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
70550 * @param {Function} customizer The function to customize comparisons. +
70551 * @param {Function} equalFunc The function to determine equivalents of values. +
70552 * @param {Object} stack Tracks traversed `object` and `other` objects. +
70553 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
70554 */ +
70555 function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { +
70556 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +
70557 objProps = getAllKeys(object), +
70558 objLength = objProps.length, +
70559 othProps = getAllKeys(other), +
70560 othLength = othProps.length; +
70561 +
70562 if (objLength != othLength && !isPartial) { +
70563 return false; +
70564 } +
70565 var index = objLength; +
70566 while (index--) { +
70567 var key = objProps[index]; +
70568 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { +
70569 return false; +
70570 } +
70571 } +
70572 // Assume cyclic values are equal. +
70573 var stacked = stack.get(object); +
70574 if (stacked && stack.get(other)) { +
70575 return stacked == other; +
70576 } +
70577 var result = true; +
70578 stack.set(object, other); +
70579 stack.set(other, object); +
70580 +
70581 var skipCtor = isPartial; +
70582 while (++index < objLength) { +
70583 key = objProps[index]; +
70584 var objValue = object[key], +
70585 othValue = other[key]; +
70586 +
70587 if (customizer) { +
70588 var compared = isPartial +
70589 ? customizer(othValue, objValue, key, other, object, stack) +
70590 : customizer(objValue, othValue, key, object, other, stack); +
70591 } +
70592 // Recursively compare objects (susceptible to call stack limits). +
70593 if (!(compared === undefined +
70594 ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) +
70595 : compared +
70596 )) { +
70597 result = false; +
70598 break; +
70599 } +
70600 skipCtor || (skipCtor = key == 'constructor'); +
70601 } +
70602 if (result && !skipCtor) { +
70603 var objCtor = object.constructor, +
70604 othCtor = other.constructor; +
70605 +
70606 // Non `Object` object instances with different constructors are not equal. +
70607 if (objCtor != othCtor && +
70608 ('constructor' in object && 'constructor' in other) && +
70609 !(typeof objCtor == 'function' && objCtor instanceof objCtor && +
70610 typeof othCtor == 'function' && othCtor instanceof othCtor)) { +
70611 result = false; +
70612 } +
70613 } +
70614 stack['delete'](object); +
70615 stack['delete'](other); +
70616 return result; +
70617 } +
70618 +
70619 /** +
70620 * A specialized version of `baseRest` which flattens the rest array. +
70621 * +
70622 * @private +
70623 * @param {Function} func The function to apply a rest parameter to. +
70624 * @returns {Function} Returns the new function. +
70625 */ +
70626 function flatRest(func) { +
70627 return setToString(overRest(func, undefined, flatten), func + ''); +
70628 } +
70629 +
70630 /** +
70631 * Creates an array of own enumerable property names and symbols of `object`. +
70632 * +
70633 * @private +
70634 * @param {Object} object The object to query. +
70635 * @returns {Array} Returns the array of property names and symbols. +
70636 */ +
70637 function getAllKeys(object) { +
70638 return baseGetAllKeys(object, keys, getSymbols); +
70639 } +
70640 +
70641 /** +
70642 * Creates an array of own and inherited enumerable property names and +
70643 * symbols of `object`. +
70644 * +
70645 * @private +
70646 * @param {Object} object The object to query. +
70647 * @returns {Array} Returns the array of property names and symbols. +
70648 */ +
70649 function getAllKeysIn(object) { +
70650 return baseGetAllKeys(object, keysIn, getSymbolsIn); +
70651 } +
70652 +
70653 /** +
70654 * Gets metadata for `func`. +
70655 * +
70656 * @private +
70657 * @param {Function} func The function to query. +
70658 * @returns {*} Returns the metadata for `func`. +
70659 */ +
70660 var getData = !metaMap ? noop : function(func) { +
70661 return metaMap.get(func); +
70662 }; +
70663 +
70664 /** +
70665 * Gets the name of `func`. +
70666 * +
70667 * @private +
70668 * @param {Function} func The function to query. +
70669 * @returns {string} Returns the function name. +
70670 */ +
70671 function getFuncName(func) { +
70672 var result = (func.name + ''), +
70673 array = realNames[result], +
70674 length = hasOwnProperty.call(realNames, result) ? array.length : 0; +
70675 +
70676 while (length--) { +
70677 var data = array[length], +
70678 otherFunc = data.func; +
70679 if (otherFunc == null || otherFunc == func) { +
70680 return data.name; +
70681 } +
70682 } +
70683 return result; +
70684 } +
70685 +
70686 /** +
70687 * Gets the argument placeholder value for `func`. +
70688 * +
70689 * @private +
70690 * @param {Function} func The function to inspect. +
70691 * @returns {*} Returns the placeholder value. +
70692 */ +
70693 function getHolder(func) { +
70694 var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; +
70695 return object.placeholder; +
70696 } +
70697 +
70698 /** +
70699 * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, +
70700 * this function returns the custom method, otherwise it returns `baseIteratee`. +
70701 * If arguments are provided, the chosen function is invoked with them and +
70702 * its result is returned. +
70703 * +
70704 * @private +
70705 * @param {*} [value] The value to convert to an iteratee. +
70706 * @param {number} [arity] The arity of the created iteratee. +
70707 * @returns {Function} Returns the chosen function or its result. +
70708 */ +
70709 function getIteratee() { +
70710 var result = lodash.iteratee || iteratee; +
70711 result = result === iteratee ? baseIteratee : result; +
70712 return arguments.length ? result(arguments[0], arguments[1]) : result; +
70713 } +
70714 +
70715 /** +
70716 * Gets the data for `map`. +
70717 * +
70718 * @private +
70719 * @param {Object} map The map to query. +
70720 * @param {string} key The reference key. +
70721 * @returns {*} Returns the map data. +
70722 */ +
70723 function getMapData(map, key) { +
70724 var data = map.__data__; +
70725 return isKeyable(key) +
70726 ? data[typeof key == 'string' ? 'string' : 'hash'] +
70727 : data.map; +
70728 } +
70729 +
70730 /** +
70731 * Gets the property names, values, and compare flags of `object`. +
70732 * +
70733 * @private +
70734 * @param {Object} object The object to query. +
70735 * @returns {Array} Returns the match data of `object`. +
70736 */ +
70737 function getMatchData(object) { +
70738 var result = keys(object), +
70739 length = result.length; +
70740 +
70741 while (length--) { +
70742 var key = result[length], +
70743 value = object[key]; +
70744 +
70745 result[length] = [key, value, isStrictComparable(value)]; +
70746 } +
70747 return result; +
70748 } +
70749 +
70750 /** +
70751 * Gets the native function at `key` of `object`. +
70752 * +
70753 * @private +
70754 * @param {Object} object The object to query. +
70755 * @param {string} key The key of the method to get. +
70756 * @returns {*} Returns the function if it's native, else `undefined`. +
70757 */ +
70758 function getNative(object, key) { +
70759 var value = getValue(object, key); +
70760 return baseIsNative(value) ? value : undefined; +
70761 } +
70762 +
70763 /** +
70764 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. +
70765 * +
70766 * @private +
70767 * @param {*} value The value to query. +
70768 * @returns {string} Returns the raw `toStringTag`. +
70769 */ +
70770 function getRawTag(value) { +
70771 var isOwn = hasOwnProperty.call(value, symToStringTag), +
70772 tag = value[symToStringTag]; +
70773 +
70774 try { +
70775 value[symToStringTag] = undefined; +
70776 var unmasked = true; +
70777 } catch (e) {} +
70778 +
70779 var result = nativeObjectToString.call(value); +
70780 if (unmasked) { +
70781 if (isOwn) { +
70782 value[symToStringTag] = tag; +
70783 } else { +
70784 delete value[symToStringTag]; +
70785 } +
70786 } +
70787 return result; +
70788 } +
70789 +
70790 /** +
70791 * Creates an array of the own enumerable symbols of `object`. +
70792 * +
70793 * @private +
70794 * @param {Object} object The object to query. +
70795 * @returns {Array} Returns the array of symbols. +
70796 */ +
70797 var getSymbols = !nativeGetSymbols ? stubArray : function(object) { +
70798 if (object == null) { +
70799 return []; +
70800 } +
70801 object = Object(object); +
70802 return arrayFilter(nativeGetSymbols(object), function(symbol) { +
70803 return propertyIsEnumerable.call(object, symbol); +
70804 }); +
70805 }; +
70806 +
70807 /** +
70808 * Creates an array of the own and inherited enumerable symbols of `object`. +
70809 * +
70810 * @private +
70811 * @param {Object} object The object to query. +
70812 * @returns {Array} Returns the array of symbols. +
70813 */ +
70814 var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { +
70815 var result = []; +
70816 while (object) { +
70817 arrayPush(result, getSymbols(object)); +
70818 object = getPrototype(object); +
70819 } +
70820 return result; +
70821 }; +
70822 +
70823 /** +
70824 * Gets the `toStringTag` of `value`. +
70825 * +
70826 * @private +
70827 * @param {*} value The value to query. +
70828 * @returns {string} Returns the `toStringTag`. +
70829 */ +
70830 var getTag = baseGetTag; +
70831 +
70832 // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +
70833 if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || +
70834 (Map && getTag(new Map) != mapTag) || +
70835 (Promise && getTag(Promise.resolve()) != promiseTag) || +
70836 (Set && getTag(new Set) != setTag) || +
70837 (WeakMap && getTag(new WeakMap) != weakMapTag)) { +
70838 getTag = function(value) { +
70839 var result = baseGetTag(value), +
70840 Ctor = result == objectTag ? value.constructor : undefined, +
70841 ctorString = Ctor ? toSource(Ctor) : ''; +
70842 +
70843 if (ctorString) { +
70844 switch (ctorString) { +
70845 case dataViewCtorString: return dataViewTag; +
70846 case mapCtorString: return mapTag; +
70847 case promiseCtorString: return promiseTag; +
70848 case setCtorString: return setTag; +
70849 case weakMapCtorString: return weakMapTag; +
70850 } +
70851 } +
70852 return result; +
70853 }; +
70854 } +
70855 +
70856 /** +
70857 * Gets the view, applying any `transforms` to the `start` and `end` positions. +
70858 * +
70859 * @private +
70860 * @param {number} start The start of the view. +
70861 * @param {number} end The end of the view. +
70862 * @param {Array} transforms The transformations to apply to the view. +
70863 * @returns {Object} Returns an object containing the `start` and `end` +
70864 * positions of the view. +
70865 */ +
70866 function getView(start, end, transforms) { +
70867 var index = -1, +
70868 length = transforms.length; +
70869 +
70870 while (++index < length) { +
70871 var data = transforms[index], +
70872 size = data.size; +
70873 +
70874 switch (data.type) { +
70875 case 'drop': start += size; break; +
70876 case 'dropRight': end -= size; break; +
70877 case 'take': end = nativeMin(end, start + size); break; +
70878 case 'takeRight': start = nativeMax(start, end - size); break; +
70879 } +
70880 } +
70881 return { 'start': start, 'end': end }; +
70882 } +
70883 +
70884 /** +
70885 * Extracts wrapper details from the `source` body comment. +
70886 * +
70887 * @private +
70888 * @param {string} source The source to inspect. +
70889 * @returns {Array} Returns the wrapper details. +
70890 */ +
70891 function getWrapDetails(source) { +
70892 var match = source.match(reWrapDetails); +
70893 return match ? match[1].split(reSplitDetails) : []; +
70894 } +
70895 +
70896 /** +
70897 * Checks if `path` exists on `object`. +
70898 * +
70899 * @private +
70900 * @param {Object} object The object to query. +
70901 * @param {Array|string} path The path to check. +
70902 * @param {Function} hasFunc The function to check properties. +
70903 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
70904 */ +
70905 function hasPath(object, path, hasFunc) { +
70906 path = castPath(path, object); +
70907 +
70908 var index = -1, +
70909 length = path.length, +
70910 result = false; +
70911 +
70912 while (++index < length) { +
70913 var key = toKey(path[index]); +
70914 if (!(result = object != null && hasFunc(object, key))) { +
70915 break; +
70916 } +
70917 object = object[key]; +
70918 } +
70919 if (result || ++index != length) { +
70920 return result; +
70921 } +
70922 length = object == null ? 0 : object.length; +
70923 return !!length && isLength(length) && isIndex(key, length) && +
70924 (isArray(object) || isArguments(object)); +
70925 } +
70926 +
70927 /** +
70928 * Initializes an array clone. +
70929 * +
70930 * @private +
70931 * @param {Array} array The array to clone. +
70932 * @returns {Array} Returns the initialized clone. +
70933 */ +
70934 function initCloneArray(array) { +
70935 var length = array.length, +
70936 result = new array.constructor(length); +
70937 +
70938 // Add properties assigned by `RegExp#exec`. +
70939 if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { +
70940 result.index = array.index; +
70941 result.input = array.input; +
70942 } +
70943 return result; +
70944 } +
70945 +
70946 /** +
70947 * Initializes an object clone. +
70948 * +
70949 * @private +
70950 * @param {Object} object The object to clone. +
70951 * @returns {Object} Returns the initialized clone. +
70952 */ +
70953 function initCloneObject(object) { +
70954 return (typeof object.constructor == 'function' && !isPrototype(object)) +
70955 ? baseCreate(getPrototype(object)) +
70956 : {}; +
70957 } +
70958 +
70959 /** +
70960 * Initializes an object clone based on its `toStringTag`. +
70961 * +
70962 * **Note:** This function only supports cloning values with tags of +
70963 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. +
70964 * +
70965 * @private +
70966 * @param {Object} object The object to clone. +
70967 * @param {string} tag The `toStringTag` of the object to clone. +
70968 * @param {boolean} [isDeep] Specify a deep clone. +
70969 * @returns {Object} Returns the initialized clone. +
70970 */ +
70971 function initCloneByTag(object, tag, isDeep) { +
70972 var Ctor = object.constructor; +
70973 switch (tag) { +
70974 case arrayBufferTag: +
70975 return cloneArrayBuffer(object); +
70976 +
70977 case boolTag: +
70978 case dateTag: +
70979 return new Ctor(+object); +
70980 +
70981 case dataViewTag: +
70982 return cloneDataView(object, isDeep); +
70983 +
70984 case float32Tag: case float64Tag: +
70985 case int8Tag: case int16Tag: case int32Tag: +
70986 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: +
70987 return cloneTypedArray(object, isDeep); +
70988 +
70989 case mapTag: +
70990 return new Ctor; +
70991 +
70992 case numberTag: +
70993 case stringTag: +
70994 return new Ctor(object); +
70995 +
70996 case regexpTag: +
70997 return cloneRegExp(object); +
70998 +
70999 case setTag: +
71000 return new Ctor; +
71001 +
71002 case symbolTag: +
71003 return cloneSymbol(object); +
71004 } +
71005 } +
71006 +
71007 /** +
71008 * Inserts wrapper `details` in a comment at the top of the `source` body. +
71009 * +
71010 * @private +
71011 * @param {string} source The source to modify. +
71012 * @returns {Array} details The details to insert. +
71013 * @returns {string} Returns the modified source. +
71014 */ +
71015 function insertWrapDetails(source, details) { +
71016 var length = details.length; +
71017 if (!length) { +
71018 return source; +
71019 } +
71020 var lastIndex = length - 1; +
71021 details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; +
71022 details = details.join(length > 2 ? ', ' : ' '); +
71023 return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); +
71024 } +
71025 +
71026 /** +
71027 * Checks if `value` is a flattenable `arguments` object or array. +
71028 * +
71029 * @private +
71030 * @param {*} value The value to check. +
71031 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. +
71032 */ +
71033 function isFlattenable(value) { +
71034 return isArray(value) || isArguments(value) || +
71035 !!(spreadableSymbol && value && value[spreadableSymbol]); +
71036 } +
71037 +
71038 /** +
71039 * Checks if `value` is a valid array-like index. +
71040 * +
71041 * @private +
71042 * @param {*} value The value to check. +
71043 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. +
71044 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. +
71045 */ +
71046 function isIndex(value, length) { +
71047 var type = typeof value; +
71048 length = length == null ? MAX_SAFE_INTEGER : length; +
71049 +
71050 return !!length && +
71051 (type == 'number' || +
71052 (type != 'symbol' && reIsUint.test(value))) && +
71053 (value > -1 && value % 1 == 0 && value < length); +
71054 } +
71055 +
71056 /** +
71057 * Checks if the given arguments are from an iteratee call. +
71058 * +
71059 * @private +
71060 * @param {*} value The potential iteratee value argument. +
71061 * @param {*} index The potential iteratee index or key argument. +
71062 * @param {*} object The potential iteratee object argument. +
71063 * @returns {boolean} Returns `true` if the arguments are from an iteratee call, +
71064 * else `false`. +
71065 */ +
71066 function isIterateeCall(value, index, object) { +
71067 if (!isObject(object)) { +
71068 return false; +
71069 } +
71070 var type = typeof index; +
71071 if (type == 'number' +
71072 ? (isArrayLike(object) && isIndex(index, object.length)) +
71073 : (type == 'string' && index in object) +
71074 ) { +
71075 return eq(object[index], value); +
71076 } +
71077 return false; +
71078 } +
71079 +
71080 /** +
71081 * Checks if `value` is a property name and not a property path. +
71082 * +
71083 * @private +
71084 * @param {*} value The value to check. +
71085 * @param {Object} [object] The object to query keys on. +
71086 * @returns {boolean} Returns `true` if `value` is a property name, else `false`. +
71087 */ +
71088 function isKey(value, object) { +
71089 if (isArray(value)) { +
71090 return false; +
71091 } +
71092 var type = typeof value; +
71093 if (type == 'number' || type == 'symbol' || type == 'boolean' || +
71094 value == null || isSymbol(value)) { +
71095 return true; +
71096 } +
71097 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || +
71098 (object != null && value in Object(object)); +
71099 } +
71100 +
71101 /** +
71102 * Checks if `value` is suitable for use as unique object key. +
71103 * +
71104 * @private +
71105 * @param {*} value The value to check. +
71106 * @returns {boolean} Returns `true` if `value` is suitable, else `false`. +
71107 */ +
71108 function isKeyable(value) { +
71109 var type = typeof value; +
71110 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') +
71111 ? (value !== '__proto__') +
71112 : (value === null); +
71113 } +
71114 +
71115 /** +
71116 * Checks if `func` has a lazy counterpart. +
71117 * +
71118 * @private +
71119 * @param {Function} func The function to check. +
71120 * @returns {boolean} Returns `true` if `func` has a lazy counterpart, +
71121 * else `false`. +
71122 */ +
71123 function isLaziable(func) { +
71124 var funcName = getFuncName(func), +
71125 other = lodash[funcName]; +
71126 +
71127 if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { +
71128 return false; +
71129 } +
71130 if (func === other) { +
71131 return true; +
71132 } +
71133 var data = getData(other); +
71134 return !!data && func === data[0]; +
71135 } +
71136 +
71137 /** +
71138 * Checks if `func` has its source masked. +
71139 * +
71140 * @private +
71141 * @param {Function} func The function to check. +
71142 * @returns {boolean} Returns `true` if `func` is masked, else `false`. +
71143 */ +
71144 function isMasked(func) { +
71145 return !!maskSrcKey && (maskSrcKey in func); +
71146 } +
71147 +
71148 /** +
71149 * Checks if `func` is capable of being masked. +
71150 * +
71151 * @private +
71152 * @param {*} value The value to check. +
71153 * @returns {boolean} Returns `true` if `func` is maskable, else `false`. +
71154 */ +
71155 var isMaskable = coreJsData ? isFunction : stubFalse; +
71156 +
71157 /** +
71158 * Checks if `value` is likely a prototype object. +
71159 * +
71160 * @private +
71161 * @param {*} value The value to check. +
71162 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. +
71163 */ +
71164 function isPrototype(value) { +
71165 var Ctor = value && value.constructor, +
71166 proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; +
71167 +
71168 return value === proto; +
71169 } +
71170 +
71171 /** +
71172 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. +
71173 * +
71174 * @private +
71175 * @param {*} value The value to check. +
71176 * @returns {boolean} Returns `true` if `value` if suitable for strict +
71177 * equality comparisons, else `false`. +
71178 */ +
71179 function isStrictComparable(value) { +
71180 return value === value && !isObject(value); +
71181 } +
71182 +
71183 /** +
71184 * A specialized version of `matchesProperty` for source values suitable +
71185 * for strict equality comparisons, i.e. `===`. +
71186 * +
71187 * @private +
71188 * @param {string} key The key of the property to get. +
71189 * @param {*} srcValue The value to match. +
71190 * @returns {Function} Returns the new spec function. +
71191 */ +
71192 function matchesStrictComparable(key, srcValue) { +
71193 return function(object) { +
71194 if (object == null) { +
71195 return false; +
71196 } +
71197 return object[key] === srcValue && +
71198 (srcValue !== undefined || (key in Object(object))); +
71199 }; +
71200 } +
71201 +
71202 /** +
71203 * A specialized version of `_.memoize` which clears the memoized function's +
71204 * cache when it exceeds `MAX_MEMOIZE_SIZE`. +
71205 * +
71206 * @private +
71207 * @param {Function} func The function to have its output memoized. +
71208 * @returns {Function} Returns the new memoized function. +
71209 */ +
71210 function memoizeCapped(func) { +
71211 var result = memoize(func, function(key) { +
71212 if (cache.size === MAX_MEMOIZE_SIZE) { +
71213 cache.clear(); +
71214 } +
71215 return key; +
71216 }); +
71217 +
71218 var cache = result.cache; +
71219 return result; +
71220 } +
71221 +
71222 /** +
71223 * Merges the function metadata of `source` into `data`. +
71224 * +
71225 * Merging metadata reduces the number of wrappers used to invoke a function. +
71226 * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` +
71227 * may be applied regardless of execution order. Methods like `_.ary` and +
71228 * `_.rearg` modify function arguments, making the order in which they are +
71229 * executed important, preventing the merging of metadata. However, we make +
71230 * an exception for a safe combined case where curried functions have `_.ary` +
71231 * and or `_.rearg` applied. +
71232 * +
71233 * @private +
71234 * @param {Array} data The destination metadata. +
71235 * @param {Array} source The source metadata. +
71236 * @returns {Array} Returns `data`. +
71237 */ +
71238 function mergeData(data, source) { +
71239 var bitmask = data[1], +
71240 srcBitmask = source[1], +
71241 newBitmask = bitmask | srcBitmask, +
71242 isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); +
71243 +
71244 var isCombo = +
71245 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || +
71246 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || +
71247 ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); +
71248 +
71249 // Exit early if metadata can't be merged. +
71250 if (!(isCommon || isCombo)) { +
71251 return data; +
71252 } +
71253 // Use source `thisArg` if available. +
71254 if (srcBitmask & WRAP_BIND_FLAG) { +
71255 data[2] = source[2]; +
71256 // Set when currying a bound function. +
71257 newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; +
71258 } +
71259 // Compose partial arguments. +
71260 var value = source[3]; +
71261 if (value) { +
71262 var partials = data[3]; +
71263 data[3] = partials ? composeArgs(partials, value, source[4]) : value; +
71264 data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; +
71265 } +
71266 // Compose partial right arguments. +
71267 value = source[5]; +
71268 if (value) { +
71269 partials = data[5]; +
71270 data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; +
71271 data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; +
71272 } +
71273 // Use source `argPos` if available. +
71274 value = source[7]; +
71275 if (value) { +
71276 data[7] = value; +
71277 } +
71278 // Use source `ary` if it's smaller. +
71279 if (srcBitmask & WRAP_ARY_FLAG) { +
71280 data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); +
71281 } +
71282 // Use source `arity` if one is not provided. +
71283 if (data[9] == null) { +
71284 data[9] = source[9]; +
71285 } +
71286 // Use source `func` and merge bitmasks. +
71287 data[0] = source[0]; +
71288 data[1] = newBitmask; +
71289 +
71290 return data; +
71291 } +
71292 +
71293 /** +
71294 * This function is like +
71295 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +
71296 * except that it includes inherited enumerable properties. +
71297 * +
71298 * @private +
71299 * @param {Object} object The object to query. +
71300 * @returns {Array} Returns the array of property names. +
71301 */ +
71302 function nativeKeysIn(object) { +
71303 var result = []; +
71304 if (object != null) { +
71305 for (var key in Object(object)) { +
71306 result.push(key); +
71307 } +
71308 } +
71309 return result; +
71310 } +
71311 +
71312 /** +
71313 * Converts `value` to a string using `Object.prototype.toString`. +
71314 * +
71315 * @private +
71316 * @param {*} value The value to convert. +
71317 * @returns {string} Returns the converted string. +
71318 */ +
71319 function objectToString(value) { +
71320 return nativeObjectToString.call(value); +
71321 } +
71322 +
71323 /** +
71324 * A specialized version of `baseRest` which transforms the rest array. +
71325 * +
71326 * @private +
71327 * @param {Function} func The function to apply a rest parameter to. +
71328 * @param {number} [start=func.length-1] The start position of the rest parameter. +
71329 * @param {Function} transform The rest array transform. +
71330 * @returns {Function} Returns the new function. +
71331 */ +
71332 function overRest(func, start, transform) { +
71333 start = nativeMax(start === undefined ? (func.length - 1) : start, 0); +
71334 return function() { +
71335 var args = arguments, +
71336 index = -1, +
71337 length = nativeMax(args.length - start, 0), +
71338 array = Array(length); +
71339 +
71340 while (++index < length) { +
71341 array[index] = args[start + index]; +
71342 } +
71343 index = -1; +
71344 var otherArgs = Array(start + 1); +
71345 while (++index < start) { +
71346 otherArgs[index] = args[index]; +
71347 } +
71348 otherArgs[start] = transform(array); +
71349 return apply(func, this, otherArgs); +
71350 }; +
71351 } +
71352 +
71353 /** +
71354 * Gets the parent value at `path` of `object`. +
71355 * +
71356 * @private +
71357 * @param {Object} object The object to query. +
71358 * @param {Array} path The path to get the parent value of. +
71359 * @returns {*} Returns the parent value. +
71360 */ +
71361 function parent(object, path) { +
71362 return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); +
71363 } +
71364 +
71365 /** +
71366 * Reorder `array` according to the specified indexes where the element at +
71367 * the first index is assigned as the first element, the element at +
71368 * the second index is assigned as the second element, and so on. +
71369 * +
71370 * @private +
71371 * @param {Array} array The array to reorder. +
71372 * @param {Array} indexes The arranged array indexes. +
71373 * @returns {Array} Returns `array`. +
71374 */ +
71375 function reorder(array, indexes) { +
71376 var arrLength = array.length, +
71377 length = nativeMin(indexes.length, arrLength), +
71378 oldArray = copyArray(array); +
71379 +
71380 while (length--) { +
71381 var index = indexes[length]; +
71382 array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; +
71383 } +
71384 return array; +
71385 } +
71386 +
71387 /** +
71388 * Sets metadata for `func`. +
71389 * +
71390 * **Note:** If this function becomes hot, i.e. is invoked a lot in a short +
71391 * period of time, it will trip its breaker and transition to an identity +
71392 * function to avoid garbage collection pauses in V8. See +
71393 * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) +
71394 * for more details. +
71395 * +
71396 * @private +
71397 * @param {Function} func The function to associate metadata with. +
71398 * @param {*} data The metadata. +
71399 * @returns {Function} Returns `func`. +
71400 */ +
71401 var setData = shortOut(baseSetData); +
71402 +
71403 /** +
71404 * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). +
71405 * +
71406 * @private +
71407 * @param {Function} func The function to delay. +
71408 * @param {number} wait The number of milliseconds to delay invocation. +
71409 * @returns {number|Object} Returns the timer id or timeout object. +
71410 */ +
71411 var setTimeout = ctxSetTimeout || function(func, wait) { +
71412 return root.setTimeout(func, wait); +
71413 }; +
71414 +
71415 /** +
71416 * Sets the `toString` method of `func` to return `string`. +
71417 * +
71418 * @private +
71419 * @param {Function} func The function to modify. +
71420 * @param {Function} string The `toString` result. +
71421 * @returns {Function} Returns `func`. +
71422 */ +
71423 var setToString = shortOut(baseSetToString); +
71424 +
71425 /** +
71426 * Sets the `toString` method of `wrapper` to mimic the source of `reference` +
71427 * with wrapper details in a comment at the top of the source body. +
71428 * +
71429 * @private +
71430 * @param {Function} wrapper The function to modify. +
71431 * @param {Function} reference The reference function. +
71432 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
71433 * @returns {Function} Returns `wrapper`. +
71434 */ +
71435 function setWrapToString(wrapper, reference, bitmask) { +
71436 var source = (reference + ''); +
71437 return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); +
71438 } +
71439 +
71440 /** +
71441 * Creates a function that'll short out and invoke `identity` instead +
71442 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` +
71443 * milliseconds. +
71444 * +
71445 * @private +
71446 * @param {Function} func The function to restrict. +
71447 * @returns {Function} Returns the new shortable function. +
71448 */ +
71449 function shortOut(func) { +
71450 var count = 0, +
71451 lastCalled = 0; +
71452 +
71453 return function() { +
71454 var stamp = nativeNow(), +
71455 remaining = HOT_SPAN - (stamp - lastCalled); +
71456 +
71457 lastCalled = stamp; +
71458 if (remaining > 0) { +
71459 if (++count >= HOT_COUNT) { +
71460 return arguments[0]; +
71461 } +
71462 } else { +
71463 count = 0; +
71464 } +
71465 return func.apply(undefined, arguments); +
71466 }; +
71467 } +
71468 +
71469 /** +
71470 * A specialized version of `_.shuffle` which mutates and sets the size of `array`. +
71471 * +
71472 * @private +
71473 * @param {Array} array The array to shuffle. +
71474 * @param {number} [size=array.length] The size of `array`. +
71475 * @returns {Array} Returns `array`. +
71476 */ +
71477 function shuffleSelf(array, size) { +
71478 var index = -1, +
71479 length = array.length, +
71480 lastIndex = length - 1; +
71481 +
71482 size = size === undefined ? length : size; +
71483 while (++index < size) { +
71484 var rand = baseRandom(index, lastIndex), +
71485 value = array[rand]; +
71486 +
71487 array[rand] = array[index]; +
71488 array[index] = value; +
71489 } +
71490 array.length = size; +
71491 return array; +
71492 } +
71493 +
71494 /** +
71495 * Converts `string` to a property path array. +
71496 * +
71497 * @private +
71498 * @param {string} string The string to convert. +
71499 * @returns {Array} Returns the property path array. +
71500 */ +
71501 var stringToPath = memoizeCapped(function(string) { +
71502 var result = []; +
71503 if (string.charCodeAt(0) === 46 /* . */) { +
71504 result.push(''); +
71505 } +
71506 string.replace(rePropName, function(match, number, quote, subString) { +
71507 result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); +
71508 }); +
71509 return result; +
71510 }); +
71511 +
71512 /** +
71513 * Converts `value` to a string key if it's not a string or symbol. +
71514 * +
71515 * @private +
71516 * @param {*} value The value to inspect. +
71517 * @returns {string|symbol} Returns the key. +
71518 */ +
71519 function toKey(value) { +
71520 if (typeof value == 'string' || isSymbol(value)) { +
71521 return value; +
71522 } +
71523 var result = (value + ''); +
71524 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +
71525 } +
71526 +
71527 /** +
71528 * Converts `func` to its source code. +
71529 * +
71530 * @private +
71531 * @param {Function} func The function to convert. +
71532 * @returns {string} Returns the source code. +
71533 */ +
71534 function toSource(func) { +
71535 if (func != null) { +
71536 try { +
71537 return funcToString.call(func); +
71538 } catch (e) {} +
71539 try { +
71540 return (func + ''); +
71541 } catch (e) {} +
71542 } +
71543 return ''; +
71544 } +
71545 +
71546 /** +
71547 * Updates wrapper `details` based on `bitmask` flags. +
71548 * +
71549 * @private +
71550 * @returns {Array} details The details to modify. +
71551 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
71552 * @returns {Array} Returns `details`. +
71553 */ +
71554 function updateWrapDetails(details, bitmask) { +
71555 arrayEach(wrapFlags, function(pair) { +
71556 var value = '_.' + pair[0]; +
71557 if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { +
71558 details.push(value); +
71559 } +
71560 }); +
71561 return details.sort(); +
71562 } +
71563 +
71564 /** +
71565 * Creates a clone of `wrapper`. +
71566 * +
71567 * @private +
71568 * @param {Object} wrapper The wrapper to clone. +
71569 * @returns {Object} Returns the cloned wrapper. +
71570 */ +
71571 function wrapperClone(wrapper) { +
71572 if (wrapper instanceof LazyWrapper) { +
71573 return wrapper.clone(); +
71574 } +
71575 var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); +
71576 result.__actions__ = copyArray(wrapper.__actions__); +
71577 result.__index__ = wrapper.__index__; +
71578 result.__values__ = wrapper.__values__; +
71579 return result; +
71580 } +
71581 +
71582 /*------------------------------------------------------------------------*/ +
71583 +
71584 /** +
71585 * Creates an array of elements split into groups the length of `size`. +
71586 * If `array` can't be split evenly, the final chunk will be the remaining +
71587 * elements. +
71588 * +
71589 * @static +
71590 * @memberOf _ +
71591 * @since 3.0.0 +
71592 * @category Array +
71593 * @param {Array} array The array to process. +
71594 * @param {number} [size=1] The length of each chunk +
71595 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
71596 * @returns {Array} Returns the new array of chunks. +
71597 * @example +
71598 * +
71599 * _.chunk(['a', 'b', 'c', 'd'], 2); +
71600 * // => [['a', 'b'], ['c', 'd']] +
71601 * +
71602 * _.chunk(['a', 'b', 'c', 'd'], 3); +
71603 * // => [['a', 'b', 'c'], ['d']] +
71604 */ +
71605 function chunk(array, size, guard) { +
71606 if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { +
71607 size = 1; +
71608 } else { +
71609 size = nativeMax(toInteger(size), 0); +
71610 } +
71611 var length = array == null ? 0 : array.length; +
71612 if (!length || size < 1) { +
71613 return []; +
71614 } +
71615 var index = 0, +
71616 resIndex = 0, +
71617 result = Array(nativeCeil(length / size)); +
71618 +
71619 while (index < length) { +
71620 result[resIndex++] = baseSlice(array, index, (index += size)); +
71621 } +
71622 return result; +
71623 } +
71624 +
71625 /** +
71626 * Creates an array with all falsey values removed. The values `false`, `null`, +
71627 * `0`, `""`, `undefined`, and `NaN` are falsey. +
71628 * +
71629 * @static +
71630 * @memberOf _ +
71631 * @since 0.1.0 +
71632 * @category Array +
71633 * @param {Array} array The array to compact. +
71634 * @returns {Array} Returns the new array of filtered values. +
71635 * @example +
71636 * +
71637 * _.compact([0, 1, false, 2, '', 3]); +
71638 * // => [1, 2, 3] +
71639 */ +
71640 function compact(array) { +
71641 var index = -1, +
71642 length = array == null ? 0 : array.length, +
71643 resIndex = 0, +
71644 result = []; +
71645 +
71646 while (++index < length) { +
71647 var value = array[index]; +
71648 if (value) { +
71649 result[resIndex++] = value; +
71650 } +
71651 } +
71652 return result; +
71653 } +
71654 +
71655 /** +
71656 * Creates a new array concatenating `array` with any additional arrays +
71657 * and/or values. +
71658 * +
71659 * @static +
71660 * @memberOf _ +
71661 * @since 4.0.0 +
71662 * @category Array +
71663 * @param {Array} array The array to concatenate. +
71664 * @param {...*} [values] The values to concatenate. +
71665 * @returns {Array} Returns the new concatenated array. +
71666 * @example +
71667 * +
71668 * var array = [1]; +
71669 * var other = _.concat(array, 2, [3], [[4]]); +
71670 * +
71671 * console.log(other); +
71672 * // => [1, 2, 3, [4]] +
71673 * +
71674 * console.log(array); +
71675 * // => [1] +
71676 */ +
71677 function concat() { +
71678 var length = arguments.length; +
71679 if (!length) { +
71680 return []; +
71681 } +
71682 var args = Array(length - 1), +
71683 array = arguments[0], +
71684 index = length; +
71685 +
71686 while (index--) { +
71687 args[index - 1] = arguments[index]; +
71688 } +
71689 return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); +
71690 } +
71691 +
71692 /** +
71693 * Creates an array of `array` values not included in the other given arrays +
71694 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
71695 * for equality comparisons. The order and references of result values are +
71696 * determined by the first array. +
71697 * +
71698 * **Note:** Unlike `_.pullAll`, this method returns a new array. +
71699 * +
71700 * @static +
71701 * @memberOf _ +
71702 * @since 0.1.0 +
71703 * @category Array +
71704 * @param {Array} array The array to inspect. +
71705 * @param {...Array} [values] The values to exclude. +
71706 * @returns {Array} Returns the new array of filtered values. +
71707 * @see _.without, _.xor +
71708 * @example +
71709 * +
71710 * _.difference([2, 1], [2, 3]); +
71711 * // => [1] +
71712 */ +
71713 var difference = baseRest(function(array, values) { +
71714 return isArrayLikeObject(array) +
71715 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) +
71716 : []; +
71717 }); +
71718 +
71719 /** +
71720 * This method is like `_.difference` except that it accepts `iteratee` which +
71721 * is invoked for each element of `array` and `values` to generate the criterion +
71722 * by which they're compared. The order and references of result values are +
71723 * determined by the first array. The iteratee is invoked with one argument: +
71724 * (value). +
71725 * +
71726 * **Note:** Unlike `_.pullAllBy`, this method returns a new array. +
71727 * +
71728 * @static +
71729 * @memberOf _ +
71730 * @since 4.0.0 +
71731 * @category Array +
71732 * @param {Array} array The array to inspect. +
71733 * @param {...Array} [values] The values to exclude. +
71734 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
71735 * @returns {Array} Returns the new array of filtered values. +
71736 * @example +
71737 * +
71738 * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
71739 * // => [1.2] +
71740 * +
71741 * // The `_.property` iteratee shorthand. +
71742 * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); +
71743 * // => [{ 'x': 2 }] +
71744 */ +
71745 var differenceBy = baseRest(function(array, values) { +
71746 var iteratee = last(values); +
71747 if (isArrayLikeObject(iteratee)) { +
71748 iteratee = undefined; +
71749 } +
71750 return isArrayLikeObject(array) +
71751 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) +
71752 : []; +
71753 }); +
71754 +
71755 /** +
71756 * This method is like `_.difference` except that it accepts `comparator` +
71757 * which is invoked to compare elements of `array` to `values`. The order and +
71758 * references of result values are determined by the first array. The comparator +
71759 * is invoked with two arguments: (arrVal, othVal). +
71760 * +
71761 * **Note:** Unlike `_.pullAllWith`, this method returns a new array. +
71762 * +
71763 * @static +
71764 * @memberOf _ +
71765 * @since 4.0.0 +
71766 * @category Array +
71767 * @param {Array} array The array to inspect. +
71768 * @param {...Array} [values] The values to exclude. +
71769 * @param {Function} [comparator] The comparator invoked per element. +
71770 * @returns {Array} Returns the new array of filtered values. +
71771 * @example +
71772 * +
71773 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
71774 * +
71775 * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); +
71776 * // => [{ 'x': 2, 'y': 1 }] +
71777 */ +
71778 var differenceWith = baseRest(function(array, values) { +
71779 var comparator = last(values); +
71780 if (isArrayLikeObject(comparator)) { +
71781 comparator = undefined; +
71782 } +
71783 return isArrayLikeObject(array) +
71784 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) +
71785 : []; +
71786 }); +
71787 +
71788 /** +
71789 * Creates a slice of `array` with `n` elements dropped from the beginning. +
71790 * +
71791 * @static +
71792 * @memberOf _ +
71793 * @since 0.5.0 +
71794 * @category Array +
71795 * @param {Array} array The array to query. +
71796 * @param {number} [n=1] The number of elements to drop. +
71797 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
71798 * @returns {Array} Returns the slice of `array`. +
71799 * @example +
71800 * +
71801 * _.drop([1, 2, 3]); +
71802 * // => [2, 3] +
71803 * +
71804 * _.drop([1, 2, 3], 2); +
71805 * // => [3] +
71806 * +
71807 * _.drop([1, 2, 3], 5); +
71808 * // => [] +
71809 * +
71810 * _.drop([1, 2, 3], 0); +
71811 * // => [1, 2, 3] +
71812 */ +
71813 function drop(array, n, guard) { +
71814 var length = array == null ? 0 : array.length; +
71815 if (!length) { +
71816 return []; +
71817 } +
71818 n = (guard || n === undefined) ? 1 : toInteger(n); +
71819 return baseSlice(array, n < 0 ? 0 : n, length); +
71820 } +
71821 +
71822 /** +
71823 * Creates a slice of `array` with `n` elements dropped from the end. +
71824 * +
71825 * @static +
71826 * @memberOf _ +
71827 * @since 3.0.0 +
71828 * @category Array +
71829 * @param {Array} array The array to query. +
71830 * @param {number} [n=1] The number of elements to drop. +
71831 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
71832 * @returns {Array} Returns the slice of `array`. +
71833 * @example +
71834 * +
71835 * _.dropRight([1, 2, 3]); +
71836 * // => [1, 2] +
71837 * +
71838 * _.dropRight([1, 2, 3], 2); +
71839 * // => [1] +
71840 * +
71841 * _.dropRight([1, 2, 3], 5); +
71842 * // => [] +
71843 * +
71844 * _.dropRight([1, 2, 3], 0); +
71845 * // => [1, 2, 3] +
71846 */ +
71847 function dropRight(array, n, guard) { +
71848 var length = array == null ? 0 : array.length; +
71849 if (!length) { +
71850 return []; +
71851 } +
71852 n = (guard || n === undefined) ? 1 : toInteger(n); +
71853 n = length - n; +
71854 return baseSlice(array, 0, n < 0 ? 0 : n); +
71855 } +
71856 +
71857 /** +
71858 * Creates a slice of `array` excluding elements dropped from the end. +
71859 * Elements are dropped until `predicate` returns falsey. The predicate is +
71860 * invoked with three arguments: (value, index, array). +
71861 * +
71862 * @static +
71863 * @memberOf _ +
71864 * @since 3.0.0 +
71865 * @category Array +
71866 * @param {Array} array The array to query. +
71867 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
71868 * @returns {Array} Returns the slice of `array`. +
71869 * @example +
71870 * +
71871 * var users = [ +
71872 * { 'user': 'barney', 'active': true }, +
71873 * { 'user': 'fred', 'active': false }, +
71874 * { 'user': 'pebbles', 'active': false } +
71875 * ]; +
71876 * +
71877 * _.dropRightWhile(users, function(o) { return !o.active; }); +
71878 * // => objects for ['barney'] +
71879 * +
71880 * // The `_.matches` iteratee shorthand. +
71881 * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); +
71882 * // => objects for ['barney', 'fred'] +
71883 * +
71884 * // The `_.matchesProperty` iteratee shorthand. +
71885 * _.dropRightWhile(users, ['active', false]); +
71886 * // => objects for ['barney'] +
71887 * +
71888 * // The `_.property` iteratee shorthand. +
71889 * _.dropRightWhile(users, 'active'); +
71890 * // => objects for ['barney', 'fred', 'pebbles'] +
71891 */ +
71892 function dropRightWhile(array, predicate) { +
71893 return (array && array.length) +
71894 ? baseWhile(array, getIteratee(predicate, 3), true, true) +
71895 : []; +
71896 } +
71897 +
71898 /** +
71899 * Creates a slice of `array` excluding elements dropped from the beginning. +
71900 * Elements are dropped until `predicate` returns falsey. The predicate is +
71901 * invoked with three arguments: (value, index, array). +
71902 * +
71903 * @static +
71904 * @memberOf _ +
71905 * @since 3.0.0 +
71906 * @category Array +
71907 * @param {Array} array The array to query. +
71908 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
71909 * @returns {Array} Returns the slice of `array`. +
71910 * @example +
71911 * +
71912 * var users = [ +
71913 * { 'user': 'barney', 'active': false }, +
71914 * { 'user': 'fred', 'active': false }, +
71915 * { 'user': 'pebbles', 'active': true } +
71916 * ]; +
71917 * +
71918 * _.dropWhile(users, function(o) { return !o.active; }); +
71919 * // => objects for ['pebbles'] +
71920 * +
71921 * // The `_.matches` iteratee shorthand. +
71922 * _.dropWhile(users, { 'user': 'barney', 'active': false }); +
71923 * // => objects for ['fred', 'pebbles'] +
71924 * +
71925 * // The `_.matchesProperty` iteratee shorthand. +
71926 * _.dropWhile(users, ['active', false]); +
71927 * // => objects for ['pebbles'] +
71928 * +
71929 * // The `_.property` iteratee shorthand. +
71930 * _.dropWhile(users, 'active'); +
71931 * // => objects for ['barney', 'fred', 'pebbles'] +
71932 */ +
71933 function dropWhile(array, predicate) { +
71934 return (array && array.length) +
71935 ? baseWhile(array, getIteratee(predicate, 3), true) +
71936 : []; +
71937 } +
71938 +
71939 /** +
71940 * Fills elements of `array` with `value` from `start` up to, but not +
71941 * including, `end`. +
71942 * +
71943 * **Note:** This method mutates `array`. +
71944 * +
71945 * @static +
71946 * @memberOf _ +
71947 * @since 3.2.0 +
71948 * @category Array +
71949 * @param {Array} array The array to fill. +
71950 * @param {*} value The value to fill `array` with. +
71951 * @param {number} [start=0] The start position. +
71952 * @param {number} [end=array.length] The end position. +
71953 * @returns {Array} Returns `array`. +
71954 * @example +
71955 * +
71956 * var array = [1, 2, 3]; +
71957 * +
71958 * _.fill(array, 'a'); +
71959 * console.log(array); +
71960 * // => ['a', 'a', 'a'] +
71961 * +
71962 * _.fill(Array(3), 2); +
71963 * // => [2, 2, 2] +
71964 * +
71965 * _.fill([4, 6, 8, 10], '*', 1, 3); +
71966 * // => [4, '*', '*', 10] +
71967 */ +
71968 function fill(array, value, start, end) { +
71969 var length = array == null ? 0 : array.length; +
71970 if (!length) { +
71971 return []; +
71972 } +
71973 if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { +
71974 start = 0; +
71975 end = length; +
71976 } +
71977 return baseFill(array, value, start, end); +
71978 } +
71979 +
71980 /** +
71981 * This method is like `_.find` except that it returns the index of the first +
71982 * element `predicate` returns truthy for instead of the element itself. +
71983 * +
71984 * @static +
71985 * @memberOf _ +
71986 * @since 1.1.0 +
71987 * @category Array +
71988 * @param {Array} array The array to inspect. +
71989 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
71990 * @param {number} [fromIndex=0] The index to search from. +
71991 * @returns {number} Returns the index of the found element, else `-1`. +
71992 * @example +
71993 * +
71994 * var users = [ +
71995 * { 'user': 'barney', 'active': false }, +
71996 * { 'user': 'fred', 'active': false }, +
71997 * { 'user': 'pebbles', 'active': true } +
71998 * ]; +
71999 * +
72000 * _.findIndex(users, function(o) { return o.user == 'barney'; }); +
72001 * // => 0 +
72002 * +
72003 * // The `_.matches` iteratee shorthand. +
72004 * _.findIndex(users, { 'user': 'fred', 'active': false }); +
72005 * // => 1 +
72006 * +
72007 * // The `_.matchesProperty` iteratee shorthand. +
72008 * _.findIndex(users, ['active', false]); +
72009 * // => 0 +
72010 * +
72011 * // The `_.property` iteratee shorthand. +
72012 * _.findIndex(users, 'active'); +
72013 * // => 2 +
72014 */ +
72015 function findIndex(array, predicate, fromIndex) { +
72016 var length = array == null ? 0 : array.length; +
72017 if (!length) { +
72018 return -1; +
72019 } +
72020 var index = fromIndex == null ? 0 : toInteger(fromIndex); +
72021 if (index < 0) { +
72022 index = nativeMax(length + index, 0); +
72023 } +
72024 return baseFindIndex(array, getIteratee(predicate, 3), index); +
72025 } +
72026 +
72027 /** +
72028 * This method is like `_.findIndex` except that it iterates over elements +
72029 * of `collection` from right to left. +
72030 * +
72031 * @static +
72032 * @memberOf _ +
72033 * @since 2.0.0 +
72034 * @category Array +
72035 * @param {Array} array The array to inspect. +
72036 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
72037 * @param {number} [fromIndex=array.length-1] The index to search from. +
72038 * @returns {number} Returns the index of the found element, else `-1`. +
72039 * @example +
72040 * +
72041 * var users = [ +
72042 * { 'user': 'barney', 'active': true }, +
72043 * { 'user': 'fred', 'active': false }, +
72044 * { 'user': 'pebbles', 'active': false } +
72045 * ]; +
72046 * +
72047 * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); +
72048 * // => 2 +
72049 * +
72050 * // The `_.matches` iteratee shorthand. +
72051 * _.findLastIndex(users, { 'user': 'barney', 'active': true }); +
72052 * // => 0 +
72053 * +
72054 * // The `_.matchesProperty` iteratee shorthand. +
72055 * _.findLastIndex(users, ['active', false]); +
72056 * // => 2 +
72057 * +
72058 * // The `_.property` iteratee shorthand. +
72059 * _.findLastIndex(users, 'active'); +
72060 * // => 0 +
72061 */ +
72062 function findLastIndex(array, predicate, fromIndex) { +
72063 var length = array == null ? 0 : array.length; +
72064 if (!length) { +
72065 return -1; +
72066 } +
72067 var index = length - 1; +
72068 if (fromIndex !== undefined) { +
72069 index = toInteger(fromIndex); +
72070 index = fromIndex < 0 +
72071 ? nativeMax(length + index, 0) +
72072 : nativeMin(index, length - 1); +
72073 } +
72074 return baseFindIndex(array, getIteratee(predicate, 3), index, true); +
72075 } +
72076 +
72077 /** +
72078 * Flattens `array` a single level deep. +
72079 * +
72080 * @static +
72081 * @memberOf _ +
72082 * @since 0.1.0 +
72083 * @category Array +
72084 * @param {Array} array The array to flatten. +
72085 * @returns {Array} Returns the new flattened array. +
72086 * @example +
72087 * +
72088 * _.flatten([1, [2, [3, [4]], 5]]); +
72089 * // => [1, 2, [3, [4]], 5] +
72090 */ +
72091 function flatten(array) { +
72092 var length = array == null ? 0 : array.length; +
72093 return length ? baseFlatten(array, 1) : []; +
72094 } +
72095 +
72096 /** +
72097 * Recursively flattens `array`. +
72098 * +
72099 * @static +
72100 * @memberOf _ +
72101 * @since 3.0.0 +
72102 * @category Array +
72103 * @param {Array} array The array to flatten. +
72104 * @returns {Array} Returns the new flattened array. +
72105 * @example +
72106 * +
72107 * _.flattenDeep([1, [2, [3, [4]], 5]]); +
72108 * // => [1, 2, 3, 4, 5] +
72109 */ +
72110 function flattenDeep(array) { +
72111 var length = array == null ? 0 : array.length; +
72112 return length ? baseFlatten(array, INFINITY) : []; +
72113 } +
72114 +
72115 /** +
72116 * Recursively flatten `array` up to `depth` times. +
72117 * +
72118 * @static +
72119 * @memberOf _ +
72120 * @since 4.4.0 +
72121 * @category Array +
72122 * @param {Array} array The array to flatten. +
72123 * @param {number} [depth=1] The maximum recursion depth. +
72124 * @returns {Array} Returns the new flattened array. +
72125 * @example +
72126 * +
72127 * var array = [1, [2, [3, [4]], 5]]; +
72128 * +
72129 * _.flattenDepth(array, 1); +
72130 * // => [1, 2, [3, [4]], 5] +
72131 * +
72132 * _.flattenDepth(array, 2); +
72133 * // => [1, 2, 3, [4], 5] +
72134 */ +
72135 function flattenDepth(array, depth) { +
72136 var length = array == null ? 0 : array.length; +
72137 if (!length) { +
72138 return []; +
72139 } +
72140 depth = depth === undefined ? 1 : toInteger(depth); +
72141 return baseFlatten(array, depth); +
72142 } +
72143 +
72144 /** +
72145 * The inverse of `_.toPairs`; this method returns an object composed +
72146 * from key-value `pairs`. +
72147 * +
72148 * @static +
72149 * @memberOf _ +
72150 * @since 4.0.0 +
72151 * @category Array +
72152 * @param {Array} pairs The key-value pairs. +
72153 * @returns {Object} Returns the new object. +
72154 * @example +
72155 * +
72156 * _.fromPairs([['a', 1], ['b', 2]]); +
72157 * // => { 'a': 1, 'b': 2 } +
72158 */ +
72159 function fromPairs(pairs) { +
72160 var index = -1, +
72161 length = pairs == null ? 0 : pairs.length, +
72162 result = {}; +
72163 +
72164 while (++index < length) { +
72165 var pair = pairs[index]; +
72166 result[pair[0]] = pair[1]; +
72167 } +
72168 return result; +
72169 } +
72170 +
72171 /** +
72172 * Gets the first element of `array`. +
72173 * +
72174 * @static +
72175 * @memberOf _ +
72176 * @since 0.1.0 +
72177 * @alias first +
72178 * @category Array +
72179 * @param {Array} array The array to query. +
72180 * @returns {*} Returns the first element of `array`. +
72181 * @example +
72182 * +
72183 * _.head([1, 2, 3]); +
72184 * // => 1 +
72185 * +
72186 * _.head([]); +
72187 * // => undefined +
72188 */ +
72189 function head(array) { +
72190 return (array && array.length) ? array[0] : undefined; +
72191 } +
72192 +
72193 /** +
72194 * Gets the index at which the first occurrence of `value` is found in `array` +
72195 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
72196 * for equality comparisons. If `fromIndex` is negative, it's used as the +
72197 * offset from the end of `array`. +
72198 * +
72199 * @static +
72200 * @memberOf _ +
72201 * @since 0.1.0 +
72202 * @category Array +
72203 * @param {Array} array The array to inspect. +
72204 * @param {*} value The value to search for. +
72205 * @param {number} [fromIndex=0] The index to search from. +
72206 * @returns {number} Returns the index of the matched value, else `-1`. +
72207 * @example +
72208 * +
72209 * _.indexOf([1, 2, 1, 2], 2); +
72210 * // => 1 +
72211 * +
72212 * // Search from the `fromIndex`. +
72213 * _.indexOf([1, 2, 1, 2], 2, 2); +
72214 * // => 3 +
72215 */ +
72216 function indexOf(array, value, fromIndex) { +
72217 var length = array == null ? 0 : array.length; +
72218 if (!length) { +
72219 return -1; +
72220 } +
72221 var index = fromIndex == null ? 0 : toInteger(fromIndex); +
72222 if (index < 0) { +
72223 index = nativeMax(length + index, 0); +
72224 } +
72225 return baseIndexOf(array, value, index); +
72226 } +
72227 +
72228 /** +
72229 * Gets all but the last element of `array`. +
72230 * +
72231 * @static +
72232 * @memberOf _ +
72233 * @since 0.1.0 +
72234 * @category Array +
72235 * @param {Array} array The array to query. +
72236 * @returns {Array} Returns the slice of `array`. +
72237 * @example +
72238 * +
72239 * _.initial([1, 2, 3]); +
72240 * // => [1, 2] +
72241 */ +
72242 function initial(array) { +
72243 var length = array == null ? 0 : array.length; +
72244 return length ? baseSlice(array, 0, -1) : []; +
72245 } +
72246 +
72247 /** +
72248 * Creates an array of unique values that are included in all given arrays +
72249 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
72250 * for equality comparisons. The order and references of result values are +
72251 * determined by the first array. +
72252 * +
72253 * @static +
72254 * @memberOf _ +
72255 * @since 0.1.0 +
72256 * @category Array +
72257 * @param {...Array} [arrays] The arrays to inspect. +
72258 * @returns {Array} Returns the new array of intersecting values. +
72259 * @example +
72260 * +
72261 * _.intersection([2, 1], [2, 3]); +
72262 * // => [2] +
72263 */ +
72264 var intersection = baseRest(function(arrays) { +
72265 var mapped = arrayMap(arrays, castArrayLikeObject); +
72266 return (mapped.length && mapped[0] === arrays[0]) +
72267 ? baseIntersection(mapped) +
72268 : []; +
72269 }); +
72270 +
72271 /** +
72272 * This method is like `_.intersection` except that it accepts `iteratee` +
72273 * which is invoked for each element of each `arrays` to generate the criterion +
72274 * by which they're compared. The order and references of result values are +
72275 * determined by the first array. The iteratee is invoked with one argument: +
72276 * (value). +
72277 * +
72278 * @static +
72279 * @memberOf _ +
72280 * @since 4.0.0 +
72281 * @category Array +
72282 * @param {...Array} [arrays] The arrays to inspect. +
72283 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
72284 * @returns {Array} Returns the new array of intersecting values. +
72285 * @example +
72286 * +
72287 * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
72288 * // => [2.1] +
72289 * +
72290 * // The `_.property` iteratee shorthand. +
72291 * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
72292 * // => [{ 'x': 1 }] +
72293 */ +
72294 var intersectionBy = baseRest(function(arrays) { +
72295 var iteratee = last(arrays), +
72296 mapped = arrayMap(arrays, castArrayLikeObject); +
72297 +
72298 if (iteratee === last(mapped)) { +
72299 iteratee = undefined; +
72300 } else { +
72301 mapped.pop(); +
72302 } +
72303 return (mapped.length && mapped[0] === arrays[0]) +
72304 ? baseIntersection(mapped, getIteratee(iteratee, 2)) +
72305 : []; +
72306 }); +
72307 +
72308 /** +
72309 * This method is like `_.intersection` except that it accepts `comparator` +
72310 * which is invoked to compare elements of `arrays`. The order and references +
72311 * of result values are determined by the first array. The comparator is +
72312 * invoked with two arguments: (arrVal, othVal). +
72313 * +
72314 * @static +
72315 * @memberOf _ +
72316 * @since 4.0.0 +
72317 * @category Array +
72318 * @param {...Array} [arrays] The arrays to inspect. +
72319 * @param {Function} [comparator] The comparator invoked per element. +
72320 * @returns {Array} Returns the new array of intersecting values. +
72321 * @example +
72322 * +
72323 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
72324 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
72325 * +
72326 * _.intersectionWith(objects, others, _.isEqual); +
72327 * // => [{ 'x': 1, 'y': 2 }] +
72328 */ +
72329 var intersectionWith = baseRest(function(arrays) { +
72330 var comparator = last(arrays), +
72331 mapped = arrayMap(arrays, castArrayLikeObject); +
72332 +
72333 comparator = typeof comparator == 'function' ? comparator : undefined; +
72334 if (comparator) { +
72335 mapped.pop(); +
72336 } +
72337 return (mapped.length && mapped[0] === arrays[0]) +
72338 ? baseIntersection(mapped, undefined, comparator) +
72339 : []; +
72340 }); +
72341 +
72342 /** +
72343 * Converts all elements in `array` into a string separated by `separator`. +
72344 * +
72345 * @static +
72346 * @memberOf _ +
72347 * @since 4.0.0 +
72348 * @category Array +
72349 * @param {Array} array The array to convert. +
72350 * @param {string} [separator=','] The element separator. +
72351 * @returns {string} Returns the joined string. +
72352 * @example +
72353 * +
72354 * _.join(['a', 'b', 'c'], '~'); +
72355 * // => 'a~b~c' +
72356 */ +
72357 function join(array, separator) { +
72358 return array == null ? '' : nativeJoin.call(array, separator); +
72359 } +
72360 +
72361 /** +
72362 * Gets the last element of `array`. +
72363 * +
72364 * @static +
72365 * @memberOf _ +
72366 * @since 0.1.0 +
72367 * @category Array +
72368 * @param {Array} array The array to query. +
72369 * @returns {*} Returns the last element of `array`. +
72370 * @example +
72371 * +
72372 * _.last([1, 2, 3]); +
72373 * // => 3 +
72374 */ +
72375 function last(array) { +
72376 var length = array == null ? 0 : array.length; +
72377 return length ? array[length - 1] : undefined; +
72378 } +
72379 +
72380 /** +
72381 * This method is like `_.indexOf` except that it iterates over elements of +
72382 * `array` from right to left. +
72383 * +
72384 * @static +
72385 * @memberOf _ +
72386 * @since 0.1.0 +
72387 * @category Array +
72388 * @param {Array} array The array to inspect. +
72389 * @param {*} value The value to search for. +
72390 * @param {number} [fromIndex=array.length-1] The index to search from. +
72391 * @returns {number} Returns the index of the matched value, else `-1`. +
72392 * @example +
72393 * +
72394 * _.lastIndexOf([1, 2, 1, 2], 2); +
72395 * // => 3 +
72396 * +
72397 * // Search from the `fromIndex`. +
72398 * _.lastIndexOf([1, 2, 1, 2], 2, 2); +
72399 * // => 1 +
72400 */ +
72401 function lastIndexOf(array, value, fromIndex) { +
72402 var length = array == null ? 0 : array.length; +
72403 if (!length) { +
72404 return -1; +
72405 } +
72406 var index = length; +
72407 if (fromIndex !== undefined) { +
72408 index = toInteger(fromIndex); +
72409 index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); +
72410 } +
72411 return value === value +
72412 ? strictLastIndexOf(array, value, index) +
72413 : baseFindIndex(array, baseIsNaN, index, true); +
72414 } +
72415 +
72416 /** +
72417 * Gets the element at index `n` of `array`. If `n` is negative, the nth +
72418 * element from the end is returned. +
72419 * +
72420 * @static +
72421 * @memberOf _ +
72422 * @since 4.11.0 +
72423 * @category Array +
72424 * @param {Array} array The array to query. +
72425 * @param {number} [n=0] The index of the element to return. +
72426 * @returns {*} Returns the nth element of `array`. +
72427 * @example +
72428 * +
72429 * var array = ['a', 'b', 'c', 'd']; +
72430 * +
72431 * _.nth(array, 1); +
72432 * // => 'b' +
72433 * +
72434 * _.nth(array, -2); +
72435 * // => 'c'; +
72436 */ +
72437 function nth(array, n) { +
72438 return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; +
72439 } +
72440 +
72441 /** +
72442 * Removes all given values from `array` using +
72443 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
72444 * for equality comparisons. +
72445 * +
72446 * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` +
72447 * to remove elements from an array by predicate. +
72448 * +
72449 * @static +
72450 * @memberOf _ +
72451 * @since 2.0.0 +
72452 * @category Array +
72453 * @param {Array} array The array to modify. +
72454 * @param {...*} [values] The values to remove. +
72455 * @returns {Array} Returns `array`. +
72456 * @example +
72457 * +
72458 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +
72459 * +
72460 * _.pull(array, 'a', 'c'); +
72461 * console.log(array); +
72462 * // => ['b', 'b'] +
72463 */ +
72464 var pull = baseRest(pullAll); +
72465 +
72466 /** +
72467 * This method is like `_.pull` except that it accepts an array of values to remove. +
72468 * +
72469 * **Note:** Unlike `_.difference`, this method mutates `array`. +
72470 * +
72471 * @static +
72472 * @memberOf _ +
72473 * @since 4.0.0 +
72474 * @category Array +
72475 * @param {Array} array The array to modify. +
72476 * @param {Array} values The values to remove. +
72477 * @returns {Array} Returns `array`. +
72478 * @example +
72479 * +
72480 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +
72481 * +
72482 * _.pullAll(array, ['a', 'c']); +
72483 * console.log(array); +
72484 * // => ['b', 'b'] +
72485 */ +
72486 function pullAll(array, values) { +
72487 return (array && array.length && values && values.length) +
72488 ? basePullAll(array, values) +
72489 : array; +
72490 } +
72491 +
72492 /** +
72493 * This method is like `_.pullAll` except that it accepts `iteratee` which is +
72494 * invoked for each element of `array` and `values` to generate the criterion +
72495 * by which they're compared. The iteratee is invoked with one argument: (value). +
72496 * +
72497 * **Note:** Unlike `_.differenceBy`, this method mutates `array`. +
72498 * +
72499 * @static +
72500 * @memberOf _ +
72501 * @since 4.0.0 +
72502 * @category Array +
72503 * @param {Array} array The array to modify. +
72504 * @param {Array} values The values to remove. +
72505 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
72506 * @returns {Array} Returns `array`. +
72507 * @example +
72508 * +
72509 * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; +
72510 * +
72511 * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); +
72512 * console.log(array); +
72513 * // => [{ 'x': 2 }] +
72514 */ +
72515 function pullAllBy(array, values, iteratee) { +
72516 return (array && array.length && values && values.length) +
72517 ? basePullAll(array, values, getIteratee(iteratee, 2)) +
72518 : array; +
72519 } +
72520 +
72521 /** +
72522 * This method is like `_.pullAll` except that it accepts `comparator` which +
72523 * is invoked to compare elements of `array` to `values`. The comparator is +
72524 * invoked with two arguments: (arrVal, othVal). +
72525 * +
72526 * **Note:** Unlike `_.differenceWith`, this method mutates `array`. +
72527 * +
72528 * @static +
72529 * @memberOf _ +
72530 * @since 4.6.0 +
72531 * @category Array +
72532 * @param {Array} array The array to modify. +
72533 * @param {Array} values The values to remove. +
72534 * @param {Function} [comparator] The comparator invoked per element. +
72535 * @returns {Array} Returns `array`. +
72536 * @example +
72537 * +
72538 * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; +
72539 * +
72540 * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); +
72541 * console.log(array); +
72542 * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] +
72543 */ +
72544 function pullAllWith(array, values, comparator) { +
72545 return (array && array.length && values && values.length) +
72546 ? basePullAll(array, values, undefined, comparator) +
72547 : array; +
72548 } +
72549 +
72550 /** +
72551 * Removes elements from `array` corresponding to `indexes` and returns an +
72552 * array of removed elements. +
72553 * +
72554 * **Note:** Unlike `_.at`, this method mutates `array`. +
72555 * +
72556 * @static +
72557 * @memberOf _ +
72558 * @since 3.0.0 +
72559 * @category Array +
72560 * @param {Array} array The array to modify. +
72561 * @param {...(number|number[])} [indexes] The indexes of elements to remove. +
72562 * @returns {Array} Returns the new array of removed elements. +
72563 * @example +
72564 * +
72565 * var array = ['a', 'b', 'c', 'd']; +
72566 * var pulled = _.pullAt(array, [1, 3]); +
72567 * +
72568 * console.log(array); +
72569 * // => ['a', 'c'] +
72570 * +
72571 * console.log(pulled); +
72572 * // => ['b', 'd'] +
72573 */ +
72574 var pullAt = flatRest(function(array, indexes) { +
72575 var length = array == null ? 0 : array.length, +
72576 result = baseAt(array, indexes); +
72577 +
72578 basePullAt(array, arrayMap(indexes, function(index) { +
72579 return isIndex(index, length) ? +index : index; +
72580 }).sort(compareAscending)); +
72581 +
72582 return result; +
72583 }); +
72584 +
72585 /** +
72586 * Removes all elements from `array` that `predicate` returns truthy for +
72587 * and returns an array of the removed elements. The predicate is invoked +
72588 * with three arguments: (value, index, array). +
72589 * +
72590 * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` +
72591 * to pull elements from an array by value. +
72592 * +
72593 * @static +
72594 * @memberOf _ +
72595 * @since 2.0.0 +
72596 * @category Array +
72597 * @param {Array} array The array to modify. +
72598 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
72599 * @returns {Array} Returns the new array of removed elements. +
72600 * @example +
72601 * +
72602 * var array = [1, 2, 3, 4]; +
72603 * var evens = _.remove(array, function(n) { +
72604 * return n % 2 == 0; +
72605 * }); +
72606 * +
72607 * console.log(array); +
72608 * // => [1, 3] +
72609 * +
72610 * console.log(evens); +
72611 * // => [2, 4] +
72612 */ +
72613 function remove(array, predicate) { +
72614 var result = []; +
72615 if (!(array && array.length)) { +
72616 return result; +
72617 } +
72618 var index = -1, +
72619 indexes = [], +
72620 length = array.length; +
72621 +
72622 predicate = getIteratee(predicate, 3); +
72623 while (++index < length) { +
72624 var value = array[index]; +
72625 if (predicate(value, index, array)) { +
72626 result.push(value); +
72627 indexes.push(index); +
72628 } +
72629 } +
72630 basePullAt(array, indexes); +
72631 return result; +
72632 } +
72633 +
72634 /** +
72635 * Reverses `array` so that the first element becomes the last, the second +
72636 * element becomes the second to last, and so on. +
72637 * +
72638 * **Note:** This method mutates `array` and is based on +
72639 * [`Array#reverse`](https://mdn.io/Array/reverse). +
72640 * +
72641 * @static +
72642 * @memberOf _ +
72643 * @since 4.0.0 +
72644 * @category Array +
72645 * @param {Array} array The array to modify. +
72646 * @returns {Array} Returns `array`. +
72647 * @example +
72648 * +
72649 * var array = [1, 2, 3]; +
72650 * +
72651 * _.reverse(array); +
72652 * // => [3, 2, 1] +
72653 * +
72654 * console.log(array); +
72655 * // => [3, 2, 1] +
72656 */ +
72657 function reverse(array) { +
72658 return array == null ? array : nativeReverse.call(array); +
72659 } +
72660 +
72661 /** +
72662 * Creates a slice of `array` from `start` up to, but not including, `end`. +
72663 * +
72664 * **Note:** This method is used instead of +
72665 * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are +
72666 * returned. +
72667 * +
72668 * @static +
72669 * @memberOf _ +
72670 * @since 3.0.0 +
72671 * @category Array +
72672 * @param {Array} array The array to slice. +
72673 * @param {number} [start=0] The start position. +
72674 * @param {number} [end=array.length] The end position. +
72675 * @returns {Array} Returns the slice of `array`. +
72676 */ +
72677 function slice(array, start, end) { +
72678 var length = array == null ? 0 : array.length; +
72679 if (!length) { +
72680 return []; +
72681 } +
72682 if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { +
72683 start = 0; +
72684 end = length; +
72685 } +
72686 else { +
72687 start = start == null ? 0 : toInteger(start); +
72688 end = end === undefined ? length : toInteger(end); +
72689 } +
72690 return baseSlice(array, start, end); +
72691 } +
72692 +
72693 /** +
72694 * Uses a binary search to determine the lowest index at which `value` +
72695 * should be inserted into `array` in order to maintain its sort order. +
72696 * +
72697 * @static +
72698 * @memberOf _ +
72699 * @since 0.1.0 +
72700 * @category Array +
72701 * @param {Array} array The sorted array to inspect. +
72702 * @param {*} value The value to evaluate. +
72703 * @returns {number} Returns the index at which `value` should be inserted +
72704 * into `array`. +
72705 * @example +
72706 * +
72707 * _.sortedIndex([30, 50], 40); +
72708 * // => 1 +
72709 */ +
72710 function sortedIndex(array, value) { +
72711 return baseSortedIndex(array, value); +
72712 } +
72713 +
72714 /** +
72715 * This method is like `_.sortedIndex` except that it accepts `iteratee` +
72716 * which is invoked for `value` and each element of `array` to compute their +
72717 * sort ranking. The iteratee is invoked with one argument: (value). +
72718 * +
72719 * @static +
72720 * @memberOf _ +
72721 * @since 4.0.0 +
72722 * @category Array +
72723 * @param {Array} array The sorted array to inspect. +
72724 * @param {*} value The value to evaluate. +
72725 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
72726 * @returns {number} Returns the index at which `value` should be inserted +
72727 * into `array`. +
72728 * @example +
72729 * +
72730 * var objects = [{ 'x': 4 }, { 'x': 5 }]; +
72731 * +
72732 * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +
72733 * // => 0 +
72734 * +
72735 * // The `_.property` iteratee shorthand. +
72736 * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); +
72737 * // => 0 +
72738 */ +
72739 function sortedIndexBy(array, value, iteratee) { +
72740 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); +
72741 } +
72742 +
72743 /** +
72744 * This method is like `_.indexOf` except that it performs a binary +
72745 * search on a sorted `array`. +
72746 * +
72747 * @static +
72748 * @memberOf _ +
72749 * @since 4.0.0 +
72750 * @category Array +
72751 * @param {Array} array The array to inspect. +
72752 * @param {*} value The value to search for. +
72753 * @returns {number} Returns the index of the matched value, else `-1`. +
72754 * @example +
72755 * +
72756 * _.sortedIndexOf([4, 5, 5, 5, 6], 5); +
72757 * // => 1 +
72758 */ +
72759 function sortedIndexOf(array, value) { +
72760 var length = array == null ? 0 : array.length; +
72761 if (length) { +
72762 var index = baseSortedIndex(array, value); +
72763 if (index < length && eq(array[index], value)) { +
72764 return index; +
72765 } +
72766 } +
72767 return -1; +
72768 } +
72769 +
72770 /** +
72771 * This method is like `_.sortedIndex` except that it returns the highest +
72772 * index at which `value` should be inserted into `array` in order to +
72773 * maintain its sort order. +
72774 * +
72775 * @static +
72776 * @memberOf _ +
72777 * @since 3.0.0 +
72778 * @category Array +
72779 * @param {Array} array The sorted array to inspect. +
72780 * @param {*} value The value to evaluate. +
72781 * @returns {number} Returns the index at which `value` should be inserted +
72782 * into `array`. +
72783 * @example +
72784 * +
72785 * _.sortedLastIndex([4, 5, 5, 5, 6], 5); +
72786 * // => 4 +
72787 */ +
72788 function sortedLastIndex(array, value) { +
72789 return baseSortedIndex(array, value, true); +
72790 } +
72791 +
72792 /** +
72793 * This method is like `_.sortedLastIndex` except that it accepts `iteratee` +
72794 * which is invoked for `value` and each element of `array` to compute their +
72795 * sort ranking. The iteratee is invoked with one argument: (value). +
72796 * +
72797 * @static +
72798 * @memberOf _ +
72799 * @since 4.0.0 +
72800 * @category Array +
72801 * @param {Array} array The sorted array to inspect. +
72802 * @param {*} value The value to evaluate. +
72803 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
72804 * @returns {number} Returns the index at which `value` should be inserted +
72805 * into `array`. +
72806 * @example +
72807 * +
72808 * var objects = [{ 'x': 4 }, { 'x': 5 }]; +
72809 * +
72810 * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +
72811 * // => 1 +
72812 * +
72813 * // The `_.property` iteratee shorthand. +
72814 * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); +
72815 * // => 1 +
72816 */ +
72817 function sortedLastIndexBy(array, value, iteratee) { +
72818 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); +
72819 } +
72820 +
72821 /** +
72822 * This method is like `_.lastIndexOf` except that it performs a binary +
72823 * search on a sorted `array`. +
72824 * +
72825 * @static +
72826 * @memberOf _ +
72827 * @since 4.0.0 +
72828 * @category Array +
72829 * @param {Array} array The array to inspect. +
72830 * @param {*} value The value to search for. +
72831 * @returns {number} Returns the index of the matched value, else `-1`. +
72832 * @example +
72833 * +
72834 * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); +
72835 * // => 3 +
72836 */ +
72837 function sortedLastIndexOf(array, value) { +
72838 var length = array == null ? 0 : array.length; +
72839 if (length) { +
72840 var index = baseSortedIndex(array, value, true) - 1; +
72841 if (eq(array[index], value)) { +
72842 return index; +
72843 } +
72844 } +
72845 return -1; +
72846 } +
72847 +
72848 /** +
72849 * This method is like `_.uniq` except that it's designed and optimized +
72850 * for sorted arrays. +
72851 * +
72852 * @static +
72853 * @memberOf _ +
72854 * @since 4.0.0 +
72855 * @category Array +
72856 * @param {Array} array The array to inspect. +
72857 * @returns {Array} Returns the new duplicate free array. +
72858 * @example +
72859 * +
72860 * _.sortedUniq([1, 1, 2]); +
72861 * // => [1, 2] +
72862 */ +
72863 function sortedUniq(array) { +
72864 return (array && array.length) +
72865 ? baseSortedUniq(array) +
72866 : []; +
72867 } +
72868 +
72869 /** +
72870 * This method is like `_.uniqBy` except that it's designed and optimized +
72871 * for sorted arrays. +
72872 * +
72873 * @static +
72874 * @memberOf _ +
72875 * @since 4.0.0 +
72876 * @category Array +
72877 * @param {Array} array The array to inspect. +
72878 * @param {Function} [iteratee] The iteratee invoked per element. +
72879 * @returns {Array} Returns the new duplicate free array. +
72880 * @example +
72881 * +
72882 * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); +
72883 * // => [1.1, 2.3] +
72884 */ +
72885 function sortedUniqBy(array, iteratee) { +
72886 return (array && array.length) +
72887 ? baseSortedUniq(array, getIteratee(iteratee, 2)) +
72888 : []; +
72889 } +
72890 +
72891 /** +
72892 * Gets all but the first element of `array`. +
72893 * +
72894 * @static +
72895 * @memberOf _ +
72896 * @since 4.0.0 +
72897 * @category Array +
72898 * @param {Array} array The array to query. +
72899 * @returns {Array} Returns the slice of `array`. +
72900 * @example +
72901 * +
72902 * _.tail([1, 2, 3]); +
72903 * // => [2, 3] +
72904 */ +
72905 function tail(array) { +
72906 var length = array == null ? 0 : array.length; +
72907 return length ? baseSlice(array, 1, length) : []; +
72908 } +
72909 +
72910 /** +
72911 * Creates a slice of `array` with `n` elements taken from the beginning. +
72912 * +
72913 * @static +
72914 * @memberOf _ +
72915 * @since 0.1.0 +
72916 * @category Array +
72917 * @param {Array} array The array to query. +
72918 * @param {number} [n=1] The number of elements to take. +
72919 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
72920 * @returns {Array} Returns the slice of `array`. +
72921 * @example +
72922 * +
72923 * _.take([1, 2, 3]); +
72924 * // => [1] +
72925 * +
72926 * _.take([1, 2, 3], 2); +
72927 * // => [1, 2] +
72928 * +
72929 * _.take([1, 2, 3], 5); +
72930 * // => [1, 2, 3] +
72931 * +
72932 * _.take([1, 2, 3], 0); +
72933 * // => [] +
72934 */ +
72935 function take(array, n, guard) { +
72936 if (!(array && array.length)) { +
72937 return []; +
72938 } +
72939 n = (guard || n === undefined) ? 1 : toInteger(n); +
72940 return baseSlice(array, 0, n < 0 ? 0 : n); +
72941 } +
72942 +
72943 /** +
72944 * Creates a slice of `array` with `n` elements taken from the end. +
72945 * +
72946 * @static +
72947 * @memberOf _ +
72948 * @since 3.0.0 +
72949 * @category Array +
72950 * @param {Array} array The array to query. +
72951 * @param {number} [n=1] The number of elements to take. +
72952 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
72953 * @returns {Array} Returns the slice of `array`. +
72954 * @example +
72955 * +
72956 * _.takeRight([1, 2, 3]); +
72957 * // => [3] +
72958 * +
72959 * _.takeRight([1, 2, 3], 2); +
72960 * // => [2, 3] +
72961 * +
72962 * _.takeRight([1, 2, 3], 5); +
72963 * // => [1, 2, 3] +
72964 * +
72965 * _.takeRight([1, 2, 3], 0); +
72966 * // => [] +
72967 */ +
72968 function takeRight(array, n, guard) { +
72969 var length = array == null ? 0 : array.length; +
72970 if (!length) { +
72971 return []; +
72972 } +
72973 n = (guard || n === undefined) ? 1 : toInteger(n); +
72974 n = length - n; +
72975 return baseSlice(array, n < 0 ? 0 : n, length); +
72976 } +
72977 +
72978 /** +
72979 * Creates a slice of `array` with elements taken from the end. Elements are +
72980 * taken until `predicate` returns falsey. The predicate is invoked with +
72981 * three arguments: (value, index, array). +
72982 * +
72983 * @static +
72984 * @memberOf _ +
72985 * @since 3.0.0 +
72986 * @category Array +
72987 * @param {Array} array The array to query. +
72988 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
72989 * @returns {Array} Returns the slice of `array`. +
72990 * @example +
72991 * +
72992 * var users = [ +
72993 * { 'user': 'barney', 'active': true }, +
72994 * { 'user': 'fred', 'active': false }, +
72995 * { 'user': 'pebbles', 'active': false } +
72996 * ]; +
72997 * +
72998 * _.takeRightWhile(users, function(o) { return !o.active; }); +
72999 * // => objects for ['fred', 'pebbles'] +
73000 * +
73001 * // The `_.matches` iteratee shorthand. +
73002 * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); +
73003 * // => objects for ['pebbles'] +
73004 * +
73005 * // The `_.matchesProperty` iteratee shorthand. +
73006 * _.takeRightWhile(users, ['active', false]); +
73007 * // => objects for ['fred', 'pebbles'] +
73008 * +
73009 * // The `_.property` iteratee shorthand. +
73010 * _.takeRightWhile(users, 'active'); +
73011 * // => [] +
73012 */ +
73013 function takeRightWhile(array, predicate) { +
73014 return (array && array.length) +
73015 ? baseWhile(array, getIteratee(predicate, 3), false, true) +
73016 : []; +
73017 } +
73018 +
73019 /** +
73020 * Creates a slice of `array` with elements taken from the beginning. Elements +
73021 * are taken until `predicate` returns falsey. The predicate is invoked with +
73022 * three arguments: (value, index, array). +
73023 * +
73024 * @static +
73025 * @memberOf _ +
73026 * @since 3.0.0 +
73027 * @category Array +
73028 * @param {Array} array The array to query. +
73029 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
73030 * @returns {Array} Returns the slice of `array`. +
73031 * @example +
73032 * +
73033 * var users = [ +
73034 * { 'user': 'barney', 'active': false }, +
73035 * { 'user': 'fred', 'active': false }, +
73036 * { 'user': 'pebbles', 'active': true } +
73037 * ]; +
73038 * +
73039 * _.takeWhile(users, function(o) { return !o.active; }); +
73040 * // => objects for ['barney', 'fred'] +
73041 * +
73042 * // The `_.matches` iteratee shorthand. +
73043 * _.takeWhile(users, { 'user': 'barney', 'active': false }); +
73044 * // => objects for ['barney'] +
73045 * +
73046 * // The `_.matchesProperty` iteratee shorthand. +
73047 * _.takeWhile(users, ['active', false]); +
73048 * // => objects for ['barney', 'fred'] +
73049 * +
73050 * // The `_.property` iteratee shorthand. +
73051 * _.takeWhile(users, 'active'); +
73052 * // => [] +
73053 */ +
73054 function takeWhile(array, predicate) { +
73055 return (array && array.length) +
73056 ? baseWhile(array, getIteratee(predicate, 3)) +
73057 : []; +
73058 } +
73059 +
73060 /** +
73061 * Creates an array of unique values, in order, from all given arrays using +
73062 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
73063 * for equality comparisons. +
73064 * +
73065 * @static +
73066 * @memberOf _ +
73067 * @since 0.1.0 +
73068 * @category Array +
73069 * @param {...Array} [arrays] The arrays to inspect. +
73070 * @returns {Array} Returns the new array of combined values. +
73071 * @example +
73072 * +
73073 * _.union([2], [1, 2]); +
73074 * // => [2, 1] +
73075 */ +
73076 var union = baseRest(function(arrays) { +
73077 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); +
73078 }); +
73079 +
73080 /** +
73081 * This method is like `_.union` except that it accepts `iteratee` which is +
73082 * invoked for each element of each `arrays` to generate the criterion by +
73083 * which uniqueness is computed. Result values are chosen from the first +
73084 * array in which the value occurs. The iteratee is invoked with one argument: +
73085 * (value). +
73086 * +
73087 * @static +
73088 * @memberOf _ +
73089 * @since 4.0.0 +
73090 * @category Array +
73091 * @param {...Array} [arrays] The arrays to inspect. +
73092 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
73093 * @returns {Array} Returns the new array of combined values. +
73094 * @example +
73095 * +
73096 * _.unionBy([2.1], [1.2, 2.3], Math.floor); +
73097 * // => [2.1, 1.2] +
73098 * +
73099 * // The `_.property` iteratee shorthand. +
73100 * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
73101 * // => [{ 'x': 1 }, { 'x': 2 }] +
73102 */ +
73103 var unionBy = baseRest(function(arrays) { +
73104 var iteratee = last(arrays); +
73105 if (isArrayLikeObject(iteratee)) { +
73106 iteratee = undefined; +
73107 } +
73108 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); +
73109 }); +
73110 +
73111 /** +
73112 * This method is like `_.union` except that it accepts `comparator` which +
73113 * is invoked to compare elements of `arrays`. Result values are chosen from +
73114 * the first array in which the value occurs. The comparator is invoked +
73115 * with two arguments: (arrVal, othVal). +
73116 * +
73117 * @static +
73118 * @memberOf _ +
73119 * @since 4.0.0 +
73120 * @category Array +
73121 * @param {...Array} [arrays] The arrays to inspect. +
73122 * @param {Function} [comparator] The comparator invoked per element. +
73123 * @returns {Array} Returns the new array of combined values. +
73124 * @example +
73125 * +
73126 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
73127 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
73128 * +
73129 * _.unionWith(objects, others, _.isEqual); +
73130 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +
73131 */ +
73132 var unionWith = baseRest(function(arrays) { +
73133 var comparator = last(arrays); +
73134 comparator = typeof comparator == 'function' ? comparator : undefined; +
73135 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); +
73136 }); +
73137 +
73138 /** +
73139 * Creates a duplicate-free version of an array, using +
73140 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
73141 * for equality comparisons, in which only the first occurrence of each element +
73142 * is kept. The order of result values is determined by the order they occur +
73143 * in the array. +
73144 * +
73145 * @static +
73146 * @memberOf _ +
73147 * @since 0.1.0 +
73148 * @category Array +
73149 * @param {Array} array The array to inspect. +
73150 * @returns {Array} Returns the new duplicate free array. +
73151 * @example +
73152 * +
73153 * _.uniq([2, 1, 2]); +
73154 * // => [2, 1] +
73155 */ +
73156 function uniq(array) { +
73157 return (array && array.length) ? baseUniq(array) : []; +
73158 } +
73159 +
73160 /** +
73161 * This method is like `_.uniq` except that it accepts `iteratee` which is +
73162 * invoked for each element in `array` to generate the criterion by which +
73163 * uniqueness is computed. The order of result values is determined by the +
73164 * order they occur in the array. The iteratee is invoked with one argument: +
73165 * (value). +
73166 * +
73167 * @static +
73168 * @memberOf _ +
73169 * @since 4.0.0 +
73170 * @category Array +
73171 * @param {Array} array The array to inspect. +
73172 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
73173 * @returns {Array} Returns the new duplicate free array. +
73174 * @example +
73175 * +
73176 * _.uniqBy([2.1, 1.2, 2.3], Math.floor); +
73177 * // => [2.1, 1.2] +
73178 * +
73179 * // The `_.property` iteratee shorthand. +
73180 * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); +
73181 * // => [{ 'x': 1 }, { 'x': 2 }] +
73182 */ +
73183 function uniqBy(array, iteratee) { +
73184 return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; +
73185 } +
73186 +
73187 /** +
73188 * This method is like `_.uniq` except that it accepts `comparator` which +
73189 * is invoked to compare elements of `array`. The order of result values is +
73190 * determined by the order they occur in the array.The comparator is invoked +
73191 * with two arguments: (arrVal, othVal). +
73192 * +
73193 * @static +
73194 * @memberOf _ +
73195 * @since 4.0.0 +
73196 * @category Array +
73197 * @param {Array} array The array to inspect. +
73198 * @param {Function} [comparator] The comparator invoked per element. +
73199 * @returns {Array} Returns the new duplicate free array. +
73200 * @example +
73201 * +
73202 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
73203 * +
73204 * _.uniqWith(objects, _.isEqual); +
73205 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] +
73206 */ +
73207 function uniqWith(array, comparator) { +
73208 comparator = typeof comparator == 'function' ? comparator : undefined; +
73209 return (array && array.length) ? baseUniq(array, undefined, comparator) : []; +
73210 } +
73211 +
73212 /** +
73213 * This method is like `_.zip` except that it accepts an array of grouped +
73214 * elements and creates an array regrouping the elements to their pre-zip +
73215 * configuration. +
73216 * +
73217 * @static +
73218 * @memberOf _ +
73219 * @since 1.2.0 +
73220 * @category Array +
73221 * @param {Array} array The array of grouped elements to process. +
73222 * @returns {Array} Returns the new array of regrouped elements. +
73223 * @example +
73224 * +
73225 * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); +
73226 * // => [['a', 1, true], ['b', 2, false]] +
73227 * +
73228 * _.unzip(zipped); +
73229 * // => [['a', 'b'], [1, 2], [true, false]] +
73230 */ +
73231 function unzip(array) { +
73232 if (!(array && array.length)) { +
73233 return []; +
73234 } +
73235 var length = 0; +
73236 array = arrayFilter(array, function(group) { +
73237 if (isArrayLikeObject(group)) { +
73238 length = nativeMax(group.length, length); +
73239 return true; +
73240 } +
73241 }); +
73242 return baseTimes(length, function(index) { +
73243 return arrayMap(array, baseProperty(index)); +
73244 }); +
73245 } +
73246 +
73247 /** +
73248 * This method is like `_.unzip` except that it accepts `iteratee` to specify +
73249 * how regrouped values should be combined. The iteratee is invoked with the +
73250 * elements of each group: (...group). +
73251 * +
73252 * @static +
73253 * @memberOf _ +
73254 * @since 3.8.0 +
73255 * @category Array +
73256 * @param {Array} array The array of grouped elements to process. +
73257 * @param {Function} [iteratee=_.identity] The function to combine +
73258 * regrouped values. +
73259 * @returns {Array} Returns the new array of regrouped elements. +
73260 * @example +
73261 * +
73262 * var zipped = _.zip([1, 2], [10, 20], [100, 200]); +
73263 * // => [[1, 10, 100], [2, 20, 200]] +
73264 * +
73265 * _.unzipWith(zipped, _.add); +
73266 * // => [3, 30, 300] +
73267 */ +
73268 function unzipWith(array, iteratee) { +
73269 if (!(array && array.length)) { +
73270 return []; +
73271 } +
73272 var result = unzip(array); +
73273 if (iteratee == null) { +
73274 return result; +
73275 } +
73276 return arrayMap(result, function(group) { +
73277 return apply(iteratee, undefined, group); +
73278 }); +
73279 } +
73280 +
73281 /** +
73282 * Creates an array excluding all given values using +
73283 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
73284 * for equality comparisons. +
73285 * +
73286 * **Note:** Unlike `_.pull`, this method returns a new array. +
73287 * +
73288 * @static +
73289 * @memberOf _ +
73290 * @since 0.1.0 +
73291 * @category Array +
73292 * @param {Array} array The array to inspect. +
73293 * @param {...*} [values] The values to exclude. +
73294 * @returns {Array} Returns the new array of filtered values. +
73295 * @see _.difference, _.xor +
73296 * @example +
73297 * +
73298 * _.without([2, 1, 2, 3], 1, 2); +
73299 * // => [3] +
73300 */ +
73301 var without = baseRest(function(array, values) { +
73302 return isArrayLikeObject(array) +
73303 ? baseDifference(array, values) +
73304 : []; +
73305 }); +
73306 +
73307 /** +
73308 * Creates an array of unique values that is the +
73309 * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) +
73310 * of the given arrays. The order of result values is determined by the order +
73311 * they occur in the arrays. +
73312 * +
73313 * @static +
73314 * @memberOf _ +
73315 * @since 2.4.0 +
73316 * @category Array +
73317 * @param {...Array} [arrays] The arrays to inspect. +
73318 * @returns {Array} Returns the new array of filtered values. +
73319 * @see _.difference, _.without +
73320 * @example +
73321 * +
73322 * _.xor([2, 1], [2, 3]); +
73323 * // => [1, 3] +
73324 */ +
73325 var xor = baseRest(function(arrays) { +
73326 return baseXor(arrayFilter(arrays, isArrayLikeObject)); +
73327 }); +
73328 +
73329 /** +
73330 * This method is like `_.xor` except that it accepts `iteratee` which is +
73331 * invoked for each element of each `arrays` to generate the criterion by +
73332 * which by which they're compared. The order of result values is determined +
73333 * by the order they occur in the arrays. The iteratee is invoked with one +
73334 * argument: (value). +
73335 * +
73336 * @static +
73337 * @memberOf _ +
73338 * @since 4.0.0 +
73339 * @category Array +
73340 * @param {...Array} [arrays] The arrays to inspect. +
73341 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
73342 * @returns {Array} Returns the new array of filtered values. +
73343 * @example +
73344 * +
73345 * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
73346 * // => [1.2, 3.4] +
73347 * +
73348 * // The `_.property` iteratee shorthand. +
73349 * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
73350 * // => [{ 'x': 2 }] +
73351 */ +
73352 var xorBy = baseRest(function(arrays) { +
73353 var iteratee = last(arrays); +
73354 if (isArrayLikeObject(iteratee)) { +
73355 iteratee = undefined; +
73356 } +
73357 return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); +
73358 }); +
73359 +
73360 /** +
73361 * This method is like `_.xor` except that it accepts `comparator` which is +
73362 * invoked to compare elements of `arrays`. The order of result values is +
73363 * determined by the order they occur in the arrays. The comparator is invoked +
73364 * with two arguments: (arrVal, othVal). +
73365 * +
73366 * @static +
73367 * @memberOf _ +
73368 * @since 4.0.0 +
73369 * @category Array +
73370 * @param {...Array} [arrays] The arrays to inspect. +
73371 * @param {Function} [comparator] The comparator invoked per element. +
73372 * @returns {Array} Returns the new array of filtered values. +
73373 * @example +
73374 * +
73375 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
73376 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
73377 * +
73378 * _.xorWith(objects, others, _.isEqual); +
73379 * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +
73380 */ +
73381 var xorWith = baseRest(function(arrays) { +
73382 var comparator = last(arrays); +
73383 comparator = typeof comparator == 'function' ? comparator : undefined; +
73384 return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); +
73385 }); +
73386 +
73387 /** +
73388 * Creates an array of grouped elements, the first of which contains the +
73389 * first elements of the given arrays, the second of which contains the +
73390 * second elements of the given arrays, and so on. +
73391 * +
73392 * @static +
73393 * @memberOf _ +
73394 * @since 0.1.0 +
73395 * @category Array +
73396 * @param {...Array} [arrays] The arrays to process. +
73397 * @returns {Array} Returns the new array of grouped elements. +
73398 * @example +
73399 * +
73400 * _.zip(['a', 'b'], [1, 2], [true, false]); +
73401 * // => [['a', 1, true], ['b', 2, false]] +
73402 */ +
73403 var zip = baseRest(unzip); +
73404 +
73405 /** +
73406 * This method is like `_.fromPairs` except that it accepts two arrays, +
73407 * one of property identifiers and one of corresponding values. +
73408 * +
73409 * @static +
73410 * @memberOf _ +
73411 * @since 0.4.0 +
73412 * @category Array +
73413 * @param {Array} [props=[]] The property identifiers. +
73414 * @param {Array} [values=[]] The property values. +
73415 * @returns {Object} Returns the new object. +
73416 * @example +
73417 * +
73418 * _.zipObject(['a', 'b'], [1, 2]); +
73419 * // => { 'a': 1, 'b': 2 } +
73420 */ +
73421 function zipObject(props, values) { +
73422 return baseZipObject(props || [], values || [], assignValue); +
73423 } +
73424 +
73425 /** +
73426 * This method is like `_.zipObject` except that it supports property paths. +
73427 * +
73428 * @static +
73429 * @memberOf _ +
73430 * @since 4.1.0 +
73431 * @category Array +
73432 * @param {Array} [props=[]] The property identifiers. +
73433 * @param {Array} [values=[]] The property values. +
73434 * @returns {Object} Returns the new object. +
73435 * @example +
73436 * +
73437 * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); +
73438 * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } +
73439 */ +
73440 function zipObjectDeep(props, values) { +
73441 return baseZipObject(props || [], values || [], baseSet); +
73442 } +
73443 +
73444 /** +
73445 * This method is like `_.zip` except that it accepts `iteratee` to specify +
73446 * how grouped values should be combined. The iteratee is invoked with the +
73447 * elements of each group: (...group). +
73448 * +
73449 * @static +
73450 * @memberOf _ +
73451 * @since 3.8.0 +
73452 * @category Array +
73453 * @param {...Array} [arrays] The arrays to process. +
73454 * @param {Function} [iteratee=_.identity] The function to combine +
73455 * grouped values. +
73456 * @returns {Array} Returns the new array of grouped elements. +
73457 * @example +
73458 * +
73459 * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { +
73460 * return a + b + c; +
73461 * }); +
73462 * // => [111, 222] +
73463 */ +
73464 var zipWith = baseRest(function(arrays) { +
73465 var length = arrays.length, +
73466 iteratee = length > 1 ? arrays[length - 1] : undefined; +
73467 +
73468 iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; +
73469 return unzipWith(arrays, iteratee); +
73470 }); +
73471 +
73472 /*------------------------------------------------------------------------*/ +
73473 +
73474 /** +
73475 * Creates a `lodash` wrapper instance that wraps `value` with explicit method +
73476 * chain sequences enabled. The result of such sequences must be unwrapped +
73477 * with `_#value`. +
73478 * +
73479 * @static +
73480 * @memberOf _ +
73481 * @since 1.3.0 +
73482 * @category Seq +
73483 * @param {*} value The value to wrap. +
73484 * @returns {Object} Returns the new `lodash` wrapper instance. +
73485 * @example +
73486 * +
73487 * var users = [ +
73488 * { 'user': 'barney', 'age': 36 }, +
73489 * { 'user': 'fred', 'age': 40 }, +
73490 * { 'user': 'pebbles', 'age': 1 } +
73491 * ]; +
73492 * +
73493 * var youngest = _ +
73494 * .chain(users) +
73495 * .sortBy('age') +
73496 * .map(function(o) { +
73497 * return o.user + ' is ' + o.age; +
73498 * }) +
73499 * .head() +
73500 * .value(); +
73501 * // => 'pebbles is 1' +
73502 */ +
73503 function chain(value) { +
73504 var result = lodash(value); +
73505 result.__chain__ = true; +
73506 return result; +
73507 } +
73508 +
73509 /** +
73510 * This method invokes `interceptor` and returns `value`. The interceptor +
73511 * is invoked with one argument; (value). The purpose of this method is to +
73512 * "tap into" a method chain sequence in order to modify intermediate results. +
73513 * +
73514 * @static +
73515 * @memberOf _ +
73516 * @since 0.1.0 +
73517 * @category Seq +
73518 * @param {*} value The value to provide to `interceptor`. +
73519 * @param {Function} interceptor The function to invoke. +
73520 * @returns {*} Returns `value`. +
73521 * @example +
73522 * +
73523 * _([1, 2, 3]) +
73524 * .tap(function(array) { +
73525 * // Mutate input array. +
73526 * array.pop(); +
73527 * }) +
73528 * .reverse() +
73529 * .value(); +
73530 * // => [2, 1] +
73531 */ +
73532 function tap(value, interceptor) { +
73533 interceptor(value); +
73534 return value; +
73535 } +
73536 +
73537 /** +
73538 * This method is like `_.tap` except that it returns the result of `interceptor`. +
73539 * The purpose of this method is to "pass thru" values replacing intermediate +
73540 * results in a method chain sequence. +
73541 * +
73542 * @static +
73543 * @memberOf _ +
73544 * @since 3.0.0 +
73545 * @category Seq +
73546 * @param {*} value The value to provide to `interceptor`. +
73547 * @param {Function} interceptor The function to invoke. +
73548 * @returns {*} Returns the result of `interceptor`. +
73549 * @example +
73550 * +
73551 * _(' abc ') +
73552 * .chain() +
73553 * .trim() +
73554 * .thru(function(value) { +
73555 * return [value]; +
73556 * }) +
73557 * .value(); +
73558 * // => ['abc'] +
73559 */ +
73560 function thru(value, interceptor) { +
73561 return interceptor(value); +
73562 } +
73563 +
73564 /** +
73565 * This method is the wrapper version of `_.at`. +
73566 * +
73567 * @name at +
73568 * @memberOf _ +
73569 * @since 1.0.0 +
73570 * @category Seq +
73571 * @param {...(string|string[])} [paths] The property paths to pick. +
73572 * @returns {Object} Returns the new `lodash` wrapper instance. +
73573 * @example +
73574 * +
73575 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +
73576 * +
73577 * _(object).at(['a[0].b.c', 'a[1]']).value(); +
73578 * // => [3, 4] +
73579 */ +
73580 var wrapperAt = flatRest(function(paths) { +
73581 var length = paths.length, +
73582 start = length ? paths[0] : 0, +
73583 value = this.__wrapped__, +
73584 interceptor = function(object) { return baseAt(object, paths); }; +
73585 +
73586 if (length > 1 || this.__actions__.length || +
73587 !(value instanceof LazyWrapper) || !isIndex(start)) { +
73588 return this.thru(interceptor); +
73589 } +
73590 value = value.slice(start, +start + (length ? 1 : 0)); +
73591 value.__actions__.push({ +
73592 'func': thru, +
73593 'args': [interceptor], +
73594 'thisArg': undefined +
73595 }); +
73596 return new LodashWrapper(value, this.__chain__).thru(function(array) { +
73597 if (length && !array.length) { +
73598 array.push(undefined); +
73599 } +
73600 return array; +
73601 }); +
73602 }); +
73603 +
73604 /** +
73605 * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. +
73606 * +
73607 * @name chain +
73608 * @memberOf _ +
73609 * @since 0.1.0 +
73610 * @category Seq +
73611 * @returns {Object} Returns the new `lodash` wrapper instance. +
73612 * @example +
73613 * +
73614 * var users = [ +
73615 * { 'user': 'barney', 'age': 36 }, +
73616 * { 'user': 'fred', 'age': 40 } +
73617 * ]; +
73618 * +
73619 * // A sequence without explicit chaining. +
73620 * _(users).head(); +
73621 * // => { 'user': 'barney', 'age': 36 } +
73622 * +
73623 * // A sequence with explicit chaining. +
73624 * _(users) +
73625 * .chain() +
73626 * .head() +
73627 * .pick('user') +
73628 * .value(); +
73629 * // => { 'user': 'barney' } +
73630 */ +
73631 function wrapperChain() { +
73632 return chain(this); +
73633 } +
73634 +
73635 /** +
73636 * Executes the chain sequence and returns the wrapped result. +
73637 * +
73638 * @name commit +
73639 * @memberOf _ +
73640 * @since 3.2.0 +
73641 * @category Seq +
73642 * @returns {Object} Returns the new `lodash` wrapper instance. +
73643 * @example +
73644 * +
73645 * var array = [1, 2]; +
73646 * var wrapped = _(array).push(3); +
73647 * +
73648 * console.log(array); +
73649 * // => [1, 2] +
73650 * +
73651 * wrapped = wrapped.commit(); +
73652 * console.log(array); +
73653 * // => [1, 2, 3] +
73654 * +
73655 * wrapped.last(); +
73656 * // => 3 +
73657 * +
73658 * console.log(array); +
73659 * // => [1, 2, 3] +
73660 */ +
73661 function wrapperCommit() { +
73662 return new LodashWrapper(this.value(), this.__chain__); +
73663 } +
73664 +
73665 /** +
73666 * Gets the next value on a wrapped object following the +
73667 * [iterator protocol](https://mdn.io/iteration_protocols#iterator). +
73668 * +
73669 * @name next +
73670 * @memberOf _ +
73671 * @since 4.0.0 +
73672 * @category Seq +
73673 * @returns {Object} Returns the next iterator value. +
73674 * @example +
73675 * +
73676 * var wrapped = _([1, 2]); +
73677 * +
73678 * wrapped.next(); +
73679 * // => { 'done': false, 'value': 1 } +
73680 * +
73681 * wrapped.next(); +
73682 * // => { 'done': false, 'value': 2 } +
73683 * +
73684 * wrapped.next(); +
73685 * // => { 'done': true, 'value': undefined } +
73686 */ +
73687 function wrapperNext() { +
73688 if (this.__values__ === undefined) { +
73689 this.__values__ = toArray(this.value()); +
73690 } +
73691 var done = this.__index__ >= this.__values__.length, +
73692 value = done ? undefined : this.__values__[this.__index__++]; +
73693 +
73694 return { 'done': done, 'value': value }; +
73695 } +
73696 +
73697 /** +
73698 * Enables the wrapper to be iterable. +
73699 * +
73700 * @name Symbol.iterator +
73701 * @memberOf _ +
73702 * @since 4.0.0 +
73703 * @category Seq +
73704 * @returns {Object} Returns the wrapper object. +
73705 * @example +
73706 * +
73707 * var wrapped = _([1, 2]); +
73708 * +
73709 * wrapped[Symbol.iterator]() === wrapped; +
73710 * // => true +
73711 * +
73712 * Array.from(wrapped); +
73713 * // => [1, 2] +
73714 */ +
73715 function wrapperToIterator() { +
73716 return this; +
73717 } +
73718 +
73719 /** +
73720 * Creates a clone of the chain sequence planting `value` as the wrapped value. +
73721 * +
73722 * @name plant +
73723 * @memberOf _ +
73724 * @since 3.2.0 +
73725 * @category Seq +
73726 * @param {*} value The value to plant. +
73727 * @returns {Object} Returns the new `lodash` wrapper instance. +
73728 * @example +
73729 * +
73730 * function square(n) { +
73731 * return n * n; +
73732 * } +
73733 * +
73734 * var wrapped = _([1, 2]).map(square); +
73735 * var other = wrapped.plant([3, 4]); +
73736 * +
73737 * other.value(); +
73738 * // => [9, 16] +
73739 * +
73740 * wrapped.value(); +
73741 * // => [1, 4] +
73742 */ +
73743 function wrapperPlant(value) { +
73744 var result, +
73745 parent = this; +
73746 +
73747 while (parent instanceof baseLodash) { +
73748 var clone = wrapperClone(parent); +
73749 clone.__index__ = 0; +
73750 clone.__values__ = undefined; +
73751 if (result) { +
73752 previous.__wrapped__ = clone; +
73753 } else { +
73754 result = clone; +
73755 } +
73756 var previous = clone; +
73757 parent = parent.__wrapped__; +
73758 } +
73759 previous.__wrapped__ = value; +
73760 return result; +
73761 } +
73762 +
73763 /** +
73764 * This method is the wrapper version of `_.reverse`. +
73765 * +
73766 * **Note:** This method mutates the wrapped array. +
73767 * +
73768 * @name reverse +
73769 * @memberOf _ +
73770 * @since 0.1.0 +
73771 * @category Seq +
73772 * @returns {Object} Returns the new `lodash` wrapper instance. +
73773 * @example +
73774 * +
73775 * var array = [1, 2, 3]; +
73776 * +
73777 * _(array).reverse().value() +
73778 * // => [3, 2, 1] +
73779 * +
73780 * console.log(array); +
73781 * // => [3, 2, 1] +
73782 */ +
73783 function wrapperReverse() { +
73784 var value = this.__wrapped__; +
73785 if (value instanceof LazyWrapper) { +
73786 var wrapped = value; +
73787 if (this.__actions__.length) { +
73788 wrapped = new LazyWrapper(this); +
73789 } +
73790 wrapped = wrapped.reverse(); +
73791 wrapped.__actions__.push({ +
73792 'func': thru, +
73793 'args': [reverse], +
73794 'thisArg': undefined +
73795 }); +
73796 return new LodashWrapper(wrapped, this.__chain__); +
73797 } +
73798 return this.thru(reverse); +
73799 } +
73800 +
73801 /** +
73802 * Executes the chain sequence to resolve the unwrapped value. +
73803 * +
73804 * @name value +
73805 * @memberOf _ +
73806 * @since 0.1.0 +
73807 * @alias toJSON, valueOf +
73808 * @category Seq +
73809 * @returns {*} Returns the resolved unwrapped value. +
73810 * @example +
73811 * +
73812 * _([1, 2, 3]).value(); +
73813 * // => [1, 2, 3] +
73814 */ +
73815 function wrapperValue() { +
73816 return baseWrapperValue(this.__wrapped__, this.__actions__); +
73817 } +
73818 +
73819 /*------------------------------------------------------------------------*/ +
73820 +
73821 /** +
73822 * Creates an object composed of keys generated from the results of running +
73823 * each element of `collection` thru `iteratee`. The corresponding value of +
73824 * each key is the number of times the key was returned by `iteratee`. The +
73825 * iteratee is invoked with one argument: (value). +
73826 * +
73827 * @static +
73828 * @memberOf _ +
73829 * @since 0.5.0 +
73830 * @category Collection +
73831 * @param {Array|Object} collection The collection to iterate over. +
73832 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
73833 * @returns {Object} Returns the composed aggregate object. +
73834 * @example +
73835 * +
73836 * _.countBy([6.1, 4.2, 6.3], Math.floor); +
73837 * // => { '4': 1, '6': 2 } +
73838 * +
73839 * // The `_.property` iteratee shorthand. +
73840 * _.countBy(['one', 'two', 'three'], 'length'); +
73841 * // => { '3': 2, '5': 1 } +
73842 */ +
73843 var countBy = createAggregator(function(result, value, key) { +
73844 if (hasOwnProperty.call(result, key)) { +
73845 ++result[key]; +
73846 } else { +
73847 baseAssignValue(result, key, 1); +
73848 } +
73849 }); +
73850 +
73851 /** +
73852 * Checks if `predicate` returns truthy for **all** elements of `collection`. +
73853 * Iteration is stopped once `predicate` returns falsey. The predicate is +
73854 * invoked with three arguments: (value, index|key, collection). +
73855 * +
73856 * **Note:** This method returns `true` for +
73857 * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because +
73858 * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of +
73859 * elements of empty collections. +
73860 * +
73861 * @static +
73862 * @memberOf _ +
73863 * @since 0.1.0 +
73864 * @category Collection +
73865 * @param {Array|Object} collection The collection to iterate over. +
73866 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
73867 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
73868 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
73869 * else `false`. +
73870 * @example +
73871 * +
73872 * _.every([true, 1, null, 'yes'], Boolean); +
73873 * // => false +
73874 * +
73875 * var users = [ +
73876 * { 'user': 'barney', 'age': 36, 'active': false }, +
73877 * { 'user': 'fred', 'age': 40, 'active': false } +
73878 * ]; +
73879 * +
73880 * // The `_.matches` iteratee shorthand. +
73881 * _.every(users, { 'user': 'barney', 'active': false }); +
73882 * // => false +
73883 * +
73884 * // The `_.matchesProperty` iteratee shorthand. +
73885 * _.every(users, ['active', false]); +
73886 * // => true +
73887 * +
73888 * // The `_.property` iteratee shorthand. +
73889 * _.every(users, 'active'); +
73890 * // => false +
73891 */ +
73892 function every(collection, predicate, guard) { +
73893 var func = isArray(collection) ? arrayEvery : baseEvery; +
73894 if (guard && isIterateeCall(collection, predicate, guard)) { +
73895 predicate = undefined; +
73896 } +
73897 return func(collection, getIteratee(predicate, 3)); +
73898 } +
73899 +
73900 /** +
73901 * Iterates over elements of `collection`, returning an array of all elements +
73902 * `predicate` returns truthy for. The predicate is invoked with three +
73903 * arguments: (value, index|key, collection). +
73904 * +
73905 * **Note:** Unlike `_.remove`, this method returns a new array. +
73906 * +
73907 * @static +
73908 * @memberOf _ +
73909 * @since 0.1.0 +
73910 * @category Collection +
73911 * @param {Array|Object} collection The collection to iterate over. +
73912 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
73913 * @returns {Array} Returns the new filtered array. +
73914 * @see _.reject +
73915 * @example +
73916 * +
73917 * var users = [ +
73918 * { 'user': 'barney', 'age': 36, 'active': true }, +
73919 * { 'user': 'fred', 'age': 40, 'active': false } +
73920 * ]; +
73921 * +
73922 * _.filter(users, function(o) { return !o.active; }); +
73923 * // => objects for ['fred'] +
73924 * +
73925 * // The `_.matches` iteratee shorthand. +
73926 * _.filter(users, { 'age': 36, 'active': true }); +
73927 * // => objects for ['barney'] +
73928 * +
73929 * // The `_.matchesProperty` iteratee shorthand. +
73930 * _.filter(users, ['active', false]); +
73931 * // => objects for ['fred'] +
73932 * +
73933 * // The `_.property` iteratee shorthand. +
73934 * _.filter(users, 'active'); +
73935 * // => objects for ['barney'] +
73936 */ +
73937 function filter(collection, predicate) { +
73938 var func = isArray(collection) ? arrayFilter : baseFilter; +
73939 return func(collection, getIteratee(predicate, 3)); +
73940 } +
73941 +
73942 /** +
73943 * Iterates over elements of `collection`, returning the first element +
73944 * `predicate` returns truthy for. The predicate is invoked with three +
73945 * arguments: (value, index|key, collection). +
73946 * +
73947 * @static +
73948 * @memberOf _ +
73949 * @since 0.1.0 +
73950 * @category Collection +
73951 * @param {Array|Object} collection The collection to inspect. +
73952 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
73953 * @param {number} [fromIndex=0] The index to search from. +
73954 * @returns {*} Returns the matched element, else `undefined`. +
73955 * @example +
73956 * +
73957 * var users = [ +
73958 * { 'user': 'barney', 'age': 36, 'active': true }, +
73959 * { 'user': 'fred', 'age': 40, 'active': false }, +
73960 * { 'user': 'pebbles', 'age': 1, 'active': true } +
73961 * ]; +
73962 * +
73963 * _.find(users, function(o) { return o.age < 40; }); +
73964 * // => object for 'barney' +
73965 * +
73966 * // The `_.matches` iteratee shorthand. +
73967 * _.find(users, { 'age': 1, 'active': true }); +
73968 * // => object for 'pebbles' +
73969 * +
73970 * // The `_.matchesProperty` iteratee shorthand. +
73971 * _.find(users, ['active', false]); +
73972 * // => object for 'fred' +
73973 * +
73974 * // The `_.property` iteratee shorthand. +
73975 * _.find(users, 'active'); +
73976 * // => object for 'barney' +
73977 */ +
73978 var find = createFind(findIndex); +
73979 +
73980 /** +
73981 * This method is like `_.find` except that it iterates over elements of +
73982 * `collection` from right to left. +
73983 * +
73984 * @static +
73985 * @memberOf _ +
73986 * @since 2.0.0 +
73987 * @category Collection +
73988 * @param {Array|Object} collection The collection to inspect. +
73989 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
73990 * @param {number} [fromIndex=collection.length-1] The index to search from. +
73991 * @returns {*} Returns the matched element, else `undefined`. +
73992 * @example +
73993 * +
73994 * _.findLast([1, 2, 3, 4], function(n) { +
73995 * return n % 2 == 1; +
73996 * }); +
73997 * // => 3 +
73998 */ +
73999 var findLast = createFind(findLastIndex); +
74000 +
74001 /** +
74002 * Creates a flattened array of values by running each element in `collection` +
74003 * thru `iteratee` and flattening the mapped results. The iteratee is invoked +
74004 * with three arguments: (value, index|key, collection). +
74005 * +
74006 * @static +
74007 * @memberOf _ +
74008 * @since 4.0.0 +
74009 * @category Collection +
74010 * @param {Array|Object} collection The collection to iterate over. +
74011 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
74012 * @returns {Array} Returns the new flattened array. +
74013 * @example +
74014 * +
74015 * function duplicate(n) { +
74016 * return [n, n]; +
74017 * } +
74018 * +
74019 * _.flatMap([1, 2], duplicate); +
74020 * // => [1, 1, 2, 2] +
74021 */ +
74022 function flatMap(collection, iteratee) { +
74023 return baseFlatten(map(collection, iteratee), 1); +
74024 } +
74025 +
74026 /** +
74027 * This method is like `_.flatMap` except that it recursively flattens the +
74028 * mapped results. +
74029 * +
74030 * @static +
74031 * @memberOf _ +
74032 * @since 4.7.0 +
74033 * @category Collection +
74034 * @param {Array|Object} collection The collection to iterate over. +
74035 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
74036 * @returns {Array} Returns the new flattened array. +
74037 * @example +
74038 * +
74039 * function duplicate(n) { +
74040 * return [[[n, n]]]; +
74041 * } +
74042 * +
74043 * _.flatMapDeep([1, 2], duplicate); +
74044 * // => [1, 1, 2, 2] +
74045 */ +
74046 function flatMapDeep(collection, iteratee) { +
74047 return baseFlatten(map(collection, iteratee), INFINITY); +
74048 } +
74049 +
74050 /** +
74051 * This method is like `_.flatMap` except that it recursively flattens the +
74052 * mapped results up to `depth` times. +
74053 * +
74054 * @static +
74055 * @memberOf _ +
74056 * @since 4.7.0 +
74057 * @category Collection +
74058 * @param {Array|Object} collection The collection to iterate over. +
74059 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
74060 * @param {number} [depth=1] The maximum recursion depth. +
74061 * @returns {Array} Returns the new flattened array. +
74062 * @example +
74063 * +
74064 * function duplicate(n) { +
74065 * return [[[n, n]]]; +
74066 * } +
74067 * +
74068 * _.flatMapDepth([1, 2], duplicate, 2); +
74069 * // => [[1, 1], [2, 2]] +
74070 */ +
74071 function flatMapDepth(collection, iteratee, depth) { +
74072 depth = depth === undefined ? 1 : toInteger(depth); +
74073 return baseFlatten(map(collection, iteratee), depth); +
74074 } +
74075 +
74076 /** +
74077 * Iterates over elements of `collection` and invokes `iteratee` for each element. +
74078 * The iteratee is invoked with three arguments: (value, index|key, collection). +
74079 * Iteratee functions may exit iteration early by explicitly returning `false`. +
74080 * +
74081 * **Note:** As with other "Collections" methods, objects with a "length" +
74082 * property are iterated like arrays. To avoid this behavior use `_.forIn` +
74083 * or `_.forOwn` for object iteration. +
74084 * +
74085 * @static +
74086 * @memberOf _ +
74087 * @since 0.1.0 +
74088 * @alias each +
74089 * @category Collection +
74090 * @param {Array|Object} collection The collection to iterate over. +
74091 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
74092 * @returns {Array|Object} Returns `collection`. +
74093 * @see _.forEachRight +
74094 * @example +
74095 * +
74096 * _.forEach([1, 2], function(value) { +
74097 * console.log(value); +
74098 * }); +
74099 * // => Logs `1` then `2`. +
74100 * +
74101 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { +
74102 * console.log(key); +
74103 * }); +
74104 * // => Logs 'a' then 'b' (iteration order is not guaranteed). +
74105 */ +
74106 function forEach(collection, iteratee) { +
74107 var func = isArray(collection) ? arrayEach : baseEach; +
74108 return func(collection, getIteratee(iteratee, 3)); +
74109 } +
74110 +
74111 /** +
74112 * This method is like `_.forEach` except that it iterates over elements of +
74113 * `collection` from right to left. +
74114 * +
74115 * @static +
74116 * @memberOf _ +
74117 * @since 2.0.0 +
74118 * @alias eachRight +
74119 * @category Collection +
74120 * @param {Array|Object} collection The collection to iterate over. +
74121 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
74122 * @returns {Array|Object} Returns `collection`. +
74123 * @see _.forEach +
74124 * @example +
74125 * +
74126 * _.forEachRight([1, 2], function(value) { +
74127 * console.log(value); +
74128 * }); +
74129 * // => Logs `2` then `1`. +
74130 */ +
74131 function forEachRight(collection, iteratee) { +
74132 var func = isArray(collection) ? arrayEachRight : baseEachRight; +
74133 return func(collection, getIteratee(iteratee, 3)); +
74134 } +
74135 +
74136 /** +
74137 * Creates an object composed of keys generated from the results of running +
74138 * each element of `collection` thru `iteratee`. The order of grouped values +
74139 * is determined by the order they occur in `collection`. The corresponding +
74140 * value of each key is an array of elements responsible for generating the +
74141 * key. The iteratee is invoked with one argument: (value). +
74142 * +
74143 * @static +
74144 * @memberOf _ +
74145 * @since 0.1.0 +
74146 * @category Collection +
74147 * @param {Array|Object} collection The collection to iterate over. +
74148 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
74149 * @returns {Object} Returns the composed aggregate object. +
74150 * @example +
74151 * +
74152 * _.groupBy([6.1, 4.2, 6.3], Math.floor); +
74153 * // => { '4': [4.2], '6': [6.1, 6.3] } +
74154 * +
74155 * // The `_.property` iteratee shorthand. +
74156 * _.groupBy(['one', 'two', 'three'], 'length'); +
74157 * // => { '3': ['one', 'two'], '5': ['three'] } +
74158 */ +
74159 var groupBy = createAggregator(function(result, value, key) { +
74160 if (hasOwnProperty.call(result, key)) { +
74161 result[key].push(value); +
74162 } else { +
74163 baseAssignValue(result, key, [value]); +
74164 } +
74165 }); +
74166 +
74167 /** +
74168 * Checks if `value` is in `collection`. If `collection` is a string, it's +
74169 * checked for a substring of `value`, otherwise +
74170 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
74171 * is used for equality comparisons. If `fromIndex` is negative, it's used as +
74172 * the offset from the end of `collection`. +
74173 * +
74174 * @static +
74175 * @memberOf _ +
74176 * @since 0.1.0 +
74177 * @category Collection +
74178 * @param {Array|Object|string} collection The collection to inspect. +
74179 * @param {*} value The value to search for. +
74180 * @param {number} [fromIndex=0] The index to search from. +
74181 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +
74182 * @returns {boolean} Returns `true` if `value` is found, else `false`. +
74183 * @example +
74184 * +
74185 * _.includes([1, 2, 3], 1); +
74186 * // => true +
74187 * +
74188 * _.includes([1, 2, 3], 1, 2); +
74189 * // => false +
74190 * +
74191 * _.includes({ 'a': 1, 'b': 2 }, 1); +
74192 * // => true +
74193 * +
74194 * _.includes('abcd', 'bc'); +
74195 * // => true +
74196 */ +
74197 function includes(collection, value, fromIndex, guard) { +
74198 collection = isArrayLike(collection) ? collection : values(collection); +
74199 fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; +
74200 +
74201 var length = collection.length; +
74202 if (fromIndex < 0) { +
74203 fromIndex = nativeMax(length + fromIndex, 0); +
74204 } +
74205 return isString(collection) +
74206 ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) +
74207 : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +
74208 } +
74209 +
74210 /** +
74211 * Invokes the method at `path` of each element in `collection`, returning +
74212 * an array of the results of each invoked method. Any additional arguments +
74213 * are provided to each invoked method. If `path` is a function, it's invoked +
74214 * for, and `this` bound to, each element in `collection`. +
74215 * +
74216 * @static +
74217 * @memberOf _ +
74218 * @since 4.0.0 +
74219 * @category Collection +
74220 * @param {Array|Object} collection The collection to iterate over. +
74221 * @param {Array|Function|string} path The path of the method to invoke or +
74222 * the function invoked per iteration. +
74223 * @param {...*} [args] The arguments to invoke each method with. +
74224 * @returns {Array} Returns the array of results. +
74225 * @example +
74226 * +
74227 * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); +
74228 * // => [[1, 5, 7], [1, 2, 3]] +
74229 * +
74230 * _.invokeMap([123, 456], String.prototype.split, ''); +
74231 * // => [['1', '2', '3'], ['4', '5', '6']] +
74232 */ +
74233 var invokeMap = baseRest(function(collection, path, args) { +
74234 var index = -1, +
74235 isFunc = typeof path == 'function', +
74236 result = isArrayLike(collection) ? Array(collection.length) : []; +
74237 +
74238 baseEach(collection, function(value) { +
74239 result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); +
74240 }); +
74241 return result; +
74242 }); +
74243 +
74244 /** +
74245 * Creates an object composed of keys generated from the results of running +
74246 * each element of `collection` thru `iteratee`. The corresponding value of +
74247 * each key is the last element responsible for generating the key. The +
74248 * iteratee is invoked with one argument: (value). +
74249 * +
74250 * @static +
74251 * @memberOf _ +
74252 * @since 4.0.0 +
74253 * @category Collection +
74254 * @param {Array|Object} collection The collection to iterate over. +
74255 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
74256 * @returns {Object} Returns the composed aggregate object. +
74257 * @example +
74258 * +
74259 * var array = [ +
74260 * { 'dir': 'left', 'code': 97 }, +
74261 * { 'dir': 'right', 'code': 100 } +
74262 * ]; +
74263 * +
74264 * _.keyBy(array, function(o) { +
74265 * return String.fromCharCode(o.code); +
74266 * }); +
74267 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } +
74268 * +
74269 * _.keyBy(array, 'dir'); +
74270 * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } +
74271 */ +
74272 var keyBy = createAggregator(function(result, value, key) { +
74273 baseAssignValue(result, key, value); +
74274 }); +
74275 +
74276 /** +
74277 * Creates an array of values by running each element in `collection` thru +
74278 * `iteratee`. The iteratee is invoked with three arguments: +
74279 * (value, index|key, collection). +
74280 * +
74281 * Many lodash methods are guarded to work as iteratees for methods like +
74282 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. +
74283 * +
74284 * The guarded methods are: +
74285 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, +
74286 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, +
74287 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, +
74288 * `template`, `trim`, `trimEnd`, `trimStart`, and `words` +
74289 * +
74290 * @static +
74291 * @memberOf _ +
74292 * @since 0.1.0 +
74293 * @category Collection +
74294 * @param {Array|Object} collection The collection to iterate over. +
74295 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
74296 * @returns {Array} Returns the new mapped array. +
74297 * @example +
74298 * +
74299 * function square(n) { +
74300 * return n * n; +
74301 * } +
74302 * +
74303 * _.map([4, 8], square); +
74304 * // => [16, 64] +
74305 * +
74306 * _.map({ 'a': 4, 'b': 8 }, square); +
74307 * // => [16, 64] (iteration order is not guaranteed) +
74308 * +
74309 * var users = [ +
74310 * { 'user': 'barney' }, +
74311 * { 'user': 'fred' } +
74312 * ]; +
74313 * +
74314 * // The `_.property` iteratee shorthand. +
74315 * _.map(users, 'user'); +
74316 * // => ['barney', 'fred'] +
74317 */ +
74318 function map(collection, iteratee) { +
74319 var func = isArray(collection) ? arrayMap : baseMap; +
74320 return func(collection, getIteratee(iteratee, 3)); +
74321 } +
74322 +
74323 /** +
74324 * This method is like `_.sortBy` except that it allows specifying the sort +
74325 * orders of the iteratees to sort by. If `orders` is unspecified, all values +
74326 * are sorted in ascending order. Otherwise, specify an order of "desc" for +
74327 * descending or "asc" for ascending sort order of corresponding values. +
74328 * +
74329 * @static +
74330 * @memberOf _ +
74331 * @since 4.0.0 +
74332 * @category Collection +
74333 * @param {Array|Object} collection The collection to iterate over. +
74334 * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] +
74335 * The iteratees to sort by. +
74336 * @param {string[]} [orders] The sort orders of `iteratees`. +
74337 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +
74338 * @returns {Array} Returns the new sorted array. +
74339 * @example +
74340 * +
74341 * var users = [ +
74342 * { 'user': 'fred', 'age': 48 }, +
74343 * { 'user': 'barney', 'age': 34 }, +
74344 * { 'user': 'fred', 'age': 40 }, +
74345 * { 'user': 'barney', 'age': 36 } +
74346 * ]; +
74347 * +
74348 * // Sort by `user` in ascending order and by `age` in descending order. +
74349 * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); +
74350 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] +
74351 */ +
74352 function orderBy(collection, iteratees, orders, guard) { +
74353 if (collection == null) { +
74354 return []; +
74355 } +
74356 if (!isArray(iteratees)) { +
74357 iteratees = iteratees == null ? [] : [iteratees]; +
74358 } +
74359 orders = guard ? undefined : orders; +
74360 if (!isArray(orders)) { +
74361 orders = orders == null ? [] : [orders]; +
74362 } +
74363 return baseOrderBy(collection, iteratees, orders); +
74364 } +
74365 +
74366 /** +
74367 * Creates an array of elements split into two groups, the first of which +
74368 * contains elements `predicate` returns truthy for, the second of which +
74369 * contains elements `predicate` returns falsey for. The predicate is +
74370 * invoked with one argument: (value). +
74371 * +
74372 * @static +
74373 * @memberOf _ +
74374 * @since 3.0.0 +
74375 * @category Collection +
74376 * @param {Array|Object} collection The collection to iterate over. +
74377 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
74378 * @returns {Array} Returns the array of grouped elements. +
74379 * @example +
74380 * +
74381 * var users = [ +
74382 * { 'user': 'barney', 'age': 36, 'active': false }, +
74383 * { 'user': 'fred', 'age': 40, 'active': true }, +
74384 * { 'user': 'pebbles', 'age': 1, 'active': false } +
74385 * ]; +
74386 * +
74387 * _.partition(users, function(o) { return o.active; }); +
74388 * // => objects for [['fred'], ['barney', 'pebbles']] +
74389 * +
74390 * // The `_.matches` iteratee shorthand. +
74391 * _.partition(users, { 'age': 1, 'active': false }); +
74392 * // => objects for [['pebbles'], ['barney', 'fred']] +
74393 * +
74394 * // The `_.matchesProperty` iteratee shorthand. +
74395 * _.partition(users, ['active', false]); +
74396 * // => objects for [['barney', 'pebbles'], ['fred']] +
74397 * +
74398 * // The `_.property` iteratee shorthand. +
74399 * _.partition(users, 'active'); +
74400 * // => objects for [['fred'], ['barney', 'pebbles']] +
74401 */ +
74402 var partition = createAggregator(function(result, value, key) { +
74403 result[key ? 0 : 1].push(value); +
74404 }, function() { return [[], []]; }); +
74405 +
74406 /** +
74407 * Reduces `collection` to a value which is the accumulated result of running +
74408 * each element in `collection` thru `iteratee`, where each successive +
74409 * invocation is supplied the return value of the previous. If `accumulator` +
74410 * is not given, the first element of `collection` is used as the initial +
74411 * value. The iteratee is invoked with four arguments: +
74412 * (accumulator, value, index|key, collection). +
74413 * +
74414 * Many lodash methods are guarded to work as iteratees for methods like +
74415 * `_.reduce`, `_.reduceRight`, and `_.transform`. +
74416 * +
74417 * The guarded methods are: +
74418 * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, +
74419 * and `sortBy` +
74420 * +
74421 * @static +
74422 * @memberOf _ +
74423 * @since 0.1.0 +
74424 * @category Collection +
74425 * @param {Array|Object} collection The collection to iterate over. +
74426 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
74427 * @param {*} [accumulator] The initial value. +
74428 * @returns {*} Returns the accumulated value. +
74429 * @see _.reduceRight +
74430 * @example +
74431 * +
74432 * _.reduce([1, 2], function(sum, n) { +
74433 * return sum + n; +
74434 * }, 0); +
74435 * // => 3 +
74436 * +
74437 * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +
74438 * (result[value] || (result[value] = [])).push(key); +
74439 * return result; +
74440 * }, {}); +
74441 * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) +
74442 */ +
74443 function reduce(collection, iteratee, accumulator) { +
74444 var func = isArray(collection) ? arrayReduce : baseReduce, +
74445 initAccum = arguments.length < 3; +
74446 +
74447 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); +
74448 } +
74449 +
74450 /** +
74451 * This method is like `_.reduce` except that it iterates over elements of +
74452 * `collection` from right to left. +
74453 * +
74454 * @static +
74455 * @memberOf _ +
74456 * @since 0.1.0 +
74457 * @category Collection +
74458 * @param {Array|Object} collection The collection to iterate over. +
74459 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
74460 * @param {*} [accumulator] The initial value. +
74461 * @returns {*} Returns the accumulated value. +
74462 * @see _.reduce +
74463 * @example +
74464 * +
74465 * var array = [[0, 1], [2, 3], [4, 5]]; +
74466 * +
74467 * _.reduceRight(array, function(flattened, other) { +
74468 * return flattened.concat(other); +
74469 * }, []); +
74470 * // => [4, 5, 2, 3, 0, 1] +
74471 */ +
74472 function reduceRight(collection, iteratee, accumulator) { +
74473 var func = isArray(collection) ? arrayReduceRight : baseReduce, +
74474 initAccum = arguments.length < 3; +
74475 +
74476 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); +
74477 } +
74478 +
74479 /** +
74480 * The opposite of `_.filter`; this method returns the elements of `collection` +
74481 * that `predicate` does **not** return truthy for. +
74482 * +
74483 * @static +
74484 * @memberOf _ +
74485 * @since 0.1.0 +
74486 * @category Collection +
74487 * @param {Array|Object} collection The collection to iterate over. +
74488 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
74489 * @returns {Array} Returns the new filtered array. +
74490 * @see _.filter +
74491 * @example +
74492 * +
74493 * var users = [ +
74494 * { 'user': 'barney', 'age': 36, 'active': false }, +
74495 * { 'user': 'fred', 'age': 40, 'active': true } +
74496 * ]; +
74497 * +
74498 * _.reject(users, function(o) { return !o.active; }); +
74499 * // => objects for ['fred'] +
74500 * +
74501 * // The `_.matches` iteratee shorthand. +
74502 * _.reject(users, { 'age': 40, 'active': true }); +
74503 * // => objects for ['barney'] +
74504 * +
74505 * // The `_.matchesProperty` iteratee shorthand. +
74506 * _.reject(users, ['active', false]); +
74507 * // => objects for ['fred'] +
74508 * +
74509 * // The `_.property` iteratee shorthand. +
74510 * _.reject(users, 'active'); +
74511 * // => objects for ['barney'] +
74512 */ +
74513 function reject(collection, predicate) { +
74514 var func = isArray(collection) ? arrayFilter : baseFilter; +
74515 return func(collection, negate(getIteratee(predicate, 3))); +
74516 } +
74517 +
74518 /** +
74519 * Gets a random element from `collection`. +
74520 * +
74521 * @static +
74522 * @memberOf _ +
74523 * @since 2.0.0 +
74524 * @category Collection +
74525 * @param {Array|Object} collection The collection to sample. +
74526 * @returns {*} Returns the random element. +
74527 * @example +
74528 * +
74529 * _.sample([1, 2, 3, 4]); +
74530 * // => 2 +
74531 */ +
74532 function sample(collection) { +
74533 var func = isArray(collection) ? arraySample : baseSample; +
74534 return func(collection); +
74535 } +
74536 +
74537 /** +
74538 * Gets `n` random elements at unique keys from `collection` up to the +
74539 * size of `collection`. +
74540 * +
74541 * @static +
74542 * @memberOf _ +
74543 * @since 4.0.0 +
74544 * @category Collection +
74545 * @param {Array|Object} collection The collection to sample. +
74546 * @param {number} [n=1] The number of elements to sample. +
74547 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
74548 * @returns {Array} Returns the random elements. +
74549 * @example +
74550 * +
74551 * _.sampleSize([1, 2, 3], 2); +
74552 * // => [3, 1] +
74553 * +
74554 * _.sampleSize([1, 2, 3], 4); +
74555 * // => [2, 3, 1] +
74556 */ +
74557 function sampleSize(collection, n, guard) { +
74558 if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { +
74559 n = 1; +
74560 } else { +
74561 n = toInteger(n); +
74562 } +
74563 var func = isArray(collection) ? arraySampleSize : baseSampleSize; +
74564 return func(collection, n); +
74565 } +
74566 +
74567 /** +
74568 * Creates an array of shuffled values, using a version of the +
74569 * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). +
74570 * +
74571 * @static +
74572 * @memberOf _ +
74573 * @since 0.1.0 +
74574 * @category Collection +
74575 * @param {Array|Object} collection The collection to shuffle. +
74576 * @returns {Array} Returns the new shuffled array. +
74577 * @example +
74578 * +
74579 * _.shuffle([1, 2, 3, 4]); +
74580 * // => [4, 1, 3, 2] +
74581 */ +
74582 function shuffle(collection) { +
74583 var func = isArray(collection) ? arrayShuffle : baseShuffle; +
74584 return func(collection); +
74585 } +
74586 +
74587 /** +
74588 * Gets the size of `collection` by returning its length for array-like +
74589 * values or the number of own enumerable string keyed properties for objects. +
74590 * +
74591 * @static +
74592 * @memberOf _ +
74593 * @since 0.1.0 +
74594 * @category Collection +
74595 * @param {Array|Object|string} collection The collection to inspect. +
74596 * @returns {number} Returns the collection size. +
74597 * @example +
74598 * +
74599 * _.size([1, 2, 3]); +
74600 * // => 3 +
74601 * +
74602 * _.size({ 'a': 1, 'b': 2 }); +
74603 * // => 2 +
74604 * +
74605 * _.size('pebbles'); +
74606 * // => 7 +
74607 */ +
74608 function size(collection) { +
74609 if (collection == null) { +
74610 return 0; +
74611 } +
74612 if (isArrayLike(collection)) { +
74613 return isString(collection) ? stringSize(collection) : collection.length; +
74614 } +
74615 var tag = getTag(collection); +
74616 if (tag == mapTag || tag == setTag) { +
74617 return collection.size; +
74618 } +
74619 return baseKeys(collection).length; +
74620 } +
74621 +
74622 /** +
74623 * Checks if `predicate` returns truthy for **any** element of `collection`. +
74624 * Iteration is stopped once `predicate` returns truthy. The predicate is +
74625 * invoked with three arguments: (value, index|key, collection). +
74626 * +
74627 * @static +
74628 * @memberOf _ +
74629 * @since 0.1.0 +
74630 * @category Collection +
74631 * @param {Array|Object} collection The collection to iterate over. +
74632 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
74633 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
74634 * @returns {boolean} Returns `true` if any element passes the predicate check, +
74635 * else `false`. +
74636 * @example +
74637 * +
74638 * _.some([null, 0, 'yes', false], Boolean); +
74639 * // => true +
74640 * +
74641 * var users = [ +
74642 * { 'user': 'barney', 'active': true }, +
74643 * { 'user': 'fred', 'active': false } +
74644 * ]; +
74645 * +
74646 * // The `_.matches` iteratee shorthand. +
74647 * _.some(users, { 'user': 'barney', 'active': false }); +
74648 * // => false +
74649 * +
74650 * // The `_.matchesProperty` iteratee shorthand. +
74651 * _.some(users, ['active', false]); +
74652 * // => true +
74653 * +
74654 * // The `_.property` iteratee shorthand. +
74655 * _.some(users, 'active'); +
74656 * // => true +
74657 */ +
74658 function some(collection, predicate, guard) { +
74659 var func = isArray(collection) ? arraySome : baseSome; +
74660 if (guard && isIterateeCall(collection, predicate, guard)) { +
74661 predicate = undefined; +
74662 } +
74663 return func(collection, getIteratee(predicate, 3)); +
74664 } +
74665 +
74666 /** +
74667 * Creates an array of elements, sorted in ascending order by the results of +
74668 * running each element in a collection thru each iteratee. This method +
74669 * performs a stable sort, that is, it preserves the original sort order of +
74670 * equal elements. The iteratees are invoked with one argument: (value). +
74671 * +
74672 * @static +
74673 * @memberOf _ +
74674 * @since 0.1.0 +
74675 * @category Collection +
74676 * @param {Array|Object} collection The collection to iterate over. +
74677 * @param {...(Function|Function[])} [iteratees=[_.identity]] +
74678 * The iteratees to sort by. +
74679 * @returns {Array} Returns the new sorted array. +
74680 * @example +
74681 * +
74682 * var users = [ +
74683 * { 'user': 'fred', 'age': 48 }, +
74684 * { 'user': 'barney', 'age': 36 }, +
74685 * { 'user': 'fred', 'age': 40 }, +
74686 * { 'user': 'barney', 'age': 34 } +
74687 * ]; +
74688 * +
74689 * _.sortBy(users, [function(o) { return o.user; }]); +
74690 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] +
74691 * +
74692 * _.sortBy(users, ['user', 'age']); +
74693 * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] +
74694 */ +
74695 var sortBy = baseRest(function(collection, iteratees) { +
74696 if (collection == null) { +
74697 return []; +
74698 } +
74699 var length = iteratees.length; +
74700 if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { +
74701 iteratees = []; +
74702 } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { +
74703 iteratees = [iteratees[0]]; +
74704 } +
74705 return baseOrderBy(collection, baseFlatten(iteratees, 1), []); +
74706 }); +
74707 +
74708 /*------------------------------------------------------------------------*/ +
74709 +
74710 /** +
74711 * Gets the timestamp of the number of milliseconds that have elapsed since +
74712 * the Unix epoch (1 January 1970 00:00:00 UTC). +
74713 * +
74714 * @static +
74715 * @memberOf _ +
74716 * @since 2.4.0 +
74717 * @category Date +
74718 * @returns {number} Returns the timestamp. +
74719 * @example +
74720 * +
74721 * _.defer(function(stamp) { +
74722 * console.log(_.now() - stamp); +
74723 * }, _.now()); +
74724 * // => Logs the number of milliseconds it took for the deferred invocation. +
74725 */ +
74726 var now = ctxNow || function() { +
74727 return root.Date.now(); +
74728 }; +
74729 +
74730 /*------------------------------------------------------------------------*/ +
74731 +
74732 /** +
74733 * The opposite of `_.before`; this method creates a function that invokes +
74734 * `func` once it's called `n` or more times. +
74735 * +
74736 * @static +
74737 * @memberOf _ +
74738 * @since 0.1.0 +
74739 * @category Function +
74740 * @param {number} n The number of calls before `func` is invoked. +
74741 * @param {Function} func The function to restrict. +
74742 * @returns {Function} Returns the new restricted function. +
74743 * @example +
74744 * +
74745 * var saves = ['profile', 'settings']; +
74746 * +
74747 * var done = _.after(saves.length, function() { +
74748 * console.log('done saving!'); +
74749 * }); +
74750 * +
74751 * _.forEach(saves, function(type) { +
74752 * asyncSave({ 'type': type, 'complete': done }); +
74753 * }); +
74754 * // => Logs 'done saving!' after the two async saves have completed. +
74755 */ +
74756 function after(n, func) { +
74757 if (typeof func != 'function') { +
74758 throw new TypeError(FUNC_ERROR_TEXT); +
74759 } +
74760 n = toInteger(n); +
74761 return function() { +
74762 if (--n < 1) { +
74763 return func.apply(this, arguments); +
74764 } +
74765 }; +
74766 } +
74767 +
74768 /** +
74769 * Creates a function that invokes `func`, with up to `n` arguments, +
74770 * ignoring any additional arguments. +
74771 * +
74772 * @static +
74773 * @memberOf _ +
74774 * @since 3.0.0 +
74775 * @category Function +
74776 * @param {Function} func The function to cap arguments for. +
74777 * @param {number} [n=func.length] The arity cap. +
74778 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
74779 * @returns {Function} Returns the new capped function. +
74780 * @example +
74781 * +
74782 * _.map(['6', '8', '10'], _.ary(parseInt, 1)); +
74783 * // => [6, 8, 10] +
74784 */ +
74785 function ary(func, n, guard) { +
74786 n = guard ? undefined : n; +
74787 n = (func && n == null) ? func.length : n; +
74788 return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); +
74789 } +
74790 +
74791 /** +
74792 * Creates a function that invokes `func`, with the `this` binding and arguments +
74793 * of the created function, while it's called less than `n` times. Subsequent +
74794 * calls to the created function return the result of the last `func` invocation. +
74795 * +
74796 * @static +
74797 * @memberOf _ +
74798 * @since 3.0.0 +
74799 * @category Function +
74800 * @param {number} n The number of calls at which `func` is no longer invoked. +
74801 * @param {Function} func The function to restrict. +
74802 * @returns {Function} Returns the new restricted function. +
74803 * @example +
74804 * +
74805 * jQuery(element).on('click', _.before(5, addContactToList)); +
74806 * // => Allows adding up to 4 contacts to the list. +
74807 */ +
74808 function before(n, func) { +
74809 var result; +
74810 if (typeof func != 'function') { +
74811 throw new TypeError(FUNC_ERROR_TEXT); +
74812 } +
74813 n = toInteger(n); +
74814 return function() { +
74815 if (--n > 0) { +
74816 result = func.apply(this, arguments); +
74817 } +
74818 if (n <= 1) { +
74819 func = undefined; +
74820 } +
74821 return result; +
74822 }; +
74823 } +
74824 +
74825 /** +
74826 * Creates a function that invokes `func` with the `this` binding of `thisArg` +
74827 * and `partials` prepended to the arguments it receives. +
74828 * +
74829 * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, +
74830 * may be used as a placeholder for partially applied arguments. +
74831 * +
74832 * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" +
74833 * property of bound functions. +
74834 * +
74835 * @static +
74836 * @memberOf _ +
74837 * @since 0.1.0 +
74838 * @category Function +
74839 * @param {Function} func The function to bind. +
74840 * @param {*} thisArg The `this` binding of `func`. +
74841 * @param {...*} [partials] The arguments to be partially applied. +
74842 * @returns {Function} Returns the new bound function. +
74843 * @example +
74844 * +
74845 * function greet(greeting, punctuation) { +
74846 * return greeting + ' ' + this.user + punctuation; +
74847 * } +
74848 * +
74849 * var object = { 'user': 'fred' }; +
74850 * +
74851 * var bound = _.bind(greet, object, 'hi'); +
74852 * bound('!'); +
74853 * // => 'hi fred!' +
74854 * +
74855 * // Bound with placeholders. +
74856 * var bound = _.bind(greet, object, _, '!'); +
74857 * bound('hi'); +
74858 * // => 'hi fred!' +
74859 */ +
74860 var bind = baseRest(function(func, thisArg, partials) { +
74861 var bitmask = WRAP_BIND_FLAG; +
74862 if (partials.length) { +
74863 var holders = replaceHolders(partials, getHolder(bind)); +
74864 bitmask |= WRAP_PARTIAL_FLAG; +
74865 } +
74866 return createWrap(func, bitmask, thisArg, partials, holders); +
74867 }); +
74868 +
74869 /** +
74870 * Creates a function that invokes the method at `object[key]` with `partials` +
74871 * prepended to the arguments it receives. +
74872 * +
74873 * This method differs from `_.bind` by allowing bound functions to reference +
74874 * methods that may be redefined or don't yet exist. See +
74875 * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) +
74876 * for more details. +
74877 * +
74878 * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic +
74879 * builds, may be used as a placeholder for partially applied arguments. +
74880 * +
74881 * @static +
74882 * @memberOf _ +
74883 * @since 0.10.0 +
74884 * @category Function +
74885 * @param {Object} object The object to invoke the method on. +
74886 * @param {string} key The key of the method. +
74887 * @param {...*} [partials] The arguments to be partially applied. +
74888 * @returns {Function} Returns the new bound function. +
74889 * @example +
74890 * +
74891 * var object = { +
74892 * 'user': 'fred', +
74893 * 'greet': function(greeting, punctuation) { +
74894 * return greeting + ' ' + this.user + punctuation; +
74895 * } +
74896 * }; +
74897 * +
74898 * var bound = _.bindKey(object, 'greet', 'hi'); +
74899 * bound('!'); +
74900 * // => 'hi fred!' +
74901 * +
74902 * object.greet = function(greeting, punctuation) { +
74903 * return greeting + 'ya ' + this.user + punctuation; +
74904 * }; +
74905 * +
74906 * bound('!'); +
74907 * // => 'hiya fred!' +
74908 * +
74909 * // Bound with placeholders. +
74910 * var bound = _.bindKey(object, 'greet', _, '!'); +
74911 * bound('hi'); +
74912 * // => 'hiya fred!' +
74913 */ +
74914 var bindKey = baseRest(function(object, key, partials) { +
74915 var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; +
74916 if (partials.length) { +
74917 var holders = replaceHolders(partials, getHolder(bindKey)); +
74918 bitmask |= WRAP_PARTIAL_FLAG; +
74919 } +
74920 return createWrap(key, bitmask, object, partials, holders); +
74921 }); +
74922 +
74923 /** +
74924 * Creates a function that accepts arguments of `func` and either invokes +
74925 * `func` returning its result, if at least `arity` number of arguments have +
74926 * been provided, or returns a function that accepts the remaining `func` +
74927 * arguments, and so on. The arity of `func` may be specified if `func.length` +
74928 * is not sufficient. +
74929 * +
74930 * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, +
74931 * may be used as a placeholder for provided arguments. +
74932 * +
74933 * **Note:** This method doesn't set the "length" property of curried functions. +
74934 * +
74935 * @static +
74936 * @memberOf _ +
74937 * @since 2.0.0 +
74938 * @category Function +
74939 * @param {Function} func The function to curry. +
74940 * @param {number} [arity=func.length] The arity of `func`. +
74941 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
74942 * @returns {Function} Returns the new curried function. +
74943 * @example +
74944 * +
74945 * var abc = function(a, b, c) { +
74946 * return [a, b, c]; +
74947 * }; +
74948 * +
74949 * var curried = _.curry(abc); +
74950 * +
74951 * curried(1)(2)(3); +
74952 * // => [1, 2, 3] +
74953 * +
74954 * curried(1, 2)(3); +
74955 * // => [1, 2, 3] +
74956 * +
74957 * curried(1, 2, 3); +
74958 * // => [1, 2, 3] +
74959 * +
74960 * // Curried with placeholders. +
74961 * curried(1)(_, 3)(2); +
74962 * // => [1, 2, 3] +
74963 */ +
74964 function curry(func, arity, guard) { +
74965 arity = guard ? undefined : arity; +
74966 var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +
74967 result.placeholder = curry.placeholder; +
74968 return result; +
74969 } +
74970 +
74971 /** +
74972 * This method is like `_.curry` except that arguments are applied to `func` +
74973 * in the manner of `_.partialRight` instead of `_.partial`. +
74974 * +
74975 * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic +
74976 * builds, may be used as a placeholder for provided arguments. +
74977 * +
74978 * **Note:** This method doesn't set the "length" property of curried functions. +
74979 * +
74980 * @static +
74981 * @memberOf _ +
74982 * @since 3.0.0 +
74983 * @category Function +
74984 * @param {Function} func The function to curry. +
74985 * @param {number} [arity=func.length] The arity of `func`. +
74986 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
74987 * @returns {Function} Returns the new curried function. +
74988 * @example +
74989 * +
74990 * var abc = function(a, b, c) { +
74991 * return [a, b, c]; +
74992 * }; +
74993 * +
74994 * var curried = _.curryRight(abc); +
74995 * +
74996 * curried(3)(2)(1); +
74997 * // => [1, 2, 3] +
74998 * +
74999 * curried(2, 3)(1); +
75000 * // => [1, 2, 3] +
75001 * +
75002 * curried(1, 2, 3); +
75003 * // => [1, 2, 3] +
75004 * +
75005 * // Curried with placeholders. +
75006 * curried(3)(1, _)(2); +
75007 * // => [1, 2, 3] +
75008 */ +
75009 function curryRight(func, arity, guard) { +
75010 arity = guard ? undefined : arity; +
75011 var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +
75012 result.placeholder = curryRight.placeholder; +
75013 return result; +
75014 } +
75015 +
75016 /** +
75017 * Creates a debounced function that delays invoking `func` until after `wait` +
75018 * milliseconds have elapsed since the last time the debounced function was +
75019 * invoked. The debounced function comes with a `cancel` method to cancel +
75020 * delayed `func` invocations and a `flush` method to immediately invoke them. +
75021 * Provide `options` to indicate whether `func` should be invoked on the +
75022 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked +
75023 * with the last arguments provided to the debounced function. Subsequent +
75024 * calls to the debounced function return the result of the last `func` +
75025 * invocation. +
75026 * +
75027 * **Note:** If `leading` and `trailing` options are `true`, `func` is +
75028 * invoked on the trailing edge of the timeout only if the debounced function +
75029 * is invoked more than once during the `wait` timeout. +
75030 * +
75031 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +
75032 * until to the next tick, similar to `setTimeout` with a timeout of `0`. +
75033 * +
75034 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +
75035 * for details over the differences between `_.debounce` and `_.throttle`. +
75036 * +
75037 * @static +
75038 * @memberOf _ +
75039 * @since 0.1.0 +
75040 * @category Function +
75041 * @param {Function} func The function to debounce. +
75042 * @param {number} [wait=0] The number of milliseconds to delay. +
75043 * @param {Object} [options={}] The options object. +
75044 * @param {boolean} [options.leading=false] +
75045 * Specify invoking on the leading edge of the timeout. +
75046 * @param {number} [options.maxWait] +
75047 * The maximum time `func` is allowed to be delayed before it's invoked. +
75048 * @param {boolean} [options.trailing=true] +
75049 * Specify invoking on the trailing edge of the timeout. +
75050 * @returns {Function} Returns the new debounced function. +
75051 * @example +
75052 * +
75053 * // Avoid costly calculations while the window size is in flux. +
75054 * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); +
75055 * +
75056 * // Invoke `sendMail` when clicked, debouncing subsequent calls. +
75057 * jQuery(element).on('click', _.debounce(sendMail, 300, { +
75058 * 'leading': true, +
75059 * 'trailing': false +
75060 * })); +
75061 * +
75062 * // Ensure `batchLog` is invoked once after 1 second of debounced calls. +
75063 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); +
75064 * var source = new EventSource('/stream'); +
75065 * jQuery(source).on('message', debounced); +
75066 * +
75067 * // Cancel the trailing debounced invocation. +
75068 * jQuery(window).on('popstate', debounced.cancel); +
75069 */ +
75070 function debounce(func, wait, options) { +
75071 var lastArgs, +
75072 lastThis, +
75073 maxWait, +
75074 result, +
75075 timerId, +
75076 lastCallTime, +
75077 lastInvokeTime = 0, +
75078 leading = false, +
75079 maxing = false, +
75080 trailing = true; +
75081 +
75082 if (typeof func != 'function') { +
75083 throw new TypeError(FUNC_ERROR_TEXT); +
75084 } +
75085 wait = toNumber(wait) || 0; +
75086 if (isObject(options)) { +
75087 leading = !!options.leading; +
75088 maxing = 'maxWait' in options; +
75089 maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; +
75090 trailing = 'trailing' in options ? !!options.trailing : trailing; +
75091 } +
75092 +
75093 function invokeFunc(time) { +
75094 var args = lastArgs, +
75095 thisArg = lastThis; +
75096 +
75097 lastArgs = lastThis = undefined; +
75098 lastInvokeTime = time; +
75099 result = func.apply(thisArg, args); +
75100 return result; +
75101 } +
75102 +
75103 function leadingEdge(time) { +
75104 // Reset any `maxWait` timer. +
75105 lastInvokeTime = time; +
75106 // Start the timer for the trailing edge. +
75107 timerId = setTimeout(timerExpired, wait); +
75108 // Invoke the leading edge. +
75109 return leading ? invokeFunc(time) : result; +
75110 } +
75111 +
75112 function remainingWait(time) { +
75113 var timeSinceLastCall = time - lastCallTime, +
75114 timeSinceLastInvoke = time - lastInvokeTime, +
75115 timeWaiting = wait - timeSinceLastCall; +
75116 +
75117 return maxing +
75118 ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) +
75119 : timeWaiting; +
75120 } +
75121 +
75122 function shouldInvoke(time) { +
75123 var timeSinceLastCall = time - lastCallTime, +
75124 timeSinceLastInvoke = time - lastInvokeTime; +
75125 +
75126 // Either this is the first call, activity has stopped and we're at the +
75127 // trailing edge, the system time has gone backwards and we're treating +
75128 // it as the trailing edge, or we've hit the `maxWait` limit. +
75129 return (lastCallTime === undefined || (timeSinceLastCall >= wait) || +
75130 (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); +
75131 } +
75132 +
75133 function timerExpired() { +
75134 var time = now(); +
75135 if (shouldInvoke(time)) { +
75136 return trailingEdge(time); +
75137 } +
75138 // Restart the timer. +
75139 timerId = setTimeout(timerExpired, remainingWait(time)); +
75140 } +
75141 +
75142 function trailingEdge(time) { +
75143 timerId = undefined; +
75144 +
75145 // Only invoke if we have `lastArgs` which means `func` has been +
75146 // debounced at least once. +
75147 if (trailing && lastArgs) { +
75148 return invokeFunc(time); +
75149 } +
75150 lastArgs = lastThis = undefined; +
75151 return result; +
75152 } +
75153 +
75154 function cancel() { +
75155 if (timerId !== undefined) { +
75156 clearTimeout(timerId); +
75157 } +
75158 lastInvokeTime = 0; +
75159 lastArgs = lastCallTime = lastThis = timerId = undefined; +
75160 } +
75161 +
75162 function flush() { +
75163 return timerId === undefined ? result : trailingEdge(now()); +
75164 } +
75165 +
75166 function debounced() { +
75167 var time = now(), +
75168 isInvoking = shouldInvoke(time); +
75169 +
75170 lastArgs = arguments; +
75171 lastThis = this; +
75172 lastCallTime = time; +
75173 +
75174 if (isInvoking) { +
75175 if (timerId === undefined) { +
75176 return leadingEdge(lastCallTime); +
75177 } +
75178 if (maxing) { +
75179 // Handle invocations in a tight loop. +
75180 timerId = setTimeout(timerExpired, wait); +
75181 return invokeFunc(lastCallTime); +
75182 } +
75183 } +
75184 if (timerId === undefined) { +
75185 timerId = setTimeout(timerExpired, wait); +
75186 } +
75187 return result; +
75188 } +
75189 debounced.cancel = cancel; +
75190 debounced.flush = flush; +
75191 return debounced; +
75192 } +
75193 +
75194 /** +
75195 * Defers invoking the `func` until the current call stack has cleared. Any +
75196 * additional arguments are provided to `func` when it's invoked. +
75197 * +
75198 * @static +
75199 * @memberOf _ +
75200 * @since 0.1.0 +
75201 * @category Function +
75202 * @param {Function} func The function to defer. +
75203 * @param {...*} [args] The arguments to invoke `func` with. +
75204 * @returns {number} Returns the timer id. +
75205 * @example +
75206 * +
75207 * _.defer(function(text) { +
75208 * console.log(text); +
75209 * }, 'deferred'); +
75210 * // => Logs 'deferred' after one millisecond. +
75211 */ +
75212 var defer = baseRest(function(func, args) { +
75213 return baseDelay(func, 1, args); +
75214 }); +
75215 +
75216 /** +
75217 * Invokes `func` after `wait` milliseconds. Any additional arguments are +
75218 * provided to `func` when it's invoked. +
75219 * +
75220 * @static +
75221 * @memberOf _ +
75222 * @since 0.1.0 +
75223 * @category Function +
75224 * @param {Function} func The function to delay. +
75225 * @param {number} wait The number of milliseconds to delay invocation. +
75226 * @param {...*} [args] The arguments to invoke `func` with. +
75227 * @returns {number} Returns the timer id. +
75228 * @example +
75229 * +
75230 * _.delay(function(text) { +
75231 * console.log(text); +
75232 * }, 1000, 'later'); +
75233 * // => Logs 'later' after one second. +
75234 */ +
75235 var delay = baseRest(function(func, wait, args) { +
75236 return baseDelay(func, toNumber(wait) || 0, args); +
75237 }); +
75238 +
75239 /** +
75240 * Creates a function that invokes `func` with arguments reversed. +
75241 * +
75242 * @static +
75243 * @memberOf _ +
75244 * @since 4.0.0 +
75245 * @category Function +
75246 * @param {Function} func The function to flip arguments for. +
75247 * @returns {Function} Returns the new flipped function. +
75248 * @example +
75249 * +
75250 * var flipped = _.flip(function() { +
75251 * return _.toArray(arguments); +
75252 * }); +
75253 * +
75254 * flipped('a', 'b', 'c', 'd'); +
75255 * // => ['d', 'c', 'b', 'a'] +
75256 */ +
75257 function flip(func) { +
75258 return createWrap(func, WRAP_FLIP_FLAG); +
75259 } +
75260 +
75261 /** +
75262 * Creates a function that memoizes the result of `func`. If `resolver` is +
75263 * provided, it determines the cache key for storing the result based on the +
75264 * arguments provided to the memoized function. By default, the first argument +
75265 * provided to the memoized function is used as the map cache key. The `func` +
75266 * is invoked with the `this` binding of the memoized function. +
75267 * +
75268 * **Note:** The cache is exposed as the `cache` property on the memoized +
75269 * function. Its creation may be customized by replacing the `_.memoize.Cache` +
75270 * constructor with one whose instances implement the +
75271 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) +
75272 * method interface of `clear`, `delete`, `get`, `has`, and `set`. +
75273 * +
75274 * @static +
75275 * @memberOf _ +
75276 * @since 0.1.0 +
75277 * @category Function +
75278 * @param {Function} func The function to have its output memoized. +
75279 * @param {Function} [resolver] The function to resolve the cache key. +
75280 * @returns {Function} Returns the new memoized function. +
75281 * @example +
75282 * +
75283 * var object = { 'a': 1, 'b': 2 }; +
75284 * var other = { 'c': 3, 'd': 4 }; +
75285 * +
75286 * var values = _.memoize(_.values); +
75287 * values(object); +
75288 * // => [1, 2] +
75289 * +
75290 * values(other); +
75291 * // => [3, 4] +
75292 * +
75293 * object.a = 2; +
75294 * values(object); +
75295 * // => [1, 2] +
75296 * +
75297 * // Modify the result cache. +
75298 * values.cache.set(object, ['a', 'b']); +
75299 * values(object); +
75300 * // => ['a', 'b'] +
75301 * +
75302 * // Replace `_.memoize.Cache`. +
75303 * _.memoize.Cache = WeakMap; +
75304 */ +
75305 function memoize(func, resolver) { +
75306 if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { +
75307 throw new TypeError(FUNC_ERROR_TEXT); +
75308 } +
75309 var memoized = function() { +
75310 var args = arguments, +
75311 key = resolver ? resolver.apply(this, args) : args[0], +
75312 cache = memoized.cache; +
75313 +
75314 if (cache.has(key)) { +
75315 return cache.get(key); +
75316 } +
75317 var result = func.apply(this, args); +
75318 memoized.cache = cache.set(key, result) || cache; +
75319 return result; +
75320 }; +
75321 memoized.cache = new (memoize.Cache || MapCache); +
75322 return memoized; +
75323 } +
75324 +
75325 // Expose `MapCache`. +
75326 memoize.Cache = MapCache; +
75327 +
75328 /** +
75329 * Creates a function that negates the result of the predicate `func`. The +
75330 * `func` predicate is invoked with the `this` binding and arguments of the +
75331 * created function. +
75332 * +
75333 * @static +
75334 * @memberOf _ +
75335 * @since 3.0.0 +
75336 * @category Function +
75337 * @param {Function} predicate The predicate to negate. +
75338 * @returns {Function} Returns the new negated function. +
75339 * @example +
75340 * +
75341 * function isEven(n) { +
75342 * return n % 2 == 0; +
75343 * } +
75344 * +
75345 * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); +
75346 * // => [1, 3, 5] +
75347 */ +
75348 function negate(predicate) { +
75349 if (typeof predicate != 'function') { +
75350 throw new TypeError(FUNC_ERROR_TEXT); +
75351 } +
75352 return function() { +
75353 var args = arguments; +
75354 switch (args.length) { +
75355 case 0: return !predicate.call(this); +
75356 case 1: return !predicate.call(this, args[0]); +
75357 case 2: return !predicate.call(this, args[0], args[1]); +
75358 case 3: return !predicate.call(this, args[0], args[1], args[2]); +
75359 } +
75360 return !predicate.apply(this, args); +
75361 }; +
75362 } +
75363 +
75364 /** +
75365 * Creates a function that is restricted to invoking `func` once. Repeat calls +
75366 * to the function return the value of the first invocation. The `func` is +
75367 * invoked with the `this` binding and arguments of the created function. +
75368 * +
75369 * @static +
75370 * @memberOf _ +
75371 * @since 0.1.0 +
75372 * @category Function +
75373 * @param {Function} func The function to restrict. +
75374 * @returns {Function} Returns the new restricted function. +
75375 * @example +
75376 * +
75377 * var initialize = _.once(createApplication); +
75378 * initialize(); +
75379 * initialize(); +
75380 * // => `createApplication` is invoked once +
75381 */ +
75382 function once(func) { +
75383 return before(2, func); +
75384 } +
75385 +
75386 /** +
75387 * Creates a function that invokes `func` with its arguments transformed. +
75388 * +
75389 * @static +
75390 * @since 4.0.0 +
75391 * @memberOf _ +
75392 * @category Function +
75393 * @param {Function} func The function to wrap. +
75394 * @param {...(Function|Function[])} [transforms=[_.identity]] +
75395 * The argument transforms. +
75396 * @returns {Function} Returns the new function. +
75397 * @example +
75398 * +
75399 * function doubled(n) { +
75400 * return n * 2; +
75401 * } +
75402 * +
75403 * function square(n) { +
75404 * return n * n; +
75405 * } +
75406 * +
75407 * var func = _.overArgs(function(x, y) { +
75408 * return [x, y]; +
75409 * }, [square, doubled]); +
75410 * +
75411 * func(9, 3); +
75412 * // => [81, 6] +
75413 * +
75414 * func(10, 5); +
75415 * // => [100, 10] +
75416 */ +
75417 var overArgs = castRest(function(func, transforms) { +
75418 transforms = (transforms.length == 1 && isArray(transforms[0])) +
75419 ? arrayMap(transforms[0], baseUnary(getIteratee())) +
75420 : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); +
75421 +
75422 var funcsLength = transforms.length; +
75423 return baseRest(function(args) { +
75424 var index = -1, +
75425 length = nativeMin(args.length, funcsLength); +
75426 +
75427 while (++index < length) { +
75428 args[index] = transforms[index].call(this, args[index]); +
75429 } +
75430 return apply(func, this, args); +
75431 }); +
75432 }); +
75433 +
75434 /** +
75435 * Creates a function that invokes `func` with `partials` prepended to the +
75436 * arguments it receives. This method is like `_.bind` except it does **not** +
75437 * alter the `this` binding. +
75438 * +
75439 * The `_.partial.placeholder` value, which defaults to `_` in monolithic +
75440 * builds, may be used as a placeholder for partially applied arguments. +
75441 * +
75442 * **Note:** This method doesn't set the "length" property of partially +
75443 * applied functions. +
75444 * +
75445 * @static +
75446 * @memberOf _ +
75447 * @since 0.2.0 +
75448 * @category Function +
75449 * @param {Function} func The function to partially apply arguments to. +
75450 * @param {...*} [partials] The arguments to be partially applied. +
75451 * @returns {Function} Returns the new partially applied function. +
75452 * @example +
75453 * +
75454 * function greet(greeting, name) { +
75455 * return greeting + ' ' + name; +
75456 * } +
75457 * +
75458 * var sayHelloTo = _.partial(greet, 'hello'); +
75459 * sayHelloTo('fred'); +
75460 * // => 'hello fred' +
75461 * +
75462 * // Partially applied with placeholders. +
75463 * var greetFred = _.partial(greet, _, 'fred'); +
75464 * greetFred('hi'); +
75465 * // => 'hi fred' +
75466 */ +
75467 var partial = baseRest(function(func, partials) { +
75468 var holders = replaceHolders(partials, getHolder(partial)); +
75469 return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); +
75470 }); +
75471 +
75472 /** +
75473 * This method is like `_.partial` except that partially applied arguments +
75474 * are appended to the arguments it receives. +
75475 * +
75476 * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic +
75477 * builds, may be used as a placeholder for partially applied arguments. +
75478 * +
75479 * **Note:** This method doesn't set the "length" property of partially +
75480 * applied functions. +
75481 * +
75482 * @static +
75483 * @memberOf _ +
75484 * @since 1.0.0 +
75485 * @category Function +
75486 * @param {Function} func The function to partially apply arguments to. +
75487 * @param {...*} [partials] The arguments to be partially applied. +
75488 * @returns {Function} Returns the new partially applied function. +
75489 * @example +
75490 * +
75491 * function greet(greeting, name) { +
75492 * return greeting + ' ' + name; +
75493 * } +
75494 * +
75495 * var greetFred = _.partialRight(greet, 'fred'); +
75496 * greetFred('hi'); +
75497 * // => 'hi fred' +
75498 * +
75499 * // Partially applied with placeholders. +
75500 * var sayHelloTo = _.partialRight(greet, 'hello', _); +
75501 * sayHelloTo('fred'); +
75502 * // => 'hello fred' +
75503 */ +
75504 var partialRight = baseRest(function(func, partials) { +
75505 var holders = replaceHolders(partials, getHolder(partialRight)); +
75506 return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); +
75507 }); +
75508 +
75509 /** +
75510 * Creates a function that invokes `func` with arguments arranged according +
75511 * to the specified `indexes` where the argument value at the first index is +
75512 * provided as the first argument, the argument value at the second index is +
75513 * provided as the second argument, and so on. +
75514 * +
75515 * @static +
75516 * @memberOf _ +
75517 * @since 3.0.0 +
75518 * @category Function +
75519 * @param {Function} func The function to rearrange arguments for. +
75520 * @param {...(number|number[])} indexes The arranged argument indexes. +
75521 * @returns {Function} Returns the new function. +
75522 * @example +
75523 * +
75524 * var rearged = _.rearg(function(a, b, c) { +
75525 * return [a, b, c]; +
75526 * }, [2, 0, 1]); +
75527 * +
75528 * rearged('b', 'c', 'a') +
75529 * // => ['a', 'b', 'c'] +
75530 */ +
75531 var rearg = flatRest(function(func, indexes) { +
75532 return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); +
75533 }); +
75534 +
75535 /** +
75536 * Creates a function that invokes `func` with the `this` binding of the +
75537 * created function and arguments from `start` and beyond provided as +
75538 * an array. +
75539 * +
75540 * **Note:** This method is based on the +
75541 * [rest parameter](https://mdn.io/rest_parameters). +
75542 * +
75543 * @static +
75544 * @memberOf _ +
75545 * @since 4.0.0 +
75546 * @category Function +
75547 * @param {Function} func The function to apply a rest parameter to. +
75548 * @param {number} [start=func.length-1] The start position of the rest parameter. +
75549 * @returns {Function} Returns the new function. +
75550 * @example +
75551 * +
75552 * var say = _.rest(function(what, names) { +
75553 * return what + ' ' + _.initial(names).join(', ') + +
75554 * (_.size(names) > 1 ? ', & ' : '') + _.last(names); +
75555 * }); +
75556 * +
75557 * say('hello', 'fred', 'barney', 'pebbles'); +
75558 * // => 'hello fred, barney, & pebbles' +
75559 */ +
75560 function rest(func, start) { +
75561 if (typeof func != 'function') { +
75562 throw new TypeError(FUNC_ERROR_TEXT); +
75563 } +
75564 start = start === undefined ? start : toInteger(start); +
75565 return baseRest(func, start); +
75566 } +
75567 +
75568 /** +
75569 * Creates a function that invokes `func` with the `this` binding of the +
75570 * create function and an array of arguments much like +
75571 * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). +
75572 * +
75573 * **Note:** This method is based on the +
75574 * [spread operator](https://mdn.io/spread_operator). +
75575 * +
75576 * @static +
75577 * @memberOf _ +
75578 * @since 3.2.0 +
75579 * @category Function +
75580 * @param {Function} func The function to spread arguments over. +
75581 * @param {number} [start=0] The start position of the spread. +
75582 * @returns {Function} Returns the new function. +
75583 * @example +
75584 * +
75585 * var say = _.spread(function(who, what) { +
75586 * return who + ' says ' + what; +
75587 * }); +
75588 * +
75589 * say(['fred', 'hello']); +
75590 * // => 'fred says hello' +
75591 * +
75592 * var numbers = Promise.all([ +
75593 * Promise.resolve(40), +
75594 * Promise.resolve(36) +
75595 * ]); +
75596 * +
75597 * numbers.then(_.spread(function(x, y) { +
75598 * return x + y; +
75599 * })); +
75600 * // => a Promise of 76 +
75601 */ +
75602 function spread(func, start) { +
75603 if (typeof func != 'function') { +
75604 throw new TypeError(FUNC_ERROR_TEXT); +
75605 } +
75606 start = start == null ? 0 : nativeMax(toInteger(start), 0); +
75607 return baseRest(function(args) { +
75608 var array = args[start], +
75609 otherArgs = castSlice(args, 0, start); +
75610 +
75611 if (array) { +
75612 arrayPush(otherArgs, array); +
75613 } +
75614 return apply(func, this, otherArgs); +
75615 }); +
75616 } +
75617 +
75618 /** +
75619 * Creates a throttled function that only invokes `func` at most once per +
75620 * every `wait` milliseconds. The throttled function comes with a `cancel` +
75621 * method to cancel delayed `func` invocations and a `flush` method to +
75622 * immediately invoke them. Provide `options` to indicate whether `func` +
75623 * should be invoked on the leading and/or trailing edge of the `wait` +
75624 * timeout. The `func` is invoked with the last arguments provided to the +
75625 * throttled function. Subsequent calls to the throttled function return the +
75626 * result of the last `func` invocation. +
75627 * +
75628 * **Note:** If `leading` and `trailing` options are `true`, `func` is +
75629 * invoked on the trailing edge of the timeout only if the throttled function +
75630 * is invoked more than once during the `wait` timeout. +
75631 * +
75632 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +
75633 * until to the next tick, similar to `setTimeout` with a timeout of `0`. +
75634 * +
75635 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +
75636 * for details over the differences between `_.throttle` and `_.debounce`. +
75637 * +
75638 * @static +
75639 * @memberOf _ +
75640 * @since 0.1.0 +
75641 * @category Function +
75642 * @param {Function} func The function to throttle. +
75643 * @param {number} [wait=0] The number of milliseconds to throttle invocations to. +
75644 * @param {Object} [options={}] The options object. +
75645 * @param {boolean} [options.leading=true] +
75646 * Specify invoking on the leading edge of the timeout. +
75647 * @param {boolean} [options.trailing=true] +
75648 * Specify invoking on the trailing edge of the timeout. +
75649 * @returns {Function} Returns the new throttled function. +
75650 * @example +
75651 * +
75652 * // Avoid excessively updating the position while scrolling. +
75653 * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); +
75654 * +
75655 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. +
75656 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); +
75657 * jQuery(element).on('click', throttled); +
75658 * +
75659 * // Cancel the trailing throttled invocation. +
75660 * jQuery(window).on('popstate', throttled.cancel); +
75661 */ +
75662 function throttle(func, wait, options) { +
75663 var leading = true, +
75664 trailing = true; +
75665 +
75666 if (typeof func != 'function') { +
75667 throw new TypeError(FUNC_ERROR_TEXT); +
75668 } +
75669 if (isObject(options)) { +
75670 leading = 'leading' in options ? !!options.leading : leading; +
75671 trailing = 'trailing' in options ? !!options.trailing : trailing; +
75672 } +
75673 return debounce(func, wait, { +
75674 'leading': leading, +
75675 'maxWait': wait, +
75676 'trailing': trailing +
75677 }); +
75678 } +
75679 +
75680 /** +
75681 * Creates a function that accepts up to one argument, ignoring any +
75682 * additional arguments. +
75683 * +
75684 * @static +
75685 * @memberOf _ +
75686 * @since 4.0.0 +
75687 * @category Function +
75688 * @param {Function} func The function to cap arguments for. +
75689 * @returns {Function} Returns the new capped function. +
75690 * @example +
75691 * +
75692 * _.map(['6', '8', '10'], _.unary(parseInt)); +
75693 * // => [6, 8, 10] +
75694 */ +
75695 function unary(func) { +
75696 return ary(func, 1); +
75697 } +
75698 +
75699 /** +
75700 * Creates a function that provides `value` to `wrapper` as its first +
75701 * argument. Any additional arguments provided to the function are appended +
75702 * to those provided to the `wrapper`. The wrapper is invoked with the `this` +
75703 * binding of the created function. +
75704 * +
75705 * @static +
75706 * @memberOf _ +
75707 * @since 0.1.0 +
75708 * @category Function +
75709 * @param {*} value The value to wrap. +
75710 * @param {Function} [wrapper=identity] The wrapper function. +
75711 * @returns {Function} Returns the new function. +
75712 * @example +
75713 * +
75714 * var p = _.wrap(_.escape, function(func, text) { +
75715 * return '<p>' + func(text) + '</p>'; +
75716 * }); +
75717 * +
75718 * p('fred, barney, & pebbles'); +
75719 * // => '<p>fred, barney, &amp; pebbles</p>' +
75720 */ +
75721 function wrap(value, wrapper) { +
75722 return partial(castFunction(wrapper), value); +
75723 } +
75724 +
75725 /*------------------------------------------------------------------------*/ +
75726 +
75727 /** +
75728 * Casts `value` as an array if it's not one. +
75729 * +
75730 * @static +
75731 * @memberOf _ +
75732 * @since 4.4.0 +
75733 * @category Lang +
75734 * @param {*} value The value to inspect. +
75735 * @returns {Array} Returns the cast array. +
75736 * @example +
75737 * +
75738 * _.castArray(1); +
75739 * // => [1] +
75740 * +
75741 * _.castArray({ 'a': 1 }); +
75742 * // => [{ 'a': 1 }] +
75743 * +
75744 * _.castArray('abc'); +
75745 * // => ['abc'] +
75746 * +
75747 * _.castArray(null); +
75748 * // => [null] +
75749 * +
75750 * _.castArray(undefined); +
75751 * // => [undefined] +
75752 * +
75753 * _.castArray(); +
75754 * // => [] +
75755 * +
75756 * var array = [1, 2, 3]; +
75757 * console.log(_.castArray(array) === array); +
75758 * // => true +
75759 */ +
75760 function castArray() { +
75761 if (!arguments.length) { +
75762 return []; +
75763 } +
75764 var value = arguments[0]; +
75765 return isArray(value) ? value : [value]; +
75766 } +
75767 +
75768 /** +
75769 * Creates a shallow clone of `value`. +
75770 * +
75771 * **Note:** This method is loosely based on the +
75772 * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) +
75773 * and supports cloning arrays, array buffers, booleans, date objects, maps, +
75774 * numbers, `Object` objects, regexes, sets, strings, symbols, and typed +
75775 * arrays. The own enumerable properties of `arguments` objects are cloned +
75776 * as plain objects. An empty object is returned for uncloneable values such +
75777 * as error objects, functions, DOM nodes, and WeakMaps. +
75778 * +
75779 * @static +
75780 * @memberOf _ +
75781 * @since 0.1.0 +
75782 * @category Lang +
75783 * @param {*} value The value to clone. +
75784 * @returns {*} Returns the cloned value. +
75785 * @see _.cloneDeep +
75786 * @example +
75787 * +
75788 * var objects = [{ 'a': 1 }, { 'b': 2 }]; +
75789 * +
75790 * var shallow = _.clone(objects); +
75791 * console.log(shallow[0] === objects[0]); +
75792 * // => true +
75793 */ +
75794 function clone(value) { +
75795 return baseClone(value, CLONE_SYMBOLS_FLAG); +
75796 } +
75797 +
75798 /** +
75799 * This method is like `_.clone` except that it accepts `customizer` which +
75800 * is invoked to produce the cloned value. If `customizer` returns `undefined`, +
75801 * cloning is handled by the method instead. The `customizer` is invoked with +
75802 * up to four arguments; (value [, index|key, object, stack]). +
75803 * +
75804 * @static +
75805 * @memberOf _ +
75806 * @since 4.0.0 +
75807 * @category Lang +
75808 * @param {*} value The value to clone. +
75809 * @param {Function} [customizer] The function to customize cloning. +
75810 * @returns {*} Returns the cloned value. +
75811 * @see _.cloneDeepWith +
75812 * @example +
75813 * +
75814 * function customizer(value) { +
75815 * if (_.isElement(value)) { +
75816 * return value.cloneNode(false); +
75817 * } +
75818 * } +
75819 * +
75820 * var el = _.cloneWith(document.body, customizer); +
75821 * +
75822 * console.log(el === document.body); +
75823 * // => false +
75824 * console.log(el.nodeName); +
75825 * // => 'BODY' +
75826 * console.log(el.childNodes.length); +
75827 * // => 0 +
75828 */ +
75829 function cloneWith(value, customizer) { +
75830 customizer = typeof customizer == 'function' ? customizer : undefined; +
75831 return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); +
75832 } +
75833 +
75834 /** +
75835 * This method is like `_.clone` except that it recursively clones `value`. +
75836 * +
75837 * @static +
75838 * @memberOf _ +
75839 * @since 1.0.0 +
75840 * @category Lang +
75841 * @param {*} value The value to recursively clone. +
75842 * @returns {*} Returns the deep cloned value. +
75843 * @see _.clone +
75844 * @example +
75845 * +
75846 * var objects = [{ 'a': 1 }, { 'b': 2 }]; +
75847 * +
75848 * var deep = _.cloneDeep(objects); +
75849 * console.log(deep[0] === objects[0]); +
75850 * // => false +
75851 */ +
75852 function cloneDeep(value) { +
75853 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +
75854 } +
75855 +
75856 /** +
75857 * This method is like `_.cloneWith` except that it recursively clones `value`. +
75858 * +
75859 * @static +
75860 * @memberOf _ +
75861 * @since 4.0.0 +
75862 * @category Lang +
75863 * @param {*} value The value to recursively clone. +
75864 * @param {Function} [customizer] The function to customize cloning. +
75865 * @returns {*} Returns the deep cloned value. +
75866 * @see _.cloneWith +
75867 * @example +
75868 * +
75869 * function customizer(value) { +
75870 * if (_.isElement(value)) { +
75871 * return value.cloneNode(true); +
75872 * } +
75873 * } +
75874 * +
75875 * var el = _.cloneDeepWith(document.body, customizer); +
75876 * +
75877 * console.log(el === document.body); +
75878 * // => false +
75879 * console.log(el.nodeName); +
75880 * // => 'BODY' +
75881 * console.log(el.childNodes.length); +
75882 * // => 20 +
75883 */ +
75884 function cloneDeepWith(value, customizer) { +
75885 customizer = typeof customizer == 'function' ? customizer : undefined; +
75886 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); +
75887 } +
75888 +
75889 /** +
75890 * Checks if `object` conforms to `source` by invoking the predicate +
75891 * properties of `source` with the corresponding property values of `object`. +
75892 * +
75893 * **Note:** This method is equivalent to `_.conforms` when `source` is +
75894 * partially applied. +
75895 * +
75896 * @static +
75897 * @memberOf _ +
75898 * @since 4.14.0 +
75899 * @category Lang +
75900 * @param {Object} object The object to inspect. +
75901 * @param {Object} source The object of property predicates to conform to. +
75902 * @returns {boolean} Returns `true` if `object` conforms, else `false`. +
75903 * @example +
75904 * +
75905 * var object = { 'a': 1, 'b': 2 }; +
75906 * +
75907 * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); +
75908 * // => true +
75909 * +
75910 * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); +
75911 * // => false +
75912 */ +
75913 function conformsTo(object, source) { +
75914 return source == null || baseConformsTo(object, source, keys(source)); +
75915 } +
75916 +
75917 /** +
75918 * Performs a +
75919 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
75920 * comparison between two values to determine if they are equivalent. +
75921 * +
75922 * @static +
75923 * @memberOf _ +
75924 * @since 4.0.0 +
75925 * @category Lang +
75926 * @param {*} value The value to compare. +
75927 * @param {*} other The other value to compare. +
75928 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
75929 * @example +
75930 * +
75931 * var object = { 'a': 1 }; +
75932 * var other = { 'a': 1 }; +
75933 * +
75934 * _.eq(object, object); +
75935 * // => true +
75936 * +
75937 * _.eq(object, other); +
75938 * // => false +
75939 * +
75940 * _.eq('a', 'a'); +
75941 * // => true +
75942 * +
75943 * _.eq('a', Object('a')); +
75944 * // => false +
75945 * +
75946 * _.eq(NaN, NaN); +
75947 * // => true +
75948 */ +
75949 function eq(value, other) { +
75950 return value === other || (value !== value && other !== other); +
75951 } +
75952 +
75953 /** +
75954 * Checks if `value` is greater than `other`. +
75955 * +
75956 * @static +
75957 * @memberOf _ +
75958 * @since 3.9.0 +
75959 * @category Lang +
75960 * @param {*} value The value to compare. +
75961 * @param {*} other The other value to compare. +
75962 * @returns {boolean} Returns `true` if `value` is greater than `other`, +
75963 * else `false`. +
75964 * @see _.lt +
75965 * @example +
75966 * +
75967 * _.gt(3, 1); +
75968 * // => true +
75969 * +
75970 * _.gt(3, 3); +
75971 * // => false +
75972 * +
75973 * _.gt(1, 3); +
75974 * // => false +
75975 */ +
75976 var gt = createRelationalOperation(baseGt); +
75977 +
75978 /** +
75979 * Checks if `value` is greater than or equal to `other`. +
75980 * +
75981 * @static +
75982 * @memberOf _ +
75983 * @since 3.9.0 +
75984 * @category Lang +
75985 * @param {*} value The value to compare. +
75986 * @param {*} other The other value to compare. +
75987 * @returns {boolean} Returns `true` if `value` is greater than or equal to +
75988 * `other`, else `false`. +
75989 * @see _.lte +
75990 * @example +
75991 * +
75992 * _.gte(3, 1); +
75993 * // => true +
75994 * +
75995 * _.gte(3, 3); +
75996 * // => true +
75997 * +
75998 * _.gte(1, 3); +
75999 * // => false +
76000 */ +
76001 var gte = createRelationalOperation(function(value, other) { +
76002 return value >= other; +
76003 }); +
76004 +
76005 /** +
76006 * Checks if `value` is likely an `arguments` object. +
76007 * +
76008 * @static +
76009 * @memberOf _ +
76010 * @since 0.1.0 +
76011 * @category Lang +
76012 * @param {*} value The value to check. +
76013 * @returns {boolean} Returns `true` if `value` is an `arguments` object, +
76014 * else `false`. +
76015 * @example +
76016 * +
76017 * _.isArguments(function() { return arguments; }()); +
76018 * // => true +
76019 * +
76020 * _.isArguments([1, 2, 3]); +
76021 * // => false +
76022 */ +
76023 var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { +
76024 return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && +
76025 !propertyIsEnumerable.call(value, 'callee'); +
76026 }; +
76027 +
76028 /** +
76029 * Checks if `value` is classified as an `Array` object. +
76030 * +
76031 * @static +
76032 * @memberOf _ +
76033 * @since 0.1.0 +
76034 * @category Lang +
76035 * @param {*} value The value to check. +
76036 * @returns {boolean} Returns `true` if `value` is an array, else `false`. +
76037 * @example +
76038 * +
76039 * _.isArray([1, 2, 3]); +
76040 * // => true +
76041 * +
76042 * _.isArray(document.body.children); +
76043 * // => false +
76044 * +
76045 * _.isArray('abc'); +
76046 * // => false +
76047 * +
76048 * _.isArray(_.noop); +
76049 * // => false +
76050 */ +
76051 var isArray = Array.isArray; +
76052 +
76053 /** +
76054 * Checks if `value` is classified as an `ArrayBuffer` object. +
76055 * +
76056 * @static +
76057 * @memberOf _ +
76058 * @since 4.3.0 +
76059 * @category Lang +
76060 * @param {*} value The value to check. +
76061 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +
76062 * @example +
76063 * +
76064 * _.isArrayBuffer(new ArrayBuffer(2)); +
76065 * // => true +
76066 * +
76067 * _.isArrayBuffer(new Array(2)); +
76068 * // => false +
76069 */ +
76070 var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; +
76071 +
76072 /** +
76073 * Checks if `value` is array-like. A value is considered array-like if it's +
76074 * not a function and has a `value.length` that's an integer greater than or +
76075 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. +
76076 * +
76077 * @static +
76078 * @memberOf _ +
76079 * @since 4.0.0 +
76080 * @category Lang +
76081 * @param {*} value The value to check. +
76082 * @returns {boolean} Returns `true` if `value` is array-like, else `false`. +
76083 * @example +
76084 * +
76085 * _.isArrayLike([1, 2, 3]); +
76086 * // => true +
76087 * +
76088 * _.isArrayLike(document.body.children); +
76089 * // => true +
76090 * +
76091 * _.isArrayLike('abc'); +
76092 * // => true +
76093 * +
76094 * _.isArrayLike(_.noop); +
76095 * // => false +
76096 */ +
76097 function isArrayLike(value) { +
76098 return value != null && isLength(value.length) && !isFunction(value); +
76099 } +
76100 +
76101 /** +
76102 * This method is like `_.isArrayLike` except that it also checks if `value` +
76103 * is an object. +
76104 * +
76105 * @static +
76106 * @memberOf _ +
76107 * @since 4.0.0 +
76108 * @category Lang +
76109 * @param {*} value The value to check. +
76110 * @returns {boolean} Returns `true` if `value` is an array-like object, +
76111 * else `false`. +
76112 * @example +
76113 * +
76114 * _.isArrayLikeObject([1, 2, 3]); +
76115 * // => true +
76116 * +
76117 * _.isArrayLikeObject(document.body.children); +
76118 * // => true +
76119 * +
76120 * _.isArrayLikeObject('abc'); +
76121 * // => false +
76122 * +
76123 * _.isArrayLikeObject(_.noop); +
76124 * // => false +
76125 */ +
76126 function isArrayLikeObject(value) { +
76127 return isObjectLike(value) && isArrayLike(value); +
76128 } +
76129 +
76130 /** +
76131 * Checks if `value` is classified as a boolean primitive or object. +
76132 * +
76133 * @static +
76134 * @memberOf _ +
76135 * @since 0.1.0 +
76136 * @category Lang +
76137 * @param {*} value The value to check. +
76138 * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. +
76139 * @example +
76140 * +
76141 * _.isBoolean(false); +
76142 * // => true +
76143 * +
76144 * _.isBoolean(null); +
76145 * // => false +
76146 */ +
76147 function isBoolean(value) { +
76148 return value === true || value === false || +
76149 (isObjectLike(value) && baseGetTag(value) == boolTag); +
76150 } +
76151 +
76152 /** +
76153 * Checks if `value` is a buffer. +
76154 * +
76155 * @static +
76156 * @memberOf _ +
76157 * @since 4.3.0 +
76158 * @category Lang +
76159 * @param {*} value The value to check. +
76160 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. +
76161 * @example +
76162 * +
76163 * _.isBuffer(new Buffer(2)); +
76164 * // => true +
76165 * +
76166 * _.isBuffer(new Uint8Array(2)); +
76167 * // => false +
76168 */ +
76169 var isBuffer = nativeIsBuffer || stubFalse; +
76170 +
76171 /** +
76172 * Checks if `value` is classified as a `Date` object. +
76173 * +
76174 * @static +
76175 * @memberOf _ +
76176 * @since 0.1.0 +
76177 * @category Lang +
76178 * @param {*} value The value to check. +
76179 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +
76180 * @example +
76181 * +
76182 * _.isDate(new Date); +
76183 * // => true +
76184 * +
76185 * _.isDate('Mon April 23 2012'); +
76186 * // => false +
76187 */ +
76188 var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; +
76189 +
76190 /** +
76191 * Checks if `value` is likely a DOM element. +
76192 * +
76193 * @static +
76194 * @memberOf _ +
76195 * @since 0.1.0 +
76196 * @category Lang +
76197 * @param {*} value The value to check. +
76198 * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. +
76199 * @example +
76200 * +
76201 * _.isElement(document.body); +
76202 * // => true +
76203 * +
76204 * _.isElement('<body>'); +
76205 * // => false +
76206 */ +
76207 function isElement(value) { +
76208 return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); +
76209 } +
76210 +
76211 /** +
76212 * Checks if `value` is an empty object, collection, map, or set. +
76213 * +
76214 * Objects are considered empty if they have no own enumerable string keyed +
76215 * properties. +
76216 * +
76217 * Array-like values such as `arguments` objects, arrays, buffers, strings, or +
76218 * jQuery-like collections are considered empty if they have a `length` of `0`. +
76219 * Similarly, maps and sets are considered empty if they have a `size` of `0`. +
76220 * +
76221 * @static +
76222 * @memberOf _ +
76223 * @since 0.1.0 +
76224 * @category Lang +
76225 * @param {*} value The value to check. +
76226 * @returns {boolean} Returns `true` if `value` is empty, else `false`. +
76227 * @example +
76228 * +
76229 * _.isEmpty(null); +
76230 * // => true +
76231 * +
76232 * _.isEmpty(true); +
76233 * // => true +
76234 * +
76235 * _.isEmpty(1); +
76236 * // => true +
76237 * +
76238 * _.isEmpty([1, 2, 3]); +
76239 * // => false +
76240 * +
76241 * _.isEmpty({ 'a': 1 }); +
76242 * // => false +
76243 */ +
76244 function isEmpty(value) { +
76245 if (value == null) { +
76246 return true; +
76247 } +
76248 if (isArrayLike(value) && +
76249 (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || +
76250 isBuffer(value) || isTypedArray(value) || isArguments(value))) { +
76251 return !value.length; +
76252 } +
76253 var tag = getTag(value); +
76254 if (tag == mapTag || tag == setTag) { +
76255 return !value.size; +
76256 } +
76257 if (isPrototype(value)) { +
76258 return !baseKeys(value).length; +
76259 } +
76260 for (var key in value) { +
76261 if (hasOwnProperty.call(value, key)) { +
76262 return false; +
76263 } +
76264 } +
76265 return true; +
76266 } +
76267 +
76268 /** +
76269 * Performs a deep comparison between two values to determine if they are +
76270 * equivalent. +
76271 * +
76272 * **Note:** This method supports comparing arrays, array buffers, booleans, +
76273 * date objects, error objects, maps, numbers, `Object` objects, regexes, +
76274 * sets, strings, symbols, and typed arrays. `Object` objects are compared +
76275 * by their own, not inherited, enumerable properties. Functions and DOM +
76276 * nodes are compared by strict equality, i.e. `===`. +
76277 * +
76278 * @static +
76279 * @memberOf _ +
76280 * @since 0.1.0 +
76281 * @category Lang +
76282 * @param {*} value The value to compare. +
76283 * @param {*} other The other value to compare. +
76284 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
76285 * @example +
76286 * +
76287 * var object = { 'a': 1 }; +
76288 * var other = { 'a': 1 }; +
76289 * +
76290 * _.isEqual(object, other); +
76291 * // => true +
76292 * +
76293 * object === other; +
76294 * // => false +
76295 */ +
76296 function isEqual(value, other) { +
76297 return baseIsEqual(value, other); +
76298 } +
76299 +
76300 /** +
76301 * This method is like `_.isEqual` except that it accepts `customizer` which +
76302 * is invoked to compare values. If `customizer` returns `undefined`, comparisons +
76303 * are handled by the method instead. The `customizer` is invoked with up to +
76304 * six arguments: (objValue, othValue [, index|key, object, other, stack]). +
76305 * +
76306 * @static +
76307 * @memberOf _ +
76308 * @since 4.0.0 +
76309 * @category Lang +
76310 * @param {*} value The value to compare. +
76311 * @param {*} other The other value to compare. +
76312 * @param {Function} [customizer] The function to customize comparisons. +
76313 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
76314 * @example +
76315 * +
76316 * function isGreeting(value) { +
76317 * return /^h(?:i|ello)$/.test(value); +
76318 * } +
76319 * +
76320 * function customizer(objValue, othValue) { +
76321 * if (isGreeting(objValue) && isGreeting(othValue)) { +
76322 * return true; +
76323 * } +
76324 * } +
76325 * +
76326 * var array = ['hello', 'goodbye']; +
76327 * var other = ['hi', 'goodbye']; +
76328 * +
76329 * _.isEqualWith(array, other, customizer); +
76330 * // => true +
76331 */ +
76332 function isEqualWith(value, other, customizer) { +
76333 customizer = typeof customizer == 'function' ? customizer : undefined; +
76334 var result = customizer ? customizer(value, other) : undefined; +
76335 return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; +
76336 } +
76337 +
76338 /** +
76339 * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, +
76340 * `SyntaxError`, `TypeError`, or `URIError` object. +
76341 * +
76342 * @static +
76343 * @memberOf _ +
76344 * @since 3.0.0 +
76345 * @category Lang +
76346 * @param {*} value The value to check. +
76347 * @returns {boolean} Returns `true` if `value` is an error object, else `false`. +
76348 * @example +
76349 * +
76350 * _.isError(new Error); +
76351 * // => true +
76352 * +
76353 * _.isError(Error); +
76354 * // => false +
76355 */ +
76356 function isError(value) { +
76357 if (!isObjectLike(value)) { +
76358 return false; +
76359 } +
76360 var tag = baseGetTag(value); +
76361 return tag == errorTag || tag == domExcTag || +
76362 (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); +
76363 } +
76364 +
76365 /** +
76366 * Checks if `value` is a finite primitive number. +
76367 * +
76368 * **Note:** This method is based on +
76369 * [`Number.isFinite`](https://mdn.io/Number/isFinite). +
76370 * +
76371 * @static +
76372 * @memberOf _ +
76373 * @since 0.1.0 +
76374 * @category Lang +
76375 * @param {*} value The value to check. +
76376 * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. +
76377 * @example +
76378 * +
76379 * _.isFinite(3); +
76380 * // => true +
76381 * +
76382 * _.isFinite(Number.MIN_VALUE); +
76383 * // => true +
76384 * +
76385 * _.isFinite(Infinity); +
76386 * // => false +
76387 * +
76388 * _.isFinite('3'); +
76389 * // => false +
76390 */ +
76391 function isFinite(value) { +
76392 return typeof value == 'number' && nativeIsFinite(value); +
76393 } +
76394 +
76395 /** +
76396 * Checks if `value` is classified as a `Function` object. +
76397 * +
76398 * @static +
76399 * @memberOf _ +
76400 * @since 0.1.0 +
76401 * @category Lang +
76402 * @param {*} value The value to check. +
76403 * @returns {boolean} Returns `true` if `value` is a function, else `false`. +
76404 * @example +
76405 * +
76406 * _.isFunction(_); +
76407 * // => true +
76408 * +
76409 * _.isFunction(/abc/); +
76410 * // => false +
76411 */ +
76412 function isFunction(value) { +
76413 if (!isObject(value)) { +
76414 return false; +
76415 } +
76416 // The use of `Object#toString` avoids issues with the `typeof` operator +
76417 // in Safari 9 which returns 'object' for typed arrays and other constructors. +
76418 var tag = baseGetTag(value); +
76419 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +
76420 } +
76421 +
76422 /** +
76423 * Checks if `value` is an integer. +
76424 * +
76425 * **Note:** This method is based on +
76426 * [`Number.isInteger`](https://mdn.io/Number/isInteger). +
76427 * +
76428 * @static +
76429 * @memberOf _ +
76430 * @since 4.0.0 +
76431 * @category Lang +
76432 * @param {*} value The value to check. +
76433 * @returns {boolean} Returns `true` if `value` is an integer, else `false`. +
76434 * @example +
76435 * +
76436 * _.isInteger(3); +
76437 * // => true +
76438 * +
76439 * _.isInteger(Number.MIN_VALUE); +
76440 * // => false +
76441 * +
76442 * _.isInteger(Infinity); +
76443 * // => false +
76444 * +
76445 * _.isInteger('3'); +
76446 * // => false +
76447 */ +
76448 function isInteger(value) { +
76449 return typeof value == 'number' && value == toInteger(value); +
76450 } +
76451 +
76452 /** +
76453 * Checks if `value` is a valid array-like length. +
76454 * +
76455 * **Note:** This method is loosely based on +
76456 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +
76457 * +
76458 * @static +
76459 * @memberOf _ +
76460 * @since 4.0.0 +
76461 * @category Lang +
76462 * @param {*} value The value to check. +
76463 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. +
76464 * @example +
76465 * +
76466 * _.isLength(3); +
76467 * // => true +
76468 * +
76469 * _.isLength(Number.MIN_VALUE); +
76470 * // => false +
76471 * +
76472 * _.isLength(Infinity); +
76473 * // => false +
76474 * +
76475 * _.isLength('3'); +
76476 * // => false +
76477 */ +
76478 function isLength(value) { +
76479 return typeof value == 'number' && +
76480 value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +
76481 } +
76482 +
76483 /** +
76484 * Checks if `value` is the +
76485 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) +
76486 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) +
76487 * +
76488 * @static +
76489 * @memberOf _ +
76490 * @since 0.1.0 +
76491 * @category Lang +
76492 * @param {*} value The value to check. +
76493 * @returns {boolean} Returns `true` if `value` is an object, else `false`. +
76494 * @example +
76495 * +
76496 * _.isObject({}); +
76497 * // => true +
76498 * +
76499 * _.isObject([1, 2, 3]); +
76500 * // => true +
76501 * +
76502 * _.isObject(_.noop); +
76503 * // => true +
76504 * +
76505 * _.isObject(null); +
76506 * // => false +
76507 */ +
76508 function isObject(value) { +
76509 var type = typeof value; +
76510 return value != null && (type == 'object' || type == 'function'); +
76511 } +
76512 +
76513 /** +
76514 * Checks if `value` is object-like. A value is object-like if it's not `null` +
76515 * and has a `typeof` result of "object". +
76516 * +
76517 * @static +
76518 * @memberOf _ +
76519 * @since 4.0.0 +
76520 * @category Lang +
76521 * @param {*} value The value to check. +
76522 * @returns {boolean} Returns `true` if `value` is object-like, else `false`. +
76523 * @example +
76524 * +
76525 * _.isObjectLike({}); +
76526 * // => true +
76527 * +
76528 * _.isObjectLike([1, 2, 3]); +
76529 * // => true +
76530 * +
76531 * _.isObjectLike(_.noop); +
76532 * // => false +
76533 * +
76534 * _.isObjectLike(null); +
76535 * // => false +
76536 */ +
76537 function isObjectLike(value) { +
76538 return value != null && typeof value == 'object'; +
76539 } +
76540 +
76541 /** +
76542 * Checks if `value` is classified as a `Map` object. +
76543 * +
76544 * @static +
76545 * @memberOf _ +
76546 * @since 4.3.0 +
76547 * @category Lang +
76548 * @param {*} value The value to check. +
76549 * @returns {boolean} Returns `true` if `value` is a map, else `false`. +
76550 * @example +
76551 * +
76552 * _.isMap(new Map); +
76553 * // => true +
76554 * +
76555 * _.isMap(new WeakMap); +
76556 * // => false +
76557 */ +
76558 var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; +
76559 +
76560 /** +
76561 * Performs a partial deep comparison between `object` and `source` to +
76562 * determine if `object` contains equivalent property values. +
76563 * +
76564 * **Note:** This method is equivalent to `_.matches` when `source` is +
76565 * partially applied. +
76566 * +
76567 * Partial comparisons will match empty array and empty object `source` +
76568 * values against any array or object value, respectively. See `_.isEqual` +
76569 * for a list of supported value comparisons. +
76570 * +
76571 * @static +
76572 * @memberOf _ +
76573 * @since 3.0.0 +
76574 * @category Lang +
76575 * @param {Object} object The object to inspect. +
76576 * @param {Object} source The object of property values to match. +
76577 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
76578 * @example +
76579 * +
76580 * var object = { 'a': 1, 'b': 2 }; +
76581 * +
76582 * _.isMatch(object, { 'b': 2 }); +
76583 * // => true +
76584 * +
76585 * _.isMatch(object, { 'b': 1 }); +
76586 * // => false +
76587 */ +
76588 function isMatch(object, source) { +
76589 return object === source || baseIsMatch(object, source, getMatchData(source)); +
76590 } +
76591 +
76592 /** +
76593 * This method is like `_.isMatch` except that it accepts `customizer` which +
76594 * is invoked to compare values. If `customizer` returns `undefined`, comparisons +
76595 * are handled by the method instead. The `customizer` is invoked with five +
76596 * arguments: (objValue, srcValue, index|key, object, source). +
76597 * +
76598 * @static +
76599 * @memberOf _ +
76600 * @since 4.0.0 +
76601 * @category Lang +
76602 * @param {Object} object The object to inspect. +
76603 * @param {Object} source The object of property values to match. +
76604 * @param {Function} [customizer] The function to customize comparisons. +
76605 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
76606 * @example +
76607 * +
76608 * function isGreeting(value) { +
76609 * return /^h(?:i|ello)$/.test(value); +
76610 * } +
76611 * +
76612 * function customizer(objValue, srcValue) { +
76613 * if (isGreeting(objValue) && isGreeting(srcValue)) { +
76614 * return true; +
76615 * } +
76616 * } +
76617 * +
76618 * var object = { 'greeting': 'hello' }; +
76619 * var source = { 'greeting': 'hi' }; +
76620 * +
76621 * _.isMatchWith(object, source, customizer); +
76622 * // => true +
76623 */ +
76624 function isMatchWith(object, source, customizer) { +
76625 customizer = typeof customizer == 'function' ? customizer : undefined; +
76626 return baseIsMatch(object, source, getMatchData(source), customizer); +
76627 } +
76628 +
76629 /** +
76630 * Checks if `value` is `NaN`. +
76631 * +
76632 * **Note:** This method is based on +
76633 * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as +
76634 * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for +
76635 * `undefined` and other non-number values. +
76636 * +
76637 * @static +
76638 * @memberOf _ +
76639 * @since 0.1.0 +
76640 * @category Lang +
76641 * @param {*} value The value to check. +
76642 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +
76643 * @example +
76644 * +
76645 * _.isNaN(NaN); +
76646 * // => true +
76647 * +
76648 * _.isNaN(new Number(NaN)); +
76649 * // => true +
76650 * +
76651 * isNaN(undefined); +
76652 * // => true +
76653 * +
76654 * _.isNaN(undefined); +
76655 * // => false +
76656 */ +
76657 function isNaN(value) { +
76658 // An `NaN` primitive is the only value that is not equal to itself. +
76659 // Perform the `toStringTag` check first to avoid errors with some +
76660 // ActiveX objects in IE. +
76661 return isNumber(value) && value != +value; +
76662 } +
76663 +
76664 /** +
76665 * Checks if `value` is a pristine native function. +
76666 * +
76667 * **Note:** This method can't reliably detect native functions in the presence +
76668 * of the core-js package because core-js circumvents this kind of detection. +
76669 * Despite multiple requests, the core-js maintainer has made it clear: any +
76670 * attempt to fix the detection will be obstructed. As a result, we're left +
76671 * with little choice but to throw an error. Unfortunately, this also affects +
76672 * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), +
76673 * which rely on core-js. +
76674 * +
76675 * @static +
76676 * @memberOf _ +
76677 * @since 3.0.0 +
76678 * @category Lang +
76679 * @param {*} value The value to check. +
76680 * @returns {boolean} Returns `true` if `value` is a native function, +
76681 * else `false`. +
76682 * @example +
76683 * +
76684 * _.isNative(Array.prototype.push); +
76685 * // => true +
76686 * +
76687 * _.isNative(_); +
76688 * // => false +
76689 */ +
76690 function isNative(value) { +
76691 if (isMaskable(value)) { +
76692 throw new Error(CORE_ERROR_TEXT); +
76693 } +
76694 return baseIsNative(value); +
76695 } +
76696 +
76697 /** +
76698 * Checks if `value` is `null`. +
76699 * +
76700 * @static +
76701 * @memberOf _ +
76702 * @since 0.1.0 +
76703 * @category Lang +
76704 * @param {*} value The value to check. +
76705 * @returns {boolean} Returns `true` if `value` is `null`, else `false`. +
76706 * @example +
76707 * +
76708 * _.isNull(null); +
76709 * // => true +
76710 * +
76711 * _.isNull(void 0); +
76712 * // => false +
76713 */ +
76714 function isNull(value) { +
76715 return value === null; +
76716 } +
76717 +
76718 /** +
76719 * Checks if `value` is `null` or `undefined`. +
76720 * +
76721 * @static +
76722 * @memberOf _ +
76723 * @since 4.0.0 +
76724 * @category Lang +
76725 * @param {*} value The value to check. +
76726 * @returns {boolean} Returns `true` if `value` is nullish, else `false`. +
76727 * @example +
76728 * +
76729 * _.isNil(null); +
76730 * // => true +
76731 * +
76732 * _.isNil(void 0); +
76733 * // => true +
76734 * +
76735 * _.isNil(NaN); +
76736 * // => false +
76737 */ +
76738 function isNil(value) { +
76739 return value == null; +
76740 } +
76741 +
76742 /** +
76743 * Checks if `value` is classified as a `Number` primitive or object. +
76744 * +
76745 * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are +
76746 * classified as numbers, use the `_.isFinite` method. +
76747 * +
76748 * @static +
76749 * @memberOf _ +
76750 * @since 0.1.0 +
76751 * @category Lang +
76752 * @param {*} value The value to check. +
76753 * @returns {boolean} Returns `true` if `value` is a number, else `false`. +
76754 * @example +
76755 * +
76756 * _.isNumber(3); +
76757 * // => true +
76758 * +
76759 * _.isNumber(Number.MIN_VALUE); +
76760 * // => true +
76761 * +
76762 * _.isNumber(Infinity); +
76763 * // => true +
76764 * +
76765 * _.isNumber('3'); +
76766 * // => false +
76767 */ +
76768 function isNumber(value) { +
76769 return typeof value == 'number' || +
76770 (isObjectLike(value) && baseGetTag(value) == numberTag); +
76771 } +
76772 +
76773 /** +
76774 * Checks if `value` is a plain object, that is, an object created by the +
76775 * `Object` constructor or one with a `[[Prototype]]` of `null`. +
76776 * +
76777 * @static +
76778 * @memberOf _ +
76779 * @since 0.8.0 +
76780 * @category Lang +
76781 * @param {*} value The value to check. +
76782 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. +
76783 * @example +
76784 * +
76785 * function Foo() { +
76786 * this.a = 1; +
76787 * } +
76788 * +
76789 * _.isPlainObject(new Foo); +
76790 * // => false +
76791 * +
76792 * _.isPlainObject([1, 2, 3]); +
76793 * // => false +
76794 * +
76795 * _.isPlainObject({ 'x': 0, 'y': 0 }); +
76796 * // => true +
76797 * +
76798 * _.isPlainObject(Object.create(null)); +
76799 * // => true +
76800 */ +
76801 function isPlainObject(value) { +
76802 if (!isObjectLike(value) || baseGetTag(value) != objectTag) { +
76803 return false; +
76804 } +
76805 var proto = getPrototype(value); +
76806 if (proto === null) { +
76807 return true; +
76808 } +
76809 var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; +
76810 return typeof Ctor == 'function' && Ctor instanceof Ctor && +
76811 funcToString.call(Ctor) == objectCtorString; +
76812 } +
76813 +
76814 /** +
76815 * Checks if `value` is classified as a `RegExp` object. +
76816 * +
76817 * @static +
76818 * @memberOf _ +
76819 * @since 0.1.0 +
76820 * @category Lang +
76821 * @param {*} value The value to check. +
76822 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +
76823 * @example +
76824 * +
76825 * _.isRegExp(/abc/); +
76826 * // => true +
76827 * +
76828 * _.isRegExp('/abc/'); +
76829 * // => false +
76830 */ +
76831 var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; +
76832 +
76833 /** +
76834 * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 +
76835 * double precision number which isn't the result of a rounded unsafe integer. +
76836 * +
76837 * **Note:** This method is based on +
76838 * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). +
76839 * +
76840 * @static +
76841 * @memberOf _ +
76842 * @since 4.0.0 +
76843 * @category Lang +
76844 * @param {*} value The value to check. +
76845 * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. +
76846 * @example +
76847 * +
76848 * _.isSafeInteger(3); +
76849 * // => true +
76850 * +
76851 * _.isSafeInteger(Number.MIN_VALUE); +
76852 * // => false +
76853 * +
76854 * _.isSafeInteger(Infinity); +
76855 * // => false +
76856 * +
76857 * _.isSafeInteger('3'); +
76858 * // => false +
76859 */ +
76860 function isSafeInteger(value) { +
76861 return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +
76862 } +
76863 +
76864 /** +
76865 * Checks if `value` is classified as a `Set` object. +
76866 * +
76867 * @static +
76868 * @memberOf _ +
76869 * @since 4.3.0 +
76870 * @category Lang +
76871 * @param {*} value The value to check. +
76872 * @returns {boolean} Returns `true` if `value` is a set, else `false`. +
76873 * @example +
76874 * +
76875 * _.isSet(new Set); +
76876 * // => true +
76877 * +
76878 * _.isSet(new WeakSet); +
76879 * // => false +
76880 */ +
76881 var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; +
76882 +
76883 /** +
76884 * Checks if `value` is classified as a `String` primitive or object. +
76885 * +
76886 * @static +
76887 * @since 0.1.0 +
76888 * @memberOf _ +
76889 * @category Lang +
76890 * @param {*} value The value to check. +
76891 * @returns {boolean} Returns `true` if `value` is a string, else `false`. +
76892 * @example +
76893 * +
76894 * _.isString('abc'); +
76895 * // => true +
76896 * +
76897 * _.isString(1); +
76898 * // => false +
76899 */ +
76900 function isString(value) { +
76901 return typeof value == 'string' || +
76902 (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +
76903 } +
76904 +
76905 /** +
76906 * Checks if `value` is classified as a `Symbol` primitive or object. +
76907 * +
76908 * @static +
76909 * @memberOf _ +
76910 * @since 4.0.0 +
76911 * @category Lang +
76912 * @param {*} value The value to check. +
76913 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. +
76914 * @example +
76915 * +
76916 * _.isSymbol(Symbol.iterator); +
76917 * // => true +
76918 * +
76919 * _.isSymbol('abc'); +
76920 * // => false +
76921 */ +
76922 function isSymbol(value) { +
76923 return typeof value == 'symbol' || +
76924 (isObjectLike(value) && baseGetTag(value) == symbolTag); +
76925 } +
76926 +
76927 /** +
76928 * Checks if `value` is classified as a typed array. +
76929 * +
76930 * @static +
76931 * @memberOf _ +
76932 * @since 3.0.0 +
76933 * @category Lang +
76934 * @param {*} value The value to check. +
76935 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +
76936 * @example +
76937 * +
76938 * _.isTypedArray(new Uint8Array); +
76939 * // => true +
76940 * +
76941 * _.isTypedArray([]); +
76942 * // => false +
76943 */ +
76944 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; +
76945 +
76946 /** +
76947 * Checks if `value` is `undefined`. +
76948 * +
76949 * @static +
76950 * @since 0.1.0 +
76951 * @memberOf _ +
76952 * @category Lang +
76953 * @param {*} value The value to check. +
76954 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. +
76955 * @example +
76956 * +
76957 * _.isUndefined(void 0); +
76958 * // => true +
76959 * +
76960 * _.isUndefined(null); +
76961 * // => false +
76962 */ +
76963 function isUndefined(value) { +
76964 return value === undefined; +
76965 } +
76966 +
76967 /** +
76968 * Checks if `value` is classified as a `WeakMap` object. +
76969 * +
76970 * @static +
76971 * @memberOf _ +
76972 * @since 4.3.0 +
76973 * @category Lang +
76974 * @param {*} value The value to check. +
76975 * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. +
76976 * @example +
76977 * +
76978 * _.isWeakMap(new WeakMap); +
76979 * // => true +
76980 * +
76981 * _.isWeakMap(new Map); +
76982 * // => false +
76983 */ +
76984 function isWeakMap(value) { +
76985 return isObjectLike(value) && getTag(value) == weakMapTag; +
76986 } +
76987 +
76988 /** +
76989 * Checks if `value` is classified as a `WeakSet` object. +
76990 * +
76991 * @static +
76992 * @memberOf _ +
76993 * @since 4.3.0 +
76994 * @category Lang +
76995 * @param {*} value The value to check. +
76996 * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. +
76997 * @example +
76998 * +
76999 * _.isWeakSet(new WeakSet); +
77000 * // => true +
77001 * +
77002 * _.isWeakSet(new Set); +
77003 * // => false +
77004 */ +
77005 function isWeakSet(value) { +
77006 return isObjectLike(value) && baseGetTag(value) == weakSetTag; +
77007 } +
77008 +
77009 /** +
77010 * Checks if `value` is less than `other`. +
77011 * +
77012 * @static +
77013 * @memberOf _ +
77014 * @since 3.9.0 +
77015 * @category Lang +
77016 * @param {*} value The value to compare. +
77017 * @param {*} other The other value to compare. +
77018 * @returns {boolean} Returns `true` if `value` is less than `other`, +
77019 * else `false`. +
77020 * @see _.gt +
77021 * @example +
77022 * +
77023 * _.lt(1, 3); +
77024 * // => true +
77025 * +
77026 * _.lt(3, 3); +
77027 * // => false +
77028 * +
77029 * _.lt(3, 1); +
77030 * // => false +
77031 */ +
77032 var lt = createRelationalOperation(baseLt); +
77033 +
77034 /** +
77035 * Checks if `value` is less than or equal to `other`. +
77036 * +
77037 * @static +
77038 * @memberOf _ +
77039 * @since 3.9.0 +
77040 * @category Lang +
77041 * @param {*} value The value to compare. +
77042 * @param {*} other The other value to compare. +
77043 * @returns {boolean} Returns `true` if `value` is less than or equal to +
77044 * `other`, else `false`. +
77045 * @see _.gte +
77046 * @example +
77047 * +
77048 * _.lte(1, 3); +
77049 * // => true +
77050 * +
77051 * _.lte(3, 3); +
77052 * // => true +
77053 * +
77054 * _.lte(3, 1); +
77055 * // => false +
77056 */ +
77057 var lte = createRelationalOperation(function(value, other) { +
77058 return value <= other; +
77059 }); +
77060 +
77061 /** +
77062 * Converts `value` to an array. +
77063 * +
77064 * @static +
77065 * @since 0.1.0 +
77066 * @memberOf _ +
77067 * @category Lang +
77068 * @param {*} value The value to convert. +
77069 * @returns {Array} Returns the converted array. +
77070 * @example +
77071 * +
77072 * _.toArray({ 'a': 1, 'b': 2 }); +
77073 * // => [1, 2] +
77074 * +
77075 * _.toArray('abc'); +
77076 * // => ['a', 'b', 'c'] +
77077 * +
77078 * _.toArray(1); +
77079 * // => [] +
77080 * +
77081 * _.toArray(null); +
77082 * // => [] +
77083 */ +
77084 function toArray(value) { +
77085 if (!value) { +
77086 return []; +
77087 } +
77088 if (isArrayLike(value)) { +
77089 return isString(value) ? stringToArray(value) : copyArray(value); +
77090 } +
77091 if (symIterator && value[symIterator]) { +
77092 return iteratorToArray(value[symIterator]()); +
77093 } +
77094 var tag = getTag(value), +
77095 func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); +
77096 +
77097 return func(value); +
77098 } +
77099 +
77100 /** +
77101 * Converts `value` to a finite number. +
77102 * +
77103 * @static +
77104 * @memberOf _ +
77105 * @since 4.12.0 +
77106 * @category Lang +
77107 * @param {*} value The value to convert. +
77108 * @returns {number} Returns the converted number. +
77109 * @example +
77110 * +
77111 * _.toFinite(3.2); +
77112 * // => 3.2 +
77113 * +
77114 * _.toFinite(Number.MIN_VALUE); +
77115 * // => 5e-324 +
77116 * +
77117 * _.toFinite(Infinity); +
77118 * // => 1.7976931348623157e+308 +
77119 * +
77120 * _.toFinite('3.2'); +
77121 * // => 3.2 +
77122 */ +
77123 function toFinite(value) { +
77124 if (!value) { +
77125 return value === 0 ? value : 0; +
77126 } +
77127 value = toNumber(value); +
77128 if (value === INFINITY || value === -INFINITY) { +
77129 var sign = (value < 0 ? -1 : 1); +
77130 return sign * MAX_INTEGER; +
77131 } +
77132 return value === value ? value : 0; +
77133 } +
77134 +
77135 /** +
77136 * Converts `value` to an integer. +
77137 * +
77138 * **Note:** This method is loosely based on +
77139 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). +
77140 * +
77141 * @static +
77142 * @memberOf _ +
77143 * @since 4.0.0 +
77144 * @category Lang +
77145 * @param {*} value The value to convert. +
77146 * @returns {number} Returns the converted integer. +
77147 * @example +
77148 * +
77149 * _.toInteger(3.2); +
77150 * // => 3 +
77151 * +
77152 * _.toInteger(Number.MIN_VALUE); +
77153 * // => 0 +
77154 * +
77155 * _.toInteger(Infinity); +
77156 * // => 1.7976931348623157e+308 +
77157 * +
77158 * _.toInteger('3.2'); +
77159 * // => 3 +
77160 */ +
77161 function toInteger(value) { +
77162 var result = toFinite(value), +
77163 remainder = result % 1; +
77164 +
77165 return result === result ? (remainder ? result - remainder : result) : 0; +
77166 } +
77167 +
77168 /** +
77169 * Converts `value` to an integer suitable for use as the length of an +
77170 * array-like object. +
77171 * +
77172 * **Note:** This method is based on +
77173 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +
77174 * +
77175 * @static +
77176 * @memberOf _ +
77177 * @since 4.0.0 +
77178 * @category Lang +
77179 * @param {*} value The value to convert. +
77180 * @returns {number} Returns the converted integer. +
77181 * @example +
77182 * +
77183 * _.toLength(3.2); +
77184 * // => 3 +
77185 * +
77186 * _.toLength(Number.MIN_VALUE); +
77187 * // => 0 +
77188 * +
77189 * _.toLength(Infinity); +
77190 * // => 4294967295 +
77191 * +
77192 * _.toLength('3.2'); +
77193 * // => 3 +
77194 */ +
77195 function toLength(value) { +
77196 return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; +
77197 } +
77198 +
77199 /** +
77200 * Converts `value` to a number. +
77201 * +
77202 * @static +
77203 * @memberOf _ +
77204 * @since 4.0.0 +
77205 * @category Lang +
77206 * @param {*} value The value to process. +
77207 * @returns {number} Returns the number. +
77208 * @example +
77209 * +
77210 * _.toNumber(3.2); +
77211 * // => 3.2 +
77212 * +
77213 * _.toNumber(Number.MIN_VALUE); +
77214 * // => 5e-324 +
77215 * +
77216 * _.toNumber(Infinity); +
77217 * // => Infinity +
77218 * +
77219 * _.toNumber('3.2'); +
77220 * // => 3.2 +
77221 */ +
77222 function toNumber(value) { +
77223 if (typeof value == 'number') { +
77224 return value; +
77225 } +
77226 if (isSymbol(value)) { +
77227 return NAN; +
77228 } +
77229 if (isObject(value)) { +
77230 var other = typeof value.valueOf == 'function' ? value.valueOf() : value; +
77231 value = isObject(other) ? (other + '') : other; +
77232 } +
77233 if (typeof value != 'string') { +
77234 return value === 0 ? value : +value; +
77235 } +
77236 value = value.replace(reTrim, ''); +
77237 var isBinary = reIsBinary.test(value); +
77238 return (isBinary || reIsOctal.test(value)) +
77239 ? freeParseInt(value.slice(2), isBinary ? 2 : 8) +
77240 : (reIsBadHex.test(value) ? NAN : +value); +
77241 } +
77242 +
77243 /** +
77244 * Converts `value` to a plain object flattening inherited enumerable string +
77245 * keyed properties of `value` to own properties of the plain object. +
77246 * +
77247 * @static +
77248 * @memberOf _ +
77249 * @since 3.0.0 +
77250 * @category Lang +
77251 * @param {*} value The value to convert. +
77252 * @returns {Object} Returns the converted plain object. +
77253 * @example +
77254 * +
77255 * function Foo() { +
77256 * this.b = 2; +
77257 * } +
77258 * +
77259 * Foo.prototype.c = 3; +
77260 * +
77261 * _.assign({ 'a': 1 }, new Foo); +
77262 * // => { 'a': 1, 'b': 2 } +
77263 * +
77264 * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); +
77265 * // => { 'a': 1, 'b': 2, 'c': 3 } +
77266 */ +
77267 function toPlainObject(value) { +
77268 return copyObject(value, keysIn(value)); +
77269 } +
77270 +
77271 /** +
77272 * Converts `value` to a safe integer. A safe integer can be compared and +
77273 * represented correctly. +
77274 * +
77275 * @static +
77276 * @memberOf _ +
77277 * @since 4.0.0 +
77278 * @category Lang +
77279 * @param {*} value The value to convert. +
77280 * @returns {number} Returns the converted integer. +
77281 * @example +
77282 * +
77283 * _.toSafeInteger(3.2); +
77284 * // => 3 +
77285 * +
77286 * _.toSafeInteger(Number.MIN_VALUE); +
77287 * // => 0 +
77288 * +
77289 * _.toSafeInteger(Infinity); +
77290 * // => 9007199254740991 +
77291 * +
77292 * _.toSafeInteger('3.2'); +
77293 * // => 3 +
77294 */ +
77295 function toSafeInteger(value) { +
77296 return value +
77297 ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) +
77298 : (value === 0 ? value : 0); +
77299 } +
77300 +
77301 /** +
77302 * Converts `value` to a string. An empty string is returned for `null` +
77303 * and `undefined` values. The sign of `-0` is preserved. +
77304 * +
77305 * @static +
77306 * @memberOf _ +
77307 * @since 4.0.0 +
77308 * @category Lang +
77309 * @param {*} value The value to convert. +
77310 * @returns {string} Returns the converted string. +
77311 * @example +
77312 * +
77313 * _.toString(null); +
77314 * // => '' +
77315 * +
77316 * _.toString(-0); +
77317 * // => '-0' +
77318 * +
77319 * _.toString([1, 2, 3]); +
77320 * // => '1,2,3' +
77321 */ +
77322 function toString(value) { +
77323 return value == null ? '' : baseToString(value); +
77324 } +
77325 +
77326 /*------------------------------------------------------------------------*/ +
77327 +
77328 /** +
77329 * Assigns own enumerable string keyed properties of source objects to the +
77330 * destination object. Source objects are applied from left to right. +
77331 * Subsequent sources overwrite property assignments of previous sources. +
77332 * +
77333 * **Note:** This method mutates `object` and is loosely based on +
77334 * [`Object.assign`](https://mdn.io/Object/assign). +
77335 * +
77336 * @static +
77337 * @memberOf _ +
77338 * @since 0.10.0 +
77339 * @category Object +
77340 * @param {Object} object The destination object. +
77341 * @param {...Object} [sources] The source objects. +
77342 * @returns {Object} Returns `object`. +
77343 * @see _.assignIn +
77344 * @example +
77345 * +
77346 * function Foo() { +
77347 * this.a = 1; +
77348 * } +
77349 * +
77350 * function Bar() { +
77351 * this.c = 3; +
77352 * } +
77353 * +
77354 * Foo.prototype.b = 2; +
77355 * Bar.prototype.d = 4; +
77356 * +
77357 * _.assign({ 'a': 0 }, new Foo, new Bar); +
77358 * // => { 'a': 1, 'c': 3 } +
77359 */ +
77360 var assign = createAssigner(function(object, source) { +
77361 if (isPrototype(source) || isArrayLike(source)) { +
77362 copyObject(source, keys(source), object); +
77363 return; +
77364 } +
77365 for (var key in source) { +
77366 if (hasOwnProperty.call(source, key)) { +
77367 assignValue(object, key, source[key]); +
77368 } +
77369 } +
77370 }); +
77371 +
77372 /** +
77373 * This method is like `_.assign` except that it iterates over own and +
77374 * inherited source properties. +
77375 * +
77376 * **Note:** This method mutates `object`. +
77377 * +
77378 * @static +
77379 * @memberOf _ +
77380 * @since 4.0.0 +
77381 * @alias extend +
77382 * @category Object +
77383 * @param {Object} object The destination object. +
77384 * @param {...Object} [sources] The source objects. +
77385 * @returns {Object} Returns `object`. +
77386 * @see _.assign +
77387 * @example +
77388 * +
77389 * function Foo() { +
77390 * this.a = 1; +
77391 * } +
77392 * +
77393 * function Bar() { +
77394 * this.c = 3; +
77395 * } +
77396 * +
77397 * Foo.prototype.b = 2; +
77398 * Bar.prototype.d = 4; +
77399 * +
77400 * _.assignIn({ 'a': 0 }, new Foo, new Bar); +
77401 * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } +
77402 */ +
77403 var assignIn = createAssigner(function(object, source) { +
77404 copyObject(source, keysIn(source), object); +
77405 }); +
77406 +
77407 /** +
77408 * This method is like `_.assignIn` except that it accepts `customizer` +
77409 * which is invoked to produce the assigned values. If `customizer` returns +
77410 * `undefined`, assignment is handled by the method instead. The `customizer` +
77411 * is invoked with five arguments: (objValue, srcValue, key, object, source). +
77412 * +
77413 * **Note:** This method mutates `object`. +
77414 * +
77415 * @static +
77416 * @memberOf _ +
77417 * @since 4.0.0 +
77418 * @alias extendWith +
77419 * @category Object +
77420 * @param {Object} object The destination object. +
77421 * @param {...Object} sources The source objects. +
77422 * @param {Function} [customizer] The function to customize assigned values. +
77423 * @returns {Object} Returns `object`. +
77424 * @see _.assignWith +
77425 * @example +
77426 * +
77427 * function customizer(objValue, srcValue) { +
77428 * return _.isUndefined(objValue) ? srcValue : objValue; +
77429 * } +
77430 * +
77431 * var defaults = _.partialRight(_.assignInWith, customizer); +
77432 * +
77433 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
77434 * // => { 'a': 1, 'b': 2 } +
77435 */ +
77436 var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { +
77437 copyObject(source, keysIn(source), object, customizer); +
77438 }); +
77439 +
77440 /** +
77441 * This method is like `_.assign` except that it accepts `customizer` +
77442 * which is invoked to produce the assigned values. If `customizer` returns +
77443 * `undefined`, assignment is handled by the method instead. The `customizer` +
77444 * is invoked with five arguments: (objValue, srcValue, key, object, source). +
77445 * +
77446 * **Note:** This method mutates `object`. +
77447 * +
77448 * @static +
77449 * @memberOf _ +
77450 * @since 4.0.0 +
77451 * @category Object +
77452 * @param {Object} object The destination object. +
77453 * @param {...Object} sources The source objects. +
77454 * @param {Function} [customizer] The function to customize assigned values. +
77455 * @returns {Object} Returns `object`. +
77456 * @see _.assignInWith +
77457 * @example +
77458 * +
77459 * function customizer(objValue, srcValue) { +
77460 * return _.isUndefined(objValue) ? srcValue : objValue; +
77461 * } +
77462 * +
77463 * var defaults = _.partialRight(_.assignWith, customizer); +
77464 * +
77465 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
77466 * // => { 'a': 1, 'b': 2 } +
77467 */ +
77468 var assignWith = createAssigner(function(object, source, srcIndex, customizer) { +
77469 copyObject(source, keys(source), object, customizer); +
77470 }); +
77471 +
77472 /** +
77473 * Creates an array of values corresponding to `paths` of `object`. +
77474 * +
77475 * @static +
77476 * @memberOf _ +
77477 * @since 1.0.0 +
77478 * @category Object +
77479 * @param {Object} object The object to iterate over. +
77480 * @param {...(string|string[])} [paths] The property paths to pick. +
77481 * @returns {Array} Returns the picked values. +
77482 * @example +
77483 * +
77484 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +
77485 * +
77486 * _.at(object, ['a[0].b.c', 'a[1]']); +
77487 * // => [3, 4] +
77488 */ +
77489 var at = flatRest(baseAt); +
77490 +
77491 /** +
77492 * Creates an object that inherits from the `prototype` object. If a +
77493 * `properties` object is given, its own enumerable string keyed properties +
77494 * are assigned to the created object. +
77495 * +
77496 * @static +
77497 * @memberOf _ +
77498 * @since 2.3.0 +
77499 * @category Object +
77500 * @param {Object} prototype The object to inherit from. +
77501 * @param {Object} [properties] The properties to assign to the object. +
77502 * @returns {Object} Returns the new object. +
77503 * @example +
77504 * +
77505 * function Shape() { +
77506 * this.x = 0; +
77507 * this.y = 0; +
77508 * } +
77509 * +
77510 * function Circle() { +
77511 * Shape.call(this); +
77512 * } +
77513 * +
77514 * Circle.prototype = _.create(Shape.prototype, { +
77515 * 'constructor': Circle +
77516 * }); +
77517 * +
77518 * var circle = new Circle; +
77519 * circle instanceof Circle; +
77520 * // => true +
77521 * +
77522 * circle instanceof Shape; +
77523 * // => true +
77524 */ +
77525 function create(prototype, properties) { +
77526 var result = baseCreate(prototype); +
77527 return properties == null ? result : baseAssign(result, properties); +
77528 } +
77529 +
77530 /** +
77531 * Assigns own and inherited enumerable string keyed properties of source +
77532 * objects to the destination object for all destination properties that +
77533 * resolve to `undefined`. Source objects are applied from left to right. +
77534 * Once a property is set, additional values of the same property are ignored. +
77535 * +
77536 * **Note:** This method mutates `object`. +
77537 * +
77538 * @static +
77539 * @since 0.1.0 +
77540 * @memberOf _ +
77541 * @category Object +
77542 * @param {Object} object The destination object. +
77543 * @param {...Object} [sources] The source objects. +
77544 * @returns {Object} Returns `object`. +
77545 * @see _.defaultsDeep +
77546 * @example +
77547 * +
77548 * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
77549 * // => { 'a': 1, 'b': 2 } +
77550 */ +
77551 var defaults = baseRest(function(object, sources) { +
77552 object = Object(object); +
77553 +
77554 var index = -1; +
77555 var length = sources.length; +
77556 var guard = length > 2 ? sources[2] : undefined; +
77557 +
77558 if (guard && isIterateeCall(sources[0], sources[1], guard)) { +
77559 length = 1; +
77560 } +
77561 +
77562 while (++index < length) { +
77563 var source = sources[index]; +
77564 var props = keysIn(source); +
77565 var propsIndex = -1; +
77566 var propsLength = props.length; +
77567 +
77568 while (++propsIndex < propsLength) { +
77569 var key = props[propsIndex]; +
77570 var value = object[key]; +
77571 +
77572 if (value === undefined || +
77573 (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { +
77574 object[key] = source[key]; +
77575 } +
77576 } +
77577 } +
77578 +
77579 return object; +
77580 }); +
77581 +
77582 /** +
77583 * This method is like `_.defaults` except that it recursively assigns +
77584 * default properties. +
77585 * +
77586 * **Note:** This method mutates `object`. +
77587 * +
77588 * @static +
77589 * @memberOf _ +
77590 * @since 3.10.0 +
77591 * @category Object +
77592 * @param {Object} object The destination object. +
77593 * @param {...Object} [sources] The source objects. +
77594 * @returns {Object} Returns `object`. +
77595 * @see _.defaults +
77596 * @example +
77597 * +
77598 * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); +
77599 * // => { 'a': { 'b': 2, 'c': 3 } } +
77600 */ +
77601 var defaultsDeep = baseRest(function(args) { +
77602 args.push(undefined, customDefaultsMerge); +
77603 return apply(mergeWith, undefined, args); +
77604 }); +
77605 +
77606 /** +
77607 * This method is like `_.find` except that it returns the key of the first +
77608 * element `predicate` returns truthy for instead of the element itself. +
77609 * +
77610 * @static +
77611 * @memberOf _ +
77612 * @since 1.1.0 +
77613 * @category Object +
77614 * @param {Object} object The object to inspect. +
77615 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
77616 * @returns {string|undefined} Returns the key of the matched element, +
77617 * else `undefined`. +
77618 * @example +
77619 * +
77620 * var users = { +
77621 * 'barney': { 'age': 36, 'active': true }, +
77622 * 'fred': { 'age': 40, 'active': false }, +
77623 * 'pebbles': { 'age': 1, 'active': true } +
77624 * }; +
77625 * +
77626 * _.findKey(users, function(o) { return o.age < 40; }); +
77627 * // => 'barney' (iteration order is not guaranteed) +
77628 * +
77629 * // The `_.matches` iteratee shorthand. +
77630 * _.findKey(users, { 'age': 1, 'active': true }); +
77631 * // => 'pebbles' +
77632 * +
77633 * // The `_.matchesProperty` iteratee shorthand. +
77634 * _.findKey(users, ['active', false]); +
77635 * // => 'fred' +
77636 * +
77637 * // The `_.property` iteratee shorthand. +
77638 * _.findKey(users, 'active'); +
77639 * // => 'barney' +
77640 */ +
77641 function findKey(object, predicate) { +
77642 return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); +
77643 } +
77644 +
77645 /** +
77646 * This method is like `_.findKey` except that it iterates over elements of +
77647 * a collection in the opposite order. +
77648 * +
77649 * @static +
77650 * @memberOf _ +
77651 * @since 2.0.0 +
77652 * @category Object +
77653 * @param {Object} object The object to inspect. +
77654 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
77655 * @returns {string|undefined} Returns the key of the matched element, +
77656 * else `undefined`. +
77657 * @example +
77658 * +
77659 * var users = { +
77660 * 'barney': { 'age': 36, 'active': true }, +
77661 * 'fred': { 'age': 40, 'active': false }, +
77662 * 'pebbles': { 'age': 1, 'active': true } +
77663 * }; +
77664 * +
77665 * _.findLastKey(users, function(o) { return o.age < 40; }); +
77666 * // => returns 'pebbles' assuming `_.findKey` returns 'barney' +
77667 * +
77668 * // The `_.matches` iteratee shorthand. +
77669 * _.findLastKey(users, { 'age': 36, 'active': true }); +
77670 * // => 'barney' +
77671 * +
77672 * // The `_.matchesProperty` iteratee shorthand. +
77673 * _.findLastKey(users, ['active', false]); +
77674 * // => 'fred' +
77675 * +
77676 * // The `_.property` iteratee shorthand. +
77677 * _.findLastKey(users, 'active'); +
77678 * // => 'pebbles' +
77679 */ +
77680 function findLastKey(object, predicate) { +
77681 return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); +
77682 } +
77683 +
77684 /** +
77685 * Iterates over own and inherited enumerable string keyed properties of an +
77686 * object and invokes `iteratee` for each property. The iteratee is invoked +
77687 * with three arguments: (value, key, object). Iteratee functions may exit +
77688 * iteration early by explicitly returning `false`. +
77689 * +
77690 * @static +
77691 * @memberOf _ +
77692 * @since 0.3.0 +
77693 * @category Object +
77694 * @param {Object} object The object to iterate over. +
77695 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
77696 * @returns {Object} Returns `object`. +
77697 * @see _.forInRight +
77698 * @example +
77699 * +
77700 * function Foo() { +
77701 * this.a = 1; +
77702 * this.b = 2; +
77703 * } +
77704 * +
77705 * Foo.prototype.c = 3; +
77706 * +
77707 * _.forIn(new Foo, function(value, key) { +
77708 * console.log(key); +
77709 * }); +
77710 * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). +
77711 */ +
77712 function forIn(object, iteratee) { +
77713 return object == null +
77714 ? object +
77715 : baseFor(object, getIteratee(iteratee, 3), keysIn); +
77716 } +
77717 +
77718 /** +
77719 * This method is like `_.forIn` except that it iterates over properties of +
77720 * `object` in the opposite order. +
77721 * +
77722 * @static +
77723 * @memberOf _ +
77724 * @since 2.0.0 +
77725 * @category Object +
77726 * @param {Object} object The object to iterate over. +
77727 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
77728 * @returns {Object} Returns `object`. +
77729 * @see _.forIn +
77730 * @example +
77731 * +
77732 * function Foo() { +
77733 * this.a = 1; +
77734 * this.b = 2; +
77735 * } +
77736 * +
77737 * Foo.prototype.c = 3; +
77738 * +
77739 * _.forInRight(new Foo, function(value, key) { +
77740 * console.log(key); +
77741 * }); +
77742 * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. +
77743 */ +
77744 function forInRight(object, iteratee) { +
77745 return object == null +
77746 ? object +
77747 : baseForRight(object, getIteratee(iteratee, 3), keysIn); +
77748 } +
77749 +
77750 /** +
77751 * Iterates over own enumerable string keyed properties of an object and +
77752 * invokes `iteratee` for each property. The iteratee is invoked with three +
77753 * arguments: (value, key, object). Iteratee functions may exit iteration +
77754 * early by explicitly returning `false`. +
77755 * +
77756 * @static +
77757 * @memberOf _ +
77758 * @since 0.3.0 +
77759 * @category Object +
77760 * @param {Object} object The object to iterate over. +
77761 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
77762 * @returns {Object} Returns `object`. +
77763 * @see _.forOwnRight +
77764 * @example +
77765 * +
77766 * function Foo() { +
77767 * this.a = 1; +
77768 * this.b = 2; +
77769 * } +
77770 * +
77771 * Foo.prototype.c = 3; +
77772 * +
77773 * _.forOwn(new Foo, function(value, key) { +
77774 * console.log(key); +
77775 * }); +
77776 * // => Logs 'a' then 'b' (iteration order is not guaranteed). +
77777 */ +
77778 function forOwn(object, iteratee) { +
77779 return object && baseForOwn(object, getIteratee(iteratee, 3)); +
77780 } +
77781 +
77782 /** +
77783 * This method is like `_.forOwn` except that it iterates over properties of +
77784 * `object` in the opposite order. +
77785 * +
77786 * @static +
77787 * @memberOf _ +
77788 * @since 2.0.0 +
77789 * @category Object +
77790 * @param {Object} object The object to iterate over. +
77791 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
77792 * @returns {Object} Returns `object`. +
77793 * @see _.forOwn +
77794 * @example +
77795 * +
77796 * function Foo() { +
77797 * this.a = 1; +
77798 * this.b = 2; +
77799 * } +
77800 * +
77801 * Foo.prototype.c = 3; +
77802 * +
77803 * _.forOwnRight(new Foo, function(value, key) { +
77804 * console.log(key); +
77805 * }); +
77806 * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. +
77807 */ +
77808 function forOwnRight(object, iteratee) { +
77809 return object && baseForOwnRight(object, getIteratee(iteratee, 3)); +
77810 } +
77811 +
77812 /** +
77813 * Creates an array of function property names from own enumerable properties +
77814 * of `object`. +
77815 * +
77816 * @static +
77817 * @since 0.1.0 +
77818 * @memberOf _ +
77819 * @category Object +
77820 * @param {Object} object The object to inspect. +
77821 * @returns {Array} Returns the function names. +
77822 * @see _.functionsIn +
77823 * @example +
77824 * +
77825 * function Foo() { +
77826 * this.a = _.constant('a'); +
77827 * this.b = _.constant('b'); +
77828 * } +
77829 * +
77830 * Foo.prototype.c = _.constant('c'); +
77831 * +
77832 * _.functions(new Foo); +
77833 * // => ['a', 'b'] +
77834 */ +
77835 function functions(object) { +
77836 return object == null ? [] : baseFunctions(object, keys(object)); +
77837 } +
77838 +
77839 /** +
77840 * Creates an array of function property names from own and inherited +
77841 * enumerable properties of `object`. +
77842 * +
77843 * @static +
77844 * @memberOf _ +
77845 * @since 4.0.0 +
77846 * @category Object +
77847 * @param {Object} object The object to inspect. +
77848 * @returns {Array} Returns the function names. +
77849 * @see _.functions +
77850 * @example +
77851 * +
77852 * function Foo() { +
77853 * this.a = _.constant('a'); +
77854 * this.b = _.constant('b'); +
77855 * } +
77856 * +
77857 * Foo.prototype.c = _.constant('c'); +
77858 * +
77859 * _.functionsIn(new Foo); +
77860 * // => ['a', 'b', 'c'] +
77861 */ +
77862 function functionsIn(object) { +
77863 return object == null ? [] : baseFunctions(object, keysIn(object)); +
77864 } +
77865 +
77866 /** +
77867 * Gets the value at `path` of `object`. If the resolved value is +
77868 * `undefined`, the `defaultValue` is returned in its place. +
77869 * +
77870 * @static +
77871 * @memberOf _ +
77872 * @since 3.7.0 +
77873 * @category Object +
77874 * @param {Object} object The object to query. +
77875 * @param {Array|string} path The path of the property to get. +
77876 * @param {*} [defaultValue] The value returned for `undefined` resolved values. +
77877 * @returns {*} Returns the resolved value. +
77878 * @example +
77879 * +
77880 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
77881 * +
77882 * _.get(object, 'a[0].b.c'); +
77883 * // => 3 +
77884 * +
77885 * _.get(object, ['a', '0', 'b', 'c']); +
77886 * // => 3 +
77887 * +
77888 * _.get(object, 'a.b.c', 'default'); +
77889 * // => 'default' +
77890 */ +
77891 function get(object, path, defaultValue) { +
77892 var result = object == null ? undefined : baseGet(object, path); +
77893 return result === undefined ? defaultValue : result; +
77894 } +
77895 +
77896 /** +
77897 * Checks if `path` is a direct property of `object`. +
77898 * +
77899 * @static +
77900 * @since 0.1.0 +
77901 * @memberOf _ +
77902 * @category Object +
77903 * @param {Object} object The object to query. +
77904 * @param {Array|string} path The path to check. +
77905 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
77906 * @example +
77907 * +
77908 * var object = { 'a': { 'b': 2 } }; +
77909 * var other = _.create({ 'a': _.create({ 'b': 2 }) }); +
77910 * +
77911 * _.has(object, 'a'); +
77912 * // => true +
77913 * +
77914 * _.has(object, 'a.b'); +
77915 * // => true +
77916 * +
77917 * _.has(object, ['a', 'b']); +
77918 * // => true +
77919 * +
77920 * _.has(other, 'a'); +
77921 * // => false +
77922 */ +
77923 function has(object, path) { +
77924 return object != null && hasPath(object, path, baseHas); +
77925 } +
77926 +
77927 /** +
77928 * Checks if `path` is a direct or inherited property of `object`. +
77929 * +
77930 * @static +
77931 * @memberOf _ +
77932 * @since 4.0.0 +
77933 * @category Object +
77934 * @param {Object} object The object to query. +
77935 * @param {Array|string} path The path to check. +
77936 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
77937 * @example +
77938 * +
77939 * var object = _.create({ 'a': _.create({ 'b': 2 }) }); +
77940 * +
77941 * _.hasIn(object, 'a'); +
77942 * // => true +
77943 * +
77944 * _.hasIn(object, 'a.b'); +
77945 * // => true +
77946 * +
77947 * _.hasIn(object, ['a', 'b']); +
77948 * // => true +
77949 * +
77950 * _.hasIn(object, 'b'); +
77951 * // => false +
77952 */ +
77953 function hasIn(object, path) { +
77954 return object != null && hasPath(object, path, baseHasIn); +
77955 } +
77956 +
77957 /** +
77958 * Creates an object composed of the inverted keys and values of `object`. +
77959 * If `object` contains duplicate values, subsequent values overwrite +
77960 * property assignments of previous values. +
77961 * +
77962 * @static +
77963 * @memberOf _ +
77964 * @since 0.7.0 +
77965 * @category Object +
77966 * @param {Object} object The object to invert. +
77967 * @returns {Object} Returns the new inverted object. +
77968 * @example +
77969 * +
77970 * var object = { 'a': 1, 'b': 2, 'c': 1 }; +
77971 * +
77972 * _.invert(object); +
77973 * // => { '1': 'c', '2': 'b' } +
77974 */ +
77975 var invert = createInverter(function(result, value, key) { +
77976 if (value != null && +
77977 typeof value.toString != 'function') { +
77978 value = nativeObjectToString.call(value); +
77979 } +
77980 +
77981 result[value] = key; +
77982 }, constant(identity)); +
77983 +
77984 /** +
77985 * This method is like `_.invert` except that the inverted object is generated +
77986 * from the results of running each element of `object` thru `iteratee`. The +
77987 * corresponding inverted value of each inverted key is an array of keys +
77988 * responsible for generating the inverted value. The iteratee is invoked +
77989 * with one argument: (value). +
77990 * +
77991 * @static +
77992 * @memberOf _ +
77993 * @since 4.1.0 +
77994 * @category Object +
77995 * @param {Object} object The object to invert. +
77996 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
77997 * @returns {Object} Returns the new inverted object. +
77998 * @example +
77999 * +
78000 * var object = { 'a': 1, 'b': 2, 'c': 1 }; +
78001 * +
78002 * _.invertBy(object); +
78003 * // => { '1': ['a', 'c'], '2': ['b'] } +
78004 * +
78005 * _.invertBy(object, function(value) { +
78006 * return 'group' + value; +
78007 * }); +
78008 * // => { 'group1': ['a', 'c'], 'group2': ['b'] } +
78009 */ +
78010 var invertBy = createInverter(function(result, value, key) { +
78011 if (value != null && +
78012 typeof value.toString != 'function') { +
78013 value = nativeObjectToString.call(value); +
78014 } +
78015 +
78016 if (hasOwnProperty.call(result, value)) { +
78017 result[value].push(key); +
78018 } else { +
78019 result[value] = [key]; +
78020 } +
78021 }, getIteratee); +
78022 +
78023 /** +
78024 * Invokes the method at `path` of `object`. +
78025 * +
78026 * @static +
78027 * @memberOf _ +
78028 * @since 4.0.0 +
78029 * @category Object +
78030 * @param {Object} object The object to query. +
78031 * @param {Array|string} path The path of the method to invoke. +
78032 * @param {...*} [args] The arguments to invoke the method with. +
78033 * @returns {*} Returns the result of the invoked method. +
78034 * @example +
78035 * +
78036 * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; +
78037 * +
78038 * _.invoke(object, 'a[0].b.c.slice', 1, 3); +
78039 * // => [2, 3] +
78040 */ +
78041 var invoke = baseRest(baseInvoke); +
78042 +
78043 /** +
78044 * Creates an array of the own enumerable property names of `object`. +
78045 * +
78046 * **Note:** Non-object values are coerced to objects. See the +
78047 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +
78048 * for more details. +
78049 * +
78050 * @static +
78051 * @since 0.1.0 +
78052 * @memberOf _ +
78053 * @category Object +
78054 * @param {Object} object The object to query. +
78055 * @returns {Array} Returns the array of property names. +
78056 * @example +
78057 * +
78058 * function Foo() { +
78059 * this.a = 1; +
78060 * this.b = 2; +
78061 * } +
78062 * +
78063 * Foo.prototype.c = 3; +
78064 * +
78065 * _.keys(new Foo); +
78066 * // => ['a', 'b'] (iteration order is not guaranteed) +
78067 * +
78068 * _.keys('hi'); +
78069 * // => ['0', '1'] +
78070 */ +
78071 function keys(object) { +
78072 return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +
78073 } +
78074 +
78075 /** +
78076 * Creates an array of the own and inherited enumerable property names of `object`. +
78077 * +
78078 * **Note:** Non-object values are coerced to objects. +
78079 * +
78080 * @static +
78081 * @memberOf _ +
78082 * @since 3.0.0 +
78083 * @category Object +
78084 * @param {Object} object The object to query. +
78085 * @returns {Array} Returns the array of property names. +
78086 * @example +
78087 * +
78088 * function Foo() { +
78089 * this.a = 1; +
78090 * this.b = 2; +
78091 * } +
78092 * +
78093 * Foo.prototype.c = 3; +
78094 * +
78095 * _.keysIn(new Foo); +
78096 * // => ['a', 'b', 'c'] (iteration order is not guaranteed) +
78097 */ +
78098 function keysIn(object) { +
78099 return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +
78100 } +
78101 +
78102 /** +
78103 * The opposite of `_.mapValues`; this method creates an object with the +
78104 * same values as `object` and keys generated by running each own enumerable +
78105 * string keyed property of `object` thru `iteratee`. The iteratee is invoked +
78106 * with three arguments: (value, key, object). +
78107 * +
78108 * @static +
78109 * @memberOf _ +
78110 * @since 3.8.0 +
78111 * @category Object +
78112 * @param {Object} object The object to iterate over. +
78113 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
78114 * @returns {Object} Returns the new mapped object. +
78115 * @see _.mapValues +
78116 * @example +
78117 * +
78118 * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { +
78119 * return key + value; +
78120 * }); +
78121 * // => { 'a1': 1, 'b2': 2 } +
78122 */ +
78123 function mapKeys(object, iteratee) { +
78124 var result = {}; +
78125 iteratee = getIteratee(iteratee, 3); +
78126 +
78127 baseForOwn(object, function(value, key, object) { +
78128 baseAssignValue(result, iteratee(value, key, object), value); +
78129 }); +
78130 return result; +
78131 } +
78132 +
78133 /** +
78134 * Creates an object with the same keys as `object` and values generated +
78135 * by running each own enumerable string keyed property of `object` thru +
78136 * `iteratee`. The iteratee is invoked with three arguments: +
78137 * (value, key, object). +
78138 * +
78139 * @static +
78140 * @memberOf _ +
78141 * @since 2.4.0 +
78142 * @category Object +
78143 * @param {Object} object The object to iterate over. +
78144 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
78145 * @returns {Object} Returns the new mapped object. +
78146 * @see _.mapKeys +
78147 * @example +
78148 * +
78149 * var users = { +
78150 * 'fred': { 'user': 'fred', 'age': 40 }, +
78151 * 'pebbles': { 'user': 'pebbles', 'age': 1 } +
78152 * }; +
78153 * +
78154 * _.mapValues(users, function(o) { return o.age; }); +
78155 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +
78156 * +
78157 * // The `_.property` iteratee shorthand. +
78158 * _.mapValues(users, 'age'); +
78159 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +
78160 */ +
78161 function mapValues(object, iteratee) { +
78162 var result = {}; +
78163 iteratee = getIteratee(iteratee, 3); +
78164 +
78165 baseForOwn(object, function(value, key, object) { +
78166 baseAssignValue(result, key, iteratee(value, key, object)); +
78167 }); +
78168 return result; +
78169 } +
78170 +
78171 /** +
78172 * This method is like `_.assign` except that it recursively merges own and +
78173 * inherited enumerable string keyed properties of source objects into the +
78174 * destination object. Source properties that resolve to `undefined` are +
78175 * skipped if a destination value exists. Array and plain object properties +
78176 * are merged recursively. Other objects and value types are overridden by +
78177 * assignment. Source objects are applied from left to right. Subsequent +
78178 * sources overwrite property assignments of previous sources. +
78179 * +
78180 * **Note:** This method mutates `object`. +
78181 * +
78182 * @static +
78183 * @memberOf _ +
78184 * @since 0.5.0 +
78185 * @category Object +
78186 * @param {Object} object The destination object. +
78187 * @param {...Object} [sources] The source objects. +
78188 * @returns {Object} Returns `object`. +
78189 * @example +
78190 * +
78191 * var object = { +
78192 * 'a': [{ 'b': 2 }, { 'd': 4 }] +
78193 * }; +
78194 * +
78195 * var other = { +
78196 * 'a': [{ 'c': 3 }, { 'e': 5 }] +
78197 * }; +
78198 * +
78199 * _.merge(object, other); +
78200 * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } +
78201 */ +
78202 var merge = createAssigner(function(object, source, srcIndex) { +
78203 baseMerge(object, source, srcIndex); +
78204 }); +
78205 +
78206 /** +
78207 * This method is like `_.merge` except that it accepts `customizer` which +
78208 * is invoked to produce the merged values of the destination and source +
78209 * properties. If `customizer` returns `undefined`, merging is handled by the +
78210 * method instead. The `customizer` is invoked with six arguments: +
78211 * (objValue, srcValue, key, object, source, stack). +
78212 * +
78213 * **Note:** This method mutates `object`. +
78214 * +
78215 * @static +
78216 * @memberOf _ +
78217 * @since 4.0.0 +
78218 * @category Object +
78219 * @param {Object} object The destination object. +
78220 * @param {...Object} sources The source objects. +
78221 * @param {Function} customizer The function to customize assigned values. +
78222 * @returns {Object} Returns `object`. +
78223 * @example +
78224 * +
78225 * function customizer(objValue, srcValue) { +
78226 * if (_.isArray(objValue)) { +
78227 * return objValue.concat(srcValue); +
78228 * } +
78229 * } +
78230 * +
78231 * var object = { 'a': [1], 'b': [2] }; +
78232 * var other = { 'a': [3], 'b': [4] }; +
78233 * +
78234 * _.mergeWith(object, other, customizer); +
78235 * // => { 'a': [1, 3], 'b': [2, 4] } +
78236 */ +
78237 var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { +
78238 baseMerge(object, source, srcIndex, customizer); +
78239 }); +
78240 +
78241 /** +
78242 * The opposite of `_.pick`; this method creates an object composed of the +
78243 * own and inherited enumerable property paths of `object` that are not omitted. +
78244 * +
78245 * **Note:** This method is considerably slower than `_.pick`. +
78246 * +
78247 * @static +
78248 * @since 0.1.0 +
78249 * @memberOf _ +
78250 * @category Object +
78251 * @param {Object} object The source object. +
78252 * @param {...(string|string[])} [paths] The property paths to omit. +
78253 * @returns {Object} Returns the new object. +
78254 * @example +
78255 * +
78256 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
78257 * +
78258 * _.omit(object, ['a', 'c']); +
78259 * // => { 'b': '2' } +
78260 */ +
78261 var omit = flatRest(function(object, paths) { +
78262 var result = {}; +
78263 if (object == null) { +
78264 return result; +
78265 } +
78266 var isDeep = false; +
78267 paths = arrayMap(paths, function(path) { +
78268 path = castPath(path, object); +
78269 isDeep || (isDeep = path.length > 1); +
78270 return path; +
78271 }); +
78272 copyObject(object, getAllKeysIn(object), result); +
78273 if (isDeep) { +
78274 result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); +
78275 } +
78276 var length = paths.length; +
78277 while (length--) { +
78278 baseUnset(result, paths[length]); +
78279 } +
78280 return result; +
78281 }); +
78282 +
78283 /** +
78284 * The opposite of `_.pickBy`; this method creates an object composed of +
78285 * the own and inherited enumerable string keyed properties of `object` that +
78286 * `predicate` doesn't return truthy for. The predicate is invoked with two +
78287 * arguments: (value, key). +
78288 * +
78289 * @static +
78290 * @memberOf _ +
78291 * @since 4.0.0 +
78292 * @category Object +
78293 * @param {Object} object The source object. +
78294 * @param {Function} [predicate=_.identity] The function invoked per property. +
78295 * @returns {Object} Returns the new object. +
78296 * @example +
78297 * +
78298 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
78299 * +
78300 * _.omitBy(object, _.isNumber); +
78301 * // => { 'b': '2' } +
78302 */ +
78303 function omitBy(object, predicate) { +
78304 return pickBy(object, negate(getIteratee(predicate))); +
78305 } +
78306 +
78307 /** +
78308 * Creates an object composed of the picked `object` properties. +
78309 * +
78310 * @static +
78311 * @since 0.1.0 +
78312 * @memberOf _ +
78313 * @category Object +
78314 * @param {Object} object The source object. +
78315 * @param {...(string|string[])} [paths] The property paths to pick. +
78316 * @returns {Object} Returns the new object. +
78317 * @example +
78318 * +
78319 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
78320 * +
78321 * _.pick(object, ['a', 'c']); +
78322 * // => { 'a': 1, 'c': 3 } +
78323 */ +
78324 var pick = flatRest(function(object, paths) { +
78325 return object == null ? {} : basePick(object, paths); +
78326 }); +
78327 +
78328 /** +
78329 * Creates an object composed of the `object` properties `predicate` returns +
78330 * truthy for. The predicate is invoked with two arguments: (value, key). +
78331 * +
78332 * @static +
78333 * @memberOf _ +
78334 * @since 4.0.0 +
78335 * @category Object +
78336 * @param {Object} object The source object. +
78337 * @param {Function} [predicate=_.identity] The function invoked per property. +
78338 * @returns {Object} Returns the new object. +
78339 * @example +
78340 * +
78341 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
78342 * +
78343 * _.pickBy(object, _.isNumber); +
78344 * // => { 'a': 1, 'c': 3 } +
78345 */ +
78346 function pickBy(object, predicate) { +
78347 if (object == null) { +
78348 return {}; +
78349 } +
78350 var props = arrayMap(getAllKeysIn(object), function(prop) { +
78351 return [prop]; +
78352 }); +
78353 predicate = getIteratee(predicate); +
78354 return basePickBy(object, props, function(value, path) { +
78355 return predicate(value, path[0]); +
78356 }); +
78357 } +
78358 +
78359 /** +
78360 * This method is like `_.get` except that if the resolved value is a +
78361 * function it's invoked with the `this` binding of its parent object and +
78362 * its result is returned. +
78363 * +
78364 * @static +
78365 * @since 0.1.0 +
78366 * @memberOf _ +
78367 * @category Object +
78368 * @param {Object} object The object to query. +
78369 * @param {Array|string} path The path of the property to resolve. +
78370 * @param {*} [defaultValue] The value returned for `undefined` resolved values. +
78371 * @returns {*} Returns the resolved value. +
78372 * @example +
78373 * +
78374 * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; +
78375 * +
78376 * _.result(object, 'a[0].b.c1'); +
78377 * // => 3 +
78378 * +
78379 * _.result(object, 'a[0].b.c2'); +
78380 * // => 4 +
78381 * +
78382 * _.result(object, 'a[0].b.c3', 'default'); +
78383 * // => 'default' +
78384 * +
78385 * _.result(object, 'a[0].b.c3', _.constant('default')); +
78386 * // => 'default' +
78387 */ +
78388 function result(object, path, defaultValue) { +
78389 path = castPath(path, object); +
78390 +
78391 var index = -1, +
78392 length = path.length; +
78393 +
78394 // Ensure the loop is entered when path is empty. +
78395 if (!length) { +
78396 length = 1; +
78397 object = undefined; +
78398 } +
78399 while (++index < length) { +
78400 var value = object == null ? undefined : object[toKey(path[index])]; +
78401 if (value === undefined) { +
78402 index = length; +
78403 value = defaultValue; +
78404 } +
78405 object = isFunction(value) ? value.call(object) : value; +
78406 } +
78407 return object; +
78408 } +
78409 +
78410 /** +
78411 * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, +
78412 * it's created. Arrays are created for missing index properties while objects +
78413 * are created for all other missing properties. Use `_.setWith` to customize +
78414 * `path` creation. +
78415 * +
78416 * **Note:** This method mutates `object`. +
78417 * +
78418 * @static +
78419 * @memberOf _ +
78420 * @since 3.7.0 +
78421 * @category Object +
78422 * @param {Object} object The object to modify. +
78423 * @param {Array|string} path The path of the property to set. +
78424 * @param {*} value The value to set. +
78425 * @returns {Object} Returns `object`. +
78426 * @example +
78427 * +
78428 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
78429 * +
78430 * _.set(object, 'a[0].b.c', 4); +
78431 * console.log(object.a[0].b.c); +
78432 * // => 4 +
78433 * +
78434 * _.set(object, ['x', '0', 'y', 'z'], 5); +
78435 * console.log(object.x[0].y.z); +
78436 * // => 5 +
78437 */ +
78438 function set(object, path, value) { +
78439 return object == null ? object : baseSet(object, path, value); +
78440 } +
78441 +
78442 /** +
78443 * This method is like `_.set` except that it accepts `customizer` which is +
78444 * invoked to produce the objects of `path`. If `customizer` returns `undefined` +
78445 * path creation is handled by the method instead. The `customizer` is invoked +
78446 * with three arguments: (nsValue, key, nsObject). +
78447 * +
78448 * **Note:** This method mutates `object`. +
78449 * +
78450 * @static +
78451 * @memberOf _ +
78452 * @since 4.0.0 +
78453 * @category Object +
78454 * @param {Object} object The object to modify. +
78455 * @param {Array|string} path The path of the property to set. +
78456 * @param {*} value The value to set. +
78457 * @param {Function} [customizer] The function to customize assigned values. +
78458 * @returns {Object} Returns `object`. +
78459 * @example +
78460 * +
78461 * var object = {}; +
78462 * +
78463 * _.setWith(object, '[0][1]', 'a', Object); +
78464 * // => { '0': { '1': 'a' } } +
78465 */ +
78466 function setWith(object, path, value, customizer) { +
78467 customizer = typeof customizer == 'function' ? customizer : undefined; +
78468 return object == null ? object : baseSet(object, path, value, customizer); +
78469 } +
78470 +
78471 /** +
78472 * Creates an array of own enumerable string keyed-value pairs for `object` +
78473 * which can be consumed by `_.fromPairs`. If `object` is a map or set, its +
78474 * entries are returned. +
78475 * +
78476 * @static +
78477 * @memberOf _ +
78478 * @since 4.0.0 +
78479 * @alias entries +
78480 * @category Object +
78481 * @param {Object} object The object to query. +
78482 * @returns {Array} Returns the key-value pairs. +
78483 * @example +
78484 * +
78485 * function Foo() { +
78486 * this.a = 1; +
78487 * this.b = 2; +
78488 * } +
78489 * +
78490 * Foo.prototype.c = 3; +
78491 * +
78492 * _.toPairs(new Foo); +
78493 * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) +
78494 */ +
78495 var toPairs = createToPairs(keys); +
78496 +
78497 /** +
78498 * Creates an array of own and inherited enumerable string keyed-value pairs +
78499 * for `object` which can be consumed by `_.fromPairs`. If `object` is a map +
78500 * or set, its entries are returned. +
78501 * +
78502 * @static +
78503 * @memberOf _ +
78504 * @since 4.0.0 +
78505 * @alias entriesIn +
78506 * @category Object +
78507 * @param {Object} object The object to query. +
78508 * @returns {Array} Returns the key-value pairs. +
78509 * @example +
78510 * +
78511 * function Foo() { +
78512 * this.a = 1; +
78513 * this.b = 2; +
78514 * } +
78515 * +
78516 * Foo.prototype.c = 3; +
78517 * +
78518 * _.toPairsIn(new Foo); +
78519 * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) +
78520 */ +
78521 var toPairsIn = createToPairs(keysIn); +
78522 +
78523 /** +
78524 * An alternative to `_.reduce`; this method transforms `object` to a new +
78525 * `accumulator` object which is the result of running each of its own +
78526 * enumerable string keyed properties thru `iteratee`, with each invocation +
78527 * potentially mutating the `accumulator` object. If `accumulator` is not +
78528 * provided, a new object with the same `[[Prototype]]` will be used. The +
78529 * iteratee is invoked with four arguments: (accumulator, value, key, object). +
78530 * Iteratee functions may exit iteration early by explicitly returning `false`. +
78531 * +
78532 * @static +
78533 * @memberOf _ +
78534 * @since 1.3.0 +
78535 * @category Object +
78536 * @param {Object} object The object to iterate over. +
78537 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
78538 * @param {*} [accumulator] The custom accumulator value. +
78539 * @returns {*} Returns the accumulated value. +
78540 * @example +
78541 * +
78542 * _.transform([2, 3, 4], function(result, n) { +
78543 * result.push(n *= n); +
78544 * return n % 2 == 0; +
78545 * }, []); +
78546 * // => [4, 9] +
78547 * +
78548 * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +
78549 * (result[value] || (result[value] = [])).push(key); +
78550 * }, {}); +
78551 * // => { '1': ['a', 'c'], '2': ['b'] } +
78552 */ +
78553 function transform(object, iteratee, accumulator) { +
78554 var isArr = isArray(object), +
78555 isArrLike = isArr || isBuffer(object) || isTypedArray(object); +
78556 +
78557 iteratee = getIteratee(iteratee, 4); +
78558 if (accumulator == null) { +
78559 var Ctor = object && object.constructor; +
78560 if (isArrLike) { +
78561 accumulator = isArr ? new Ctor : []; +
78562 } +
78563 else if (isObject(object)) { +
78564 accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; +
78565 } +
78566 else { +
78567 accumulator = {}; +
78568 } +
78569 } +
78570 (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { +
78571 return iteratee(accumulator, value, index, object); +
78572 }); +
78573 return accumulator; +
78574 } +
78575 +
78576 /** +
78577 * Removes the property at `path` of `object`. +
78578 * +
78579 * **Note:** This method mutates `object`. +
78580 * +
78581 * @static +
78582 * @memberOf _ +
78583 * @since 4.0.0 +
78584 * @category Object +
78585 * @param {Object} object The object to modify. +
78586 * @param {Array|string} path The path of the property to unset. +
78587 * @returns {boolean} Returns `true` if the property is deleted, else `false`. +
78588 * @example +
78589 * +
78590 * var object = { 'a': [{ 'b': { 'c': 7 } }] }; +
78591 * _.unset(object, 'a[0].b.c'); +
78592 * // => true +
78593 * +
78594 * console.log(object); +
78595 * // => { 'a': [{ 'b': {} }] }; +
78596 * +
78597 * _.unset(object, ['a', '0', 'b', 'c']); +
78598 * // => true +
78599 * +
78600 * console.log(object); +
78601 * // => { 'a': [{ 'b': {} }] }; +
78602 */ +
78603 function unset(object, path) { +
78604 return object == null ? true : baseUnset(object, path); +
78605 } +
78606 +
78607 /** +
78608 * This method is like `_.set` except that accepts `updater` to produce the +
78609 * value to set. Use `_.updateWith` to customize `path` creation. The `updater` +
78610 * is invoked with one argument: (value). +
78611 * +
78612 * **Note:** This method mutates `object`. +
78613 * +
78614 * @static +
78615 * @memberOf _ +
78616 * @since 4.6.0 +
78617 * @category Object +
78618 * @param {Object} object The object to modify. +
78619 * @param {Array|string} path The path of the property to set. +
78620 * @param {Function} updater The function to produce the updated value. +
78621 * @returns {Object} Returns `object`. +
78622 * @example +
78623 * +
78624 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
78625 * +
78626 * _.update(object, 'a[0].b.c', function(n) { return n * n; }); +
78627 * console.log(object.a[0].b.c); +
78628 * // => 9 +
78629 * +
78630 * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); +
78631 * console.log(object.x[0].y.z); +
78632 * // => 0 +
78633 */ +
78634 function update(object, path, updater) { +
78635 return object == null ? object : baseUpdate(object, path, castFunction(updater)); +
78636 } +
78637 +
78638 /** +
78639 * This method is like `_.update` except that it accepts `customizer` which is +
78640 * invoked to produce the objects of `path`. If `customizer` returns `undefined` +
78641 * path creation is handled by the method instead. The `customizer` is invoked +
78642 * with three arguments: (nsValue, key, nsObject). +
78643 * +
78644 * **Note:** This method mutates `object`. +
78645 * +
78646 * @static +
78647 * @memberOf _ +
78648 * @since 4.6.0 +
78649 * @category Object +
78650 * @param {Object} object The object to modify. +
78651 * @param {Array|string} path The path of the property to set. +
78652 * @param {Function} updater The function to produce the updated value. +
78653 * @param {Function} [customizer] The function to customize assigned values. +
78654 * @returns {Object} Returns `object`. +
78655 * @example +
78656 * +
78657 * var object = {}; +
78658 * +
78659 * _.updateWith(object, '[0][1]', _.constant('a'), Object); +
78660 * // => { '0': { '1': 'a' } } +
78661 */ +
78662 function updateWith(object, path, updater, customizer) { +
78663 customizer = typeof customizer == 'function' ? customizer : undefined; +
78664 return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); +
78665 } +
78666 +
78667 /** +
78668 * Creates an array of the own enumerable string keyed property values of `object`. +
78669 * +
78670 * **Note:** Non-object values are coerced to objects. +
78671 * +
78672 * @static +
78673 * @since 0.1.0 +
78674 * @memberOf _ +
78675 * @category Object +
78676 * @param {Object} object The object to query. +
78677 * @returns {Array} Returns the array of property values. +
78678 * @example +
78679 * +
78680 * function Foo() { +
78681 * this.a = 1; +
78682 * this.b = 2; +
78683 * } +
78684 * +
78685 * Foo.prototype.c = 3; +
78686 * +
78687 * _.values(new Foo); +
78688 * // => [1, 2] (iteration order is not guaranteed) +
78689 * +
78690 * _.values('hi'); +
78691 * // => ['h', 'i'] +
78692 */ +
78693 function values(object) { +
78694 return object == null ? [] : baseValues(object, keys(object)); +
78695 } +
78696 +
78697 /** +
78698 * Creates an array of the own and inherited enumerable string keyed property +
78699 * values of `object`. +
78700 * +
78701 * **Note:** Non-object values are coerced to objects. +
78702 * +
78703 * @static +
78704 * @memberOf _ +
78705 * @since 3.0.0 +
78706 * @category Object +
78707 * @param {Object} object The object to query. +
78708 * @returns {Array} Returns the array of property values. +
78709 * @example +
78710 * +
78711 * function Foo() { +
78712 * this.a = 1; +
78713 * this.b = 2; +
78714 * } +
78715 * +
78716 * Foo.prototype.c = 3; +
78717 * +
78718 * _.valuesIn(new Foo); +
78719 * // => [1, 2, 3] (iteration order is not guaranteed) +
78720 */ +
78721 function valuesIn(object) { +
78722 return object == null ? [] : baseValues(object, keysIn(object)); +
78723 } +
78724 +
78725 /*------------------------------------------------------------------------*/ +
78726 +
78727 /** +
78728 * Clamps `number` within the inclusive `lower` and `upper` bounds. +
78729 * +
78730 * @static +
78731 * @memberOf _ +
78732 * @since 4.0.0 +
78733 * @category Number +
78734 * @param {number} number The number to clamp. +
78735 * @param {number} [lower] The lower bound. +
78736 * @param {number} upper The upper bound. +
78737 * @returns {number} Returns the clamped number. +
78738 * @example +
78739 * +
78740 * _.clamp(-10, -5, 5); +
78741 * // => -5 +
78742 * +
78743 * _.clamp(10, -5, 5); +
78744 * // => 5 +
78745 */ +
78746 function clamp(number, lower, upper) { +
78747 if (upper === undefined) { +
78748 upper = lower; +
78749 lower = undefined; +
78750 } +
78751 if (upper !== undefined) { +
78752 upper = toNumber(upper); +
78753 upper = upper === upper ? upper : 0; +
78754 } +
78755 if (lower !== undefined) { +
78756 lower = toNumber(lower); +
78757 lower = lower === lower ? lower : 0; +
78758 } +
78759 return baseClamp(toNumber(number), lower, upper); +
78760 } +
78761 +
78762 /** +
78763 * Checks if `n` is between `start` and up to, but not including, `end`. If +
78764 * `end` is not specified, it's set to `start` with `start` then set to `0`. +
78765 * If `start` is greater than `end` the params are swapped to support +
78766 * negative ranges. +
78767 * +
78768 * @static +
78769 * @memberOf _ +
78770 * @since 3.3.0 +
78771 * @category Number +
78772 * @param {number} number The number to check. +
78773 * @param {number} [start=0] The start of the range. +
78774 * @param {number} end The end of the range. +
78775 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +
78776 * @see _.range, _.rangeRight +
78777 * @example +
78778 * +
78779 * _.inRange(3, 2, 4); +
78780 * // => true +
78781 * +
78782 * _.inRange(4, 8); +
78783 * // => true +
78784 * +
78785 * _.inRange(4, 2); +
78786 * // => false +
78787 * +
78788 * _.inRange(2, 2); +
78789 * // => false +
78790 * +
78791 * _.inRange(1.2, 2); +
78792 * // => true +
78793 * +
78794 * _.inRange(5.2, 4); +
78795 * // => false +
78796 * +
78797 * _.inRange(-3, -2, -6); +
78798 * // => true +
78799 */ +
78800 function inRange(number, start, end) { +
78801 start = toFinite(start); +
78802 if (end === undefined) { +
78803 end = start; +
78804 start = 0; +
78805 } else { +
78806 end = toFinite(end); +
78807 } +
78808 number = toNumber(number); +
78809 return baseInRange(number, start, end); +
78810 } +
78811 +
78812 /** +
78813 * Produces a random number between the inclusive `lower` and `upper` bounds. +
78814 * If only one argument is provided a number between `0` and the given number +
78815 * is returned. If `floating` is `true`, or either `lower` or `upper` are +
78816 * floats, a floating-point number is returned instead of an integer. +
78817 * +
78818 * **Note:** JavaScript follows the IEEE-754 standard for resolving +
78819 * floating-point values which can produce unexpected results. +
78820 * +
78821 * @static +
78822 * @memberOf _ +
78823 * @since 0.7.0 +
78824 * @category Number +
78825 * @param {number} [lower=0] The lower bound. +
78826 * @param {number} [upper=1] The upper bound. +
78827 * @param {boolean} [floating] Specify returning a floating-point number. +
78828 * @returns {number} Returns the random number. +
78829 * @example +
78830 * +
78831 * _.random(0, 5); +
78832 * // => an integer between 0 and 5 +
78833 * +
78834 * _.random(5); +
78835 * // => also an integer between 0 and 5 +
78836 * +
78837 * _.random(5, true); +
78838 * // => a floating-point number between 0 and 5 +
78839 * +
78840 * _.random(1.2, 5.2); +
78841 * // => a floating-point number between 1.2 and 5.2 +
78842 */ +
78843 function random(lower, upper, floating) { +
78844 if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { +
78845 upper = floating = undefined; +
78846 } +
78847 if (floating === undefined) { +
78848 if (typeof upper == 'boolean') { +
78849 floating = upper; +
78850 upper = undefined; +
78851 } +
78852 else if (typeof lower == 'boolean') { +
78853 floating = lower; +
78854 lower = undefined; +
78855 } +
78856 } +
78857 if (lower === undefined && upper === undefined) { +
78858 lower = 0; +
78859 upper = 1; +
78860 } +
78861 else { +
78862 lower = toFinite(lower); +
78863 if (upper === undefined) { +
78864 upper = lower; +
78865 lower = 0; +
78866 } else { +
78867 upper = toFinite(upper); +
78868 } +
78869 } +
78870 if (lower > upper) { +
78871 var temp = lower; +
78872 lower = upper; +
78873 upper = temp; +
78874 } +
78875 if (floating || lower % 1 || upper % 1) { +
78876 var rand = nativeRandom(); +
78877 return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); +
78878 } +
78879 return baseRandom(lower, upper); +
78880 } +
78881 +
78882 /*------------------------------------------------------------------------*/ +
78883 +
78884 /** +
78885 * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). +
78886 * +
78887 * @static +
78888 * @memberOf _ +
78889 * @since 3.0.0 +
78890 * @category String +
78891 * @param {string} [string=''] The string to convert. +
78892 * @returns {string} Returns the camel cased string. +
78893 * @example +
78894 * +
78895 * _.camelCase('Foo Bar'); +
78896 * // => 'fooBar' +
78897 * +
78898 * _.camelCase('--foo-bar--'); +
78899 * // => 'fooBar' +
78900 * +
78901 * _.camelCase('__FOO_BAR__'); +
78902 * // => 'fooBar' +
78903 */ +
78904 var camelCase = createCompounder(function(result, word, index) { +
78905 word = word.toLowerCase(); +
78906 return result + (index ? capitalize(word) : word); +
78907 }); +
78908 +
78909 /** +
78910 * Converts the first character of `string` to upper case and the remaining +
78911 * to lower case. +
78912 * +
78913 * @static +
78914 * @memberOf _ +
78915 * @since 3.0.0 +
78916 * @category String +
78917 * @param {string} [string=''] The string to capitalize. +
78918 * @returns {string} Returns the capitalized string. +
78919 * @example +
78920 * +
78921 * _.capitalize('FRED'); +
78922 * // => 'Fred' +
78923 */ +
78924 function capitalize(string) { +
78925 return upperFirst(toString(string).toLowerCase()); +
78926 } +
78927 +
78928 /** +
78929 * Deburrs `string` by converting +
78930 * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) +
78931 * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) +
78932 * letters to basic Latin letters and removing +
78933 * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). +
78934 * +
78935 * @static +
78936 * @memberOf _ +
78937 * @since 3.0.0 +
78938 * @category String +
78939 * @param {string} [string=''] The string to deburr. +
78940 * @returns {string} Returns the deburred string. +
78941 * @example +
78942 * +
78943 * _.deburr('déjà vu'); +
78944 * // => 'deja vu' +
78945 */ +
78946 function deburr(string) { +
78947 string = toString(string); +
78948 return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +
78949 } +
78950 +
78951 /** +
78952 * Checks if `string` ends with the given target string. +
78953 * +
78954 * @static +
78955 * @memberOf _ +
78956 * @since 3.0.0 +
78957 * @category String +
78958 * @param {string} [string=''] The string to inspect. +
78959 * @param {string} [target] The string to search for. +
78960 * @param {number} [position=string.length] The position to search up to. +
78961 * @returns {boolean} Returns `true` if `string` ends with `target`, +
78962 * else `false`. +
78963 * @example +
78964 * +
78965 * _.endsWith('abc', 'c'); +
78966 * // => true +
78967 * +
78968 * _.endsWith('abc', 'b'); +
78969 * // => false +
78970 * +
78971 * _.endsWith('abc', 'b', 2); +
78972 * // => true +
78973 */ +
78974 function endsWith(string, target, position) { +
78975 string = toString(string); +
78976 target = baseToString(target); +
78977 +
78978 var length = string.length; +
78979 position = position === undefined +
78980 ? length +
78981 : baseClamp(toInteger(position), 0, length); +
78982 +
78983 var end = position; +
78984 position -= target.length; +
78985 return position >= 0 && string.slice(position, end) == target; +
78986 } +
78987 +
78988 /** +
78989 * Converts the characters "&", "<", ">", '"', and "'" in `string` to their +
78990 * corresponding HTML entities. +
78991 * +
78992 * **Note:** No other characters are escaped. To escape additional +
78993 * characters use a third-party library like [_he_](https://mths.be/he). +
78994 * +
78995 * Though the ">" character is escaped for symmetry, characters like +
78996 * ">" and "/" don't need escaping in HTML and have no special meaning +
78997 * unless they're part of a tag or unquoted attribute value. See +
78998 * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) +
78999 * (under "semi-related fun fact") for more details. +
79000 * +
79001 * When working with HTML you should always +
79002 * [quote attribute values](http://wonko.com/post/html-escaping) to reduce +
79003 * XSS vectors. +
79004 * +
79005 * @static +
79006 * @since 0.1.0 +
79007 * @memberOf _ +
79008 * @category String +
79009 * @param {string} [string=''] The string to escape. +
79010 * @returns {string} Returns the escaped string. +
79011 * @example +
79012 * +
79013 * _.escape('fred, barney, & pebbles'); +
79014 * // => 'fred, barney, &amp; pebbles' +
79015 */ +
79016 function escape(string) { +
79017 string = toString(string); +
79018 return (string && reHasUnescapedHtml.test(string)) +
79019 ? string.replace(reUnescapedHtml, escapeHtmlChar) +
79020 : string; +
79021 } +
79022 +
79023 /** +
79024 * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", +
79025 * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. +
79026 * +
79027 * @static +
79028 * @memberOf _ +
79029 * @since 3.0.0 +
79030 * @category String +
79031 * @param {string} [string=''] The string to escape. +
79032 * @returns {string} Returns the escaped string. +
79033 * @example +
79034 * +
79035 * _.escapeRegExp('[lodash](https://lodash.com/)'); +
79036 * // => '\[lodash\]\(https://lodash\.com/\)' +
79037 */ +
79038 function escapeRegExp(string) { +
79039 string = toString(string); +
79040 return (string && reHasRegExpChar.test(string)) +
79041 ? string.replace(reRegExpChar, '\\$&') +
79042 : string; +
79043 } +
79044 +
79045 /** +
79046 * Converts `string` to +
79047 * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). +
79048 * +
79049 * @static +
79050 * @memberOf _ +
79051 * @since 3.0.0 +
79052 * @category String +
79053 * @param {string} [string=''] The string to convert. +
79054 * @returns {string} Returns the kebab cased string. +
79055 * @example +
79056 * +
79057 * _.kebabCase('Foo Bar'); +
79058 * // => 'foo-bar' +
79059 * +
79060 * _.kebabCase('fooBar'); +
79061 * // => 'foo-bar' +
79062 * +
79063 * _.kebabCase('__FOO_BAR__'); +
79064 * // => 'foo-bar' +
79065 */ +
79066 var kebabCase = createCompounder(function(result, word, index) { +
79067 return result + (index ? '-' : '') + word.toLowerCase(); +
79068 }); +
79069 +
79070 /** +
79071 * Converts `string`, as space separated words, to lower case. +
79072 * +
79073 * @static +
79074 * @memberOf _ +
79075 * @since 4.0.0 +
79076 * @category String +
79077 * @param {string} [string=''] The string to convert. +
79078 * @returns {string} Returns the lower cased string. +
79079 * @example +
79080 * +
79081 * _.lowerCase('--Foo-Bar--'); +
79082 * // => 'foo bar' +
79083 * +
79084 * _.lowerCase('fooBar'); +
79085 * // => 'foo bar' +
79086 * +
79087 * _.lowerCase('__FOO_BAR__'); +
79088 * // => 'foo bar' +
79089 */ +
79090 var lowerCase = createCompounder(function(result, word, index) { +
79091 return result + (index ? ' ' : '') + word.toLowerCase(); +
79092 }); +
79093 +
79094 /** +
79095 * Converts the first character of `string` to lower case. +
79096 * +
79097 * @static +
79098 * @memberOf _ +
79099 * @since 4.0.0 +
79100 * @category String +
79101 * @param {string} [string=''] The string to convert. +
79102 * @returns {string} Returns the converted string. +
79103 * @example +
79104 * +
79105 * _.lowerFirst('Fred'); +
79106 * // => 'fred' +
79107 * +
79108 * _.lowerFirst('FRED'); +
79109 * // => 'fRED' +
79110 */ +
79111 var lowerFirst = createCaseFirst('toLowerCase'); +
79112 +
79113 /** +
79114 * Pads `string` on the left and right sides if it's shorter than `length`. +
79115 * Padding characters are truncated if they can't be evenly divided by `length`. +
79116 * +
79117 * @static +
79118 * @memberOf _ +
79119 * @since 3.0.0 +
79120 * @category String +
79121 * @param {string} [string=''] The string to pad. +
79122 * @param {number} [length=0] The padding length. +
79123 * @param {string} [chars=' '] The string used as padding. +
79124 * @returns {string} Returns the padded string. +
79125 * @example +
79126 * +
79127 * _.pad('abc', 8); +
79128 * // => ' abc ' +
79129 * +
79130 * _.pad('abc', 8, '_-'); +
79131 * // => '_-abc_-_' +
79132 * +
79133 * _.pad('abc', 3); +
79134 * // => 'abc' +
79135 */ +
79136 function pad(string, length, chars) { +
79137 string = toString(string); +
79138 length = toInteger(length); +
79139 +
79140 var strLength = length ? stringSize(string) : 0; +
79141 if (!length || strLength >= length) { +
79142 return string; +
79143 } +
79144 var mid = (length - strLength) / 2; +
79145 return ( +
79146 createPadding(nativeFloor(mid), chars) + +
79147 string + +
79148 createPadding(nativeCeil(mid), chars) +
79149 ); +
79150 } +
79151 +
79152 /** +
79153 * Pads `string` on the right side if it's shorter than `length`. Padding +
79154 * characters are truncated if they exceed `length`. +
79155 * +
79156 * @static +
79157 * @memberOf _ +
79158 * @since 4.0.0 +
79159 * @category String +
79160 * @param {string} [string=''] The string to pad. +
79161 * @param {number} [length=0] The padding length. +
79162 * @param {string} [chars=' '] The string used as padding. +
79163 * @returns {string} Returns the padded string. +
79164 * @example +
79165 * +
79166 * _.padEnd('abc', 6); +
79167 * // => 'abc ' +
79168 * +
79169 * _.padEnd('abc', 6, '_-'); +
79170 * // => 'abc_-_' +
79171 * +
79172 * _.padEnd('abc', 3); +
79173 * // => 'abc' +
79174 */ +
79175 function padEnd(string, length, chars) { +
79176 string = toString(string); +
79177 length = toInteger(length); +
79178 +
79179 var strLength = length ? stringSize(string) : 0; +
79180 return (length && strLength < length) +
79181 ? (string + createPadding(length - strLength, chars)) +
79182 : string; +
79183 } +
79184 +
79185 /** +
79186 * Pads `string` on the left side if it's shorter than `length`. Padding +
79187 * characters are truncated if they exceed `length`. +
79188 * +
79189 * @static +
79190 * @memberOf _ +
79191 * @since 4.0.0 +
79192 * @category String +
79193 * @param {string} [string=''] The string to pad. +
79194 * @param {number} [length=0] The padding length. +
79195 * @param {string} [chars=' '] The string used as padding. +
79196 * @returns {string} Returns the padded string. +
79197 * @example +
79198 * +
79199 * _.padStart('abc', 6); +
79200 * // => ' abc' +
79201 * +
79202 * _.padStart('abc', 6, '_-'); +
79203 * // => '_-_abc' +
79204 * +
79205 * _.padStart('abc', 3); +
79206 * // => 'abc' +
79207 */ +
79208 function padStart(string, length, chars) { +
79209 string = toString(string); +
79210 length = toInteger(length); +
79211 +
79212 var strLength = length ? stringSize(string) : 0; +
79213 return (length && strLength < length) +
79214 ? (createPadding(length - strLength, chars) + string) +
79215 : string; +
79216 } +
79217 +
79218 /** +
79219 * Converts `string` to an integer of the specified radix. If `radix` is +
79220 * `undefined` or `0`, a `radix` of `10` is used unless `value` is a +
79221 * hexadecimal, in which case a `radix` of `16` is used. +
79222 * +
79223 * **Note:** This method aligns with the +
79224 * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. +
79225 * +
79226 * @static +
79227 * @memberOf _ +
79228 * @since 1.1.0 +
79229 * @category String +
79230 * @param {string} string The string to convert. +
79231 * @param {number} [radix=10] The radix to interpret `value` by. +
79232 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
79233 * @returns {number} Returns the converted integer. +
79234 * @example +
79235 * +
79236 * _.parseInt('08'); +
79237 * // => 8 +
79238 * +
79239 * _.map(['6', '08', '10'], _.parseInt); +
79240 * // => [6, 8, 10] +
79241 */ +
79242 function parseInt(string, radix, guard) { +
79243 if (guard || radix == null) { +
79244 radix = 0; +
79245 } else if (radix) { +
79246 radix = +radix; +
79247 } +
79248 return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); +
79249 } +
79250 +
79251 /** +
79252 * Repeats the given string `n` times. +
79253 * +
79254 * @static +
79255 * @memberOf _ +
79256 * @since 3.0.0 +
79257 * @category String +
79258 * @param {string} [string=''] The string to repeat. +
79259 * @param {number} [n=1] The number of times to repeat the string. +
79260 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
79261 * @returns {string} Returns the repeated string. +
79262 * @example +
79263 * +
79264 * _.repeat('*', 3); +
79265 * // => '***' +
79266 * +
79267 * _.repeat('abc', 2); +
79268 * // => 'abcabc' +
79269 * +
79270 * _.repeat('abc', 0); +
79271 * // => '' +
79272 */ +
79273 function repeat(string, n, guard) { +
79274 if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { +
79275 n = 1; +
79276 } else { +
79277 n = toInteger(n); +
79278 } +
79279 return baseRepeat(toString(string), n); +
79280 } +
79281 +
79282 /** +
79283 * Replaces matches for `pattern` in `string` with `replacement`. +
79284 * +
79285 * **Note:** This method is based on +
79286 * [`String#replace`](https://mdn.io/String/replace). +
79287 * +
79288 * @static +
79289 * @memberOf _ +
79290 * @since 4.0.0 +
79291 * @category String +
79292 * @param {string} [string=''] The string to modify. +
79293 * @param {RegExp|string} pattern The pattern to replace. +
79294 * @param {Function|string} replacement The match replacement. +
79295 * @returns {string} Returns the modified string. +
79296 * @example +
79297 * +
79298 * _.replace('Hi Fred', 'Fred', 'Barney'); +
79299 * // => 'Hi Barney' +
79300 */ +
79301 function replace() { +
79302 var args = arguments, +
79303 string = toString(args[0]); +
79304 +
79305 return args.length < 3 ? string : string.replace(args[1], args[2]); +
79306 } +
79307 +
79308 /** +
79309 * Converts `string` to +
79310 * [snake case](https://en.wikipedia.org/wiki/Snake_case). +
79311 * +
79312 * @static +
79313 * @memberOf _ +
79314 * @since 3.0.0 +
79315 * @category String +
79316 * @param {string} [string=''] The string to convert. +
79317 * @returns {string} Returns the snake cased string. +
79318 * @example +
79319 * +
79320 * _.snakeCase('Foo Bar'); +
79321 * // => 'foo_bar' +
79322 * +
79323 * _.snakeCase('fooBar'); +
79324 * // => 'foo_bar' +
79325 * +
79326 * _.snakeCase('--FOO-BAR--'); +
79327 * // => 'foo_bar' +
79328 */ +
79329 var snakeCase = createCompounder(function(result, word, index) { +
79330 return result + (index ? '_' : '') + word.toLowerCase(); +
79331 }); +
79332 +
79333 /** +
79334 * Splits `string` by `separator`. +
79335 * +
79336 * **Note:** This method is based on +
79337 * [`String#split`](https://mdn.io/String/split). +
79338 * +
79339 * @static +
79340 * @memberOf _ +
79341 * @since 4.0.0 +
79342 * @category String +
79343 * @param {string} [string=''] The string to split. +
79344 * @param {RegExp|string} separator The separator pattern to split by. +
79345 * @param {number} [limit] The length to truncate results to. +
79346 * @returns {Array} Returns the string segments. +
79347 * @example +
79348 * +
79349 * _.split('a-b-c', '-', 2); +
79350 * // => ['a', 'b'] +
79351 */ +
79352 function split(string, separator, limit) { +
79353 if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { +
79354 separator = limit = undefined; +
79355 } +
79356 limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; +
79357 if (!limit) { +
79358 return []; +
79359 } +
79360 string = toString(string); +
79361 if (string && ( +
79362 typeof separator == 'string' || +
79363 (separator != null && !isRegExp(separator)) +
79364 )) { +
79365 separator = baseToString(separator); +
79366 if (!separator && hasUnicode(string)) { +
79367 return castSlice(stringToArray(string), 0, limit); +
79368 } +
79369 } +
79370 return string.split(separator, limit); +
79371 } +
79372 +
79373 /** +
79374 * Converts `string` to +
79375 * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). +
79376 * +
79377 * @static +
79378 * @memberOf _ +
79379 * @since 3.1.0 +
79380 * @category String +
79381 * @param {string} [string=''] The string to convert. +
79382 * @returns {string} Returns the start cased string. +
79383 * @example +
79384 * +
79385 * _.startCase('--foo-bar--'); +
79386 * // => 'Foo Bar' +
79387 * +
79388 * _.startCase('fooBar'); +
79389 * // => 'Foo Bar' +
79390 * +
79391 * _.startCase('__FOO_BAR__'); +
79392 * // => 'FOO BAR' +
79393 */ +
79394 var startCase = createCompounder(function(result, word, index) { +
79395 return result + (index ? ' ' : '') + upperFirst(word); +
79396 }); +
79397 +
79398 /** +
79399 * Checks if `string` starts with the given target string. +
79400 * +
79401 * @static +
79402 * @memberOf _ +
79403 * @since 3.0.0 +
79404 * @category String +
79405 * @param {string} [string=''] The string to inspect. +
79406 * @param {string} [target] The string to search for. +
79407 * @param {number} [position=0] The position to search from. +
79408 * @returns {boolean} Returns `true` if `string` starts with `target`, +
79409 * else `false`. +
79410 * @example +
79411 * +
79412 * _.startsWith('abc', 'a'); +
79413 * // => true +
79414 * +
79415 * _.startsWith('abc', 'b'); +
79416 * // => false +
79417 * +
79418 * _.startsWith('abc', 'b', 1); +
79419 * // => true +
79420 */ +
79421 function startsWith(string, target, position) { +
79422 string = toString(string); +
79423 position = position == null +
79424 ? 0 +
79425 : baseClamp(toInteger(position), 0, string.length); +
79426 +
79427 target = baseToString(target); +
79428 return string.slice(position, position + target.length) == target; +
79429 } +
79430 +
79431 /** +
79432 * Creates a compiled template function that can interpolate data properties +
79433 * in "interpolate" delimiters, HTML-escape interpolated data properties in +
79434 * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data +
79435 * properties may be accessed as free variables in the template. If a setting +
79436 * object is given, it takes precedence over `_.templateSettings` values. +
79437 * +
79438 * **Note:** In the development build `_.template` utilizes +
79439 * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) +
79440 * for easier debugging. +
79441 * +
79442 * For more information on precompiling templates see +
79443 * [lodash's custom builds documentation](https://lodash.com/custom-builds). +
79444 * +
79445 * For more information on Chrome extension sandboxes see +
79446 * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). +
79447 * +
79448 * @static +
79449 * @since 0.1.0 +
79450 * @memberOf _ +
79451 * @category String +
79452 * @param {string} [string=''] The template string. +
79453 * @param {Object} [options={}] The options object. +
79454 * @param {RegExp} [options.escape=_.templateSettings.escape] +
79455 * The HTML "escape" delimiter. +
79456 * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] +
79457 * The "evaluate" delimiter. +
79458 * @param {Object} [options.imports=_.templateSettings.imports] +
79459 * An object to import into the template as free variables. +
79460 * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] +
79461 * The "interpolate" delimiter. +
79462 * @param {string} [options.sourceURL='lodash.templateSources[n]'] +
79463 * The sourceURL of the compiled template. +
79464 * @param {string} [options.variable='obj'] +
79465 * The data object variable name. +
79466 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
79467 * @returns {Function} Returns the compiled template function. +
79468 * @example +
79469 * +
79470 * // Use the "interpolate" delimiter to create a compiled template. +
79471 * var compiled = _.template('hello <%= user %>!'); +
79472 * compiled({ 'user': 'fred' }); +
79473 * // => 'hello fred!' +
79474 * +
79475 * // Use the HTML "escape" delimiter to escape data property values. +
79476 * var compiled = _.template('<b><%- value %></b>'); +
79477 * compiled({ 'value': '<script>' }); +
79478 * // => '<b>&lt;script&gt;</b>' +
79479 * +
79480 * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. +
79481 * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); +
79482 * compiled({ 'users': ['fred', 'barney'] }); +
79483 * // => '<li>fred</li><li>barney</li>' +
79484 * +
79485 * // Use the internal `print` function in "evaluate" delimiters. +
79486 * var compiled = _.template('<% print("hello " + user); %>!'); +
79487 * compiled({ 'user': 'barney' }); +
79488 * // => 'hello barney!' +
79489 * +
79490 * // Use the ES template literal delimiter as an "interpolate" delimiter. +
79491 * // Disable support by replacing the "interpolate" delimiter. +
79492 * var compiled = _.template('hello ${ user }!'); +
79493 * compiled({ 'user': 'pebbles' }); +
79494 * // => 'hello pebbles!' +
79495 * +
79496 * // Use backslashes to treat delimiters as plain text. +
79497 * var compiled = _.template('<%= "\\<%- value %\\>" %>'); +
79498 * compiled({ 'value': 'ignored' }); +
79499 * // => '<%- value %>' +
79500 * +
79501 * // Use the `imports` option to import `jQuery` as `jq`. +
79502 * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; +
79503 * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); +
79504 * compiled({ 'users': ['fred', 'barney'] }); +
79505 * // => '<li>fred</li><li>barney</li>' +
79506 * +
79507 * // Use the `sourceURL` option to specify a custom sourceURL for the template. +
79508 * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); +
79509 * compiled(data); +
79510 * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. +
79511 * +
79512 * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. +
79513 * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); +
79514 * compiled.source; +
79515 * // => function(data) { +
79516 * // var __t, __p = ''; +
79517 * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; +
79518 * // return __p; +
79519 * // } +
79520 * +
79521 * // Use custom template delimiters. +
79522 * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; +
79523 * var compiled = _.template('hello {{ user }}!'); +
79524 * compiled({ 'user': 'mustache' }); +
79525 * // => 'hello mustache!' +
79526 * +
79527 * // Use the `source` property to inline compiled templates for meaningful +
79528 * // line numbers in error messages and stack traces. +
79529 * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ +
79530 * var JST = {\ +
79531 * "main": ' + _.template(mainText).source + '\ +
79532 * };\ +
79533 * '); +
79534 */ +
79535 function template(string, options, guard) { +
79536 // Based on John Resig's `tmpl` implementation +
79537 // (http://ejohn.org/blog/javascript-micro-templating/) +
79538 // and Laura Doktorova's doT.js (https://github.com/olado/doT). +
79539 var settings = lodash.templateSettings; +
79540 +
79541 if (guard && isIterateeCall(string, options, guard)) { +
79542 options = undefined; +
79543 } +
79544 string = toString(string); +
79545 options = assignInWith({}, options, settings, customDefaultsAssignIn); +
79546 +
79547 var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), +
79548 importsKeys = keys(imports), +
79549 importsValues = baseValues(imports, importsKeys); +
79550 +
79551 var isEscaping, +
79552 isEvaluating, +
79553 index = 0, +
79554 interpolate = options.interpolate || reNoMatch, +
79555 source = "__p += '"; +
79556 +
79557 // Compile the regexp to match each delimiter. +
79558 var reDelimiters = RegExp( +
79559 (options.escape || reNoMatch).source + '|' + +
79560 interpolate.source + '|' + +
79561 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + +
79562 (options.evaluate || reNoMatch).source + '|$' +
79563 , 'g'); +
79564 +
79565 // Use a sourceURL for easier debugging. +
79566 var sourceURL = '//# sourceURL=' + +
79567 ('sourceURL' in options +
79568 ? options.sourceURL +
79569 : ('lodash.templateSources[' + (++templateCounter) + ']') +
79570 ) + '\n'; +
79571 +
79572 string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { +
79573 interpolateValue || (interpolateValue = esTemplateValue); +
79574 +
79575 // Escape characters that can't be included in string literals. +
79576 source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); +
79577 +
79578 // Replace delimiters with snippets. +
79579 if (escapeValue) { +
79580 isEscaping = true; +
79581 source += "' +\n__e(" + escapeValue + ") +\n'"; +
79582 } +
79583 if (evaluateValue) { +
79584 isEvaluating = true; +
79585 source += "';\n" + evaluateValue + ";\n__p += '"; +
79586 } +
79587 if (interpolateValue) { +
79588 source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; +
79589 } +
79590 index = offset + match.length; +
79591 +
79592 // The JS engine embedded in Adobe products needs `match` returned in +
79593 // order to produce the correct `offset` value. +
79594 return match; +
79595 }); +
79596 +
79597 source += "';\n"; +
79598 +
79599 // If `variable` is not specified wrap a with-statement around the generated +
79600 // code to add the data object to the top of the scope chain. +
79601 var variable = options.variable; +
79602 if (!variable) { +
79603 source = 'with (obj) {\n' + source + '\n}\n'; +
79604 } +
79605 // Cleanup code by stripping empty strings. +
79606 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) +
79607 .replace(reEmptyStringMiddle, '$1') +
79608 .replace(reEmptyStringTrailing, '$1;'); +
79609 +
79610 // Frame code as the function body. +
79611 source = 'function(' + (variable || 'obj') + ') {\n' + +
79612 (variable +
79613 ? '' +
79614 : 'obj || (obj = {});\n' +
79615 ) + +
79616 "var __t, __p = ''" + +
79617 (isEscaping +
79618 ? ', __e = _.escape' +
79619 : '' +
79620 ) + +
79621 (isEvaluating +
79622 ? ', __j = Array.prototype.join;\n' + +
79623 "function print() { __p += __j.call(arguments, '') }\n" +
79624 : ';\n' +
79625 ) + +
79626 source + +
79627 'return __p\n}'; +
79628 +
79629 var result = attempt(function() { +
79630 return Function(importsKeys, sourceURL + 'return ' + source) +
79631 .apply(undefined, importsValues); +
79632 }); +
79633 +
79634 // Provide the compiled function's source by its `toString` method or +
79635 // the `source` property as a convenience for inlining compiled templates. +
79636 result.source = source; +
79637 if (isError(result)) { +
79638 throw result; +
79639 } +
79640 return result; +
79641 } +
79642 +
79643 /** +
79644 * Converts `string`, as a whole, to lower case just like +
79645 * [String#toLowerCase](https://mdn.io/toLowerCase). +
79646 * +
79647 * @static +
79648 * @memberOf _ +
79649 * @since 4.0.0 +
79650 * @category String +
79651 * @param {string} [string=''] The string to convert. +
79652 * @returns {string} Returns the lower cased string. +
79653 * @example +
79654 * +
79655 * _.toLower('--Foo-Bar--'); +
79656 * // => '--foo-bar--' +
79657 * +
79658 * _.toLower('fooBar'); +
79659 * // => 'foobar' +
79660 * +
79661 * _.toLower('__FOO_BAR__'); +
79662 * // => '__foo_bar__' +
79663 */ +
79664 function toLower(value) { +
79665 return toString(value).toLowerCase(); +
79666 } +
79667 +
79668 /** +
79669 * Converts `string`, as a whole, to upper case just like +
79670 * [String#toUpperCase](https://mdn.io/toUpperCase). +
79671 * +
79672 * @static +
79673 * @memberOf _ +
79674 * @since 4.0.0 +
79675 * @category String +
79676 * @param {string} [string=''] The string to convert. +
79677 * @returns {string} Returns the upper cased string. +
79678 * @example +
79679 * +
79680 * _.toUpper('--foo-bar--'); +
79681 * // => '--FOO-BAR--' +
79682 * +
79683 * _.toUpper('fooBar'); +
79684 * // => 'FOOBAR' +
79685 * +
79686 * _.toUpper('__foo_bar__'); +
79687 * // => '__FOO_BAR__' +
79688 */ +
79689 function toUpper(value) { +
79690 return toString(value).toUpperCase(); +
79691 } +
79692 +
79693 /** +
79694 * Removes leading and trailing whitespace or specified characters from `string`. +
79695 * +
79696 * @static +
79697 * @memberOf _ +
79698 * @since 3.0.0 +
79699 * @category String +
79700 * @param {string} [string=''] The string to trim. +
79701 * @param {string} [chars=whitespace] The characters to trim. +
79702 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
79703 * @returns {string} Returns the trimmed string. +
79704 * @example +
79705 * +
79706 * _.trim(' abc '); +
79707 * // => 'abc' +
79708 * +
79709 * _.trim('-_-abc-_-', '_-'); +
79710 * // => 'abc' +
79711 * +
79712 * _.map([' foo ', ' bar '], _.trim); +
79713 * // => ['foo', 'bar'] +
79714 */ +
79715 function trim(string, chars, guard) { +
79716 string = toString(string); +
79717 if (string && (guard || chars === undefined)) { +
79718 return string.replace(reTrim, ''); +
79719 } +
79720 if (!string || !(chars = baseToString(chars))) { +
79721 return string; +
79722 } +
79723 var strSymbols = stringToArray(string), +
79724 chrSymbols = stringToArray(chars), +
79725 start = charsStartIndex(strSymbols, chrSymbols), +
79726 end = charsEndIndex(strSymbols, chrSymbols) + 1; +
79727 +
79728 return castSlice(strSymbols, start, end).join(''); +
79729 } +
79730 +
79731 /** +
79732 * Removes trailing whitespace or specified characters from `string`. +
79733 * +
79734 * @static +
79735 * @memberOf _ +
79736 * @since 4.0.0 +
79737 * @category String +
79738 * @param {string} [string=''] The string to trim. +
79739 * @param {string} [chars=whitespace] The characters to trim. +
79740 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
79741 * @returns {string} Returns the trimmed string. +
79742 * @example +
79743 * +
79744 * _.trimEnd(' abc '); +
79745 * // => ' abc' +
79746 * +
79747 * _.trimEnd('-_-abc-_-', '_-'); +
79748 * // => '-_-abc' +
79749 */ +
79750 function trimEnd(string, chars, guard) { +
79751 string = toString(string); +
79752 if (string && (guard || chars === undefined)) { +
79753 return string.replace(reTrimEnd, ''); +
79754 } +
79755 if (!string || !(chars = baseToString(chars))) { +
79756 return string; +
79757 } +
79758 var strSymbols = stringToArray(string), +
79759 end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; +
79760 +
79761 return castSlice(strSymbols, 0, end).join(''); +
79762 } +
79763 +
79764 /** +
79765 * Removes leading whitespace or specified characters from `string`. +
79766 * +
79767 * @static +
79768 * @memberOf _ +
79769 * @since 4.0.0 +
79770 * @category String +
79771 * @param {string} [string=''] The string to trim. +
79772 * @param {string} [chars=whitespace] The characters to trim. +
79773 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
79774 * @returns {string} Returns the trimmed string. +
79775 * @example +
79776 * +
79777 * _.trimStart(' abc '); +
79778 * // => 'abc ' +
79779 * +
79780 * _.trimStart('-_-abc-_-', '_-'); +
79781 * // => 'abc-_-' +
79782 */ +
79783 function trimStart(string, chars, guard) { +
79784 string = toString(string); +
79785 if (string && (guard || chars === undefined)) { +
79786 return string.replace(reTrimStart, ''); +
79787 } +
79788 if (!string || !(chars = baseToString(chars))) { +
79789 return string; +
79790 } +
79791 var strSymbols = stringToArray(string), +
79792 start = charsStartIndex(strSymbols, stringToArray(chars)); +
79793 +
79794 return castSlice(strSymbols, start).join(''); +
79795 } +
79796 +
79797 /** +
79798 * Truncates `string` if it's longer than the given maximum string length. +
79799 * The last characters of the truncated string are replaced with the omission +
79800 * string which defaults to "...". +
79801 * +
79802 * @static +
79803 * @memberOf _ +
79804 * @since 4.0.0 +
79805 * @category String +
79806 * @param {string} [string=''] The string to truncate. +
79807 * @param {Object} [options={}] The options object. +
79808 * @param {number} [options.length=30] The maximum string length. +
79809 * @param {string} [options.omission='...'] The string to indicate text is omitted. +
79810 * @param {RegExp|string} [options.separator] The separator pattern to truncate to. +
79811 * @returns {string} Returns the truncated string. +
79812 * @example +
79813 * +
79814 * _.truncate('hi-diddly-ho there, neighborino'); +
79815 * // => 'hi-diddly-ho there, neighbo...' +
79816 * +
79817 * _.truncate('hi-diddly-ho there, neighborino', { +
79818 * 'length': 24, +
79819 * 'separator': ' ' +
79820 * }); +
79821 * // => 'hi-diddly-ho there,...' +
79822 * +
79823 * _.truncate('hi-diddly-ho there, neighborino', { +
79824 * 'length': 24, +
79825 * 'separator': /,? +/ +
79826 * }); +
79827 * // => 'hi-diddly-ho there...' +
79828 * +
79829 * _.truncate('hi-diddly-ho there, neighborino', { +
79830 * 'omission': ' [...]' +
79831 * }); +
79832 * // => 'hi-diddly-ho there, neig [...]' +
79833 */ +
79834 function truncate(string, options) { +
79835 var length = DEFAULT_TRUNC_LENGTH, +
79836 omission = DEFAULT_TRUNC_OMISSION; +
79837 +
79838 if (isObject(options)) { +
79839 var separator = 'separator' in options ? options.separator : separator; +
79840 length = 'length' in options ? toInteger(options.length) : length; +
79841 omission = 'omission' in options ? baseToString(options.omission) : omission; +
79842 } +
79843 string = toString(string); +
79844 +
79845 var strLength = string.length; +
79846 if (hasUnicode(string)) { +
79847 var strSymbols = stringToArray(string); +
79848 strLength = strSymbols.length; +
79849 } +
79850 if (length >= strLength) { +
79851 return string; +
79852 } +
79853 var end = length - stringSize(omission); +
79854 if (end < 1) { +
79855 return omission; +
79856 } +
79857 var result = strSymbols +
79858 ? castSlice(strSymbols, 0, end).join('') +
79859 : string.slice(0, end); +
79860 +
79861 if (separator === undefined) { +
79862 return result + omission; +
79863 } +
79864 if (strSymbols) { +
79865 end += (result.length - end); +
79866 } +
79867 if (isRegExp(separator)) { +
79868 if (string.slice(end).search(separator)) { +
79869 var match, +
79870 substring = result; +
79871 +
79872 if (!separator.global) { +
79873 separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); +
79874 } +
79875 separator.lastIndex = 0; +
79876 while ((match = separator.exec(substring))) { +
79877 var newEnd = match.index; +
79878 } +
79879 result = result.slice(0, newEnd === undefined ? end : newEnd); +
79880 } +
79881 } else if (string.indexOf(baseToString(separator), end) != end) { +
79882 var index = result.lastIndexOf(separator); +
79883 if (index > -1) { +
79884 result = result.slice(0, index); +
79885 } +
79886 } +
79887 return result + omission; +
79888 } +
79889 +
79890 /** +
79891 * The inverse of `_.escape`; this method converts the HTML entities +
79892 * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to +
79893 * their corresponding characters. +
79894 * +
79895 * **Note:** No other HTML entities are unescaped. To unescape additional +
79896 * HTML entities use a third-party library like [_he_](https://mths.be/he). +
79897 * +
79898 * @static +
79899 * @memberOf _ +
79900 * @since 0.6.0 +
79901 * @category String +
79902 * @param {string} [string=''] The string to unescape. +
79903 * @returns {string} Returns the unescaped string. +
79904 * @example +
79905 * +
79906 * _.unescape('fred, barney, &amp; pebbles'); +
79907 * // => 'fred, barney, & pebbles' +
79908 */ +
79909 function unescape(string) { +
79910 string = toString(string); +
79911 return (string && reHasEscapedHtml.test(string)) +
79912 ? string.replace(reEscapedHtml, unescapeHtmlChar) +
79913 : string; +
79914 } +
79915 +
79916 /** +
79917 * Converts `string`, as space separated words, to upper case. +
79918 * +
79919 * @static +
79920 * @memberOf _ +
79921 * @since 4.0.0 +
79922 * @category String +
79923 * @param {string} [string=''] The string to convert. +
79924 * @returns {string} Returns the upper cased string. +
79925 * @example +
79926 * +
79927 * _.upperCase('--foo-bar'); +
79928 * // => 'FOO BAR' +
79929 * +
79930 * _.upperCase('fooBar'); +
79931 * // => 'FOO BAR' +
79932 * +
79933 * _.upperCase('__foo_bar__'); +
79934 * // => 'FOO BAR' +
79935 */ +
79936 var upperCase = createCompounder(function(result, word, index) { +
79937 return result + (index ? ' ' : '') + word.toUpperCase(); +
79938 }); +
79939 +
79940 /** +
79941 * Converts the first character of `string` to upper case. +
79942 * +
79943 * @static +
79944 * @memberOf _ +
79945 * @since 4.0.0 +
79946 * @category String +
79947 * @param {string} [string=''] The string to convert. +
79948 * @returns {string} Returns the converted string. +
79949 * @example +
79950 * +
79951 * _.upperFirst('fred'); +
79952 * // => 'Fred' +
79953 * +
79954 * _.upperFirst('FRED'); +
79955 * // => 'FRED' +
79956 */ +
79957 var upperFirst = createCaseFirst('toUpperCase'); +
79958 +
79959 /** +
79960 * Splits `string` into an array of its words. +
79961 * +
79962 * @static +
79963 * @memberOf _ +
79964 * @since 3.0.0 +
79965 * @category String +
79966 * @param {string} [string=''] The string to inspect. +
79967 * @param {RegExp|string} [pattern] The pattern to match words. +
79968 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
79969 * @returns {Array} Returns the words of `string`. +
79970 * @example +
79971 * +
79972 * _.words('fred, barney, & pebbles'); +
79973 * // => ['fred', 'barney', 'pebbles'] +
79974 * +
79975 * _.words('fred, barney, & pebbles', /[^, ]+/g); +
79976 * // => ['fred', 'barney', '&', 'pebbles'] +
79977 */ +
79978 function words(string, pattern, guard) { +
79979 string = toString(string); +
79980 pattern = guard ? undefined : pattern; +
79981 +
79982 if (pattern === undefined) { +
79983 return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); +
79984 } +
79985 return string.match(pattern) || []; +
79986 } +
79987 +
79988 /*------------------------------------------------------------------------*/ +
79989 +
79990 /** +
79991 * Attempts to invoke `func`, returning either the result or the caught error +
79992 * object. Any additional arguments are provided to `func` when it's invoked. +
79993 * +
79994 * @static +
79995 * @memberOf _ +
79996 * @since 3.0.0 +
79997 * @category Util +
79998 * @param {Function} func The function to attempt. +
79999 * @param {...*} [args] The arguments to invoke `func` with. +
80000 * @returns {*} Returns the `func` result or error object. +
80001 * @example +
80002 * +
80003 * // Avoid throwing errors for invalid selectors. +
80004 * var elements = _.attempt(function(selector) { +
80005 * return document.querySelectorAll(selector); +
80006 * }, '>_>'); +
80007 * +
80008 * if (_.isError(elements)) { +
80009 * elements = []; +
80010 * } +
80011 */ +
80012 var attempt = baseRest(function(func, args) { +
80013 try { +
80014 return apply(func, undefined, args); +
80015 } catch (e) { +
80016 return isError(e) ? e : new Error(e); +
80017 } +
80018 }); +
80019 +
80020 /** +
80021 * Binds methods of an object to the object itself, overwriting the existing +
80022 * method. +
80023 * +
80024 * **Note:** This method doesn't set the "length" property of bound functions. +
80025 * +
80026 * @static +
80027 * @since 0.1.0 +
80028 * @memberOf _ +
80029 * @category Util +
80030 * @param {Object} object The object to bind and assign the bound methods to. +
80031 * @param {...(string|string[])} methodNames The object method names to bind. +
80032 * @returns {Object} Returns `object`. +
80033 * @example +
80034 * +
80035 * var view = { +
80036 * 'label': 'docs', +
80037 * 'click': function() { +
80038 * console.log('clicked ' + this.label); +
80039 * } +
80040 * }; +
80041 * +
80042 * _.bindAll(view, ['click']); +
80043 * jQuery(element).on('click', view.click); +
80044 * // => Logs 'clicked docs' when clicked. +
80045 */ +
80046 var bindAll = flatRest(function(object, methodNames) { +
80047 arrayEach(methodNames, function(key) { +
80048 key = toKey(key); +
80049 baseAssignValue(object, key, bind(object[key], object)); +
80050 }); +
80051 return object; +
80052 }); +
80053 +
80054 /** +
80055 * Creates a function that iterates over `pairs` and invokes the corresponding +
80056 * function of the first predicate to return truthy. The predicate-function +
80057 * pairs are invoked with the `this` binding and arguments of the created +
80058 * function. +
80059 * +
80060 * @static +
80061 * @memberOf _ +
80062 * @since 4.0.0 +
80063 * @category Util +
80064 * @param {Array} pairs The predicate-function pairs. +
80065 * @returns {Function} Returns the new composite function. +
80066 * @example +
80067 * +
80068 * var func = _.cond([ +
80069 * [_.matches({ 'a': 1 }), _.constant('matches A')], +
80070 * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], +
80071 * [_.stubTrue, _.constant('no match')] +
80072 * ]); +
80073 * +
80074 * func({ 'a': 1, 'b': 2 }); +
80075 * // => 'matches A' +
80076 * +
80077 * func({ 'a': 0, 'b': 1 }); +
80078 * // => 'matches B' +
80079 * +
80080 * func({ 'a': '1', 'b': '2' }); +
80081 * // => 'no match' +
80082 */ +
80083 function cond(pairs) { +
80084 var length = pairs == null ? 0 : pairs.length, +
80085 toIteratee = getIteratee(); +
80086 +
80087 pairs = !length ? [] : arrayMap(pairs, function(pair) { +
80088 if (typeof pair[1] != 'function') { +
80089 throw new TypeError(FUNC_ERROR_TEXT); +
80090 } +
80091 return [toIteratee(pair[0]), pair[1]]; +
80092 }); +
80093 +
80094 return baseRest(function(args) { +
80095 var index = -1; +
80096 while (++index < length) { +
80097 var pair = pairs[index]; +
80098 if (apply(pair[0], this, args)) { +
80099 return apply(pair[1], this, args); +
80100 } +
80101 } +
80102 }); +
80103 } +
80104 +
80105 /** +
80106 * Creates a function that invokes the predicate properties of `source` with +
80107 * the corresponding property values of a given object, returning `true` if +
80108 * all predicates return truthy, else `false`. +
80109 * +
80110 * **Note:** The created function is equivalent to `_.conformsTo` with +
80111 * `source` partially applied. +
80112 * +
80113 * @static +
80114 * @memberOf _ +
80115 * @since 4.0.0 +
80116 * @category Util +
80117 * @param {Object} source The object of property predicates to conform to. +
80118 * @returns {Function} Returns the new spec function. +
80119 * @example +
80120 * +
80121 * var objects = [ +
80122 * { 'a': 2, 'b': 1 }, +
80123 * { 'a': 1, 'b': 2 } +
80124 * ]; +
80125 * +
80126 * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); +
80127 * // => [{ 'a': 1, 'b': 2 }] +
80128 */ +
80129 function conforms(source) { +
80130 return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); +
80131 } +
80132 +
80133 /** +
80134 * Creates a function that returns `value`. +
80135 * +
80136 * @static +
80137 * @memberOf _ +
80138 * @since 2.4.0 +
80139 * @category Util +
80140 * @param {*} value The value to return from the new function. +
80141 * @returns {Function} Returns the new constant function. +
80142 * @example +
80143 * +
80144 * var objects = _.times(2, _.constant({ 'a': 1 })); +
80145 * +
80146 * console.log(objects); +
80147 * // => [{ 'a': 1 }, { 'a': 1 }] +
80148 * +
80149 * console.log(objects[0] === objects[1]); +
80150 * // => true +
80151 */ +
80152 function constant(value) { +
80153 return function() { +
80154 return value; +
80155 }; +
80156 } +
80157 +
80158 /** +
80159 * Checks `value` to determine whether a default value should be returned in +
80160 * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, +
80161 * or `undefined`. +
80162 * +
80163 * @static +
80164 * @memberOf _ +
80165 * @since 4.14.0 +
80166 * @category Util +
80167 * @param {*} value The value to check. +
80168 * @param {*} defaultValue The default value. +
80169 * @returns {*} Returns the resolved value. +
80170 * @example +
80171 * +
80172 * _.defaultTo(1, 10); +
80173 * // => 1 +
80174 * +
80175 * _.defaultTo(undefined, 10); +
80176 * // => 10 +
80177 */ +
80178 function defaultTo(value, defaultValue) { +
80179 return (value == null || value !== value) ? defaultValue : value; +
80180 } +
80181 +
80182 /** +
80183 * Creates a function that returns the result of invoking the given functions +
80184 * with the `this` binding of the created function, where each successive +
80185 * invocation is supplied the return value of the previous. +
80186 * +
80187 * @static +
80188 * @memberOf _ +
80189 * @since 3.0.0 +
80190 * @category Util +
80191 * @param {...(Function|Function[])} [funcs] The functions to invoke. +
80192 * @returns {Function} Returns the new composite function. +
80193 * @see _.flowRight +
80194 * @example +
80195 * +
80196 * function square(n) { +
80197 * return n * n; +
80198 * } +
80199 * +
80200 * var addSquare = _.flow([_.add, square]); +
80201 * addSquare(1, 2); +
80202 * // => 9 +
80203 */ +
80204 var flow = createFlow(); +
80205 +
80206 /** +
80207 * This method is like `_.flow` except that it creates a function that +
80208 * invokes the given functions from right to left. +
80209 * +
80210 * @static +
80211 * @since 3.0.0 +
80212 * @memberOf _ +
80213 * @category Util +
80214 * @param {...(Function|Function[])} [funcs] The functions to invoke. +
80215 * @returns {Function} Returns the new composite function. +
80216 * @see _.flow +
80217 * @example +
80218 * +
80219 * function square(n) { +
80220 * return n * n; +
80221 * } +
80222 * +
80223 * var addSquare = _.flowRight([square, _.add]); +
80224 * addSquare(1, 2); +
80225 * // => 9 +
80226 */ +
80227 var flowRight = createFlow(true); +
80228 +
80229 /** +
80230 * This method returns the first argument it receives. +
80231 * +
80232 * @static +
80233 * @since 0.1.0 +
80234 * @memberOf _ +
80235 * @category Util +
80236 * @param {*} value Any value. +
80237 * @returns {*} Returns `value`. +
80238 * @example +
80239 * +
80240 * var object = { 'a': 1 }; +
80241 * +
80242 * console.log(_.identity(object) === object); +
80243 * // => true +
80244 */ +
80245 function identity(value) { +
80246 return value; +
80247 } +
80248 +
80249 /** +
80250 * Creates a function that invokes `func` with the arguments of the created +
80251 * function. If `func` is a property name, the created function returns the +
80252 * property value for a given element. If `func` is an array or object, the +
80253 * created function returns `true` for elements that contain the equivalent +
80254 * source properties, otherwise it returns `false`. +
80255 * +
80256 * @static +
80257 * @since 4.0.0 +
80258 * @memberOf _ +
80259 * @category Util +
80260 * @param {*} [func=_.identity] The value to convert to a callback. +
80261 * @returns {Function} Returns the callback. +
80262 * @example +
80263 * +
80264 * var users = [ +
80265 * { 'user': 'barney', 'age': 36, 'active': true }, +
80266 * { 'user': 'fred', 'age': 40, 'active': false } +
80267 * ]; +
80268 * +
80269 * // The `_.matches` iteratee shorthand. +
80270 * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); +
80271 * // => [{ 'user': 'barney', 'age': 36, 'active': true }] +
80272 * +
80273 * // The `_.matchesProperty` iteratee shorthand. +
80274 * _.filter(users, _.iteratee(['user', 'fred'])); +
80275 * // => [{ 'user': 'fred', 'age': 40 }] +
80276 * +
80277 * // The `_.property` iteratee shorthand. +
80278 * _.map(users, _.iteratee('user')); +
80279 * // => ['barney', 'fred'] +
80280 * +
80281 * // Create custom iteratee shorthands. +
80282 * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { +
80283 * return !_.isRegExp(func) ? iteratee(func) : function(string) { +
80284 * return func.test(string); +
80285 * }; +
80286 * }); +
80287 * +
80288 * _.filter(['abc', 'def'], /ef/); +
80289 * // => ['def'] +
80290 */ +
80291 function iteratee(func) { +
80292 return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); +
80293 } +
80294 +
80295 /** +
80296 * Creates a function that performs a partial deep comparison between a given +
80297 * object and `source`, returning `true` if the given object has equivalent +
80298 * property values, else `false`. +
80299 * +
80300 * **Note:** The created function is equivalent to `_.isMatch` with `source` +
80301 * partially applied. +
80302 * +
80303 * Partial comparisons will match empty array and empty object `source` +
80304 * values against any array or object value, respectively. See `_.isEqual` +
80305 * for a list of supported value comparisons. +
80306 * +
80307 * @static +
80308 * @memberOf _ +
80309 * @since 3.0.0 +
80310 * @category Util +
80311 * @param {Object} source The object of property values to match. +
80312 * @returns {Function} Returns the new spec function. +
80313 * @example +
80314 * +
80315 * var objects = [ +
80316 * { 'a': 1, 'b': 2, 'c': 3 }, +
80317 * { 'a': 4, 'b': 5, 'c': 6 } +
80318 * ]; +
80319 * +
80320 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); +
80321 * // => [{ 'a': 4, 'b': 5, 'c': 6 }] +
80322 */ +
80323 function matches(source) { +
80324 return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); +
80325 } +
80326 +
80327 /** +
80328 * Creates a function that performs a partial deep comparison between the +
80329 * value at `path` of a given object to `srcValue`, returning `true` if the +
80330 * object value is equivalent, else `false`. +
80331 * +
80332 * **Note:** Partial comparisons will match empty array and empty object +
80333 * `srcValue` values against any array or object value, respectively. See +
80334 * `_.isEqual` for a list of supported value comparisons. +
80335 * +
80336 * @static +
80337 * @memberOf _ +
80338 * @since 3.2.0 +
80339 * @category Util +
80340 * @param {Array|string} path The path of the property to get. +
80341 * @param {*} srcValue The value to match. +
80342 * @returns {Function} Returns the new spec function. +
80343 * @example +
80344 * +
80345 * var objects = [ +
80346 * { 'a': 1, 'b': 2, 'c': 3 }, +
80347 * { 'a': 4, 'b': 5, 'c': 6 } +
80348 * ]; +
80349 * +
80350 * _.find(objects, _.matchesProperty('a', 4)); +
80351 * // => { 'a': 4, 'b': 5, 'c': 6 } +
80352 */ +
80353 function matchesProperty(path, srcValue) { +
80354 return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); +
80355 } +
80356 +
80357 /** +
80358 * Creates a function that invokes the method at `path` of a given object. +
80359 * Any additional arguments are provided to the invoked method. +
80360 * +
80361 * @static +
80362 * @memberOf _ +
80363 * @since 3.7.0 +
80364 * @category Util +
80365 * @param {Array|string} path The path of the method to invoke. +
80366 * @param {...*} [args] The arguments to invoke the method with. +
80367 * @returns {Function} Returns the new invoker function. +
80368 * @example +
80369 * +
80370 * var objects = [ +
80371 * { 'a': { 'b': _.constant(2) } }, +
80372 * { 'a': { 'b': _.constant(1) } } +
80373 * ]; +
80374 * +
80375 * _.map(objects, _.method('a.b')); +
80376 * // => [2, 1] +
80377 * +
80378 * _.map(objects, _.method(['a', 'b'])); +
80379 * // => [2, 1] +
80380 */ +
80381 var method = baseRest(function(path, args) { +
80382 return function(object) { +
80383 return baseInvoke(object, path, args); +
80384 }; +
80385 }); +
80386 +
80387 /** +
80388 * The opposite of `_.method`; this method creates a function that invokes +
80389 * the method at a given path of `object`. Any additional arguments are +
80390 * provided to the invoked method. +
80391 * +
80392 * @static +
80393 * @memberOf _ +
80394 * @since 3.7.0 +
80395 * @category Util +
80396 * @param {Object} object The object to query. +
80397 * @param {...*} [args] The arguments to invoke the method with. +
80398 * @returns {Function} Returns the new invoker function. +
80399 * @example +
80400 * +
80401 * var array = _.times(3, _.constant), +
80402 * object = { 'a': array, 'b': array, 'c': array }; +
80403 * +
80404 * _.map(['a[2]', 'c[0]'], _.methodOf(object)); +
80405 * // => [2, 0] +
80406 * +
80407 * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); +
80408 * // => [2, 0] +
80409 */ +
80410 var methodOf = baseRest(function(object, args) { +
80411 return function(path) { +
80412 return baseInvoke(object, path, args); +
80413 }; +
80414 }); +
80415 +
80416 /** +
80417 * Adds all own enumerable string keyed function properties of a source +
80418 * object to the destination object. If `object` is a function, then methods +
80419 * are added to its prototype as well. +
80420 * +
80421 * **Note:** Use `_.runInContext` to create a pristine `lodash` function to +
80422 * avoid conflicts caused by modifying the original. +
80423 * +
80424 * @static +
80425 * @since 0.1.0 +
80426 * @memberOf _ +
80427 * @category Util +
80428 * @param {Function|Object} [object=lodash] The destination object. +
80429 * @param {Object} source The object of functions to add. +
80430 * @param {Object} [options={}] The options object. +
80431 * @param {boolean} [options.chain=true] Specify whether mixins are chainable. +
80432 * @returns {Function|Object} Returns `object`. +
80433 * @example +
80434 * +
80435 * function vowels(string) { +
80436 * return _.filter(string, function(v) { +
80437 * return /[aeiou]/i.test(v); +
80438 * }); +
80439 * } +
80440 * +
80441 * _.mixin({ 'vowels': vowels }); +
80442 * _.vowels('fred'); +
80443 * // => ['e'] +
80444 * +
80445 * _('fred').vowels().value(); +
80446 * // => ['e'] +
80447 * +
80448 * _.mixin({ 'vowels': vowels }, { 'chain': false }); +
80449 * _('fred').vowels(); +
80450 * // => ['e'] +
80451 */ +
80452 function mixin(object, source, options) { +
80453 var props = keys(source), +
80454 methodNames = baseFunctions(source, props); +
80455 +
80456 if (options == null && +
80457 !(isObject(source) && (methodNames.length || !props.length))) { +
80458 options = source; +
80459 source = object; +
80460 object = this; +
80461 methodNames = baseFunctions(source, keys(source)); +
80462 } +
80463 var chain = !(isObject(options) && 'chain' in options) || !!options.chain, +
80464 isFunc = isFunction(object); +
80465 +
80466 arrayEach(methodNames, function(methodName) { +
80467 var func = source[methodName]; +
80468 object[methodName] = func; +
80469 if (isFunc) { +
80470 object.prototype[methodName] = function() { +
80471 var chainAll = this.__chain__; +
80472 if (chain || chainAll) { +
80473 var result = object(this.__wrapped__), +
80474 actions = result.__actions__ = copyArray(this.__actions__); +
80475 +
80476 actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); +
80477 result.__chain__ = chainAll; +
80478 return result; +
80479 } +
80480 return func.apply(object, arrayPush([this.value()], arguments)); +
80481 }; +
80482 } +
80483 }); +
80484 +
80485 return object; +
80486 } +
80487 +
80488 /** +
80489 * Reverts the `_` variable to its previous value and returns a reference to +
80490 * the `lodash` function. +
80491 * +
80492 * @static +
80493 * @since 0.1.0 +
80494 * @memberOf _ +
80495 * @category Util +
80496 * @returns {Function} Returns the `lodash` function. +
80497 * @example +
80498 * +
80499 * var lodash = _.noConflict(); +
80500 */ +
80501 function noConflict() { +
80502 if (root._ === this) { +
80503 root._ = oldDash; +
80504 } +
80505 return this; +
80506 } +
80507 +
80508 /** +
80509 * This method returns `undefined`. +
80510 * +
80511 * @static +
80512 * @memberOf _ +
80513 * @since 2.3.0 +
80514 * @category Util +
80515 * @example +
80516 * +
80517 * _.times(2, _.noop); +
80518 * // => [undefined, undefined] +
80519 */ +
80520 function noop() { +
80521 // No operation performed. +
80522 } +
80523 +
80524 /** +
80525 * Creates a function that gets the argument at index `n`. If `n` is negative, +
80526 * the nth argument from the end is returned. +
80527 * +
80528 * @static +
80529 * @memberOf _ +
80530 * @since 4.0.0 +
80531 * @category Util +
80532 * @param {number} [n=0] The index of the argument to return. +
80533 * @returns {Function} Returns the new pass-thru function. +
80534 * @example +
80535 * +
80536 * var func = _.nthArg(1); +
80537 * func('a', 'b', 'c', 'd'); +
80538 * // => 'b' +
80539 * +
80540 * var func = _.nthArg(-2); +
80541 * func('a', 'b', 'c', 'd'); +
80542 * // => 'c' +
80543 */ +
80544 function nthArg(n) { +
80545 n = toInteger(n); +
80546 return baseRest(function(args) { +
80547 return baseNth(args, n); +
80548 }); +
80549 } +
80550 +
80551 /** +
80552 * Creates a function that invokes `iteratees` with the arguments it receives +
80553 * and returns their results. +
80554 * +
80555 * @static +
80556 * @memberOf _ +
80557 * @since 4.0.0 +
80558 * @category Util +
80559 * @param {...(Function|Function[])} [iteratees=[_.identity]] +
80560 * The iteratees to invoke. +
80561 * @returns {Function} Returns the new function. +
80562 * @example +
80563 * +
80564 * var func = _.over([Math.max, Math.min]); +
80565 * +
80566 * func(1, 2, 3, 4); +
80567 * // => [4, 1] +
80568 */ +
80569 var over = createOver(arrayMap); +
80570 +
80571 /** +
80572 * Creates a function that checks if **all** of the `predicates` return +
80573 * truthy when invoked with the arguments it receives. +
80574 * +
80575 * @static +
80576 * @memberOf _ +
80577 * @since 4.0.0 +
80578 * @category Util +
80579 * @param {...(Function|Function[])} [predicates=[_.identity]] +
80580 * The predicates to check. +
80581 * @returns {Function} Returns the new function. +
80582 * @example +
80583 * +
80584 * var func = _.overEvery([Boolean, isFinite]); +
80585 * +
80586 * func('1'); +
80587 * // => true +
80588 * +
80589 * func(null); +
80590 * // => false +
80591 * +
80592 * func(NaN); +
80593 * // => false +
80594 */ +
80595 var overEvery = createOver(arrayEvery); +
80596 +
80597 /** +
80598 * Creates a function that checks if **any** of the `predicates` return +
80599 * truthy when invoked with the arguments it receives. +
80600 * +
80601 * @static +
80602 * @memberOf _ +
80603 * @since 4.0.0 +
80604 * @category Util +
80605 * @param {...(Function|Function[])} [predicates=[_.identity]] +
80606 * The predicates to check. +
80607 * @returns {Function} Returns the new function. +
80608 * @example +
80609 * +
80610 * var func = _.overSome([Boolean, isFinite]); +
80611 * +
80612 * func('1'); +
80613 * // => true +
80614 * +
80615 * func(null); +
80616 * // => true +
80617 * +
80618 * func(NaN); +
80619 * // => false +
80620 */ +
80621 var overSome = createOver(arraySome); +
80622 +
80623 /** +
80624 * Creates a function that returns the value at `path` of a given object. +
80625 * +
80626 * @static +
80627 * @memberOf _ +
80628 * @since 2.4.0 +
80629 * @category Util +
80630 * @param {Array|string} path The path of the property to get. +
80631 * @returns {Function} Returns the new accessor function. +
80632 * @example +
80633 * +
80634 * var objects = [ +
80635 * { 'a': { 'b': 2 } }, +
80636 * { 'a': { 'b': 1 } } +
80637 * ]; +
80638 * +
80639 * _.map(objects, _.property('a.b')); +
80640 * // => [2, 1] +
80641 * +
80642 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); +
80643 * // => [1, 2] +
80644 */ +
80645 function property(path) { +
80646 return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +
80647 } +
80648 +
80649 /** +
80650 * The opposite of `_.property`; this method creates a function that returns +
80651 * the value at a given path of `object`. +
80652 * +
80653 * @static +
80654 * @memberOf _ +
80655 * @since 3.0.0 +
80656 * @category Util +
80657 * @param {Object} object The object to query. +
80658 * @returns {Function} Returns the new accessor function. +
80659 * @example +
80660 * +
80661 * var array = [0, 1, 2], +
80662 * object = { 'a': array, 'b': array, 'c': array }; +
80663 * +
80664 * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); +
80665 * // => [2, 0] +
80666 * +
80667 * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); +
80668 * // => [2, 0] +
80669 */ +
80670 function propertyOf(object) { +
80671 return function(path) { +
80672 return object == null ? undefined : baseGet(object, path); +
80673 }; +
80674 } +
80675 +
80676 /** +
80677 * Creates an array of numbers (positive and/or negative) progressing from +
80678 * `start` up to, but not including, `end`. A step of `-1` is used if a negative +
80679 * `start` is specified without an `end` or `step`. If `end` is not specified, +
80680 * it's set to `start` with `start` then set to `0`. +
80681 * +
80682 * **Note:** JavaScript follows the IEEE-754 standard for resolving +
80683 * floating-point values which can produce unexpected results. +
80684 * +
80685 * @static +
80686 * @since 0.1.0 +
80687 * @memberOf _ +
80688 * @category Util +
80689 * @param {number} [start=0] The start of the range. +
80690 * @param {number} end The end of the range. +
80691 * @param {number} [step=1] The value to increment or decrement by. +
80692 * @returns {Array} Returns the range of numbers. +
80693 * @see _.inRange, _.rangeRight +
80694 * @example +
80695 * +
80696 * _.range(4); +
80697 * // => [0, 1, 2, 3] +
80698 * +
80699 * _.range(-4); +
80700 * // => [0, -1, -2, -3] +
80701 * +
80702 * _.range(1, 5); +
80703 * // => [1, 2, 3, 4] +
80704 * +
80705 * _.range(0, 20, 5); +
80706 * // => [0, 5, 10, 15] +
80707 * +
80708 * _.range(0, -4, -1); +
80709 * // => [0, -1, -2, -3] +
80710 * +
80711 * _.range(1, 4, 0); +
80712 * // => [1, 1, 1] +
80713 * +
80714 * _.range(0); +
80715 * // => [] +
80716 */ +
80717 var range = createRange(); +
80718 +
80719 /** +
80720 * This method is like `_.range` except that it populates values in +
80721 * descending order. +
80722 * +
80723 * @static +
80724 * @memberOf _ +
80725 * @since 4.0.0 +
80726 * @category Util +
80727 * @param {number} [start=0] The start of the range. +
80728 * @param {number} end The end of the range. +
80729 * @param {number} [step=1] The value to increment or decrement by. +
80730 * @returns {Array} Returns the range of numbers. +
80731 * @see _.inRange, _.range +
80732 * @example +
80733 * +
80734 * _.rangeRight(4); +
80735 * // => [3, 2, 1, 0] +
80736 * +
80737 * _.rangeRight(-4); +
80738 * // => [-3, -2, -1, 0] +
80739 * +
80740 * _.rangeRight(1, 5); +
80741 * // => [4, 3, 2, 1] +
80742 * +
80743 * _.rangeRight(0, 20, 5); +
80744 * // => [15, 10, 5, 0] +
80745 * +
80746 * _.rangeRight(0, -4, -1); +
80747 * // => [-3, -2, -1, 0] +
80748 * +
80749 * _.rangeRight(1, 4, 0); +
80750 * // => [1, 1, 1] +
80751 * +
80752 * _.rangeRight(0); +
80753 * // => [] +
80754 */ +
80755 var rangeRight = createRange(true); +
80756 +
80757 /** +
80758 * This method returns a new empty array. +
80759 * +
80760 * @static +
80761 * @memberOf _ +
80762 * @since 4.13.0 +
80763 * @category Util +
80764 * @returns {Array} Returns the new empty array. +
80765 * @example +
80766 * +
80767 * var arrays = _.times(2, _.stubArray); +
80768 * +
80769 * console.log(arrays); +
80770 * // => [[], []] +
80771 * +
80772 * console.log(arrays[0] === arrays[1]); +
80773 * // => false +
80774 */ +
80775 function stubArray() { +
80776 return []; +
80777 } +
80778 +
80779 /** +
80780 * This method returns `false`. +
80781 * +
80782 * @static +
80783 * @memberOf _ +
80784 * @since 4.13.0 +
80785 * @category Util +
80786 * @returns {boolean} Returns `false`. +
80787 * @example +
80788 * +
80789 * _.times(2, _.stubFalse); +
80790 * // => [false, false] +
80791 */ +
80792 function stubFalse() { +
80793 return false; +
80794 } +
80795 +
80796 /** +
80797 * This method returns a new empty object. +
80798 * +
80799 * @static +
80800 * @memberOf _ +
80801 * @since 4.13.0 +
80802 * @category Util +
80803 * @returns {Object} Returns the new empty object. +
80804 * @example +
80805 * +
80806 * var objects = _.times(2, _.stubObject); +
80807 * +
80808 * console.log(objects); +
80809 * // => [{}, {}] +
80810 * +
80811 * console.log(objects[0] === objects[1]); +
80812 * // => false +
80813 */ +
80814 function stubObject() { +
80815 return {}; +
80816 } +
80817 +
80818 /** +
80819 * This method returns an empty string. +
80820 * +
80821 * @static +
80822 * @memberOf _ +
80823 * @since 4.13.0 +
80824 * @category Util +
80825 * @returns {string} Returns the empty string. +
80826 * @example +
80827 * +
80828 * _.times(2, _.stubString); +
80829 * // => ['', ''] +
80830 */ +
80831 function stubString() { +
80832 return ''; +
80833 } +
80834 +
80835 /** +
80836 * This method returns `true`. +
80837 * +
80838 * @static +
80839 * @memberOf _ +
80840 * @since 4.13.0 +
80841 * @category Util +
80842 * @returns {boolean} Returns `true`. +
80843 * @example +
80844 * +
80845 * _.times(2, _.stubTrue); +
80846 * // => [true, true] +
80847 */ +
80848 function stubTrue() { +
80849 return true; +
80850 } +
80851 +
80852 /** +
80853 * Invokes the iteratee `n` times, returning an array of the results of +
80854 * each invocation. The iteratee is invoked with one argument; (index). +
80855 * +
80856 * @static +
80857 * @since 0.1.0 +
80858 * @memberOf _ +
80859 * @category Util +
80860 * @param {number} n The number of times to invoke `iteratee`. +
80861 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
80862 * @returns {Array} Returns the array of results. +
80863 * @example +
80864 * +
80865 * _.times(3, String); +
80866 * // => ['0', '1', '2'] +
80867 * +
80868 * _.times(4, _.constant(0)); +
80869 * // => [0, 0, 0, 0] +
80870 */ +
80871 function times(n, iteratee) { +
80872 n = toInteger(n); +
80873 if (n < 1 || n > MAX_SAFE_INTEGER) { +
80874 return []; +
80875 } +
80876 var index = MAX_ARRAY_LENGTH, +
80877 length = nativeMin(n, MAX_ARRAY_LENGTH); +
80878 +
80879 iteratee = getIteratee(iteratee); +
80880 n -= MAX_ARRAY_LENGTH; +
80881 +
80882 var result = baseTimes(length, iteratee); +
80883 while (++index < n) { +
80884 iteratee(index); +
80885 } +
80886 return result; +
80887 } +
80888 +
80889 /** +
80890 * Converts `value` to a property path array. +
80891 * +
80892 * @static +
80893 * @memberOf _ +
80894 * @since 4.0.0 +
80895 * @category Util +
80896 * @param {*} value The value to convert. +
80897 * @returns {Array} Returns the new property path array. +
80898 * @example +
80899 * +
80900 * _.toPath('a.b.c'); +
80901 * // => ['a', 'b', 'c'] +
80902 * +
80903 * _.toPath('a[0].b.c'); +
80904 * // => ['a', '0', 'b', 'c'] +
80905 */ +
80906 function toPath(value) { +
80907 if (isArray(value)) { +
80908 return arrayMap(value, toKey); +
80909 } +
80910 return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); +
80911 } +
80912 +
80913 /** +
80914 * Generates a unique ID. If `prefix` is given, the ID is appended to it. +
80915 * +
80916 * @static +
80917 * @since 0.1.0 +
80918 * @memberOf _ +
80919 * @category Util +
80920 * @param {string} [prefix=''] The value to prefix the ID with. +
80921 * @returns {string} Returns the unique ID. +
80922 * @example +
80923 * +
80924 * _.uniqueId('contact_'); +
80925 * // => 'contact_104' +
80926 * +
80927 * _.uniqueId(); +
80928 * // => '105' +
80929 */ +
80930 function uniqueId(prefix) { +
80931 var id = ++idCounter; +
80932 return toString(prefix) + id; +
80933 } +
80934 +
80935 /*------------------------------------------------------------------------*/ +
80936 +
80937 /** +
80938 * Adds two numbers. +
80939 * +
80940 * @static +
80941 * @memberOf _ +
80942 * @since 3.4.0 +
80943 * @category Math +
80944 * @param {number} augend The first number in an addition. +
80945 * @param {number} addend The second number in an addition. +
80946 * @returns {number} Returns the total. +
80947 * @example +
80948 * +
80949 * _.add(6, 4); +
80950 * // => 10 +
80951 */ +
80952 var add = createMathOperation(function(augend, addend) { +
80953 return augend + addend; +
80954 }, 0); +
80955 +
80956 /** +
80957 * Computes `number` rounded up to `precision`. +
80958 * +
80959 * @static +
80960 * @memberOf _ +
80961 * @since 3.10.0 +
80962 * @category Math +
80963 * @param {number} number The number to round up. +
80964 * @param {number} [precision=0] The precision to round up to. +
80965 * @returns {number} Returns the rounded up number. +
80966 * @example +
80967 * +
80968 * _.ceil(4.006); +
80969 * // => 5 +
80970 * +
80971 * _.ceil(6.004, 2); +
80972 * // => 6.01 +
80973 * +
80974 * _.ceil(6040, -2); +
80975 * // => 6100 +
80976 */ +
80977 var ceil = createRound('ceil'); +
80978 +
80979 /** +
80980 * Divide two numbers. +
80981 * +
80982 * @static +
80983 * @memberOf _ +
80984 * @since 4.7.0 +
80985 * @category Math +
80986 * @param {number} dividend The first number in a division. +
80987 * @param {number} divisor The second number in a division. +
80988 * @returns {number} Returns the quotient. +
80989 * @example +
80990 * +
80991 * _.divide(6, 4); +
80992 * // => 1.5 +
80993 */ +
80994 var divide = createMathOperation(function(dividend, divisor) { +
80995 return dividend / divisor; +
80996 }, 1); +
80997 +
80998 /** +
80999 * Computes `number` rounded down to `precision`. +
81000 * +
81001 * @static +
81002 * @memberOf _ +
81003 * @since 3.10.0 +
81004 * @category Math +
81005 * @param {number} number The number to round down. +
81006 * @param {number} [precision=0] The precision to round down to. +
81007 * @returns {number} Returns the rounded down number. +
81008 * @example +
81009 * +
81010 * _.floor(4.006); +
81011 * // => 4 +
81012 * +
81013 * _.floor(0.046, 2); +
81014 * // => 0.04 +
81015 * +
81016 * _.floor(4060, -2); +
81017 * // => 4000 +
81018 */ +
81019 var floor = createRound('floor'); +
81020 +
81021 /** +
81022 * Computes the maximum value of `array`. If `array` is empty or falsey, +
81023 * `undefined` is returned. +
81024 * +
81025 * @static +
81026 * @since 0.1.0 +
81027 * @memberOf _ +
81028 * @category Math +
81029 * @param {Array} array The array to iterate over. +
81030 * @returns {*} Returns the maximum value. +
81031 * @example +
81032 * +
81033 * _.max([4, 2, 8, 6]); +
81034 * // => 8 +
81035 * +
81036 * _.max([]); +
81037 * // => undefined +
81038 */ +
81039 function max(array) { +
81040 return (array && array.length) +
81041 ? baseExtremum(array, identity, baseGt) +
81042 : undefined; +
81043 } +
81044 +
81045 /** +
81046 * This method is like `_.max` except that it accepts `iteratee` which is +
81047 * invoked for each element in `array` to generate the criterion by which +
81048 * the value is ranked. The iteratee is invoked with one argument: (value). +
81049 * +
81050 * @static +
81051 * @memberOf _ +
81052 * @since 4.0.0 +
81053 * @category Math +
81054 * @param {Array} array The array to iterate over. +
81055 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
81056 * @returns {*} Returns the maximum value. +
81057 * @example +
81058 * +
81059 * var objects = [{ 'n': 1 }, { 'n': 2 }]; +
81060 * +
81061 * _.maxBy(objects, function(o) { return o.n; }); +
81062 * // => { 'n': 2 } +
81063 * +
81064 * // The `_.property` iteratee shorthand. +
81065 * _.maxBy(objects, 'n'); +
81066 * // => { 'n': 2 } +
81067 */ +
81068 function maxBy(array, iteratee) { +
81069 return (array && array.length) +
81070 ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) +
81071 : undefined; +
81072 } +
81073 +
81074 /** +
81075 * Computes the mean of the values in `array`. +
81076 * +
81077 * @static +
81078 * @memberOf _ +
81079 * @since 4.0.0 +
81080 * @category Math +
81081 * @param {Array} array The array to iterate over. +
81082 * @returns {number} Returns the mean. +
81083 * @example +
81084 * +
81085 * _.mean([4, 2, 8, 6]); +
81086 * // => 5 +
81087 */ +
81088 function mean(array) { +
81089 return baseMean(array, identity); +
81090 } +
81091 +
81092 /** +
81093 * This method is like `_.mean` except that it accepts `iteratee` which is +
81094 * invoked for each element in `array` to generate the value to be averaged. +
81095 * The iteratee is invoked with one argument: (value). +
81096 * +
81097 * @static +
81098 * @memberOf _ +
81099 * @since 4.7.0 +
81100 * @category Math +
81101 * @param {Array} array The array to iterate over. +
81102 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
81103 * @returns {number} Returns the mean. +
81104 * @example +
81105 * +
81106 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +
81107 * +
81108 * _.meanBy(objects, function(o) { return o.n; }); +
81109 * // => 5 +
81110 * +
81111 * // The `_.property` iteratee shorthand. +
81112 * _.meanBy(objects, 'n'); +
81113 * // => 5 +
81114 */ +
81115 function meanBy(array, iteratee) { +
81116 return baseMean(array, getIteratee(iteratee, 2)); +
81117 } +
81118 +
81119 /** +
81120 * Computes the minimum value of `array`. If `array` is empty or falsey, +
81121 * `undefined` is returned. +
81122 * +
81123 * @static +
81124 * @since 0.1.0 +
81125 * @memberOf _ +
81126 * @category Math +
81127 * @param {Array} array The array to iterate over. +
81128 * @returns {*} Returns the minimum value. +
81129 * @example +
81130 * +
81131 * _.min([4, 2, 8, 6]); +
81132 * // => 2 +
81133 * +
81134 * _.min([]); +
81135 * // => undefined +
81136 */ +
81137 function min(array) { +
81138 return (array && array.length) +
81139 ? baseExtremum(array, identity, baseLt) +
81140 : undefined; +
81141 } +
81142 +
81143 /** +
81144 * This method is like `_.min` except that it accepts `iteratee` which is +
81145 * invoked for each element in `array` to generate the criterion by which +
81146 * the value is ranked. The iteratee is invoked with one argument: (value). +
81147 * +
81148 * @static +
81149 * @memberOf _ +
81150 * @since 4.0.0 +
81151 * @category Math +
81152 * @param {Array} array The array to iterate over. +
81153 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
81154 * @returns {*} Returns the minimum value. +
81155 * @example +
81156 * +
81157 * var objects = [{ 'n': 1 }, { 'n': 2 }]; +
81158 * +
81159 * _.minBy(objects, function(o) { return o.n; }); +
81160 * // => { 'n': 1 } +
81161 * +
81162 * // The `_.property` iteratee shorthand. +
81163 * _.minBy(objects, 'n'); +
81164 * // => { 'n': 1 } +
81165 */ +
81166 function minBy(array, iteratee) { +
81167 return (array && array.length) +
81168 ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) +
81169 : undefined; +
81170 } +
81171 +
81172 /** +
81173 * Multiply two numbers. +
81174 * +
81175 * @static +
81176 * @memberOf _ +
81177 * @since 4.7.0 +
81178 * @category Math +
81179 * @param {number} multiplier The first number in a multiplication. +
81180 * @param {number} multiplicand The second number in a multiplication. +
81181 * @returns {number} Returns the product. +
81182 * @example +
81183 * +
81184 * _.multiply(6, 4); +
81185 * // => 24 +
81186 */ +
81187 var multiply = createMathOperation(function(multiplier, multiplicand) { +
81188 return multiplier * multiplicand; +
81189 }, 1); +
81190 +
81191 /** +
81192 * Computes `number` rounded to `precision`. +
81193 * +
81194 * @static +
81195 * @memberOf _ +
81196 * @since 3.10.0 +
81197 * @category Math +
81198 * @param {number} number The number to round. +
81199 * @param {number} [precision=0] The precision to round to. +
81200 * @returns {number} Returns the rounded number. +
81201 * @example +
81202 * +
81203 * _.round(4.006); +
81204 * // => 4 +
81205 * +
81206 * _.round(4.006, 2); +
81207 * // => 4.01 +
81208 * +
81209 * _.round(4060, -2); +
81210 * // => 4100 +
81211 */ +
81212 var round = createRound('round'); +
81213 +
81214 /** +
81215 * Subtract two numbers. +
81216 * +
81217 * @static +
81218 * @memberOf _ +
81219 * @since 4.0.0 +
81220 * @category Math +
81221 * @param {number} minuend The first number in a subtraction. +
81222 * @param {number} subtrahend The second number in a subtraction. +
81223 * @returns {number} Returns the difference. +
81224 * @example +
81225 * +
81226 * _.subtract(6, 4); +
81227 * // => 2 +
81228 */ +
81229 var subtract = createMathOperation(function(minuend, subtrahend) { +
81230 return minuend - subtrahend; +
81231 }, 0); +
81232 +
81233 /** +
81234 * Computes the sum of the values in `array`. +
81235 * +
81236 * @static +
81237 * @memberOf _ +
81238 * @since 3.4.0 +
81239 * @category Math +
81240 * @param {Array} array The array to iterate over. +
81241 * @returns {number} Returns the sum. +
81242 * @example +
81243 * +
81244 * _.sum([4, 2, 8, 6]); +
81245 * // => 20 +
81246 */ +
81247 function sum(array) { +
81248 return (array && array.length) +
81249 ? baseSum(array, identity) +
81250 : 0; +
81251 } +
81252 +
81253 /** +
81254 * This method is like `_.sum` except that it accepts `iteratee` which is +
81255 * invoked for each element in `array` to generate the value to be summed. +
81256 * The iteratee is invoked with one argument: (value). +
81257 * +
81258 * @static +
81259 * @memberOf _ +
81260 * @since 4.0.0 +
81261 * @category Math +
81262 * @param {Array} array The array to iterate over. +
81263 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
81264 * @returns {number} Returns the sum. +
81265 * @example +
81266 * +
81267 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +
81268 * +
81269 * _.sumBy(objects, function(o) { return o.n; }); +
81270 * // => 20 +
81271 * +
81272 * // The `_.property` iteratee shorthand. +
81273 * _.sumBy(objects, 'n'); +
81274 * // => 20 +
81275 */ +
81276 function sumBy(array, iteratee) { +
81277 return (array && array.length) +
81278 ? baseSum(array, getIteratee(iteratee, 2)) +
81279 : 0; +
81280 } +
81281 +
81282 /*------------------------------------------------------------------------*/ +
81283 +
81284 // Add methods that return wrapped values in chain sequences. +
81285 lodash.after = after; +
81286 lodash.ary = ary; +
81287 lodash.assign = assign; +
81288 lodash.assignIn = assignIn; +
81289 lodash.assignInWith = assignInWith; +
81290 lodash.assignWith = assignWith; +
81291 lodash.at = at; +
81292 lodash.before = before; +
81293 lodash.bind = bind; +
81294 lodash.bindAll = bindAll; +
81295 lodash.bindKey = bindKey; +
81296 lodash.castArray = castArray; +
81297 lodash.chain = chain; +
81298 lodash.chunk = chunk; +
81299 lodash.compact = compact; +
81300 lodash.concat = concat; +
81301 lodash.cond = cond; +
81302 lodash.conforms = conforms; +
81303 lodash.constant = constant; +
81304 lodash.countBy = countBy; +
81305 lodash.create = create; +
81306 lodash.curry = curry; +
81307 lodash.curryRight = curryRight; +
81308 lodash.debounce = debounce; +
81309 lodash.defaults = defaults; +
81310 lodash.defaultsDeep = defaultsDeep; +
81311 lodash.defer = defer; +
81312 lodash.delay = delay; +
81313 lodash.difference = difference; +
81314 lodash.differenceBy = differenceBy; +
81315 lodash.differenceWith = differenceWith; +
81316 lodash.drop = drop; +
81317 lodash.dropRight = dropRight; +
81318 lodash.dropRightWhile = dropRightWhile; +
81319 lodash.dropWhile = dropWhile; +
81320 lodash.fill = fill; +
81321 lodash.filter = filter; +
81322 lodash.flatMap = flatMap; +
81323 lodash.flatMapDeep = flatMapDeep; +
81324 lodash.flatMapDepth = flatMapDepth; +
81325 lodash.flatten = flatten; +
81326 lodash.flattenDeep = flattenDeep; +
81327 lodash.flattenDepth = flattenDepth; +
81328 lodash.flip = flip; +
81329 lodash.flow = flow; +
81330 lodash.flowRight = flowRight; +
81331 lodash.fromPairs = fromPairs; +
81332 lodash.functions = functions; +
81333 lodash.functionsIn = functionsIn; +
81334 lodash.groupBy = groupBy; +
81335 lodash.initial = initial; +
81336 lodash.intersection = intersection; +
81337 lodash.intersectionBy = intersectionBy; +
81338 lodash.intersectionWith = intersectionWith; +
81339 lodash.invert = invert; +
81340 lodash.invertBy = invertBy; +
81341 lodash.invokeMap = invokeMap; +
81342 lodash.iteratee = iteratee; +
81343 lodash.keyBy = keyBy; +
81344 lodash.keys = keys; +
81345 lodash.keysIn = keysIn; +
81346 lodash.map = map; +
81347 lodash.mapKeys = mapKeys; +
81348 lodash.mapValues = mapValues; +
81349 lodash.matches = matches; +
81350 lodash.matchesProperty = matchesProperty; +
81351 lodash.memoize = memoize; +
81352 lodash.merge = merge; +
81353 lodash.mergeWith = mergeWith; +
81354 lodash.method = method; +
81355 lodash.methodOf = methodOf; +
81356 lodash.mixin = mixin; +
81357 lodash.negate = negate; +
81358 lodash.nthArg = nthArg; +
81359 lodash.omit = omit; +
81360 lodash.omitBy = omitBy; +
81361 lodash.once = once; +
81362 lodash.orderBy = orderBy; +
81363 lodash.over = over; +
81364 lodash.overArgs = overArgs; +
81365 lodash.overEvery = overEvery; +
81366 lodash.overSome = overSome; +
81367 lodash.partial = partial; +
81368 lodash.partialRight = partialRight; +
81369 lodash.partition = partition; +
81370 lodash.pick = pick; +
81371 lodash.pickBy = pickBy; +
81372 lodash.property = property; +
81373 lodash.propertyOf = propertyOf; +
81374 lodash.pull = pull; +
81375 lodash.pullAll = pullAll; +
81376 lodash.pullAllBy = pullAllBy; +
81377 lodash.pullAllWith = pullAllWith; +
81378 lodash.pullAt = pullAt; +
81379 lodash.range = range; +
81380 lodash.rangeRight = rangeRight; +
81381 lodash.rearg = rearg; +
81382 lodash.reject = reject; +
81383 lodash.remove = remove; +
81384 lodash.rest = rest; +
81385 lodash.reverse = reverse; +
81386 lodash.sampleSize = sampleSize; +
81387 lodash.set = set; +
81388 lodash.setWith = setWith; +
81389 lodash.shuffle = shuffle; +
81390 lodash.slice = slice; +
81391 lodash.sortBy = sortBy; +
81392 lodash.sortedUniq = sortedUniq; +
81393 lodash.sortedUniqBy = sortedUniqBy; +
81394 lodash.split = split; +
81395 lodash.spread = spread; +
81396 lodash.tail = tail; +
81397 lodash.take = take; +
81398 lodash.takeRight = takeRight; +
81399 lodash.takeRightWhile = takeRightWhile; +
81400 lodash.takeWhile = takeWhile; +
81401 lodash.tap = tap; +
81402 lodash.throttle = throttle; +
81403 lodash.thru = thru; +
81404 lodash.toArray = toArray; +
81405 lodash.toPairs = toPairs; +
81406 lodash.toPairsIn = toPairsIn; +
81407 lodash.toPath = toPath; +
81408 lodash.toPlainObject = toPlainObject; +
81409 lodash.transform = transform; +
81410 lodash.unary = unary; +
81411 lodash.union = union; +
81412 lodash.unionBy = unionBy; +
81413 lodash.unionWith = unionWith; +
81414 lodash.uniq = uniq; +
81415 lodash.uniqBy = uniqBy; +
81416 lodash.uniqWith = uniqWith; +
81417 lodash.unset = unset; +
81418 lodash.unzip = unzip; +
81419 lodash.unzipWith = unzipWith; +
81420 lodash.update = update; +
81421 lodash.updateWith = updateWith; +
81422 lodash.values = values; +
81423 lodash.valuesIn = valuesIn; +
81424 lodash.without = without; +
81425 lodash.words = words; +
81426 lodash.wrap = wrap; +
81427 lodash.xor = xor; +
81428 lodash.xorBy = xorBy; +
81429 lodash.xorWith = xorWith; +
81430 lodash.zip = zip; +
81431 lodash.zipObject = zipObject; +
81432 lodash.zipObjectDeep = zipObjectDeep; +
81433 lodash.zipWith = zipWith; +
81434 +
81435 // Add aliases. +
81436 lodash.entries = toPairs; +
81437 lodash.entriesIn = toPairsIn; +
81438 lodash.extend = assignIn; +
81439 lodash.extendWith = assignInWith; +
81440 +
81441 // Add methods to `lodash.prototype`. +
81442 mixin(lodash, lodash); +
81443 +
81444 /*------------------------------------------------------------------------*/ +
81445 +
81446 // Add methods that return unwrapped values in chain sequences. +
81447 lodash.add = add; +
81448 lodash.attempt = attempt; +
81449 lodash.camelCase = camelCase; +
81450 lodash.capitalize = capitalize; +
81451 lodash.ceil = ceil; +
81452 lodash.clamp = clamp; +
81453 lodash.clone = clone; +
81454 lodash.cloneDeep = cloneDeep; +
81455 lodash.cloneDeepWith = cloneDeepWith; +
81456 lodash.cloneWith = cloneWith; +
81457 lodash.conformsTo = conformsTo; +
81458 lodash.deburr = deburr; +
81459 lodash.defaultTo = defaultTo; +
81460 lodash.divide = divide; +
81461 lodash.endsWith = endsWith; +
81462 lodash.eq = eq; +
81463 lodash.escape = escape; +
81464 lodash.escapeRegExp = escapeRegExp; +
81465 lodash.every = every; +
81466 lodash.find = find; +
81467 lodash.findIndex = findIndex; +
81468 lodash.findKey = findKey; +
81469 lodash.findLast = findLast; +
81470 lodash.findLastIndex = findLastIndex; +
81471 lodash.findLastKey = findLastKey; +
81472 lodash.floor = floor; +
81473 lodash.forEach = forEach; +
81474 lodash.forEachRight = forEachRight; +
81475 lodash.forIn = forIn; +
81476 lodash.forInRight = forInRight; +
81477 lodash.forOwn = forOwn; +
81478 lodash.forOwnRight = forOwnRight; +
81479 lodash.get = get; +
81480 lodash.gt = gt; +
81481 lodash.gte = gte; +
81482 lodash.has = has; +
81483 lodash.hasIn = hasIn; +
81484 lodash.head = head; +
81485 lodash.identity = identity; +
81486 lodash.includes = includes; +
81487 lodash.indexOf = indexOf; +
81488 lodash.inRange = inRange; +
81489 lodash.invoke = invoke; +
81490 lodash.isArguments = isArguments; +
81491 lodash.isArray = isArray; +
81492 lodash.isArrayBuffer = isArrayBuffer; +
81493 lodash.isArrayLike = isArrayLike; +
81494 lodash.isArrayLikeObject = isArrayLikeObject; +
81495 lodash.isBoolean = isBoolean; +
81496 lodash.isBuffer = isBuffer; +
81497 lodash.isDate = isDate; +
81498 lodash.isElement = isElement; +
81499 lodash.isEmpty = isEmpty; +
81500 lodash.isEqual = isEqual; +
81501 lodash.isEqualWith = isEqualWith; +
81502 lodash.isError = isError; +
81503 lodash.isFinite = isFinite; +
81504 lodash.isFunction = isFunction; +
81505 lodash.isInteger = isInteger; +
81506 lodash.isLength = isLength; +
81507 lodash.isMap = isMap; +
81508 lodash.isMatch = isMatch; +
81509 lodash.isMatchWith = isMatchWith; +
81510 lodash.isNaN = isNaN; +
81511 lodash.isNative = isNative; +
81512 lodash.isNil = isNil; +
81513 lodash.isNull = isNull; +
81514 lodash.isNumber = isNumber; +
81515 lodash.isObject = isObject; +
81516 lodash.isObjectLike = isObjectLike; +
81517 lodash.isPlainObject = isPlainObject; +
81518 lodash.isRegExp = isRegExp; +
81519 lodash.isSafeInteger = isSafeInteger; +
81520 lodash.isSet = isSet; +
81521 lodash.isString = isString; +
81522 lodash.isSymbol = isSymbol; +
81523 lodash.isTypedArray = isTypedArray; +
81524 lodash.isUndefined = isUndefined; +
81525 lodash.isWeakMap = isWeakMap; +
81526 lodash.isWeakSet = isWeakSet; +
81527 lodash.join = join; +
81528 lodash.kebabCase = kebabCase; +
81529 lodash.last = last; +
81530 lodash.lastIndexOf = lastIndexOf; +
81531 lodash.lowerCase = lowerCase; +
81532 lodash.lowerFirst = lowerFirst; +
81533 lodash.lt = lt; +
81534 lodash.lte = lte; +
81535 lodash.max = max; +
81536 lodash.maxBy = maxBy; +
81537 lodash.mean = mean; +
81538 lodash.meanBy = meanBy; +
81539 lodash.min = min; +
81540 lodash.minBy = minBy; +
81541 lodash.stubArray = stubArray; +
81542 lodash.stubFalse = stubFalse; +
81543 lodash.stubObject = stubObject; +
81544 lodash.stubString = stubString; +
81545 lodash.stubTrue = stubTrue; +
81546 lodash.multiply = multiply; +
81547 lodash.nth = nth; +
81548 lodash.noConflict = noConflict; +
81549 lodash.noop = noop; +
81550 lodash.now = now; +
81551 lodash.pad = pad; +
81552 lodash.padEnd = padEnd; +
81553 lodash.padStart = padStart; +
81554 lodash.parseInt = parseInt; +
81555 lodash.random = random; +
81556 lodash.reduce = reduce; +
81557 lodash.reduceRight = reduceRight; +
81558 lodash.repeat = repeat; +
81559 lodash.replace = replace; +
81560 lodash.result = result; +
81561 lodash.round = round; +
81562 lodash.runInContext = runInContext; +
81563 lodash.sample = sample; +
81564 lodash.size = size; +
81565 lodash.snakeCase = snakeCase; +
81566 lodash.some = some; +
81567 lodash.sortedIndex = sortedIndex; +
81568 lodash.sortedIndexBy = sortedIndexBy; +
81569 lodash.sortedIndexOf = sortedIndexOf; +
81570 lodash.sortedLastIndex = sortedLastIndex; +
81571 lodash.sortedLastIndexBy = sortedLastIndexBy; +
81572 lodash.sortedLastIndexOf = sortedLastIndexOf; +
81573 lodash.startCase = startCase; +
81574 lodash.startsWith = startsWith; +
81575 lodash.subtract = subtract; +
81576 lodash.sum = sum; +
81577 lodash.sumBy = sumBy; +
81578 lodash.template = template; +
81579 lodash.times = times; +
81580 lodash.toFinite = toFinite; +
81581 lodash.toInteger = toInteger; +
81582 lodash.toLength = toLength; +
81583 lodash.toLower = toLower; +
81584 lodash.toNumber = toNumber; +
81585 lodash.toSafeInteger = toSafeInteger; +
81586 lodash.toString = toString; +
81587 lodash.toUpper = toUpper; +
81588 lodash.trim = trim; +
81589 lodash.trimEnd = trimEnd; +
81590 lodash.trimStart = trimStart; +
81591 lodash.truncate = truncate; +
81592 lodash.unescape = unescape; +
81593 lodash.uniqueId = uniqueId; +
81594 lodash.upperCase = upperCase; +
81595 lodash.upperFirst = upperFirst; +
81596 +
81597 // Add aliases. +
81598 lodash.each = forEach; +
81599 lodash.eachRight = forEachRight; +
81600 lodash.first = head; +
81601 +
81602 mixin(lodash, (function() { +
81603 var source = {}; +
81604 baseForOwn(lodash, function(func, methodName) { +
81605 if (!hasOwnProperty.call(lodash.prototype, methodName)) { +
81606 source[methodName] = func; +
81607 } +
81608 }); +
81609 return source; +
81610 }()), { 'chain': false }); +
81611 +
81612 /*------------------------------------------------------------------------*/ +
81613 +
81614 /** +
81615 * The semantic version number. +
81616 * +
81617 * @static +
81618 * @memberOf _ +
81619 * @type {string} +
81620 */ +
81621 lodash.VERSION = VERSION; +
81622 +
81623 // Assign default placeholders. +
81624 arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { +
81625 lodash[methodName].placeholder = lodash; +
81626 }); +
81627 +
81628 // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. +
81629 arrayEach(['drop', 'take'], function(methodName, index) { +
81630 LazyWrapper.prototype[methodName] = function(n) { +
81631 n = n === undefined ? 1 : nativeMax(toInteger(n), 0); +
81632 +
81633 var result = (this.__filtered__ && !index) +
81634 ? new LazyWrapper(this) +
81635 : this.clone(); +
81636 +
81637 if (result.__filtered__) { +
81638 result.__takeCount__ = nativeMin(n, result.__takeCount__); +
81639 } else { +
81640 result.__views__.push({ +
81641 'size': nativeMin(n, MAX_ARRAY_LENGTH), +
81642 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') +
81643 }); +
81644 } +
81645 return result; +
81646 }; +
81647 +
81648 LazyWrapper.prototype[methodName + 'Right'] = function(n) { +
81649 return this.reverse()[methodName](n).reverse(); +
81650 }; +
81651 }); +
81652 +
81653 // Add `LazyWrapper` methods that accept an `iteratee` value. +
81654 arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { +
81655 var type = index + 1, +
81656 isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; +
81657 +
81658 LazyWrapper.prototype[methodName] = function(iteratee) { +
81659 var result = this.clone(); +
81660 result.__iteratees__.push({ +
81661 'iteratee': getIteratee(iteratee, 3), +
81662 'type': type +
81663 }); +
81664 result.__filtered__ = result.__filtered__ || isFilter; +
81665 return result; +
81666 }; +
81667 }); +
81668 +
81669 // Add `LazyWrapper` methods for `_.head` and `_.last`. +
81670 arrayEach(['head', 'last'], function(methodName, index) { +
81671 var takeName = 'take' + (index ? 'Right' : ''); +
81672 +
81673 LazyWrapper.prototype[methodName] = function() { +
81674 return this[takeName](1).value()[0]; +
81675 }; +
81676 }); +
81677 +
81678 // Add `LazyWrapper` methods for `_.initial` and `_.tail`. +
81679 arrayEach(['initial', 'tail'], function(methodName, index) { +
81680 var dropName = 'drop' + (index ? '' : 'Right'); +
81681 +
81682 LazyWrapper.prototype[methodName] = function() { +
81683 return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); +
81684 }; +
81685 }); +
81686 +
81687 LazyWrapper.prototype.compact = function() { +
81688 return this.filter(identity); +
81689 }; +
81690 +
81691 LazyWrapper.prototype.find = function(predicate) { +
81692 return this.filter(predicate).head(); +
81693 }; +
81694 +
81695 LazyWrapper.prototype.findLast = function(predicate) { +
81696 return this.reverse().find(predicate); +
81697 }; +
81698 +
81699 LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { +
81700 if (typeof path == 'function') { +
81701 return new LazyWrapper(this); +
81702 } +
81703 return this.map(function(value) { +
81704 return baseInvoke(value, path, args); +
81705 }); +
81706 }); +
81707 +
81708 LazyWrapper.prototype.reject = function(predicate) { +
81709 return this.filter(negate(getIteratee(predicate))); +
81710 }; +
81711 +
81712 LazyWrapper.prototype.slice = function(start, end) { +
81713 start = toInteger(start); +
81714 +
81715 var result = this; +
81716 if (result.__filtered__ && (start > 0 || end < 0)) { +
81717 return new LazyWrapper(result); +
81718 } +
81719 if (start < 0) { +
81720 result = result.takeRight(-start); +
81721 } else if (start) { +
81722 result = result.drop(start); +
81723 } +
81724 if (end !== undefined) { +
81725 end = toInteger(end); +
81726 result = end < 0 ? result.dropRight(-end) : result.take(end - start); +
81727 } +
81728 return result; +
81729 }; +
81730 +
81731 LazyWrapper.prototype.takeRightWhile = function(predicate) { +
81732 return this.reverse().takeWhile(predicate).reverse(); +
81733 }; +
81734 +
81735 LazyWrapper.prototype.toArray = function() { +
81736 return this.take(MAX_ARRAY_LENGTH); +
81737 }; +
81738 +
81739 // Add `LazyWrapper` methods to `lodash.prototype`. +
81740 baseForOwn(LazyWrapper.prototype, function(func, methodName) { +
81741 var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), +
81742 isTaker = /^(?:head|last)$/.test(methodName), +
81743 lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], +
81744 retUnwrapped = isTaker || /^find/.test(methodName); +
81745 +
81746 if (!lodashFunc) { +
81747 return; +
81748 } +
81749 lodash.prototype[methodName] = function() { +
81750 var value = this.__wrapped__, +
81751 args = isTaker ? [1] : arguments, +
81752 isLazy = value instanceof LazyWrapper, +
81753 iteratee = args[0], +
81754 useLazy = isLazy || isArray(value); +
81755 +
81756 var interceptor = function(value) { +
81757 var result = lodashFunc.apply(lodash, arrayPush([value], args)); +
81758 return (isTaker && chainAll) ? result[0] : result; +
81759 }; +
81760 +
81761 if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { +
81762 // Avoid lazy use if the iteratee has a "length" value other than `1`. +
81763 isLazy = useLazy = false; +
81764 } +
81765 var chainAll = this.__chain__, +
81766 isHybrid = !!this.__actions__.length, +
81767 isUnwrapped = retUnwrapped && !chainAll, +
81768 onlyLazy = isLazy && !isHybrid; +
81769 +
81770 if (!retUnwrapped && useLazy) { +
81771 value = onlyLazy ? value : new LazyWrapper(this); +
81772 var result = func.apply(value, args); +
81773 result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); +
81774 return new LodashWrapper(result, chainAll); +
81775 } +
81776 if (isUnwrapped && onlyLazy) { +
81777 return func.apply(this, args); +
81778 } +
81779 result = this.thru(interceptor); +
81780 return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; +
81781 }; +
81782 }); +
81783 +
81784 // Add `Array` methods to `lodash.prototype`. +
81785 arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { +
81786 var func = arrayProto[methodName], +
81787 chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', +
81788 retUnwrapped = /^(?:pop|shift)$/.test(methodName); +
81789 +
81790 lodash.prototype[methodName] = function() { +
81791 var args = arguments; +
81792 if (retUnwrapped && !this.__chain__) { +
81793 var value = this.value(); +
81794 return func.apply(isArray(value) ? value : [], args); +
81795 } +
81796 return this[chainName](function(value) { +
81797 return func.apply(isArray(value) ? value : [], args); +
81798 }); +
81799 }; +
81800 }); +
81801 +
81802 // Map minified method names to their real names. +
81803 baseForOwn(LazyWrapper.prototype, function(func, methodName) { +
81804 var lodashFunc = lodash[methodName]; +
81805 if (lodashFunc) { +
81806 var key = (lodashFunc.name + ''), +
81807 names = realNames[key] || (realNames[key] = []); +
81808 +
81809 names.push({ 'name': methodName, 'func': lodashFunc }); +
81810 } +
81811 }); +
81812 +
81813 realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ +
81814 'name': 'wrapper', +
81815 'func': undefined +
81816 }]; +
81817 +
81818 // Add methods to `LazyWrapper`. +
81819 LazyWrapper.prototype.clone = lazyClone; +
81820 LazyWrapper.prototype.reverse = lazyReverse; +
81821 LazyWrapper.prototype.value = lazyValue; +
81822 +
81823 // Add chain sequence methods to the `lodash` wrapper. +
81824 lodash.prototype.at = wrapperAt; +
81825 lodash.prototype.chain = wrapperChain; +
81826 lodash.prototype.commit = wrapperCommit; +
81827 lodash.prototype.next = wrapperNext; +
81828 lodash.prototype.plant = wrapperPlant; +
81829 lodash.prototype.reverse = wrapperReverse; +
81830 lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; +
81831 +
81832 // Add lazy aliases. +
81833 lodash.prototype.first = lodash.prototype.head; +
81834 +
81835 if (symIterator) { +
81836 lodash.prototype[symIterator] = wrapperToIterator; +
81837 } +
81838 return lodash; +
81839 }); +
81840 +
81841 /*--------------------------------------------------------------------------*/ +
81842 +
81843 // Export lodash. +
81844 var _ = runInContext(); +
81845 +
81846 // Some AMD build optimizers, like r.js, check for condition patterns like: +
81847 if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { +
81848 // Expose Lodash on the global object to prevent errors when Lodash is +
81849 // loaded by a script tag in the presence of an AMD loader. +
81850 // See http://requirejs.org/docs/errors.html#mismatch for more details. +
81851 // Use `_.noConflict` to remove Lodash from the global object. +
81852 root._ = _; +
81853 +
81854 // Define as an anonymous module so, through path mapping, it can be +
81855 // referenced as the "underscore" module. +
81856 define(function() { +
81857 return _; +
81858 }); +
81859 } +
81860 // Check for `exports` after `define` in case a build optimizer adds it. +
81861 else if (freeModule) { +
81862 // Export for Node.js. +
81863 (freeModule.exports = _)._ = _; +
81864 // Export for CommonJS support. +
81865 freeExports._ = _; +
81866 } +
81867 else { +
81868 // Export to the global object. +
81869 root._ = _; +
81870 } +
81871}.call(this)); +
81872 +
81873/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
81874 +
81875/***/ }), +
81876 +
81877/***/ "./node_modules/he/he.js": +
81878/*!*******************************!*\ +
81879 !*** ./node_modules/he/he.js ***! +
81880 \*******************************/ +
81881/*! no static exports found */ +
81882/***/ (function(module, exports, __webpack_require__) { +
81883 +
81884/* WEBPACK VAR INJECTION */(function(module, global) {/*! https://mths.be/he v1.2.0 by @mathias | MIT license */ +
81885;(function(root) { +
81886 +
81887 // Detect free variables `exports`. +
81888 var freeExports = true && exports; +
81889 +
81890 // Detect free variable `module`. +
81891 var freeModule = true && module && +
81892 module.exports == freeExports && module; +
81893 +
81894 // Detect free variable `global`, from Node.js or Browserified code, +
81895 // and use it as `root`. +
81896 var freeGlobal = typeof global == 'object' && global; +
81897 if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { +
81898 root = freeGlobal; +
81899 } +
81900 +
81901 /*--------------------------------------------------------------------------*/ +
81902 +
81903 // All astral symbols. +
81904 var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; +
81905 // All ASCII symbols (not just printable ASCII) except those listed in the +
81906 // first column of the overrides table. +
81907 // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides +
81908 var regexAsciiWhitelist = /[\x01-\x7F]/g; +
81909 // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or +
81910 // code points listed in the first column of the overrides table on +
81911 // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides. +
81912 var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g; +
81913 +
81914 var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g; +
81915 var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'}; +
81916 +
81917 var regexEscape = /["&'<>`]/g; +
81918 var escapeMap = { +
81919 '"': '&quot;', +
81920 '&': '&amp;', +
81921 '\'': '&#x27;', +
81922 '<': '&lt;', +
81923 // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the +
81924 // following is not strictly necessary unless it’s part of a tag or an +
81925 // unquoted attribute value. We’re only escaping it to support those +
81926 // situations, and for XML support. +
81927 '>': '&gt;', +
81928 // In Internet Explorer ≤ 8, the backtick character can be used +
81929 // to break out of (un)quoted attribute values or HTML comments. +
81930 // See http://html5sec.org/#102, http://html5sec.org/#108, and +
81931 // http://html5sec.org/#133. +
81932 '`': '&#x60;' +
81933 }; +
81934 +
81935 var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/; +
81936 var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +
81937 var regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g; +
81938 var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'}; +
81939 var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'}; +
81940 var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'}; +
81941 var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]; +
81942 +
81943 /*--------------------------------------------------------------------------*/ +
81944 +
81945 var stringFromCharCode = String.fromCharCode; +
81946 +
81947 var object = {}; +
81948 var hasOwnProperty = object.hasOwnProperty; +
81949 var has = function(object, propertyName) { +
81950 return hasOwnProperty.call(object, propertyName); +
81951 }; +
81952 +
81953 var contains = function(array, value) { +
81954 var index = -1; +
81955 var length = array.length; +
81956 while (++index < length) { +
81957 if (array[index] == value) { +
81958 return true; +
81959 } +
81960 } +
81961 return false; +
81962 }; +
81963 +
81964 var merge = function(options, defaults) { +
81965 if (!options) { +
81966 return defaults; +
81967 } +
81968 var result = {}; +
81969 var key; +
81970 for (key in defaults) { +
81971 // A `hasOwnProperty` check is not needed here, since only recognized +
81972 // option names are used anyway. Any others are ignored. +
81973 result[key] = has(options, key) ? options[key] : defaults[key]; +
81974 } +
81975 return result; +
81976 }; +
81977 +
81978 // Modified version of `ucs2encode`; see https://mths.be/punycode. +
81979 var codePointToSymbol = function(codePoint, strict) { +
81980 var output = ''; +
81981 if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) { +
81982 // See issue #4: +
81983 // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is +
81984 // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD +
81985 // REPLACEMENT CHARACTER.” +
81986 if (strict) { +
81987 parseError('character reference outside the permissible Unicode range'); +
81988 } +
81989 return '\uFFFD'; +
81990 } +
81991 if (has(decodeMapNumeric, codePoint)) { +
81992 if (strict) { +
81993 parseError('disallowed character reference'); +
81994 } +
81995 return decodeMapNumeric[codePoint]; +
81996 } +
81997 if (strict && contains(invalidReferenceCodePoints, codePoint)) { +
81998 parseError('disallowed character reference'); +
81999 } +
82000 if (codePoint > 0xFFFF) { +
82001 codePoint -= 0x10000; +
82002 output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800); +
82003 codePoint = 0xDC00 | codePoint & 0x3FF; +
82004 } +
82005 output += stringFromCharCode(codePoint); +
82006 return output; +
82007 }; +
82008 +
82009 var hexEscape = function(codePoint) { +
82010 return '&#x' + codePoint.toString(16).toUpperCase() + ';'; +
82011 }; +
82012 +
82013 var decEscape = function(codePoint) { +
82014 return '&#' + codePoint + ';'; +
82015 }; +
82016 +
82017 var parseError = function(message) { +
82018 throw Error('Parse error: ' + message); +
82019 }; +
82020 +
82021 /*--------------------------------------------------------------------------*/ +
82022 +
82023 var encode = function(string, options) { +
82024 options = merge(options, encode.options); +
82025 var strict = options.strict; +
82026 if (strict && regexInvalidRawCodePoint.test(string)) { +
82027 parseError('forbidden code point'); +
82028 } +
82029 var encodeEverything = options.encodeEverything; +
82030 var useNamedReferences = options.useNamedReferences; +
82031 var allowUnsafeSymbols = options.allowUnsafeSymbols; +
82032 var escapeCodePoint = options.decimal ? decEscape : hexEscape; +
82033 +
82034 var escapeBmpSymbol = function(symbol) { +
82035 return escapeCodePoint(symbol.charCodeAt(0)); +
82036 }; +
82037 +
82038 if (encodeEverything) { +
82039 // Encode ASCII symbols. +
82040 string = string.replace(regexAsciiWhitelist, function(symbol) { +
82041 // Use named references if requested & possible. +
82042 if (useNamedReferences && has(encodeMap, symbol)) { +
82043 return '&' + encodeMap[symbol] + ';'; +
82044 } +
82045 return escapeBmpSymbol(symbol); +
82046 }); +
82047 // Shorten a few escapes that represent two symbols, of which at least one +
82048 // is within the ASCII range. +
82049 if (useNamedReferences) { +
82050 string = string +
82051 .replace(/&gt;\u20D2/g, '&nvgt;') +
82052 .replace(/&lt;\u20D2/g, '&nvlt;') +
82053 .replace(/&#x66;&#x6A;/g, '&fjlig;'); +
82054 } +
82055 // Encode non-ASCII symbols. +
82056 if (useNamedReferences) { +
82057 // Encode non-ASCII symbols that can be replaced with a named reference. +
82058 string = string.replace(regexEncodeNonAscii, function(string) { +
82059 // Note: there is no need to check `has(encodeMap, string)` here. +
82060 return '&' + encodeMap[string] + ';'; +
82061 }); +
82062 } +
82063 // Note: any remaining non-ASCII symbols are handled outside of the `if`. +
82064 } else if (useNamedReferences) { +
82065 // Apply named character references. +
82066 // Encode `<>"'&` using named character references. +
82067 if (!allowUnsafeSymbols) { +
82068 string = string.replace(regexEscape, function(string) { +
82069 return '&' + encodeMap[string] + ';'; // no need to check `has()` here +
82070 }); +
82071 } +
82072 // Shorten escapes that represent two symbols, of which at least one is +
82073 // `<>"'&`. +
82074 string = string +
82075 .replace(/&gt;\u20D2/g, '&nvgt;') +
82076 .replace(/&lt;\u20D2/g, '&nvlt;'); +
82077 // Encode non-ASCII symbols that can be replaced with a named reference. +
82078 string = string.replace(regexEncodeNonAscii, function(string) { +
82079 // Note: there is no need to check `has(encodeMap, string)` here. +
82080 return '&' + encodeMap[string] + ';'; +
82081 }); +
82082 } else if (!allowUnsafeSymbols) { +
82083 // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled +
82084 // using named character references. +
82085 string = string.replace(regexEscape, escapeBmpSymbol); +
82086 } +
82087 return string +
82088 // Encode astral symbols. +
82089 .replace(regexAstralSymbols, function($0) { +
82090 // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae +
82091 var high = $0.charCodeAt(0); +
82092 var low = $0.charCodeAt(1); +
82093 var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000; +
82094 return escapeCodePoint(codePoint); +
82095 }) +
82096 // Encode any remaining BMP symbols that are not printable ASCII symbols +
82097 // using a hexadecimal escape. +
82098 .replace(regexBmpWhitelist, escapeBmpSymbol); +
82099 }; +
82100 // Expose default options (so they can be overridden globally). +
82101 encode.options = { +
82102 'allowUnsafeSymbols': false, +
82103 'encodeEverything': false, +
82104 'strict': false, +
82105 'useNamedReferences': false, +
82106 'decimal' : false +
82107 }; +
82108 +
82109 var decode = function(html, options) { +
82110 options = merge(options, decode.options); +
82111 var strict = options.strict; +
82112 if (strict && regexInvalidEntity.test(html)) { +
82113 parseError('malformed character reference'); +
82114 } +
82115 return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) { +
82116 var codePoint; +
82117 var semicolon; +
82118 var decDigits; +
82119 var hexDigits; +
82120 var reference; +
82121 var next; +
82122 +
82123 if ($1) { +
82124 reference = $1; +
82125 // Note: there is no need to check `has(decodeMap, reference)`. +
82126 return decodeMap[reference]; +
82127 } +
82128 +
82129 if ($2) { +
82130 // Decode named character references without trailing `;`, e.g. `&amp`. +
82131 // This is only a parse error if it gets converted to `&`, or if it is +
82132 // followed by `=` in an attribute context. +
82133 reference = $2; +
82134 next = $3; +
82135 if (next && options.isAttributeValue) { +
82136 if (strict && next == '=') { +
82137 parseError('`&` did not start a character reference'); +
82138 } +
82139 return $0; +
82140 } else { +
82141 if (strict) { +
82142 parseError( +
82143 'named character reference was not terminated by a semicolon' +
82144 ); +
82145 } +
82146 // Note: there is no need to check `has(decodeMapLegacy, reference)`. +
82147 return decodeMapLegacy[reference] + (next || ''); +
82148 } +
82149 } +
82150 +
82151 if ($4) { +
82152 // Decode decimal escapes, e.g. `&#119558;`. +
82153 decDigits = $4; +
82154 semicolon = $5; +
82155 if (strict && !semicolon) { +
82156 parseError('character reference was not terminated by a semicolon'); +
82157 } +
82158 codePoint = parseInt(decDigits, 10); +
82159 return codePointToSymbol(codePoint, strict); +
82160 } +
82161 +
82162 if ($6) { +
82163 // Decode hexadecimal escapes, e.g. `&#x1D306;`. +
82164 hexDigits = $6; +
82165 semicolon = $7; +
82166 if (strict && !semicolon) { +
82167 parseError('character reference was not terminated by a semicolon'); +
82168 } +
82169 codePoint = parseInt(hexDigits, 16); +
82170 return codePointToSymbol(codePoint, strict); +
82171 } +
82172 +
82173 // If we’re still here, `if ($7)` is implied; it’s an ambiguous +
82174 // ampersand for sure. https://mths.be/notes/ambiguous-ampersands +
82175 if (strict) { +
82176 parseError( +
82177 'named character reference was not terminated by a semicolon' +
82178 ); +
82179 } +
82180 return $0; +
82181 }); +
82182 }; +
82183 // Expose default options (so they can be overridden globally). +
82184 decode.options = { +
82185 'isAttributeValue': false, +
82186 'strict': false +
82187 }; +
82188 +
82189 var escape = function(string) { +
82190 return string.replace(regexEscape, function($0) { +
82191 // Note: there is no need to check `has(escapeMap, $0)` here. +
82192 return escapeMap[$0]; +
82193 }); +
82194 }; +
82195 +
82196 /*--------------------------------------------------------------------------*/ +
82197 +
82198 var he = { +
82199 'version': '1.2.0', +
82200 'encode': encode, +
82201 'decode': decode, +
82202 'escape': escape, +
82203 'unescape': decode +
82204 }; +
82205 +
82206 // Some AMD build optimizers, like r.js, check for specific condition patterns +
82207 // like the following: +
82208 if ( +
82209 typeof define == 'function' && +
82210 typeof define.amd == 'object' && +
82211 define.amd +
82212 ) { +
82213 define(function() { +
82214 return he; +
82215 }); +
82216 } else if (freeExports && !freeExports.nodeType) { +
82217 if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+ +
82218 freeModule.exports = he; +
82219 } else { // in Narwhal or RingoJS v0.7.0- +
82220 for (var key in he) { +
82221 has(he, key) && (freeExports[key] = he[key]); +
82222 } +
82223 } +
82224 } else { // in Rhino or a web browser +
82225 root.he = he; +
82226 } +
82227 +
82228}(this)); +
82229 +
82230/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module), __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) +
82231 +
82232/***/ }), +
82233 +
82234/***/ "./node_modules/is-regexp/index.js": +
82235/*!*****************************************!*\ +
82236 !*** ./node_modules/is-regexp/index.js ***! +
82237 \*****************************************/ +
82238/*! no static exports found */ +
82239/***/ (function(module, exports, __webpack_require__) { +
82240 +
82241"use strict"; +
82242 +
82243module.exports = function (re) { +
82244 return Object.prototype.toString.call(re) === '[object RegExp]'; +
82245}; +
82246 +
82247 +
82248/***/ }), +
82249 +
82250/***/ "./node_modules/lodash/lodash.js": +
82251/*!***************************************!*\ +
82252 !*** ./node_modules/lodash/lodash.js ***! +
82253 \***************************************/ +
82254/*! no static exports found */ +
82255/***/ (function(module, exports, __webpack_require__) { +
82256 +
82257/* WEBPACK VAR INJECTION */(function(global, module) {/** +
82258 * @license +
82259 * Lodash <https://lodash.com/> +
82260 * Copyright JS Foundation and other contributors <https://js.foundation/> +
82261 * Released under MIT license <https://lodash.com/license> +
82262 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> +
82263 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +
82264 */ +
82265;(function() { +
82266 +
82267 /** Used as a safe reference for `undefined` in pre-ES5 environments. */ +
82268 var undefined; +
82269 +
82270 /** Used as the semantic version number. */ +
82271 var VERSION = '4.17.11'; +
82272 +
82273 /** Used as the size to enable large array optimizations. */ +
82274 var LARGE_ARRAY_SIZE = 200; +
82275 +
82276 /** Error message constants. */ +
82277 var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', +
82278 FUNC_ERROR_TEXT = 'Expected a function'; +
82279 +
82280 /** Used to stand-in for `undefined` hash values. */ +
82281 var HASH_UNDEFINED = '__lodash_hash_undefined__'; +
82282 +
82283 /** Used as the maximum memoize cache size. */ +
82284 var MAX_MEMOIZE_SIZE = 500; +
82285 +
82286 /** Used as the internal argument placeholder. */ +
82287 var PLACEHOLDER = '__lodash_placeholder__'; +
82288 +
82289 /** Used to compose bitmasks for cloning. */ +
82290 var CLONE_DEEP_FLAG = 1, +
82291 CLONE_FLAT_FLAG = 2, +
82292 CLONE_SYMBOLS_FLAG = 4; +
82293 +
82294 /** Used to compose bitmasks for value comparisons. */ +
82295 var COMPARE_PARTIAL_FLAG = 1, +
82296 COMPARE_UNORDERED_FLAG = 2; +
82297 +
82298 /** Used to compose bitmasks for function metadata. */ +
82299 var WRAP_BIND_FLAG = 1, +
82300 WRAP_BIND_KEY_FLAG = 2, +
82301 WRAP_CURRY_BOUND_FLAG = 4, +
82302 WRAP_CURRY_FLAG = 8, +
82303 WRAP_CURRY_RIGHT_FLAG = 16, +
82304 WRAP_PARTIAL_FLAG = 32, +
82305 WRAP_PARTIAL_RIGHT_FLAG = 64, +
82306 WRAP_ARY_FLAG = 128, +
82307 WRAP_REARG_FLAG = 256, +
82308 WRAP_FLIP_FLAG = 512; +
82309 +
82310 /** Used as default options for `_.truncate`. */ +
82311 var DEFAULT_TRUNC_LENGTH = 30, +
82312 DEFAULT_TRUNC_OMISSION = '...'; +
82313 +
82314 /** Used to detect hot functions by number of calls within a span of milliseconds. */ +
82315 var HOT_COUNT = 800, +
82316 HOT_SPAN = 16; +
82317 +
82318 /** Used to indicate the type of lazy iteratees. */ +
82319 var LAZY_FILTER_FLAG = 1, +
82320 LAZY_MAP_FLAG = 2, +
82321 LAZY_WHILE_FLAG = 3; +
82322 +
82323 /** Used as references for various `Number` constants. */ +
82324 var INFINITY = 1 / 0, +
82325 MAX_SAFE_INTEGER = 9007199254740991, +
82326 MAX_INTEGER = 1.7976931348623157e+308, +
82327 NAN = 0 / 0; +
82328 +
82329 /** Used as references for the maximum length and index of an array. */ +
82330 var MAX_ARRAY_LENGTH = 4294967295, +
82331 MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, +
82332 HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; +
82333 +
82334 /** Used to associate wrap methods with their bit flags. */ +
82335 var wrapFlags = [ +
82336 ['ary', WRAP_ARY_FLAG], +
82337 ['bind', WRAP_BIND_FLAG], +
82338 ['bindKey', WRAP_BIND_KEY_FLAG], +
82339 ['curry', WRAP_CURRY_FLAG], +
82340 ['curryRight', WRAP_CURRY_RIGHT_FLAG], +
82341 ['flip', WRAP_FLIP_FLAG], +
82342 ['partial', WRAP_PARTIAL_FLAG], +
82343 ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], +
82344 ['rearg', WRAP_REARG_FLAG] +
82345 ]; +
82346 +
82347 /** `Object#toString` result references. */ +
82348 var argsTag = '[object Arguments]', +
82349 arrayTag = '[object Array]', +
82350 asyncTag = '[object AsyncFunction]', +
82351 boolTag = '[object Boolean]', +
82352 dateTag = '[object Date]', +
82353 domExcTag = '[object DOMException]', +
82354 errorTag = '[object Error]', +
82355 funcTag = '[object Function]', +
82356 genTag = '[object GeneratorFunction]', +
82357 mapTag = '[object Map]', +
82358 numberTag = '[object Number]', +
82359 nullTag = '[object Null]', +
82360 objectTag = '[object Object]', +
82361 promiseTag = '[object Promise]', +
82362 proxyTag = '[object Proxy]', +
82363 regexpTag = '[object RegExp]', +
82364 setTag = '[object Set]', +
82365 stringTag = '[object String]', +
82366 symbolTag = '[object Symbol]', +
82367 undefinedTag = '[object Undefined]', +
82368 weakMapTag = '[object WeakMap]', +
82369 weakSetTag = '[object WeakSet]'; +
82370 +
82371 var arrayBufferTag = '[object ArrayBuffer]', +
82372 dataViewTag = '[object DataView]', +
82373 float32Tag = '[object Float32Array]', +
82374 float64Tag = '[object Float64Array]', +
82375 int8Tag = '[object Int8Array]', +
82376 int16Tag = '[object Int16Array]', +
82377 int32Tag = '[object Int32Array]', +
82378 uint8Tag = '[object Uint8Array]', +
82379 uint8ClampedTag = '[object Uint8ClampedArray]', +
82380 uint16Tag = '[object Uint16Array]', +
82381 uint32Tag = '[object Uint32Array]'; +
82382 +
82383 /** Used to match empty string literals in compiled template source. */ +
82384 var reEmptyStringLeading = /\b__p \+= '';/g, +
82385 reEmptyStringMiddle = /\b(__p \+=) '' \+/g, +
82386 reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; +
82387 +
82388 /** Used to match HTML entities and HTML characters. */ +
82389 var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, +
82390 reUnescapedHtml = /[&<>"']/g, +
82391 reHasEscapedHtml = RegExp(reEscapedHtml.source), +
82392 reHasUnescapedHtml = RegExp(reUnescapedHtml.source); +
82393 +
82394 /** Used to match template delimiters. */ +
82395 var reEscape = /<%-([\s\S]+?)%>/g, +
82396 reEvaluate = /<%([\s\S]+?)%>/g, +
82397 reInterpolate = /<%=([\s\S]+?)%>/g; +
82398 +
82399 /** Used to match property names within property paths. */ +
82400 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, +
82401 reIsPlainProp = /^\w*$/, +
82402 rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; +
82403 +
82404 /** +
82405 * Used to match `RegExp` +
82406 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). +
82407 */ +
82408 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, +
82409 reHasRegExpChar = RegExp(reRegExpChar.source); +
82410 +
82411 /** Used to match leading and trailing whitespace. */ +
82412 var reTrim = /^\s+|\s+$/g, +
82413 reTrimStart = /^\s+/, +
82414 reTrimEnd = /\s+$/; +
82415 +
82416 /** Used to match wrap detail comments. */ +
82417 var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, +
82418 reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, +
82419 reSplitDetails = /,? & /; +
82420 +
82421 /** Used to match words composed of alphanumeric characters. */ +
82422 var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; +
82423 +
82424 /** Used to match backslashes in property paths. */ +
82425 var reEscapeChar = /\\(\\)?/g; +
82426 +
82427 /** +
82428 * Used to match +
82429 * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). +
82430 */ +
82431 var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; +
82432 +
82433 /** Used to match `RegExp` flags from their coerced string values. */ +
82434 var reFlags = /\w*$/; +
82435 +
82436 /** Used to detect bad signed hexadecimal string values. */ +
82437 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; +
82438 +
82439 /** Used to detect binary string values. */ +
82440 var reIsBinary = /^0b[01]+$/i; +
82441 +
82442 /** Used to detect host constructors (Safari). */ +
82443 var reIsHostCtor = /^\[object .+?Constructor\]$/; +
82444 +
82445 /** Used to detect octal string values. */ +
82446 var reIsOctal = /^0o[0-7]+$/i; +
82447 +
82448 /** Used to detect unsigned integer values. */ +
82449 var reIsUint = /^(?:0|[1-9]\d*)$/; +
82450 +
82451 /** Used to match Latin Unicode letters (excluding mathematical operators). */ +
82452 var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; +
82453 +
82454 /** Used to ensure capturing order of template delimiters. */ +
82455 var reNoMatch = /($^)/; +
82456 +
82457 /** Used to match unescaped characters in compiled string literals. */ +
82458 var reUnescapedString = /['\n\r\u2028\u2029\\]/g; +
82459 +
82460 /** Used to compose unicode character classes. */ +
82461 var rsAstralRange = '\\ud800-\\udfff', +
82462 rsComboMarksRange = '\\u0300-\\u036f', +
82463 reComboHalfMarksRange = '\\ufe20-\\ufe2f', +
82464 rsComboSymbolsRange = '\\u20d0-\\u20ff', +
82465 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, +
82466 rsDingbatRange = '\\u2700-\\u27bf', +
82467 rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', +
82468 rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', +
82469 rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', +
82470 rsPunctuationRange = '\\u2000-\\u206f', +
82471 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', +
82472 rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', +
82473 rsVarRange = '\\ufe0e\\ufe0f', +
82474 rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; +
82475 +
82476 /** Used to compose unicode capture groups. */ +
82477 var rsApos = "['\u2019]", +
82478 rsAstral = '[' + rsAstralRange + ']', +
82479 rsBreak = '[' + rsBreakRange + ']', +
82480 rsCombo = '[' + rsComboRange + ']', +
82481 rsDigits = '\\d+', +
82482 rsDingbat = '[' + rsDingbatRange + ']', +
82483 rsLower = '[' + rsLowerRange + ']', +
82484 rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', +
82485 rsFitz = '\\ud83c[\\udffb-\\udfff]', +
82486 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', +
82487 rsNonAstral = '[^' + rsAstralRange + ']', +
82488 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', +
82489 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', +
82490 rsUpper = '[' + rsUpperRange + ']', +
82491 rsZWJ = '\\u200d'; +
82492 +
82493 /** Used to compose unicode regexes. */ +
82494 var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', +
82495 rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', +
82496 rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', +
82497 rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', +
82498 reOptMod = rsModifier + '?', +
82499 rsOptVar = '[' + rsVarRange + ']?', +
82500 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', +
82501 rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', +
82502 rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', +
82503 rsSeq = rsOptVar + reOptMod + rsOptJoin, +
82504 rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, +
82505 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; +
82506 +
82507 /** Used to match apostrophes. */ +
82508 var reApos = RegExp(rsApos, 'g'); +
82509 +
82510 /** +
82511 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and +
82512 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). +
82513 */ +
82514 var reComboMark = RegExp(rsCombo, 'g'); +
82515 +
82516 /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +
82517 var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); +
82518 +
82519 /** Used to match complex or compound words. */ +
82520 var reUnicodeWord = RegExp([ +
82521 rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', +
82522 rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', +
82523 rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, +
82524 rsUpper + '+' + rsOptContrUpper, +
82525 rsOrdUpper, +
82526 rsOrdLower, +
82527 rsDigits, +
82528 rsEmoji +
82529 ].join('|'), 'g'); +
82530 +
82531 /** 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/). */ +
82532 var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); +
82533 +
82534 /** Used to detect strings that need a more robust regexp to match words. */ +
82535 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 ]/; +
82536 +
82537 /** Used to assign default `context` object properties. */ +
82538 var contextProps = [ +
82539 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', +
82540 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', +
82541 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', +
82542 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', +
82543 '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' +
82544 ]; +
82545 +
82546 /** Used to make template sourceURLs easier to identify. */ +
82547 var templateCounter = -1; +
82548 +
82549 /** Used to identify `toStringTag` values of typed arrays. */ +
82550 var typedArrayTags = {}; +
82551 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +
82552 typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +
82553 typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +
82554 typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +
82555 typedArrayTags[uint32Tag] = true; +
82556 typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +
82557 typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +
82558 typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +
82559 typedArrayTags[errorTag] = typedArrayTags[funcTag] = +
82560 typedArrayTags[mapTag] = typedArrayTags[numberTag] = +
82561 typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +
82562 typedArrayTags[setTag] = typedArrayTags[stringTag] = +
82563 typedArrayTags[weakMapTag] = false; +
82564 +
82565 /** Used to identify `toStringTag` values supported by `_.clone`. */ +
82566 var cloneableTags = {}; +
82567 cloneableTags[argsTag] = cloneableTags[arrayTag] = +
82568 cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +
82569 cloneableTags[boolTag] = cloneableTags[dateTag] = +
82570 cloneableTags[float32Tag] = cloneableTags[float64Tag] = +
82571 cloneableTags[int8Tag] = cloneableTags[int16Tag] = +
82572 cloneableTags[int32Tag] = cloneableTags[mapTag] = +
82573 cloneableTags[numberTag] = cloneableTags[objectTag] = +
82574 cloneableTags[regexpTag] = cloneableTags[setTag] = +
82575 cloneableTags[stringTag] = cloneableTags[symbolTag] = +
82576 cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +
82577 cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +
82578 cloneableTags[errorTag] = cloneableTags[funcTag] = +
82579 cloneableTags[weakMapTag] = false; +
82580 +
82581 /** Used to map Latin Unicode letters to basic Latin letters. */ +
82582 var deburredLetters = { +
82583 // Latin-1 Supplement block. +
82584 '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', +
82585 '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', +
82586 '\xc7': 'C', '\xe7': 'c', +
82587 '\xd0': 'D', '\xf0': 'd', +
82588 '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', +
82589 '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', +
82590 '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', +
82591 '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', +
82592 '\xd1': 'N', '\xf1': 'n', +
82593 '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', +
82594 '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', +
82595 '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', +
82596 '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', +
82597 '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', +
82598 '\xc6': 'Ae', '\xe6': 'ae', +
82599 '\xde': 'Th', '\xfe': 'th', +
82600 '\xdf': 'ss', +
82601 // Latin Extended-A block. +
82602 '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', +
82603 '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', +
82604 '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', +
82605 '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', +
82606 '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', +
82607 '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', +
82608 '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', +
82609 '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', +
82610 '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', +
82611 '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', +
82612 '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', +
82613 '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', +
82614 '\u0134': 'J', '\u0135': 'j', +
82615 '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', +
82616 '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', +
82617 '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', +
82618 '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', +
82619 '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', +
82620 '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', +
82621 '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', +
82622 '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', +
82623 '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', +
82624 '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', +
82625 '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', +
82626 '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', +
82627 '\u0163': 't', '\u0165': 't', '\u0167': 't', +
82628 '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', +
82629 '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', +
82630 '\u0174': 'W', '\u0175': 'w', +
82631 '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', +
82632 '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', +
82633 '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', +
82634 '\u0132': 'IJ', '\u0133': 'ij', +
82635 '\u0152': 'Oe', '\u0153': 'oe', +
82636 '\u0149': "'n", '\u017f': 's' +
82637 }; +
82638 +
82639 /** Used to map characters to HTML entities. */ +
82640 var htmlEscapes = { +
82641 '&': '&amp;', +
82642 '<': '&lt;', +
82643 '>': '&gt;', +
82644 '"': '&quot;', +
82645 "'": '&#39;' +
82646 }; +
82647 +
82648 /** Used to map HTML entities to characters. */ +
82649 var htmlUnescapes = { +
82650 '&amp;': '&', +
82651 '&lt;': '<', +
82652 '&gt;': '>', +
82653 '&quot;': '"', +
82654 '&#39;': "'" +
82655 }; +
82656 +
82657 /** Used to escape characters for inclusion in compiled string literals. */ +
82658 var stringEscapes = { +
82659 '\\': '\\', +
82660 "'": "'", +
82661 '\n': 'n', +
82662 '\r': 'r', +
82663 '\u2028': 'u2028', +
82664 '\u2029': 'u2029' +
82665 }; +
82666 +
82667 /** Built-in method references without a dependency on `root`. */ +
82668 var freeParseFloat = parseFloat, +
82669 freeParseInt = parseInt; +
82670 +
82671 /** Detect free variable `global` from Node.js. */ +
82672 var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; +
82673 +
82674 /** Detect free variable `self`. */ +
82675 var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +
82676 +
82677 /** Used as a reference to the global object. */ +
82678 var root = freeGlobal || freeSelf || Function('return this')(); +
82679 +
82680 /** Detect free variable `exports`. */ +
82681 var freeExports = true && exports && !exports.nodeType && exports; +
82682 +
82683 /** Detect free variable `module`. */ +
82684 var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; +
82685 +
82686 /** Detect the popular CommonJS extension `module.exports`. */ +
82687 var moduleExports = freeModule && freeModule.exports === freeExports; +
82688 +
82689 /** Detect free variable `process` from Node.js. */ +
82690 var freeProcess = moduleExports && freeGlobal.process; +
82691 +
82692 /** Used to access faster Node.js helpers. */ +
82693 var nodeUtil = (function() { +
82694 try { +
82695 // Use `util.types` for Node.js 10+. +
82696 var types = freeModule && freeModule.require && freeModule.require('util').types; +
82697 +
82698 if (types) { +
82699 return types; +
82700 } +
82701 +
82702 // Legacy `process.binding('util')` for Node.js < 10. +
82703 return freeProcess && freeProcess.binding && freeProcess.binding('util'); +
82704 } catch (e) {} +
82705 }()); +
82706 +
82707 /* Node.js helper references. */ +
82708 var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, +
82709 nodeIsDate = nodeUtil && nodeUtil.isDate, +
82710 nodeIsMap = nodeUtil && nodeUtil.isMap, +
82711 nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, +
82712 nodeIsSet = nodeUtil && nodeUtil.isSet, +
82713 nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; +
82714 +
82715 /*--------------------------------------------------------------------------*/ +
82716 +
82717 /** +
82718 * A faster alternative to `Function#apply`, this function invokes `func` +
82719 * with the `this` binding of `thisArg` and the arguments of `args`. +
82720 * +
82721 * @private +
82722 * @param {Function} func The function to invoke. +
82723 * @param {*} thisArg The `this` binding of `func`. +
82724 * @param {Array} args The arguments to invoke `func` with. +
82725 * @returns {*} Returns the result of `func`. +
82726 */ +
82727 function apply(func, thisArg, args) { +
82728 switch (args.length) { +
82729 case 0: return func.call(thisArg); +
82730 case 1: return func.call(thisArg, args[0]); +
82731 case 2: return func.call(thisArg, args[0], args[1]); +
82732 case 3: return func.call(thisArg, args[0], args[1], args[2]); +
82733 } +
82734 return func.apply(thisArg, args); +
82735 } +
82736 +
82737 /** +
82738 * A specialized version of `baseAggregator` for arrays. +
82739 * +
82740 * @private +
82741 * @param {Array} [array] The array to iterate over. +
82742 * @param {Function} setter The function to set `accumulator` values. +
82743 * @param {Function} iteratee The iteratee to transform keys. +
82744 * @param {Object} accumulator The initial aggregated object. +
82745 * @returns {Function} Returns `accumulator`. +
82746 */ +
82747 function arrayAggregator(array, setter, iteratee, accumulator) { +
82748 var index = -1, +
82749 length = array == null ? 0 : array.length; +
82750 +
82751 while (++index < length) { +
82752 var value = array[index]; +
82753 setter(accumulator, value, iteratee(value), array); +
82754 } +
82755 return accumulator; +
82756 } +
82757 +
82758 /** +
82759 * A specialized version of `_.forEach` for arrays without support for +
82760 * iteratee shorthands. +
82761 * +
82762 * @private +
82763 * @param {Array} [array] The array to iterate over. +
82764 * @param {Function} iteratee The function invoked per iteration. +
82765 * @returns {Array} Returns `array`. +
82766 */ +
82767 function arrayEach(array, iteratee) { +
82768 var index = -1, +
82769 length = array == null ? 0 : array.length; +
82770 +
82771 while (++index < length) { +
82772 if (iteratee(array[index], index, array) === false) { +
82773 break; +
82774 } +
82775 } +
82776 return array; +
82777 } +
82778 +
82779 /** +
82780 * A specialized version of `_.forEachRight` for arrays without support for +
82781 * iteratee shorthands. +
82782 * +
82783 * @private +
82784 * @param {Array} [array] The array to iterate over. +
82785 * @param {Function} iteratee The function invoked per iteration. +
82786 * @returns {Array} Returns `array`. +
82787 */ +
82788 function arrayEachRight(array, iteratee) { +
82789 var length = array == null ? 0 : array.length; +
82790 +
82791 while (length--) { +
82792 if (iteratee(array[length], length, array) === false) { +
82793 break; +
82794 } +
82795 } +
82796 return array; +
82797 } +
82798 +
82799 /** +
82800 * A specialized version of `_.every` for arrays without support for +
82801 * iteratee shorthands. +
82802 * +
82803 * @private +
82804 * @param {Array} [array] The array to iterate over. +
82805 * @param {Function} predicate The function invoked per iteration. +
82806 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
82807 * else `false`. +
82808 */ +
82809 function arrayEvery(array, predicate) { +
82810 var index = -1, +
82811 length = array == null ? 0 : array.length; +
82812 +
82813 while (++index < length) { +
82814 if (!predicate(array[index], index, array)) { +
82815 return false; +
82816 } +
82817 } +
82818 return true; +
82819 } +
82820 +
82821 /** +
82822 * A specialized version of `_.filter` for arrays without support for +
82823 * iteratee shorthands. +
82824 * +
82825 * @private +
82826 * @param {Array} [array] The array to iterate over. +
82827 * @param {Function} predicate The function invoked per iteration. +
82828 * @returns {Array} Returns the new filtered array. +
82829 */ +
82830 function arrayFilter(array, predicate) { +
82831 var index = -1, +
82832 length = array == null ? 0 : array.length, +
82833 resIndex = 0, +
82834 result = []; +
82835 +
82836 while (++index < length) { +
82837 var value = array[index]; +
82838 if (predicate(value, index, array)) { +
82839 result[resIndex++] = value; +
82840 } +
82841 } +
82842 return result; +
82843 } +
82844 +
82845 /** +
82846 * A specialized version of `_.includes` for arrays without support for +
82847 * specifying an index to search from. +
82848 * +
82849 * @private +
82850 * @param {Array} [array] The array to inspect. +
82851 * @param {*} target The value to search for. +
82852 * @returns {boolean} Returns `true` if `target` is found, else `false`. +
82853 */ +
82854 function arrayIncludes(array, value) { +
82855 var length = array == null ? 0 : array.length; +
82856 return !!length && baseIndexOf(array, value, 0) > -1; +
82857 } +
82858 +
82859 /** +
82860 * This function is like `arrayIncludes` except that it accepts a comparator. +
82861 * +
82862 * @private +
82863 * @param {Array} [array] The array to inspect. +
82864 * @param {*} target The value to search for. +
82865 * @param {Function} comparator The comparator invoked per element. +
82866 * @returns {boolean} Returns `true` if `target` is found, else `false`. +
82867 */ +
82868 function arrayIncludesWith(array, value, comparator) { +
82869 var index = -1, +
82870 length = array == null ? 0 : array.length; +
82871 +
82872 while (++index < length) { +
82873 if (comparator(value, array[index])) { +
82874 return true; +
82875 } +
82876 } +
82877 return false; +
82878 } +
82879 +
82880 /** +
82881 * A specialized version of `_.map` for arrays without support for iteratee +
82882 * shorthands. +
82883 * +
82884 * @private +
82885 * @param {Array} [array] The array to iterate over. +
82886 * @param {Function} iteratee The function invoked per iteration. +
82887 * @returns {Array} Returns the new mapped array. +
82888 */ +
82889 function arrayMap(array, iteratee) { +
82890 var index = -1, +
82891 length = array == null ? 0 : array.length, +
82892 result = Array(length); +
82893 +
82894 while (++index < length) { +
82895 result[index] = iteratee(array[index], index, array); +
82896 } +
82897 return result; +
82898 } +
82899 +
82900 /** +
82901 * Appends the elements of `values` to `array`. +
82902 * +
82903 * @private +
82904 * @param {Array} array The array to modify. +
82905 * @param {Array} values The values to append. +
82906 * @returns {Array} Returns `array`. +
82907 */ +
82908 function arrayPush(array, values) { +
82909 var index = -1, +
82910 length = values.length, +
82911 offset = array.length; +
82912 +
82913 while (++index < length) { +
82914 array[offset + index] = values[index]; +
82915 } +
82916 return array; +
82917 } +
82918 +
82919 /** +
82920 * A specialized version of `_.reduce` for arrays without support for +
82921 * iteratee shorthands. +
82922 * +
82923 * @private +
82924 * @param {Array} [array] The array to iterate over. +
82925 * @param {Function} iteratee The function invoked per iteration. +
82926 * @param {*} [accumulator] The initial value. +
82927 * @param {boolean} [initAccum] Specify using the first element of `array` as +
82928 * the initial value. +
82929 * @returns {*} Returns the accumulated value. +
82930 */ +
82931 function arrayReduce(array, iteratee, accumulator, initAccum) { +
82932 var index = -1, +
82933 length = array == null ? 0 : array.length; +
82934 +
82935 if (initAccum && length) { +
82936 accumulator = array[++index]; +
82937 } +
82938 while (++index < length) { +
82939 accumulator = iteratee(accumulator, array[index], index, array); +
82940 } +
82941 return accumulator; +
82942 } +
82943 +
82944 /** +
82945 * A specialized version of `_.reduceRight` for arrays without support for +
82946 * iteratee shorthands. +
82947 * +
82948 * @private +
82949 * @param {Array} [array] The array to iterate over. +
82950 * @param {Function} iteratee The function invoked per iteration. +
82951 * @param {*} [accumulator] The initial value. +
82952 * @param {boolean} [initAccum] Specify using the last element of `array` as +
82953 * the initial value. +
82954 * @returns {*} Returns the accumulated value. +
82955 */ +
82956 function arrayReduceRight(array, iteratee, accumulator, initAccum) { +
82957 var length = array == null ? 0 : array.length; +
82958 if (initAccum && length) { +
82959 accumulator = array[--length]; +
82960 } +
82961 while (length--) { +
82962 accumulator = iteratee(accumulator, array[length], length, array); +
82963 } +
82964 return accumulator; +
82965 } +
82966 +
82967 /** +
82968 * A specialized version of `_.some` for arrays without support for iteratee +
82969 * shorthands. +
82970 * +
82971 * @private +
82972 * @param {Array} [array] The array to iterate over. +
82973 * @param {Function} predicate The function invoked per iteration. +
82974 * @returns {boolean} Returns `true` if any element passes the predicate check, +
82975 * else `false`. +
82976 */ +
82977 function arraySome(array, predicate) { +
82978 var index = -1, +
82979 length = array == null ? 0 : array.length; +
82980 +
82981 while (++index < length) { +
82982 if (predicate(array[index], index, array)) { +
82983 return true; +
82984 } +
82985 } +
82986 return false; +
82987 } +
82988 +
82989 /** +
82990 * Gets the size of an ASCII `string`. +
82991 * +
82992 * @private +
82993 * @param {string} string The string inspect. +
82994 * @returns {number} Returns the string size. +
82995 */ +
82996 var asciiSize = baseProperty('length'); +
82997 +
82998 /** +
82999 * Converts an ASCII `string` to an array. +
83000 * +
83001 * @private +
83002 * @param {string} string The string to convert. +
83003 * @returns {Array} Returns the converted array. +
83004 */ +
83005 function asciiToArray(string) { +
83006 return string.split(''); +
83007 } +
83008 +
83009 /** +
83010 * Splits an ASCII `string` into an array of its words. +
83011 * +
83012 * @private +
83013 * @param {string} The string to inspect. +
83014 * @returns {Array} Returns the words of `string`. +
83015 */ +
83016 function asciiWords(string) { +
83017 return string.match(reAsciiWord) || []; +
83018 } +
83019 +
83020 /** +
83021 * The base implementation of methods like `_.findKey` and `_.findLastKey`, +
83022 * without support for iteratee shorthands, which iterates over `collection` +
83023 * using `eachFunc`. +
83024 * +
83025 * @private +
83026 * @param {Array|Object} collection The collection to inspect. +
83027 * @param {Function} predicate The function invoked per iteration. +
83028 * @param {Function} eachFunc The function to iterate over `collection`. +
83029 * @returns {*} Returns the found element or its key, else `undefined`. +
83030 */ +
83031 function baseFindKey(collection, predicate, eachFunc) { +
83032 var result; +
83033 eachFunc(collection, function(value, key, collection) { +
83034 if (predicate(value, key, collection)) { +
83035 result = key; +
83036 return false; +
83037 } +
83038 }); +
83039 return result; +
83040 } +
83041 +
83042 /** +
83043 * The base implementation of `_.findIndex` and `_.findLastIndex` without +
83044 * support for iteratee shorthands. +
83045 * +
83046 * @private +
83047 * @param {Array} array The array to inspect. +
83048 * @param {Function} predicate The function invoked per iteration. +
83049 * @param {number} fromIndex The index to search from. +
83050 * @param {boolean} [fromRight] Specify iterating from right to left. +
83051 * @returns {number} Returns the index of the matched value, else `-1`. +
83052 */ +
83053 function baseFindIndex(array, predicate, fromIndex, fromRight) { +
83054 var length = array.length, +
83055 index = fromIndex + (fromRight ? 1 : -1); +
83056 +
83057 while ((fromRight ? index-- : ++index < length)) { +
83058 if (predicate(array[index], index, array)) { +
83059 return index; +
83060 } +
83061 } +
83062 return -1; +
83063 } +
83064 +
83065 /** +
83066 * The base implementation of `_.indexOf` without `fromIndex` bounds checks. +
83067 * +
83068 * @private +
83069 * @param {Array} array The array to inspect. +
83070 * @param {*} value The value to search for. +
83071 * @param {number} fromIndex The index to search from. +
83072 * @returns {number} Returns the index of the matched value, else `-1`. +
83073 */ +
83074 function baseIndexOf(array, value, fromIndex) { +
83075 return value === value +
83076 ? strictIndexOf(array, value, fromIndex) +
83077 : baseFindIndex(array, baseIsNaN, fromIndex); +
83078 } +
83079 +
83080 /** +
83081 * This function is like `baseIndexOf` except that it accepts a comparator. +
83082 * +
83083 * @private +
83084 * @param {Array} array The array to inspect. +
83085 * @param {*} value The value to search for. +
83086 * @param {number} fromIndex The index to search from. +
83087 * @param {Function} comparator The comparator invoked per element. +
83088 * @returns {number} Returns the index of the matched value, else `-1`. +
83089 */ +
83090 function baseIndexOfWith(array, value, fromIndex, comparator) { +
83091 var index = fromIndex - 1, +
83092 length = array.length; +
83093 +
83094 while (++index < length) { +
83095 if (comparator(array[index], value)) { +
83096 return index; +
83097 } +
83098 } +
83099 return -1; +
83100 } +
83101 +
83102 /** +
83103 * The base implementation of `_.isNaN` without support for number objects. +
83104 * +
83105 * @private +
83106 * @param {*} value The value to check. +
83107 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +
83108 */ +
83109 function baseIsNaN(value) { +
83110 return value !== value; +
83111 } +
83112 +
83113 /** +
83114 * The base implementation of `_.mean` and `_.meanBy` without support for +
83115 * iteratee shorthands. +
83116 * +
83117 * @private +
83118 * @param {Array} array The array to iterate over. +
83119 * @param {Function} iteratee The function invoked per iteration. +
83120 * @returns {number} Returns the mean. +
83121 */ +
83122 function baseMean(array, iteratee) { +
83123 var length = array == null ? 0 : array.length; +
83124 return length ? (baseSum(array, iteratee) / length) : NAN; +
83125 } +
83126 +
83127 /** +
83128 * The base implementation of `_.property` without support for deep paths. +
83129 * +
83130 * @private +
83131 * @param {string} key The key of the property to get. +
83132 * @returns {Function} Returns the new accessor function. +
83133 */ +
83134 function baseProperty(key) { +
83135 return function(object) { +
83136 return object == null ? undefined : object[key]; +
83137 }; +
83138 } +
83139 +
83140 /** +
83141 * The base implementation of `_.propertyOf` without support for deep paths. +
83142 * +
83143 * @private +
83144 * @param {Object} object The object to query. +
83145 * @returns {Function} Returns the new accessor function. +
83146 */ +
83147 function basePropertyOf(object) { +
83148 return function(key) { +
83149 return object == null ? undefined : object[key]; +
83150 }; +
83151 } +
83152 +
83153 /** +
83154 * The base implementation of `_.reduce` and `_.reduceRight`, without support +
83155 * for iteratee shorthands, which iterates over `collection` using `eachFunc`. +
83156 * +
83157 * @private +
83158 * @param {Array|Object} collection The collection to iterate over. +
83159 * @param {Function} iteratee The function invoked per iteration. +
83160 * @param {*} accumulator The initial value. +
83161 * @param {boolean} initAccum Specify using the first or last element of +
83162 * `collection` as the initial value. +
83163 * @param {Function} eachFunc The function to iterate over `collection`. +
83164 * @returns {*} Returns the accumulated value. +
83165 */ +
83166 function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { +
83167 eachFunc(collection, function(value, index, collection) { +
83168 accumulator = initAccum +
83169 ? (initAccum = false, value) +
83170 : iteratee(accumulator, value, index, collection); +
83171 }); +
83172 return accumulator; +
83173 } +
83174 +
83175 /** +
83176 * The base implementation of `_.sortBy` which uses `comparer` to define the +
83177 * sort order of `array` and replaces criteria objects with their corresponding +
83178 * values. +
83179 * +
83180 * @private +
83181 * @param {Array} array The array to sort. +
83182 * @param {Function} comparer The function to define sort order. +
83183 * @returns {Array} Returns `array`. +
83184 */ +
83185 function baseSortBy(array, comparer) { +
83186 var length = array.length; +
83187 +
83188 array.sort(comparer); +
83189 while (length--) { +
83190 array[length] = array[length].value; +
83191 } +
83192 return array; +
83193 } +
83194 +
83195 /** +
83196 * The base implementation of `_.sum` and `_.sumBy` without support for +
83197 * iteratee shorthands. +
83198 * +
83199 * @private +
83200 * @param {Array} array The array to iterate over. +
83201 * @param {Function} iteratee The function invoked per iteration. +
83202 * @returns {number} Returns the sum. +
83203 */ +
83204 function baseSum(array, iteratee) { +
83205 var result, +
83206 index = -1, +
83207 length = array.length; +
83208 +
83209 while (++index < length) { +
83210 var current = iteratee(array[index]); +
83211 if (current !== undefined) { +
83212 result = result === undefined ? current : (result + current); +
83213 } +
83214 } +
83215 return result; +
83216 } +
83217 +
83218 /** +
83219 * The base implementation of `_.times` without support for iteratee shorthands +
83220 * or max array length checks. +
83221 * +
83222 * @private +
83223 * @param {number} n The number of times to invoke `iteratee`. +
83224 * @param {Function} iteratee The function invoked per iteration. +
83225 * @returns {Array} Returns the array of results. +
83226 */ +
83227 function baseTimes(n, iteratee) { +
83228 var index = -1, +
83229 result = Array(n); +
83230 +
83231 while (++index < n) { +
83232 result[index] = iteratee(index); +
83233 } +
83234 return result; +
83235 } +
83236 +
83237 /** +
83238 * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array +
83239 * of key-value pairs for `object` corresponding to the property names of `props`. +
83240 * +
83241 * @private +
83242 * @param {Object} object The object to query. +
83243 * @param {Array} props The property names to get values for. +
83244 * @returns {Object} Returns the key-value pairs. +
83245 */ +
83246 function baseToPairs(object, props) { +
83247 return arrayMap(props, function(key) { +
83248 return [key, object[key]]; +
83249 }); +
83250 } +
83251 +
83252 /** +
83253 * The base implementation of `_.unary` without support for storing metadata. +
83254 * +
83255 * @private +
83256 * @param {Function} func The function to cap arguments for. +
83257 * @returns {Function} Returns the new capped function. +
83258 */ +
83259 function baseUnary(func) { +
83260 return function(value) { +
83261 return func(value); +
83262 }; +
83263 } +
83264 +
83265 /** +
83266 * The base implementation of `_.values` and `_.valuesIn` which creates an +
83267 * array of `object` property values corresponding to the property names +
83268 * of `props`. +
83269 * +
83270 * @private +
83271 * @param {Object} object The object to query. +
83272 * @param {Array} props The property names to get values for. +
83273 * @returns {Object} Returns the array of property values. +
83274 */ +
83275 function baseValues(object, props) { +
83276 return arrayMap(props, function(key) { +
83277 return object[key]; +
83278 }); +
83279 } +
83280 +
83281 /** +
83282 * Checks if a `cache` value for `key` exists. +
83283 * +
83284 * @private +
83285 * @param {Object} cache The cache to query. +
83286 * @param {string} key The key of the entry to check. +
83287 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
83288 */ +
83289 function cacheHas(cache, key) { +
83290 return cache.has(key); +
83291 } +
83292 +
83293 /** +
83294 * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol +
83295 * that is not found in the character symbols. +
83296 * +
83297 * @private +
83298 * @param {Array} strSymbols The string symbols to inspect. +
83299 * @param {Array} chrSymbols The character symbols to find. +
83300 * @returns {number} Returns the index of the first unmatched string symbol. +
83301 */ +
83302 function charsStartIndex(strSymbols, chrSymbols) { +
83303 var index = -1, +
83304 length = strSymbols.length; +
83305 +
83306 while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +
83307 return index; +
83308 } +
83309 +
83310 /** +
83311 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol +
83312 * that is not found in the character symbols. +
83313 * +
83314 * @private +
83315 * @param {Array} strSymbols The string symbols to inspect. +
83316 * @param {Array} chrSymbols The character symbols to find. +
83317 * @returns {number} Returns the index of the last unmatched string symbol. +
83318 */ +
83319 function charsEndIndex(strSymbols, chrSymbols) { +
83320 var index = strSymbols.length; +
83321 +
83322 while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} +
83323 return index; +
83324 } +
83325 +
83326 /** +
83327 * Gets the number of `placeholder` occurrences in `array`. +
83328 * +
83329 * @private +
83330 * @param {Array} array The array to inspect. +
83331 * @param {*} placeholder The placeholder to search for. +
83332 * @returns {number} Returns the placeholder count. +
83333 */ +
83334 function countHolders(array, placeholder) { +
83335 var length = array.length, +
83336 result = 0; +
83337 +
83338 while (length--) { +
83339 if (array[length] === placeholder) { +
83340 ++result; +
83341 } +
83342 } +
83343 return result; +
83344 } +
83345 +
83346 /** +
83347 * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A +
83348 * letters to basic Latin letters. +
83349 * +
83350 * @private +
83351 * @param {string} letter The matched letter to deburr. +
83352 * @returns {string} Returns the deburred letter. +
83353 */ +
83354 var deburrLetter = basePropertyOf(deburredLetters); +
83355 +
83356 /** +
83357 * Used by `_.escape` to convert characters to HTML entities. +
83358 * +
83359 * @private +
83360 * @param {string} chr The matched character to escape. +
83361 * @returns {string} Returns the escaped character. +
83362 */ +
83363 var escapeHtmlChar = basePropertyOf(htmlEscapes); +
83364 +
83365 /** +
83366 * Used by `_.template` to escape characters for inclusion in compiled string literals. +
83367 * +
83368 * @private +
83369 * @param {string} chr The matched character to escape. +
83370 * @returns {string} Returns the escaped character. +
83371 */ +
83372 function escapeStringChar(chr) { +
83373 return '\\' + stringEscapes[chr]; +
83374 } +
83375 +
83376 /** +
83377 * Gets the value at `key` of `object`. +
83378 * +
83379 * @private +
83380 * @param {Object} [object] The object to query. +
83381 * @param {string} key The key of the property to get. +
83382 * @returns {*} Returns the property value. +
83383 */ +
83384 function getValue(object, key) { +
83385 return object == null ? undefined : object[key]; +
83386 } +
83387 +
83388 /** +
83389 * Checks if `string` contains Unicode symbols. +
83390 * +
83391 * @private +
83392 * @param {string} string The string to inspect. +
83393 * @returns {boolean} Returns `true` if a symbol is found, else `false`. +
83394 */ +
83395 function hasUnicode(string) { +
83396 return reHasUnicode.test(string); +
83397 } +
83398 +
83399 /** +
83400 * Checks if `string` contains a word composed of Unicode symbols. +
83401 * +
83402 * @private +
83403 * @param {string} string The string to inspect. +
83404 * @returns {boolean} Returns `true` if a word is found, else `false`. +
83405 */ +
83406 function hasUnicodeWord(string) { +
83407 return reHasUnicodeWord.test(string); +
83408 } +
83409 +
83410 /** +
83411 * Converts `iterator` to an array. +
83412 * +
83413 * @private +
83414 * @param {Object} iterator The iterator to convert. +
83415 * @returns {Array} Returns the converted array. +
83416 */ +
83417 function iteratorToArray(iterator) { +
83418 var data, +
83419 result = []; +
83420 +
83421 while (!(data = iterator.next()).done) { +
83422 result.push(data.value); +
83423 } +
83424 return result; +
83425 } +
83426 +
83427 /** +
83428 * Converts `map` to its key-value pairs. +
83429 * +
83430 * @private +
83431 * @param {Object} map The map to convert. +
83432 * @returns {Array} Returns the key-value pairs. +
83433 */ +
83434 function mapToArray(map) { +
83435 var index = -1, +
83436 result = Array(map.size); +
83437 +
83438 map.forEach(function(value, key) { +
83439 result[++index] = [key, value]; +
83440 }); +
83441 return result; +
83442 } +
83443 +
83444 /** +
83445 * Creates a unary function that invokes `func` with its argument transformed. +
83446 * +
83447 * @private +
83448 * @param {Function} func The function to wrap. +
83449 * @param {Function} transform The argument transform. +
83450 * @returns {Function} Returns the new function. +
83451 */ +
83452 function overArg(func, transform) { +
83453 return function(arg) { +
83454 return func(transform(arg)); +
83455 }; +
83456 } +
83457 +
83458 /** +
83459 * Replaces all `placeholder` elements in `array` with an internal placeholder +
83460 * and returns an array of their indexes. +
83461 * +
83462 * @private +
83463 * @param {Array} array The array to modify. +
83464 * @param {*} placeholder The placeholder to replace. +
83465 * @returns {Array} Returns the new array of placeholder indexes. +
83466 */ +
83467 function replaceHolders(array, placeholder) { +
83468 var index = -1, +
83469 length = array.length, +
83470 resIndex = 0, +
83471 result = []; +
83472 +
83473 while (++index < length) { +
83474 var value = array[index]; +
83475 if (value === placeholder || value === PLACEHOLDER) { +
83476 array[index] = PLACEHOLDER; +
83477 result[resIndex++] = index; +
83478 } +
83479 } +
83480 return result; +
83481 } +
83482 +
83483 /** +
83484 * Converts `set` to an array of its values. +
83485 * +
83486 * @private +
83487 * @param {Object} set The set to convert. +
83488 * @returns {Array} Returns the values. +
83489 */ +
83490 function setToArray(set) { +
83491 var index = -1, +
83492 result = Array(set.size); +
83493 +
83494 set.forEach(function(value) { +
83495 result[++index] = value; +
83496 }); +
83497 return result; +
83498 } +
83499 +
83500 /** +
83501 * Converts `set` to its value-value pairs. +
83502 * +
83503 * @private +
83504 * @param {Object} set The set to convert. +
83505 * @returns {Array} Returns the value-value pairs. +
83506 */ +
83507 function setToPairs(set) { +
83508 var index = -1, +
83509 result = Array(set.size); +
83510 +
83511 set.forEach(function(value) { +
83512 result[++index] = [value, value]; +
83513 }); +
83514 return result; +
83515 } +
83516 +
83517 /** +
83518 * A specialized version of `_.indexOf` which performs strict equality +
83519 * comparisons of values, i.e. `===`. +
83520 * +
83521 * @private +
83522 * @param {Array} array The array to inspect. +
83523 * @param {*} value The value to search for. +
83524 * @param {number} fromIndex The index to search from. +
83525 * @returns {number} Returns the index of the matched value, else `-1`. +
83526 */ +
83527 function strictIndexOf(array, value, fromIndex) { +
83528 var index = fromIndex - 1, +
83529 length = array.length; +
83530 +
83531 while (++index < length) { +
83532 if (array[index] === value) { +
83533 return index; +
83534 } +
83535 } +
83536 return -1; +
83537 } +
83538 +
83539 /** +
83540 * A specialized version of `_.lastIndexOf` which performs strict equality +
83541 * comparisons of values, i.e. `===`. +
83542 * +
83543 * @private +
83544 * @param {Array} array The array to inspect. +
83545 * @param {*} value The value to search for. +
83546 * @param {number} fromIndex The index to search from. +
83547 * @returns {number} Returns the index of the matched value, else `-1`. +
83548 */ +
83549 function strictLastIndexOf(array, value, fromIndex) { +
83550 var index = fromIndex + 1; +
83551 while (index--) { +
83552 if (array[index] === value) { +
83553 return index; +
83554 } +
83555 } +
83556 return index; +
83557 } +
83558 +
83559 /** +
83560 * Gets the number of symbols in `string`. +
83561 * +
83562 * @private +
83563 * @param {string} string The string to inspect. +
83564 * @returns {number} Returns the string size. +
83565 */ +
83566 function stringSize(string) { +
83567 return hasUnicode(string) +
83568 ? unicodeSize(string) +
83569 : asciiSize(string); +
83570 } +
83571 +
83572 /** +
83573 * Converts `string` to an array. +
83574 * +
83575 * @private +
83576 * @param {string} string The string to convert. +
83577 * @returns {Array} Returns the converted array. +
83578 */ +
83579 function stringToArray(string) { +
83580 return hasUnicode(string) +
83581 ? unicodeToArray(string) +
83582 : asciiToArray(string); +
83583 } +
83584 +
83585 /** +
83586 * Used by `_.unescape` to convert HTML entities to characters. +
83587 * +
83588 * @private +
83589 * @param {string} chr The matched character to unescape. +
83590 * @returns {string} Returns the unescaped character. +
83591 */ +
83592 var unescapeHtmlChar = basePropertyOf(htmlUnescapes); +
83593 +
83594 /** +
83595 * Gets the size of a Unicode `string`. +
83596 * +
83597 * @private +
83598 * @param {string} string The string inspect. +
83599 * @returns {number} Returns the string size. +
83600 */ +
83601 function unicodeSize(string) { +
83602 var result = reUnicode.lastIndex = 0; +
83603 while (reUnicode.test(string)) { +
83604 ++result; +
83605 } +
83606 return result; +
83607 } +
83608 +
83609 /** +
83610 * Converts a Unicode `string` to an array. +
83611 * +
83612 * @private +
83613 * @param {string} string The string to convert. +
83614 * @returns {Array} Returns the converted array. +
83615 */ +
83616 function unicodeToArray(string) { +
83617 return string.match(reUnicode) || []; +
83618 } +
83619 +
83620 /** +
83621 * Splits a Unicode `string` into an array of its words. +
83622 * +
83623 * @private +
83624 * @param {string} The string to inspect. +
83625 * @returns {Array} Returns the words of `string`. +
83626 */ +
83627 function unicodeWords(string) { +
83628 return string.match(reUnicodeWord) || []; +
83629 } +
83630 +
83631 /*--------------------------------------------------------------------------*/ +
83632 +
83633 /** +
83634 * Create a new pristine `lodash` function using the `context` object. +
83635 * +
83636 * @static +
83637 * @memberOf _ +
83638 * @since 1.1.0 +
83639 * @category Util +
83640 * @param {Object} [context=root] The context object. +
83641 * @returns {Function} Returns a new `lodash` function. +
83642 * @example +
83643 * +
83644 * _.mixin({ 'foo': _.constant('foo') }); +
83645 * +
83646 * var lodash = _.runInContext(); +
83647 * lodash.mixin({ 'bar': lodash.constant('bar') }); +
83648 * +
83649 * _.isFunction(_.foo); +
83650 * // => true +
83651 * _.isFunction(_.bar); +
83652 * // => false +
83653 * +
83654 * lodash.isFunction(lodash.foo); +
83655 * // => false +
83656 * lodash.isFunction(lodash.bar); +
83657 * // => true +
83658 * +
83659 * // Create a suped-up `defer` in Node.js. +
83660 * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; +
83661 */ +
83662 var runInContext = (function runInContext(context) { +
83663 context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); +
83664 +
83665 /** Built-in constructor references. */ +
83666 var Array = context.Array, +
83667 Date = context.Date, +
83668 Error = context.Error, +
83669 Function = context.Function, +
83670 Math = context.Math, +
83671 Object = context.Object, +
83672 RegExp = context.RegExp, +
83673 String = context.String, +
83674 TypeError = context.TypeError; +
83675 +
83676 /** Used for built-in method references. */ +
83677 var arrayProto = Array.prototype, +
83678 funcProto = Function.prototype, +
83679 objectProto = Object.prototype; +
83680 +
83681 /** Used to detect overreaching core-js shims. */ +
83682 var coreJsData = context['__core-js_shared__']; +
83683 +
83684 /** Used to resolve the decompiled source of functions. */ +
83685 var funcToString = funcProto.toString; +
83686 +
83687 /** Used to check objects for own properties. */ +
83688 var hasOwnProperty = objectProto.hasOwnProperty; +
83689 +
83690 /** Used to generate unique IDs. */ +
83691 var idCounter = 0; +
83692 +
83693 /** Used to detect methods masquerading as native. */ +
83694 var maskSrcKey = (function() { +
83695 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); +
83696 return uid ? ('Symbol(src)_1.' + uid) : ''; +
83697 }()); +
83698 +
83699 /** +
83700 * Used to resolve the +
83701 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) +
83702 * of values. +
83703 */ +
83704 var nativeObjectToString = objectProto.toString; +
83705 +
83706 /** Used to infer the `Object` constructor. */ +
83707 var objectCtorString = funcToString.call(Object); +
83708 +
83709 /** Used to restore the original `_` reference in `_.noConflict`. */ +
83710 var oldDash = root._; +
83711 +
83712 /** Used to detect if a method is native. */ +
83713 var reIsNative = RegExp('^' + +
83714 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') +
83715 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +
83716 ); +
83717 +
83718 /** Built-in value references. */ +
83719 var Buffer = moduleExports ? context.Buffer : undefined, +
83720 Symbol = context.Symbol, +
83721 Uint8Array = context.Uint8Array, +
83722 allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, +
83723 getPrototype = overArg(Object.getPrototypeOf, Object), +
83724 objectCreate = Object.create, +
83725 propertyIsEnumerable = objectProto.propertyIsEnumerable, +
83726 splice = arrayProto.splice, +
83727 spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, +
83728 symIterator = Symbol ? Symbol.iterator : undefined, +
83729 symToStringTag = Symbol ? Symbol.toStringTag : undefined; +
83730 +
83731 var defineProperty = (function() { +
83732 try { +
83733 var func = getNative(Object, 'defineProperty'); +
83734 func({}, '', {}); +
83735 return func; +
83736 } catch (e) {} +
83737 }()); +
83738 +
83739 /** Mocked built-ins. */ +
83740 var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, +
83741 ctxNow = Date && Date.now !== root.Date.now && Date.now, +
83742 ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; +
83743 +
83744 /* Built-in method references for those with the same name as other `lodash` methods. */ +
83745 var nativeCeil = Math.ceil, +
83746 nativeFloor = Math.floor, +
83747 nativeGetSymbols = Object.getOwnPropertySymbols, +
83748 nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, +
83749 nativeIsFinite = context.isFinite, +
83750 nativeJoin = arrayProto.join, +
83751 nativeKeys = overArg(Object.keys, Object), +
83752 nativeMax = Math.max, +
83753 nativeMin = Math.min, +
83754 nativeNow = Date.now, +
83755 nativeParseInt = context.parseInt, +
83756 nativeRandom = Math.random, +
83757 nativeReverse = arrayProto.reverse; +
83758 +
83759 /* Built-in method references that are verified to be native. */ +
83760 var DataView = getNative(context, 'DataView'), +
83761 Map = getNative(context, 'Map'), +
83762 Promise = getNative(context, 'Promise'), +
83763 Set = getNative(context, 'Set'), +
83764 WeakMap = getNative(context, 'WeakMap'), +
83765 nativeCreate = getNative(Object, 'create'); +
83766 +
83767 /** Used to store function metadata. */ +
83768 var metaMap = WeakMap && new WeakMap; +
83769 +
83770 /** Used to lookup unminified function names. */ +
83771 var realNames = {}; +
83772 +
83773 /** Used to detect maps, sets, and weakmaps. */ +
83774 var dataViewCtorString = toSource(DataView), +
83775 mapCtorString = toSource(Map), +
83776 promiseCtorString = toSource(Promise), +
83777 setCtorString = toSource(Set), +
83778 weakMapCtorString = toSource(WeakMap); +
83779 +
83780 /** Used to convert symbols to primitives and strings. */ +
83781 var symbolProto = Symbol ? Symbol.prototype : undefined, +
83782 symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, +
83783 symbolToString = symbolProto ? symbolProto.toString : undefined; +
83784 +
83785 /*------------------------------------------------------------------------*/ +
83786 +
83787 /** +
83788 * Creates a `lodash` object which wraps `value` to enable implicit method +
83789 * chain sequences. Methods that operate on and return arrays, collections, +
83790 * and functions can be chained together. Methods that retrieve a single value +
83791 * or may return a primitive value will automatically end the chain sequence +
83792 * and return the unwrapped value. Otherwise, the value must be unwrapped +
83793 * with `_#value`. +
83794 * +
83795 * Explicit chain sequences, which must be unwrapped with `_#value`, may be +
83796 * enabled using `_.chain`. +
83797 * +
83798 * The execution of chained methods is lazy, that is, it's deferred until +
83799 * `_#value` is implicitly or explicitly called. +
83800 * +
83801 * Lazy evaluation allows several methods to support shortcut fusion. +
83802 * Shortcut fusion is an optimization to merge iteratee calls; this avoids +
83803 * the creation of intermediate arrays and can greatly reduce the number of +
83804 * iteratee executions. Sections of a chain sequence qualify for shortcut +
83805 * fusion if the section is applied to an array and iteratees accept only +
83806 * one argument. The heuristic for whether a section qualifies for shortcut +
83807 * fusion is subject to change. +
83808 * +
83809 * Chaining is supported in custom builds as long as the `_#value` method is +
83810 * directly or indirectly included in the build. +
83811 * +
83812 * In addition to lodash methods, wrappers have `Array` and `String` methods. +
83813 * +
83814 * The wrapper `Array` methods are: +
83815 * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` +
83816 * +
83817 * The wrapper `String` methods are: +
83818 * `replace` and `split` +
83819 * +
83820 * The wrapper methods that support shortcut fusion are: +
83821 * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, +
83822 * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, +
83823 * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` +
83824 * +
83825 * The chainable wrapper methods are: +
83826 * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, +
83827 * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, +
83828 * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, +
83829 * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, +
83830 * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, +
83831 * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, +
83832 * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, +
83833 * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, +
83834 * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, +
83835 * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, +
83836 * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, +
83837 * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, +
83838 * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, +
83839 * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, +
83840 * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, +
83841 * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, +
83842 * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, +
83843 * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, +
83844 * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, +
83845 * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, +
83846 * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, +
83847 * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, +
83848 * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, +
83849 * `zipObject`, `zipObjectDeep`, and `zipWith` +
83850 * +
83851 * The wrapper methods that are **not** chainable by default are: +
83852 * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, +
83853 * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, +
83854 * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, +
83855 * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, +
83856 * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, +
83857 * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, +
83858 * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, +
83859 * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, +
83860 * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, +
83861 * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, +
83862 * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, +
83863 * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, +
83864 * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, +
83865 * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, +
83866 * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, +
83867 * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, +
83868 * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, +
83869 * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, +
83870 * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, +
83871 * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, +
83872 * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, +
83873 * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, +
83874 * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, +
83875 * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, +
83876 * `upperFirst`, `value`, and `words` +
83877 * +
83878 * @name _ +
83879 * @constructor +
83880 * @category Seq +
83881 * @param {*} value The value to wrap in a `lodash` instance. +
83882 * @returns {Object} Returns the new `lodash` wrapper instance. +
83883 * @example +
83884 * +
83885 * function square(n) { +
83886 * return n * n; +
83887 * } +
83888 * +
83889 * var wrapped = _([1, 2, 3]); +
83890 * +
83891 * // Returns an unwrapped value. +
83892 * wrapped.reduce(_.add); +
83893 * // => 6 +
83894 * +
83895 * // Returns a wrapped value. +
83896 * var squares = wrapped.map(square); +
83897 * +
83898 * _.isArray(squares); +
83899 * // => false +
83900 * +
83901 * _.isArray(squares.value()); +
83902 * // => true +
83903 */ +
83904 function lodash(value) { +
83905 if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { +
83906 if (value instanceof LodashWrapper) { +
83907 return value; +
83908 } +
83909 if (hasOwnProperty.call(value, '__wrapped__')) { +
83910 return wrapperClone(value); +
83911 } +
83912 } +
83913 return new LodashWrapper(value); +
83914 } +
83915 +
83916 /** +
83917 * The base implementation of `_.create` without support for assigning +
83918 * properties to the created object. +
83919 * +
83920 * @private +
83921 * @param {Object} proto The object to inherit from. +
83922 * @returns {Object} Returns the new object. +
83923 */ +
83924 var baseCreate = (function() { +
83925 function object() {} +
83926 return function(proto) { +
83927 if (!isObject(proto)) { +
83928 return {}; +
83929 } +
83930 if (objectCreate) { +
83931 return objectCreate(proto); +
83932 } +
83933 object.prototype = proto; +
83934 var result = new object; +
83935 object.prototype = undefined; +
83936 return result; +
83937 }; +
83938 }()); +
83939 +
83940 /** +
83941 * The function whose prototype chain sequence wrappers inherit from. +
83942 * +
83943 * @private +
83944 */ +
83945 function baseLodash() { +
83946 // No operation performed. +
83947 } +
83948 +
83949 /** +
83950 * The base constructor for creating `lodash` wrapper objects. +
83951 * +
83952 * @private +
83953 * @param {*} value The value to wrap. +
83954 * @param {boolean} [chainAll] Enable explicit method chain sequences. +
83955 */ +
83956 function LodashWrapper(value, chainAll) { +
83957 this.__wrapped__ = value; +
83958 this.__actions__ = []; +
83959 this.__chain__ = !!chainAll; +
83960 this.__index__ = 0; +
83961 this.__values__ = undefined; +
83962 } +
83963 +
83964 /** +
83965 * By default, the template delimiters used by lodash are like those in +
83966 * embedded Ruby (ERB) as well as ES2015 template strings. Change the +
83967 * following template settings to use alternative delimiters. +
83968 * +
83969 * @static +
83970 * @memberOf _ +
83971 * @type {Object} +
83972 */ +
83973 lodash.templateSettings = { +
83974 +
83975 /** +
83976 * Used to detect `data` property values to be HTML-escaped. +
83977 * +
83978 * @memberOf _.templateSettings +
83979 * @type {RegExp} +
83980 */ +
83981 'escape': reEscape, +
83982 +
83983 /** +
83984 * Used to detect code to be evaluated. +
83985 * +
83986 * @memberOf _.templateSettings +
83987 * @type {RegExp} +
83988 */ +
83989 'evaluate': reEvaluate, +
83990 +
83991 /** +
83992 * Used to detect `data` property values to inject. +
83993 * +
83994 * @memberOf _.templateSettings +
83995 * @type {RegExp} +
83996 */ +
83997 'interpolate': reInterpolate, +
83998 +
83999 /** +
84000 * Used to reference the data object in the template text. +
84001 * +
84002 * @memberOf _.templateSettings +
84003 * @type {string} +
84004 */ +
84005 'variable': '', +
84006 +
84007 /** +
84008 * Used to import variables into the compiled template. +
84009 * +
84010 * @memberOf _.templateSettings +
84011 * @type {Object} +
84012 */ +
84013 'imports': { +
84014 +
84015 /** +
84016 * A reference to the `lodash` function. +
84017 * +
84018 * @memberOf _.templateSettings.imports +
84019 * @type {Function} +
84020 */ +
84021 '_': lodash +
84022 } +
84023 }; +
84024 +
84025 // Ensure wrappers are instances of `baseLodash`. +
84026 lodash.prototype = baseLodash.prototype; +
84027 lodash.prototype.constructor = lodash; +
84028 +
84029 LodashWrapper.prototype = baseCreate(baseLodash.prototype); +
84030 LodashWrapper.prototype.constructor = LodashWrapper; +
84031 +
84032 /*------------------------------------------------------------------------*/ +
84033 +
84034 /** +
84035 * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. +
84036 * +
84037 * @private +
84038 * @constructor +
84039 * @param {*} value The value to wrap. +
84040 */ +
84041 function LazyWrapper(value) { +
84042 this.__wrapped__ = value; +
84043 this.__actions__ = []; +
84044 this.__dir__ = 1; +
84045 this.__filtered__ = false; +
84046 this.__iteratees__ = []; +
84047 this.__takeCount__ = MAX_ARRAY_LENGTH; +
84048 this.__views__ = []; +
84049 } +
84050 +
84051 /** +
84052 * Creates a clone of the lazy wrapper object. +
84053 * +
84054 * @private +
84055 * @name clone +
84056 * @memberOf LazyWrapper +
84057 * @returns {Object} Returns the cloned `LazyWrapper` object. +
84058 */ +
84059 function lazyClone() { +
84060 var result = new LazyWrapper(this.__wrapped__); +
84061 result.__actions__ = copyArray(this.__actions__); +
84062 result.__dir__ = this.__dir__; +
84063 result.__filtered__ = this.__filtered__; +
84064 result.__iteratees__ = copyArray(this.__iteratees__); +
84065 result.__takeCount__ = this.__takeCount__; +
84066 result.__views__ = copyArray(this.__views__); +
84067 return result; +
84068 } +
84069 +
84070 /** +
84071 * Reverses the direction of lazy iteration. +
84072 * +
84073 * @private +
84074 * @name reverse +
84075 * @memberOf LazyWrapper +
84076 * @returns {Object} Returns the new reversed `LazyWrapper` object. +
84077 */ +
84078 function lazyReverse() { +
84079 if (this.__filtered__) { +
84080 var result = new LazyWrapper(this); +
84081 result.__dir__ = -1; +
84082 result.__filtered__ = true; +
84083 } else { +
84084 result = this.clone(); +
84085 result.__dir__ *= -1; +
84086 } +
84087 return result; +
84088 } +
84089 +
84090 /** +
84091 * Extracts the unwrapped value from its lazy wrapper. +
84092 * +
84093 * @private +
84094 * @name value +
84095 * @memberOf LazyWrapper +
84096 * @returns {*} Returns the unwrapped value. +
84097 */ +
84098 function lazyValue() { +
84099 var array = this.__wrapped__.value(), +
84100 dir = this.__dir__, +
84101 isArr = isArray(array), +
84102 isRight = dir < 0, +
84103 arrLength = isArr ? array.length : 0, +
84104 view = getView(0, arrLength, this.__views__), +
84105 start = view.start, +
84106 end = view.end, +
84107 length = end - start, +
84108 index = isRight ? end : (start - 1), +
84109 iteratees = this.__iteratees__, +
84110 iterLength = iteratees.length, +
84111 resIndex = 0, +
84112 takeCount = nativeMin(length, this.__takeCount__); +
84113 +
84114 if (!isArr || (!isRight && arrLength == length && takeCount == length)) { +
84115 return baseWrapperValue(array, this.__actions__); +
84116 } +
84117 var result = []; +
84118 +
84119 outer: +
84120 while (length-- && resIndex < takeCount) { +
84121 index += dir; +
84122 +
84123 var iterIndex = -1, +
84124 value = array[index]; +
84125 +
84126 while (++iterIndex < iterLength) { +
84127 var data = iteratees[iterIndex], +
84128 iteratee = data.iteratee, +
84129 type = data.type, +
84130 computed = iteratee(value); +
84131 +
84132 if (type == LAZY_MAP_FLAG) { +
84133 value = computed; +
84134 } else if (!computed) { +
84135 if (type == LAZY_FILTER_FLAG) { +
84136 continue outer; +
84137 } else { +
84138 break outer; +
84139 } +
84140 } +
84141 } +
84142 result[resIndex++] = value; +
84143 } +
84144 return result; +
84145 } +
84146 +
84147 // Ensure `LazyWrapper` is an instance of `baseLodash`. +
84148 LazyWrapper.prototype = baseCreate(baseLodash.prototype); +
84149 LazyWrapper.prototype.constructor = LazyWrapper; +
84150 +
84151 /*------------------------------------------------------------------------*/ +
84152 +
84153 /** +
84154 * Creates a hash object. +
84155 * +
84156 * @private +
84157 * @constructor +
84158 * @param {Array} [entries] The key-value pairs to cache. +
84159 */ +
84160 function Hash(entries) { +
84161 var index = -1, +
84162 length = entries == null ? 0 : entries.length; +
84163 +
84164 this.clear(); +
84165 while (++index < length) { +
84166 var entry = entries[index]; +
84167 this.set(entry[0], entry[1]); +
84168 } +
84169 } +
84170 +
84171 /** +
84172 * Removes all key-value entries from the hash. +
84173 * +
84174 * @private +
84175 * @name clear +
84176 * @memberOf Hash +
84177 */ +
84178 function hashClear() { +
84179 this.__data__ = nativeCreate ? nativeCreate(null) : {}; +
84180 this.size = 0; +
84181 } +
84182 +
84183 /** +
84184 * Removes `key` and its value from the hash. +
84185 * +
84186 * @private +
84187 * @name delete +
84188 * @memberOf Hash +
84189 * @param {Object} hash The hash to modify. +
84190 * @param {string} key The key of the value to remove. +
84191 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
84192 */ +
84193 function hashDelete(key) { +
84194 var result = this.has(key) && delete this.__data__[key]; +
84195 this.size -= result ? 1 : 0; +
84196 return result; +
84197 } +
84198 +
84199 /** +
84200 * Gets the hash value for `key`. +
84201 * +
84202 * @private +
84203 * @name get +
84204 * @memberOf Hash +
84205 * @param {string} key The key of the value to get. +
84206 * @returns {*} Returns the entry value. +
84207 */ +
84208 function hashGet(key) { +
84209 var data = this.__data__; +
84210 if (nativeCreate) { +
84211 var result = data[key]; +
84212 return result === HASH_UNDEFINED ? undefined : result; +
84213 } +
84214 return hasOwnProperty.call(data, key) ? data[key] : undefined; +
84215 } +
84216 +
84217 /** +
84218 * Checks if a hash value for `key` exists. +
84219 * +
84220 * @private +
84221 * @name has +
84222 * @memberOf Hash +
84223 * @param {string} key The key of the entry to check. +
84224 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
84225 */ +
84226 function hashHas(key) { +
84227 var data = this.__data__; +
84228 return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +
84229 } +
84230 +
84231 /** +
84232 * Sets the hash `key` to `value`. +
84233 * +
84234 * @private +
84235 * @name set +
84236 * @memberOf Hash +
84237 * @param {string} key The key of the value to set. +
84238 * @param {*} value The value to set. +
84239 * @returns {Object} Returns the hash instance. +
84240 */ +
84241 function hashSet(key, value) { +
84242 var data = this.__data__; +
84243 this.size += this.has(key) ? 0 : 1; +
84244 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; +
84245 return this; +
84246 } +
84247 +
84248 // Add methods to `Hash`. +
84249 Hash.prototype.clear = hashClear; +
84250 Hash.prototype['delete'] = hashDelete; +
84251 Hash.prototype.get = hashGet; +
84252 Hash.prototype.has = hashHas; +
84253 Hash.prototype.set = hashSet; +
84254 +
84255 /*------------------------------------------------------------------------*/ +
84256 +
84257 /** +
84258 * Creates an list cache object. +
84259 * +
84260 * @private +
84261 * @constructor +
84262 * @param {Array} [entries] The key-value pairs to cache. +
84263 */ +
84264 function ListCache(entries) { +
84265 var index = -1, +
84266 length = entries == null ? 0 : entries.length; +
84267 +
84268 this.clear(); +
84269 while (++index < length) { +
84270 var entry = entries[index]; +
84271 this.set(entry[0], entry[1]); +
84272 } +
84273 } +
84274 +
84275 /** +
84276 * Removes all key-value entries from the list cache. +
84277 * +
84278 * @private +
84279 * @name clear +
84280 * @memberOf ListCache +
84281 */ +
84282 function listCacheClear() { +
84283 this.__data__ = []; +
84284 this.size = 0; +
84285 } +
84286 +
84287 /** +
84288 * Removes `key` and its value from the list cache. +
84289 * +
84290 * @private +
84291 * @name delete +
84292 * @memberOf ListCache +
84293 * @param {string} key The key of the value to remove. +
84294 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
84295 */ +
84296 function listCacheDelete(key) { +
84297 var data = this.__data__, +
84298 index = assocIndexOf(data, key); +
84299 +
84300 if (index < 0) { +
84301 return false; +
84302 } +
84303 var lastIndex = data.length - 1; +
84304 if (index == lastIndex) { +
84305 data.pop(); +
84306 } else { +
84307 splice.call(data, index, 1); +
84308 } +
84309 --this.size; +
84310 return true; +
84311 } +
84312 +
84313 /** +
84314 * Gets the list cache value for `key`. +
84315 * +
84316 * @private +
84317 * @name get +
84318 * @memberOf ListCache +
84319 * @param {string} key The key of the value to get. +
84320 * @returns {*} Returns the entry value. +
84321 */ +
84322 function listCacheGet(key) { +
84323 var data = this.__data__, +
84324 index = assocIndexOf(data, key); +
84325 +
84326 return index < 0 ? undefined : data[index][1]; +
84327 } +
84328 +
84329 /** +
84330 * Checks if a list cache value for `key` exists. +
84331 * +
84332 * @private +
84333 * @name has +
84334 * @memberOf ListCache +
84335 * @param {string} key The key of the entry to check. +
84336 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
84337 */ +
84338 function listCacheHas(key) { +
84339 return assocIndexOf(this.__data__, key) > -1; +
84340 } +
84341 +
84342 /** +
84343 * Sets the list cache `key` to `value`. +
84344 * +
84345 * @private +
84346 * @name set +
84347 * @memberOf ListCache +
84348 * @param {string} key The key of the value to set. +
84349 * @param {*} value The value to set. +
84350 * @returns {Object} Returns the list cache instance. +
84351 */ +
84352 function listCacheSet(key, value) { +
84353 var data = this.__data__, +
84354 index = assocIndexOf(data, key); +
84355 +
84356 if (index < 0) { +
84357 ++this.size; +
84358 data.push([key, value]); +
84359 } else { +
84360 data[index][1] = value; +
84361 } +
84362 return this; +
84363 } +
84364 +
84365 // Add methods to `ListCache`. +
84366 ListCache.prototype.clear = listCacheClear; +
84367 ListCache.prototype['delete'] = listCacheDelete; +
84368 ListCache.prototype.get = listCacheGet; +
84369 ListCache.prototype.has = listCacheHas; +
84370 ListCache.prototype.set = listCacheSet; +
84371 +
84372 /*------------------------------------------------------------------------*/ +
84373 +
84374 /** +
84375 * Creates a map cache object to store key-value pairs. +
84376 * +
84377 * @private +
84378 * @constructor +
84379 * @param {Array} [entries] The key-value pairs to cache. +
84380 */ +
84381 function MapCache(entries) { +
84382 var index = -1, +
84383 length = entries == null ? 0 : entries.length; +
84384 +
84385 this.clear(); +
84386 while (++index < length) { +
84387 var entry = entries[index]; +
84388 this.set(entry[0], entry[1]); +
84389 } +
84390 } +
84391 +
84392 /** +
84393 * Removes all key-value entries from the map. +
84394 * +
84395 * @private +
84396 * @name clear +
84397 * @memberOf MapCache +
84398 */ +
84399 function mapCacheClear() { +
84400 this.size = 0; +
84401 this.__data__ = { +
84402 'hash': new Hash, +
84403 'map': new (Map || ListCache), +
84404 'string': new Hash +
84405 }; +
84406 } +
84407 +
84408 /** +
84409 * Removes `key` and its value from the map. +
84410 * +
84411 * @private +
84412 * @name delete +
84413 * @memberOf MapCache +
84414 * @param {string} key The key of the value to remove. +
84415 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
84416 */ +
84417 function mapCacheDelete(key) { +
84418 var result = getMapData(this, key)['delete'](key); +
84419 this.size -= result ? 1 : 0; +
84420 return result; +
84421 } +
84422 +
84423 /** +
84424 * Gets the map value for `key`. +
84425 * +
84426 * @private +
84427 * @name get +
84428 * @memberOf MapCache +
84429 * @param {string} key The key of the value to get. +
84430 * @returns {*} Returns the entry value. +
84431 */ +
84432 function mapCacheGet(key) { +
84433 return getMapData(this, key).get(key); +
84434 } +
84435 +
84436 /** +
84437 * Checks if a map value for `key` exists. +
84438 * +
84439 * @private +
84440 * @name has +
84441 * @memberOf MapCache +
84442 * @param {string} key The key of the entry to check. +
84443 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
84444 */ +
84445 function mapCacheHas(key) { +
84446 return getMapData(this, key).has(key); +
84447 } +
84448 +
84449 /** +
84450 * Sets the map `key` to `value`. +
84451 * +
84452 * @private +
84453 * @name set +
84454 * @memberOf MapCache +
84455 * @param {string} key The key of the value to set. +
84456 * @param {*} value The value to set. +
84457 * @returns {Object} Returns the map cache instance. +
84458 */ +
84459 function mapCacheSet(key, value) { +
84460 var data = getMapData(this, key), +
84461 size = data.size; +
84462 +
84463 data.set(key, value); +
84464 this.size += data.size == size ? 0 : 1; +
84465 return this; +
84466 } +
84467 +
84468 // Add methods to `MapCache`. +
84469 MapCache.prototype.clear = mapCacheClear; +
84470 MapCache.prototype['delete'] = mapCacheDelete; +
84471 MapCache.prototype.get = mapCacheGet; +
84472 MapCache.prototype.has = mapCacheHas; +
84473 MapCache.prototype.set = mapCacheSet; +
84474 +
84475 /*------------------------------------------------------------------------*/ +
84476 +
84477 /** +
84478 * +
84479 * Creates an array cache object to store unique values. +
84480 * +
84481 * @private +
84482 * @constructor +
84483 * @param {Array} [values] The values to cache. +
84484 */ +
84485 function SetCache(values) { +
84486 var index = -1, +
84487 length = values == null ? 0 : values.length; +
84488 +
84489 this.__data__ = new MapCache; +
84490 while (++index < length) { +
84491 this.add(values[index]); +
84492 } +
84493 } +
84494 +
84495 /** +
84496 * Adds `value` to the array cache. +
84497 * +
84498 * @private +
84499 * @name add +
84500 * @memberOf SetCache +
84501 * @alias push +
84502 * @param {*} value The value to cache. +
84503 * @returns {Object} Returns the cache instance. +
84504 */ +
84505 function setCacheAdd(value) { +
84506 this.__data__.set(value, HASH_UNDEFINED); +
84507 return this; +
84508 } +
84509 +
84510 /** +
84511 * Checks if `value` is in the array cache. +
84512 * +
84513 * @private +
84514 * @name has +
84515 * @memberOf SetCache +
84516 * @param {*} value The value to search for. +
84517 * @returns {number} Returns `true` if `value` is found, else `false`. +
84518 */ +
84519 function setCacheHas(value) { +
84520 return this.__data__.has(value); +
84521 } +
84522 +
84523 // Add methods to `SetCache`. +
84524 SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +
84525 SetCache.prototype.has = setCacheHas; +
84526 +
84527 /*------------------------------------------------------------------------*/ +
84528 +
84529 /** +
84530 * Creates a stack cache object to store key-value pairs. +
84531 * +
84532 * @private +
84533 * @constructor +
84534 * @param {Array} [entries] The key-value pairs to cache. +
84535 */ +
84536 function Stack(entries) { +
84537 var data = this.__data__ = new ListCache(entries); +
84538 this.size = data.size; +
84539 } +
84540 +
84541 /** +
84542 * Removes all key-value entries from the stack. +
84543 * +
84544 * @private +
84545 * @name clear +
84546 * @memberOf Stack +
84547 */ +
84548 function stackClear() { +
84549 this.__data__ = new ListCache; +
84550 this.size = 0; +
84551 } +
84552 +
84553 /** +
84554 * Removes `key` and its value from the stack. +
84555 * +
84556 * @private +
84557 * @name delete +
84558 * @memberOf Stack +
84559 * @param {string} key The key of the value to remove. +
84560 * @returns {boolean} Returns `true` if the entry was removed, else `false`. +
84561 */ +
84562 function stackDelete(key) { +
84563 var data = this.__data__, +
84564 result = data['delete'](key); +
84565 +
84566 this.size = data.size; +
84567 return result; +
84568 } +
84569 +
84570 /** +
84571 * Gets the stack value for `key`. +
84572 * +
84573 * @private +
84574 * @name get +
84575 * @memberOf Stack +
84576 * @param {string} key The key of the value to get. +
84577 * @returns {*} Returns the entry value. +
84578 */ +
84579 function stackGet(key) { +
84580 return this.__data__.get(key); +
84581 } +
84582 +
84583 /** +
84584 * Checks if a stack value for `key` exists. +
84585 * +
84586 * @private +
84587 * @name has +
84588 * @memberOf Stack +
84589 * @param {string} key The key of the entry to check. +
84590 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. +
84591 */ +
84592 function stackHas(key) { +
84593 return this.__data__.has(key); +
84594 } +
84595 +
84596 /** +
84597 * Sets the stack `key` to `value`. +
84598 * +
84599 * @private +
84600 * @name set +
84601 * @memberOf Stack +
84602 * @param {string} key The key of the value to set. +
84603 * @param {*} value The value to set. +
84604 * @returns {Object} Returns the stack cache instance. +
84605 */ +
84606 function stackSet(key, value) { +
84607 var data = this.__data__; +
84608 if (data instanceof ListCache) { +
84609 var pairs = data.__data__; +
84610 if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { +
84611 pairs.push([key, value]); +
84612 this.size = ++data.size; +
84613 return this; +
84614 } +
84615 data = this.__data__ = new MapCache(pairs); +
84616 } +
84617 data.set(key, value); +
84618 this.size = data.size; +
84619 return this; +
84620 } +
84621 +
84622 // Add methods to `Stack`. +
84623 Stack.prototype.clear = stackClear; +
84624 Stack.prototype['delete'] = stackDelete; +
84625 Stack.prototype.get = stackGet; +
84626 Stack.prototype.has = stackHas; +
84627 Stack.prototype.set = stackSet; +
84628 +
84629 /*------------------------------------------------------------------------*/ +
84630 +
84631 /** +
84632 * Creates an array of the enumerable property names of the array-like `value`. +
84633 * +
84634 * @private +
84635 * @param {*} value The value to query. +
84636 * @param {boolean} inherited Specify returning inherited property names. +
84637 * @returns {Array} Returns the array of property names. +
84638 */ +
84639 function arrayLikeKeys(value, inherited) { +
84640 var isArr = isArray(value), +
84641 isArg = !isArr && isArguments(value), +
84642 isBuff = !isArr && !isArg && isBuffer(value), +
84643 isType = !isArr && !isArg && !isBuff && isTypedArray(value), +
84644 skipIndexes = isArr || isArg || isBuff || isType, +
84645 result = skipIndexes ? baseTimes(value.length, String) : [], +
84646 length = result.length; +
84647 +
84648 for (var key in value) { +
84649 if ((inherited || hasOwnProperty.call(value, key)) && +
84650 !(skipIndexes && ( +
84651 // Safari 9 has enumerable `arguments.length` in strict mode. +
84652 key == 'length' || +
84653 // Node.js 0.10 has enumerable non-index properties on buffers. +
84654 (isBuff && (key == 'offset' || key == 'parent')) || +
84655 // PhantomJS 2 has enumerable non-index properties on typed arrays. +
84656 (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || +
84657 // Skip index properties. +
84658 isIndex(key, length) +
84659 ))) { +
84660 result.push(key); +
84661 } +
84662 } +
84663 return result; +
84664 } +
84665 +
84666 /** +
84667 * A specialized version of `_.sample` for arrays. +
84668 * +
84669 * @private +
84670 * @param {Array} array The array to sample. +
84671 * @returns {*} Returns the random element. +
84672 */ +
84673 function arraySample(array) { +
84674 var length = array.length; +
84675 return length ? array[baseRandom(0, length - 1)] : undefined; +
84676 } +
84677 +
84678 /** +
84679 * A specialized version of `_.sampleSize` for arrays. +
84680 * +
84681 * @private +
84682 * @param {Array} array The array to sample. +
84683 * @param {number} n The number of elements to sample. +
84684 * @returns {Array} Returns the random elements. +
84685 */ +
84686 function arraySampleSize(array, n) { +
84687 return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +
84688 } +
84689 +
84690 /** +
84691 * A specialized version of `_.shuffle` for arrays. +
84692 * +
84693 * @private +
84694 * @param {Array} array The array to shuffle. +
84695 * @returns {Array} Returns the new shuffled array. +
84696 */ +
84697 function arrayShuffle(array) { +
84698 return shuffleSelf(copyArray(array)); +
84699 } +
84700 +
84701 /** +
84702 * This function is like `assignValue` except that it doesn't assign +
84703 * `undefined` values. +
84704 * +
84705 * @private +
84706 * @param {Object} object The object to modify. +
84707 * @param {string} key The key of the property to assign. +
84708 * @param {*} value The value to assign. +
84709 */ +
84710 function assignMergeValue(object, key, value) { +
84711 if ((value !== undefined && !eq(object[key], value)) || +
84712 (value === undefined && !(key in object))) { +
84713 baseAssignValue(object, key, value); +
84714 } +
84715 } +
84716 +
84717 /** +
84718 * Assigns `value` to `key` of `object` if the existing value is not equivalent +
84719 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
84720 * for equality comparisons. +
84721 * +
84722 * @private +
84723 * @param {Object} object The object to modify. +
84724 * @param {string} key The key of the property to assign. +
84725 * @param {*} value The value to assign. +
84726 */ +
84727 function assignValue(object, key, value) { +
84728 var objValue = object[key]; +
84729 if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || +
84730 (value === undefined && !(key in object))) { +
84731 baseAssignValue(object, key, value); +
84732 } +
84733 } +
84734 +
84735 /** +
84736 * Gets the index at which the `key` is found in `array` of key-value pairs. +
84737 * +
84738 * @private +
84739 * @param {Array} array The array to inspect. +
84740 * @param {*} key The key to search for. +
84741 * @returns {number} Returns the index of the matched value, else `-1`. +
84742 */ +
84743 function assocIndexOf(array, key) { +
84744 var length = array.length; +
84745 while (length--) { +
84746 if (eq(array[length][0], key)) { +
84747 return length; +
84748 } +
84749 } +
84750 return -1; +
84751 } +
84752 +
84753 /** +
84754 * Aggregates elements of `collection` on `accumulator` with keys transformed +
84755 * by `iteratee` and values set by `setter`. +
84756 * +
84757 * @private +
84758 * @param {Array|Object} collection The collection to iterate over. +
84759 * @param {Function} setter The function to set `accumulator` values. +
84760 * @param {Function} iteratee The iteratee to transform keys. +
84761 * @param {Object} accumulator The initial aggregated object. +
84762 * @returns {Function} Returns `accumulator`. +
84763 */ +
84764 function baseAggregator(collection, setter, iteratee, accumulator) { +
84765 baseEach(collection, function(value, key, collection) { +
84766 setter(accumulator, value, iteratee(value), collection); +
84767 }); +
84768 return accumulator; +
84769 } +
84770 +
84771 /** +
84772 * The base implementation of `_.assign` without support for multiple sources +
84773 * or `customizer` functions. +
84774 * +
84775 * @private +
84776 * @param {Object} object The destination object. +
84777 * @param {Object} source The source object. +
84778 * @returns {Object} Returns `object`. +
84779 */ +
84780 function baseAssign(object, source) { +
84781 return object && copyObject(source, keys(source), object); +
84782 } +
84783 +
84784 /** +
84785 * The base implementation of `_.assignIn` without support for multiple sources +
84786 * or `customizer` functions. +
84787 * +
84788 * @private +
84789 * @param {Object} object The destination object. +
84790 * @param {Object} source The source object. +
84791 * @returns {Object} Returns `object`. +
84792 */ +
84793 function baseAssignIn(object, source) { +
84794 return object && copyObject(source, keysIn(source), object); +
84795 } +
84796 +
84797 /** +
84798 * The base implementation of `assignValue` and `assignMergeValue` without +
84799 * value checks. +
84800 * +
84801 * @private +
84802 * @param {Object} object The object to modify. +
84803 * @param {string} key The key of the property to assign. +
84804 * @param {*} value The value to assign. +
84805 */ +
84806 function baseAssignValue(object, key, value) { +
84807 if (key == '__proto__' && defineProperty) { +
84808 defineProperty(object, key, { +
84809 'configurable': true, +
84810 'enumerable': true, +
84811 'value': value, +
84812 'writable': true +
84813 }); +
84814 } else { +
84815 object[key] = value; +
84816 } +
84817 } +
84818 +
84819 /** +
84820 * The base implementation of `_.at` without support for individual paths. +
84821 * +
84822 * @private +
84823 * @param {Object} object The object to iterate over. +
84824 * @param {string[]} paths The property paths to pick. +
84825 * @returns {Array} Returns the picked elements. +
84826 */ +
84827 function baseAt(object, paths) { +
84828 var index = -1, +
84829 length = paths.length, +
84830 result = Array(length), +
84831 skip = object == null; +
84832 +
84833 while (++index < length) { +
84834 result[index] = skip ? undefined : get(object, paths[index]); +
84835 } +
84836 return result; +
84837 } +
84838 +
84839 /** +
84840 * The base implementation of `_.clamp` which doesn't coerce arguments. +
84841 * +
84842 * @private +
84843 * @param {number} number The number to clamp. +
84844 * @param {number} [lower] The lower bound. +
84845 * @param {number} upper The upper bound. +
84846 * @returns {number} Returns the clamped number. +
84847 */ +
84848 function baseClamp(number, lower, upper) { +
84849 if (number === number) { +
84850 if (upper !== undefined) { +
84851 number = number <= upper ? number : upper; +
84852 } +
84853 if (lower !== undefined) { +
84854 number = number >= lower ? number : lower; +
84855 } +
84856 } +
84857 return number; +
84858 } +
84859 +
84860 /** +
84861 * The base implementation of `_.clone` and `_.cloneDeep` which tracks +
84862 * traversed objects. +
84863 * +
84864 * @private +
84865 * @param {*} value The value to clone. +
84866 * @param {boolean} bitmask The bitmask flags. +
84867 * 1 - Deep clone +
84868 * 2 - Flatten inherited properties +
84869 * 4 - Clone symbols +
84870 * @param {Function} [customizer] The function to customize cloning. +
84871 * @param {string} [key] The key of `value`. +
84872 * @param {Object} [object] The parent object of `value`. +
84873 * @param {Object} [stack] Tracks traversed objects and their clone counterparts. +
84874 * @returns {*} Returns the cloned value. +
84875 */ +
84876 function baseClone(value, bitmask, customizer, key, object, stack) { +
84877 var result, +
84878 isDeep = bitmask & CLONE_DEEP_FLAG, +
84879 isFlat = bitmask & CLONE_FLAT_FLAG, +
84880 isFull = bitmask & CLONE_SYMBOLS_FLAG; +
84881 +
84882 if (customizer) { +
84883 result = object ? customizer(value, key, object, stack) : customizer(value); +
84884 } +
84885 if (result !== undefined) { +
84886 return result; +
84887 } +
84888 if (!isObject(value)) { +
84889 return value; +
84890 } +
84891 var isArr = isArray(value); +
84892 if (isArr) { +
84893 result = initCloneArray(value); +
84894 if (!isDeep) { +
84895 return copyArray(value, result); +
84896 } +
84897 } else { +
84898 var tag = getTag(value), +
84899 isFunc = tag == funcTag || tag == genTag; +
84900 +
84901 if (isBuffer(value)) { +
84902 return cloneBuffer(value, isDeep); +
84903 } +
84904 if (tag == objectTag || tag == argsTag || (isFunc && !object)) { +
84905 result = (isFlat || isFunc) ? {} : initCloneObject(value); +
84906 if (!isDeep) { +
84907 return isFlat +
84908 ? copySymbolsIn(value, baseAssignIn(result, value)) +
84909 : copySymbols(value, baseAssign(result, value)); +
84910 } +
84911 } else { +
84912 if (!cloneableTags[tag]) { +
84913 return object ? value : {}; +
84914 } +
84915 result = initCloneByTag(value, tag, isDeep); +
84916 } +
84917 } +
84918 // Check for circular references and return its corresponding clone. +
84919 stack || (stack = new Stack); +
84920 var stacked = stack.get(value); +
84921 if (stacked) { +
84922 return stacked; +
84923 } +
84924 stack.set(value, result); +
84925 +
84926 if (isSet(value)) { +
84927 value.forEach(function(subValue) { +
84928 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); +
84929 }); +
84930 +
84931 return result; +
84932 } +
84933 +
84934 if (isMap(value)) { +
84935 value.forEach(function(subValue, key) { +
84936 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); +
84937 }); +
84938 +
84939 return result; +
84940 } +
84941 +
84942 var keysFunc = isFull +
84943 ? (isFlat ? getAllKeysIn : getAllKeys) +
84944 : (isFlat ? keysIn : keys); +
84945 +
84946 var props = isArr ? undefined : keysFunc(value); +
84947 arrayEach(props || value, function(subValue, key) { +
84948 if (props) { +
84949 key = subValue; +
84950 subValue = value[key]; +
84951 } +
84952 // Recursively populate clone (susceptible to call stack limits). +
84953 assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); +
84954 }); +
84955 return result; +
84956 } +
84957 +
84958 /** +
84959 * The base implementation of `_.conforms` which doesn't clone `source`. +
84960 * +
84961 * @private +
84962 * @param {Object} source The object of property predicates to conform to. +
84963 * @returns {Function} Returns the new spec function. +
84964 */ +
84965 function baseConforms(source) { +
84966 var props = keys(source); +
84967 return function(object) { +
84968 return baseConformsTo(object, source, props); +
84969 }; +
84970 } +
84971 +
84972 /** +
84973 * The base implementation of `_.conformsTo` which accepts `props` to check. +
84974 * +
84975 * @private +
84976 * @param {Object} object The object to inspect. +
84977 * @param {Object} source The object of property predicates to conform to. +
84978 * @returns {boolean} Returns `true` if `object` conforms, else `false`. +
84979 */ +
84980 function baseConformsTo(object, source, props) { +
84981 var length = props.length; +
84982 if (object == null) { +
84983 return !length; +
84984 } +
84985 object = Object(object); +
84986 while (length--) { +
84987 var key = props[length], +
84988 predicate = source[key], +
84989 value = object[key]; +
84990 +
84991 if ((value === undefined && !(key in object)) || !predicate(value)) { +
84992 return false; +
84993 } +
84994 } +
84995 return true; +
84996 } +
84997 +
84998 /** +
84999 * The base implementation of `_.delay` and `_.defer` which accepts `args` +
85000 * to provide to `func`. +
85001 * +
85002 * @private +
85003 * @param {Function} func The function to delay. +
85004 * @param {number} wait The number of milliseconds to delay invocation. +
85005 * @param {Array} args The arguments to provide to `func`. +
85006 * @returns {number|Object} Returns the timer id or timeout object. +
85007 */ +
85008 function baseDelay(func, wait, args) { +
85009 if (typeof func != 'function') { +
85010 throw new TypeError(FUNC_ERROR_TEXT); +
85011 } +
85012 return setTimeout(function() { func.apply(undefined, args); }, wait); +
85013 } +
85014 +
85015 /** +
85016 * The base implementation of methods like `_.difference` without support +
85017 * for excluding multiple arrays or iteratee shorthands. +
85018 * +
85019 * @private +
85020 * @param {Array} array The array to inspect. +
85021 * @param {Array} values The values to exclude. +
85022 * @param {Function} [iteratee] The iteratee invoked per element. +
85023 * @param {Function} [comparator] The comparator invoked per element. +
85024 * @returns {Array} Returns the new array of filtered values. +
85025 */ +
85026 function baseDifference(array, values, iteratee, comparator) { +
85027 var index = -1, +
85028 includes = arrayIncludes, +
85029 isCommon = true, +
85030 length = array.length, +
85031 result = [], +
85032 valuesLength = values.length; +
85033 +
85034 if (!length) { +
85035 return result; +
85036 } +
85037 if (iteratee) { +
85038 values = arrayMap(values, baseUnary(iteratee)); +
85039 } +
85040 if (comparator) { +
85041 includes = arrayIncludesWith; +
85042 isCommon = false; +
85043 } +
85044 else if (values.length >= LARGE_ARRAY_SIZE) { +
85045 includes = cacheHas; +
85046 isCommon = false; +
85047 values = new SetCache(values); +
85048 } +
85049 outer: +
85050 while (++index < length) { +
85051 var value = array[index], +
85052 computed = iteratee == null ? value : iteratee(value); +
85053 +
85054 value = (comparator || value !== 0) ? value : 0; +
85055 if (isCommon && computed === computed) { +
85056 var valuesIndex = valuesLength; +
85057 while (valuesIndex--) { +
85058 if (values[valuesIndex] === computed) { +
85059 continue outer; +
85060 } +
85061 } +
85062 result.push(value); +
85063 } +
85064 else if (!includes(values, computed, comparator)) { +
85065 result.push(value); +
85066 } +
85067 } +
85068 return result; +
85069 } +
85070 +
85071 /** +
85072 * The base implementation of `_.forEach` without support for iteratee shorthands. +
85073 * +
85074 * @private +
85075 * @param {Array|Object} collection The collection to iterate over. +
85076 * @param {Function} iteratee The function invoked per iteration. +
85077 * @returns {Array|Object} Returns `collection`. +
85078 */ +
85079 var baseEach = createBaseEach(baseForOwn); +
85080 +
85081 /** +
85082 * The base implementation of `_.forEachRight` without support for iteratee shorthands. +
85083 * +
85084 * @private +
85085 * @param {Array|Object} collection The collection to iterate over. +
85086 * @param {Function} iteratee The function invoked per iteration. +
85087 * @returns {Array|Object} Returns `collection`. +
85088 */ +
85089 var baseEachRight = createBaseEach(baseForOwnRight, true); +
85090 +
85091 /** +
85092 * The base implementation of `_.every` without support for iteratee shorthands. +
85093 * +
85094 * @private +
85095 * @param {Array|Object} collection The collection to iterate over. +
85096 * @param {Function} predicate The function invoked per iteration. +
85097 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
85098 * else `false` +
85099 */ +
85100 function baseEvery(collection, predicate) { +
85101 var result = true; +
85102 baseEach(collection, function(value, index, collection) { +
85103 result = !!predicate(value, index, collection); +
85104 return result; +
85105 }); +
85106 return result; +
85107 } +
85108 +
85109 /** +
85110 * The base implementation of methods like `_.max` and `_.min` which accepts a +
85111 * `comparator` to determine the extremum value. +
85112 * +
85113 * @private +
85114 * @param {Array} array The array to iterate over. +
85115 * @param {Function} iteratee The iteratee invoked per iteration. +
85116 * @param {Function} comparator The comparator used to compare values. +
85117 * @returns {*} Returns the extremum value. +
85118 */ +
85119 function baseExtremum(array, iteratee, comparator) { +
85120 var index = -1, +
85121 length = array.length; +
85122 +
85123 while (++index < length) { +
85124 var value = array[index], +
85125 current = iteratee(value); +
85126 +
85127 if (current != null && (computed === undefined +
85128 ? (current === current && !isSymbol(current)) +
85129 : comparator(current, computed) +
85130 )) { +
85131 var computed = current, +
85132 result = value; +
85133 } +
85134 } +
85135 return result; +
85136 } +
85137 +
85138 /** +
85139 * The base implementation of `_.fill` without an iteratee call guard. +
85140 * +
85141 * @private +
85142 * @param {Array} array The array to fill. +
85143 * @param {*} value The value to fill `array` with. +
85144 * @param {number} [start=0] The start position. +
85145 * @param {number} [end=array.length] The end position. +
85146 * @returns {Array} Returns `array`. +
85147 */ +
85148 function baseFill(array, value, start, end) { +
85149 var length = array.length; +
85150 +
85151 start = toInteger(start); +
85152 if (start < 0) { +
85153 start = -start > length ? 0 : (length + start); +
85154 } +
85155 end = (end === undefined || end > length) ? length : toInteger(end); +
85156 if (end < 0) { +
85157 end += length; +
85158 } +
85159 end = start > end ? 0 : toLength(end); +
85160 while (start < end) { +
85161 array[start++] = value; +
85162 } +
85163 return array; +
85164 } +
85165 +
85166 /** +
85167 * The base implementation of `_.filter` without support for iteratee shorthands. +
85168 * +
85169 * @private +
85170 * @param {Array|Object} collection The collection to iterate over. +
85171 * @param {Function} predicate The function invoked per iteration. +
85172 * @returns {Array} Returns the new filtered array. +
85173 */ +
85174 function baseFilter(collection, predicate) { +
85175 var result = []; +
85176 baseEach(collection, function(value, index, collection) { +
85177 if (predicate(value, index, collection)) { +
85178 result.push(value); +
85179 } +
85180 }); +
85181 return result; +
85182 } +
85183 +
85184 /** +
85185 * The base implementation of `_.flatten` with support for restricting flattening. +
85186 * +
85187 * @private +
85188 * @param {Array} array The array to flatten. +
85189 * @param {number} depth The maximum recursion depth. +
85190 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. +
85191 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. +
85192 * @param {Array} [result=[]] The initial result value. +
85193 * @returns {Array} Returns the new flattened array. +
85194 */ +
85195 function baseFlatten(array, depth, predicate, isStrict, result) { +
85196 var index = -1, +
85197 length = array.length; +
85198 +
85199 predicate || (predicate = isFlattenable); +
85200 result || (result = []); +
85201 +
85202 while (++index < length) { +
85203 var value = array[index]; +
85204 if (depth > 0 && predicate(value)) { +
85205 if (depth > 1) { +
85206 // Recursively flatten arrays (susceptible to call stack limits). +
85207 baseFlatten(value, depth - 1, predicate, isStrict, result); +
85208 } else { +
85209 arrayPush(result, value); +
85210 } +
85211 } else if (!isStrict) { +
85212 result[result.length] = value; +
85213 } +
85214 } +
85215 return result; +
85216 } +
85217 +
85218 /** +
85219 * The base implementation of `baseForOwn` which iterates over `object` +
85220 * properties returned by `keysFunc` and invokes `iteratee` for each property. +
85221 * Iteratee functions may exit iteration early by explicitly returning `false`. +
85222 * +
85223 * @private +
85224 * @param {Object} object The object to iterate over. +
85225 * @param {Function} iteratee The function invoked per iteration. +
85226 * @param {Function} keysFunc The function to get the keys of `object`. +
85227 * @returns {Object} Returns `object`. +
85228 */ +
85229 var baseFor = createBaseFor(); +
85230 +
85231 /** +
85232 * This function is like `baseFor` except that it iterates over properties +
85233 * in the opposite order. +
85234 * +
85235 * @private +
85236 * @param {Object} object The object to iterate over. +
85237 * @param {Function} iteratee The function invoked per iteration. +
85238 * @param {Function} keysFunc The function to get the keys of `object`. +
85239 * @returns {Object} Returns `object`. +
85240 */ +
85241 var baseForRight = createBaseFor(true); +
85242 +
85243 /** +
85244 * The base implementation of `_.forOwn` without support for iteratee shorthands. +
85245 * +
85246 * @private +
85247 * @param {Object} object The object to iterate over. +
85248 * @param {Function} iteratee The function invoked per iteration. +
85249 * @returns {Object} Returns `object`. +
85250 */ +
85251 function baseForOwn(object, iteratee) { +
85252 return object && baseFor(object, iteratee, keys); +
85253 } +
85254 +
85255 /** +
85256 * The base implementation of `_.forOwnRight` without support for iteratee shorthands. +
85257 * +
85258 * @private +
85259 * @param {Object} object The object to iterate over. +
85260 * @param {Function} iteratee The function invoked per iteration. +
85261 * @returns {Object} Returns `object`. +
85262 */ +
85263 function baseForOwnRight(object, iteratee) { +
85264 return object && baseForRight(object, iteratee, keys); +
85265 } +
85266 +
85267 /** +
85268 * The base implementation of `_.functions` which creates an array of +
85269 * `object` function property names filtered from `props`. +
85270 * +
85271 * @private +
85272 * @param {Object} object The object to inspect. +
85273 * @param {Array} props The property names to filter. +
85274 * @returns {Array} Returns the function names. +
85275 */ +
85276 function baseFunctions(object, props) { +
85277 return arrayFilter(props, function(key) { +
85278 return isFunction(object[key]); +
85279 }); +
85280 } +
85281 +
85282 /** +
85283 * The base implementation of `_.get` without support for default values. +
85284 * +
85285 * @private +
85286 * @param {Object} object The object to query. +
85287 * @param {Array|string} path The path of the property to get. +
85288 * @returns {*} Returns the resolved value. +
85289 */ +
85290 function baseGet(object, path) { +
85291 path = castPath(path, object); +
85292 +
85293 var index = 0, +
85294 length = path.length; +
85295 +
85296 while (object != null && index < length) { +
85297 object = object[toKey(path[index++])]; +
85298 } +
85299 return (index && index == length) ? object : undefined; +
85300 } +
85301 +
85302 /** +
85303 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses +
85304 * `keysFunc` and `symbolsFunc` to get the enumerable property names and +
85305 * symbols of `object`. +
85306 * +
85307 * @private +
85308 * @param {Object} object The object to query. +
85309 * @param {Function} keysFunc The function to get the keys of `object`. +
85310 * @param {Function} symbolsFunc The function to get the symbols of `object`. +
85311 * @returns {Array} Returns the array of property names and symbols. +
85312 */ +
85313 function baseGetAllKeys(object, keysFunc, symbolsFunc) { +
85314 var result = keysFunc(object); +
85315 return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +
85316 } +
85317 +
85318 /** +
85319 * The base implementation of `getTag` without fallbacks for buggy environments. +
85320 * +
85321 * @private +
85322 * @param {*} value The value to query. +
85323 * @returns {string} Returns the `toStringTag`. +
85324 */ +
85325 function baseGetTag(value) { +
85326 if (value == null) { +
85327 return value === undefined ? undefinedTag : nullTag; +
85328 } +
85329 return (symToStringTag && symToStringTag in Object(value)) +
85330 ? getRawTag(value) +
85331 : objectToString(value); +
85332 } +
85333 +
85334 /** +
85335 * The base implementation of `_.gt` which doesn't coerce arguments. +
85336 * +
85337 * @private +
85338 * @param {*} value The value to compare. +
85339 * @param {*} other The other value to compare. +
85340 * @returns {boolean} Returns `true` if `value` is greater than `other`, +
85341 * else `false`. +
85342 */ +
85343 function baseGt(value, other) { +
85344 return value > other; +
85345 } +
85346 +
85347 /** +
85348 * The base implementation of `_.has` without support for deep paths. +
85349 * +
85350 * @private +
85351 * @param {Object} [object] The object to query. +
85352 * @param {Array|string} key The key to check. +
85353 * @returns {boolean} Returns `true` if `key` exists, else `false`. +
85354 */ +
85355 function baseHas(object, key) { +
85356 return object != null && hasOwnProperty.call(object, key); +
85357 } +
85358 +
85359 /** +
85360 * The base implementation of `_.hasIn` without support for deep paths. +
85361 * +
85362 * @private +
85363 * @param {Object} [object] The object to query. +
85364 * @param {Array|string} key The key to check. +
85365 * @returns {boolean} Returns `true` if `key` exists, else `false`. +
85366 */ +
85367 function baseHasIn(object, key) { +
85368 return object != null && key in Object(object); +
85369 } +
85370 +
85371 /** +
85372 * The base implementation of `_.inRange` which doesn't coerce arguments. +
85373 * +
85374 * @private +
85375 * @param {number} number The number to check. +
85376 * @param {number} start The start of the range. +
85377 * @param {number} end The end of the range. +
85378 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +
85379 */ +
85380 function baseInRange(number, start, end) { +
85381 return number >= nativeMin(start, end) && number < nativeMax(start, end); +
85382 } +
85383 +
85384 /** +
85385 * The base implementation of methods like `_.intersection`, without support +
85386 * for iteratee shorthands, that accepts an array of arrays to inspect. +
85387 * +
85388 * @private +
85389 * @param {Array} arrays The arrays to inspect. +
85390 * @param {Function} [iteratee] The iteratee invoked per element. +
85391 * @param {Function} [comparator] The comparator invoked per element. +
85392 * @returns {Array} Returns the new array of shared values. +
85393 */ +
85394 function baseIntersection(arrays, iteratee, comparator) { +
85395 var includes = comparator ? arrayIncludesWith : arrayIncludes, +
85396 length = arrays[0].length, +
85397 othLength = arrays.length, +
85398 othIndex = othLength, +
85399 caches = Array(othLength), +
85400 maxLength = Infinity, +
85401 result = []; +
85402 +
85403 while (othIndex--) { +
85404 var array = arrays[othIndex]; +
85405 if (othIndex && iteratee) { +
85406 array = arrayMap(array, baseUnary(iteratee)); +
85407 } +
85408 maxLength = nativeMin(array.length, maxLength); +
85409 caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) +
85410 ? new SetCache(othIndex && array) +
85411 : undefined; +
85412 } +
85413 array = arrays[0]; +
85414 +
85415 var index = -1, +
85416 seen = caches[0]; +
85417 +
85418 outer: +
85419 while (++index < length && result.length < maxLength) { +
85420 var value = array[index], +
85421 computed = iteratee ? iteratee(value) : value; +
85422 +
85423 value = (comparator || value !== 0) ? value : 0; +
85424 if (!(seen +
85425 ? cacheHas(seen, computed) +
85426 : includes(result, computed, comparator) +
85427 )) { +
85428 othIndex = othLength; +
85429 while (--othIndex) { +
85430 var cache = caches[othIndex]; +
85431 if (!(cache +
85432 ? cacheHas(cache, computed) +
85433 : includes(arrays[othIndex], computed, comparator)) +
85434 ) { +
85435 continue outer; +
85436 } +
85437 } +
85438 if (seen) { +
85439 seen.push(computed); +
85440 } +
85441 result.push(value); +
85442 } +
85443 } +
85444 return result; +
85445 } +
85446 +
85447 /** +
85448 * The base implementation of `_.invert` and `_.invertBy` which inverts +
85449 * `object` with values transformed by `iteratee` and set by `setter`. +
85450 * +
85451 * @private +
85452 * @param {Object} object The object to iterate over. +
85453 * @param {Function} setter The function to set `accumulator` values. +
85454 * @param {Function} iteratee The iteratee to transform values. +
85455 * @param {Object} accumulator The initial inverted object. +
85456 * @returns {Function} Returns `accumulator`. +
85457 */ +
85458 function baseInverter(object, setter, iteratee, accumulator) { +
85459 baseForOwn(object, function(value, key, object) { +
85460 setter(accumulator, iteratee(value), key, object); +
85461 }); +
85462 return accumulator; +
85463 } +
85464 +
85465 /** +
85466 * The base implementation of `_.invoke` without support for individual +
85467 * method arguments. +
85468 * +
85469 * @private +
85470 * @param {Object} object The object to query. +
85471 * @param {Array|string} path The path of the method to invoke. +
85472 * @param {Array} args The arguments to invoke the method with. +
85473 * @returns {*} Returns the result of the invoked method. +
85474 */ +
85475 function baseInvoke(object, path, args) { +
85476 path = castPath(path, object); +
85477 object = parent(object, path); +
85478 var func = object == null ? object : object[toKey(last(path))]; +
85479 return func == null ? undefined : apply(func, object, args); +
85480 } +
85481 +
85482 /** +
85483 * The base implementation of `_.isArguments`. +
85484 * +
85485 * @private +
85486 * @param {*} value The value to check. +
85487 * @returns {boolean} Returns `true` if `value` is an `arguments` object, +
85488 */ +
85489 function baseIsArguments(value) { +
85490 return isObjectLike(value) && baseGetTag(value) == argsTag; +
85491 } +
85492 +
85493 /** +
85494 * The base implementation of `_.isArrayBuffer` without Node.js optimizations. +
85495 * +
85496 * @private +
85497 * @param {*} value The value to check. +
85498 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +
85499 */ +
85500 function baseIsArrayBuffer(value) { +
85501 return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +
85502 } +
85503 +
85504 /** +
85505 * The base implementation of `_.isDate` without Node.js optimizations. +
85506 * +
85507 * @private +
85508 * @param {*} value The value to check. +
85509 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +
85510 */ +
85511 function baseIsDate(value) { +
85512 return isObjectLike(value) && baseGetTag(value) == dateTag; +
85513 } +
85514 +
85515 /** +
85516 * The base implementation of `_.isEqual` which supports partial comparisons +
85517 * and tracks traversed objects. +
85518 * +
85519 * @private +
85520 * @param {*} value The value to compare. +
85521 * @param {*} other The other value to compare. +
85522 * @param {boolean} bitmask The bitmask flags. +
85523 * 1 - Unordered comparison +
85524 * 2 - Partial comparison +
85525 * @param {Function} [customizer] The function to customize comparisons. +
85526 * @param {Object} [stack] Tracks traversed `value` and `other` objects. +
85527 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
85528 */ +
85529 function baseIsEqual(value, other, bitmask, customizer, stack) { +
85530 if (value === other) { +
85531 return true; +
85532 } +
85533 if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { +
85534 return value !== value && other !== other; +
85535 } +
85536 return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +
85537 } +
85538 +
85539 /** +
85540 * A specialized version of `baseIsEqual` for arrays and objects which performs +
85541 * deep comparisons and tracks traversed objects enabling objects with circular +
85542 * references to be compared. +
85543 * +
85544 * @private +
85545 * @param {Object} object The object to compare. +
85546 * @param {Object} other The other object to compare. +
85547 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
85548 * @param {Function} customizer The function to customize comparisons. +
85549 * @param {Function} equalFunc The function to determine equivalents of values. +
85550 * @param {Object} [stack] Tracks traversed `object` and `other` objects. +
85551 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
85552 */ +
85553 function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { +
85554 var objIsArr = isArray(object), +
85555 othIsArr = isArray(other), +
85556 objTag = objIsArr ? arrayTag : getTag(object), +
85557 othTag = othIsArr ? arrayTag : getTag(other); +
85558 +
85559 objTag = objTag == argsTag ? objectTag : objTag; +
85560 othTag = othTag == argsTag ? objectTag : othTag; +
85561 +
85562 var objIsObj = objTag == objectTag, +
85563 othIsObj = othTag == objectTag, +
85564 isSameTag = objTag == othTag; +
85565 +
85566 if (isSameTag && isBuffer(object)) { +
85567 if (!isBuffer(other)) { +
85568 return false; +
85569 } +
85570 objIsArr = true; +
85571 objIsObj = false; +
85572 } +
85573 if (isSameTag && !objIsObj) { +
85574 stack || (stack = new Stack); +
85575 return (objIsArr || isTypedArray(object)) +
85576 ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) +
85577 : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); +
85578 } +
85579 if (!(bitmask & COMPARE_PARTIAL_FLAG)) { +
85580 var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), +
85581 othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); +
85582 +
85583 if (objIsWrapped || othIsWrapped) { +
85584 var objUnwrapped = objIsWrapped ? object.value() : object, +
85585 othUnwrapped = othIsWrapped ? other.value() : other; +
85586 +
85587 stack || (stack = new Stack); +
85588 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); +
85589 } +
85590 } +
85591 if (!isSameTag) { +
85592 return false; +
85593 } +
85594 stack || (stack = new Stack); +
85595 return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +
85596 } +
85597 +
85598 /** +
85599 * The base implementation of `_.isMap` without Node.js optimizations. +
85600 * +
85601 * @private +
85602 * @param {*} value The value to check. +
85603 * @returns {boolean} Returns `true` if `value` is a map, else `false`. +
85604 */ +
85605 function baseIsMap(value) { +
85606 return isObjectLike(value) && getTag(value) == mapTag; +
85607 } +
85608 +
85609 /** +
85610 * The base implementation of `_.isMatch` without support for iteratee shorthands. +
85611 * +
85612 * @private +
85613 * @param {Object} object The object to inspect. +
85614 * @param {Object} source The object of property values to match. +
85615 * @param {Array} matchData The property names, values, and compare flags to match. +
85616 * @param {Function} [customizer] The function to customize comparisons. +
85617 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
85618 */ +
85619 function baseIsMatch(object, source, matchData, customizer) { +
85620 var index = matchData.length, +
85621 length = index, +
85622 noCustomizer = !customizer; +
85623 +
85624 if (object == null) { +
85625 return !length; +
85626 } +
85627 object = Object(object); +
85628 while (index--) { +
85629 var data = matchData[index]; +
85630 if ((noCustomizer && data[2]) +
85631 ? data[1] !== object[data[0]] +
85632 : !(data[0] in object) +
85633 ) { +
85634 return false; +
85635 } +
85636 } +
85637 while (++index < length) { +
85638 data = matchData[index]; +
85639 var key = data[0], +
85640 objValue = object[key], +
85641 srcValue = data[1]; +
85642 +
85643 if (noCustomizer && data[2]) { +
85644 if (objValue === undefined && !(key in object)) { +
85645 return false; +
85646 } +
85647 } else { +
85648 var stack = new Stack; +
85649 if (customizer) { +
85650 var result = customizer(objValue, srcValue, key, object, source, stack); +
85651 } +
85652 if (!(result === undefined +
85653 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) +
85654 : result +
85655 )) { +
85656 return false; +
85657 } +
85658 } +
85659 } +
85660 return true; +
85661 } +
85662 +
85663 /** +
85664 * The base implementation of `_.isNative` without bad shim checks. +
85665 * +
85666 * @private +
85667 * @param {*} value The value to check. +
85668 * @returns {boolean} Returns `true` if `value` is a native function, +
85669 * else `false`. +
85670 */ +
85671 function baseIsNative(value) { +
85672 if (!isObject(value) || isMasked(value)) { +
85673 return false; +
85674 } +
85675 var pattern = isFunction(value) ? reIsNative : reIsHostCtor; +
85676 return pattern.test(toSource(value)); +
85677 } +
85678 +
85679 /** +
85680 * The base implementation of `_.isRegExp` without Node.js optimizations. +
85681 * +
85682 * @private +
85683 * @param {*} value The value to check. +
85684 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +
85685 */ +
85686 function baseIsRegExp(value) { +
85687 return isObjectLike(value) && baseGetTag(value) == regexpTag; +
85688 } +
85689 +
85690 /** +
85691 * The base implementation of `_.isSet` without Node.js optimizations. +
85692 * +
85693 * @private +
85694 * @param {*} value The value to check. +
85695 * @returns {boolean} Returns `true` if `value` is a set, else `false`. +
85696 */ +
85697 function baseIsSet(value) { +
85698 return isObjectLike(value) && getTag(value) == setTag; +
85699 } +
85700 +
85701 /** +
85702 * The base implementation of `_.isTypedArray` without Node.js optimizations. +
85703 * +
85704 * @private +
85705 * @param {*} value The value to check. +
85706 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +
85707 */ +
85708 function baseIsTypedArray(value) { +
85709 return isObjectLike(value) && +
85710 isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +
85711 } +
85712 +
85713 /** +
85714 * The base implementation of `_.iteratee`. +
85715 * +
85716 * @private +
85717 * @param {*} [value=_.identity] The value to convert to an iteratee. +
85718 * @returns {Function} Returns the iteratee. +
85719 */ +
85720 function baseIteratee(value) { +
85721 // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. +
85722 // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. +
85723 if (typeof value == 'function') { +
85724 return value; +
85725 } +
85726 if (value == null) { +
85727 return identity; +
85728 } +
85729 if (typeof value == 'object') { +
85730 return isArray(value) +
85731 ? baseMatchesProperty(value[0], value[1]) +
85732 : baseMatches(value); +
85733 } +
85734 return property(value); +
85735 } +
85736 +
85737 /** +
85738 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. +
85739 * +
85740 * @private +
85741 * @param {Object} object The object to query. +
85742 * @returns {Array} Returns the array of property names. +
85743 */ +
85744 function baseKeys(object) { +
85745 if (!isPrototype(object)) { +
85746 return nativeKeys(object); +
85747 } +
85748 var result = []; +
85749 for (var key in Object(object)) { +
85750 if (hasOwnProperty.call(object, key) && key != 'constructor') { +
85751 result.push(key); +
85752 } +
85753 } +
85754 return result; +
85755 } +
85756 +
85757 /** +
85758 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. +
85759 * +
85760 * @private +
85761 * @param {Object} object The object to query. +
85762 * @returns {Array} Returns the array of property names. +
85763 */ +
85764 function baseKeysIn(object) { +
85765 if (!isObject(object)) { +
85766 return nativeKeysIn(object); +
85767 } +
85768 var isProto = isPrototype(object), +
85769 result = []; +
85770 +
85771 for (var key in object) { +
85772 if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { +
85773 result.push(key); +
85774 } +
85775 } +
85776 return result; +
85777 } +
85778 +
85779 /** +
85780 * The base implementation of `_.lt` which doesn't coerce arguments. +
85781 * +
85782 * @private +
85783 * @param {*} value The value to compare. +
85784 * @param {*} other The other value to compare. +
85785 * @returns {boolean} Returns `true` if `value` is less than `other`, +
85786 * else `false`. +
85787 */ +
85788 function baseLt(value, other) { +
85789 return value < other; +
85790 } +
85791 +
85792 /** +
85793 * The base implementation of `_.map` without support for iteratee shorthands. +
85794 * +
85795 * @private +
85796 * @param {Array|Object} collection The collection to iterate over. +
85797 * @param {Function} iteratee The function invoked per iteration. +
85798 * @returns {Array} Returns the new mapped array. +
85799 */ +
85800 function baseMap(collection, iteratee) { +
85801 var index = -1, +
85802 result = isArrayLike(collection) ? Array(collection.length) : []; +
85803 +
85804 baseEach(collection, function(value, key, collection) { +
85805 result[++index] = iteratee(value, key, collection); +
85806 }); +
85807 return result; +
85808 } +
85809 +
85810 /** +
85811 * The base implementation of `_.matches` which doesn't clone `source`. +
85812 * +
85813 * @private +
85814 * @param {Object} source The object of property values to match. +
85815 * @returns {Function} Returns the new spec function. +
85816 */ +
85817 function baseMatches(source) { +
85818 var matchData = getMatchData(source); +
85819 if (matchData.length == 1 && matchData[0][2]) { +
85820 return matchesStrictComparable(matchData[0][0], matchData[0][1]); +
85821 } +
85822 return function(object) { +
85823 return object === source || baseIsMatch(object, source, matchData); +
85824 }; +
85825 } +
85826 +
85827 /** +
85828 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. +
85829 * +
85830 * @private +
85831 * @param {string} path The path of the property to get. +
85832 * @param {*} srcValue The value to match. +
85833 * @returns {Function} Returns the new spec function. +
85834 */ +
85835 function baseMatchesProperty(path, srcValue) { +
85836 if (isKey(path) && isStrictComparable(srcValue)) { +
85837 return matchesStrictComparable(toKey(path), srcValue); +
85838 } +
85839 return function(object) { +
85840 var objValue = get(object, path); +
85841 return (objValue === undefined && objValue === srcValue) +
85842 ? hasIn(object, path) +
85843 : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); +
85844 }; +
85845 } +
85846 +
85847 /** +
85848 * The base implementation of `_.merge` without support for multiple sources. +
85849 * +
85850 * @private +
85851 * @param {Object} object The destination object. +
85852 * @param {Object} source The source object. +
85853 * @param {number} srcIndex The index of `source`. +
85854 * @param {Function} [customizer] The function to customize merged values. +
85855 * @param {Object} [stack] Tracks traversed source values and their merged +
85856 * counterparts. +
85857 */ +
85858 function baseMerge(object, source, srcIndex, customizer, stack) { +
85859 if (object === source) { +
85860 return; +
85861 } +
85862 baseFor(source, function(srcValue, key) { +
85863 if (isObject(srcValue)) { +
85864 stack || (stack = new Stack); +
85865 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); +
85866 } +
85867 else { +
85868 var newValue = customizer +
85869 ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) +
85870 : undefined; +
85871 +
85872 if (newValue === undefined) { +
85873 newValue = srcValue; +
85874 } +
85875 assignMergeValue(object, key, newValue); +
85876 } +
85877 }, keysIn); +
85878 } +
85879 +
85880 /** +
85881 * A specialized version of `baseMerge` for arrays and objects which performs +
85882 * deep merges and tracks traversed objects enabling objects with circular +
85883 * references to be merged. +
85884 * +
85885 * @private +
85886 * @param {Object} object The destination object. +
85887 * @param {Object} source The source object. +
85888 * @param {string} key The key of the value to merge. +
85889 * @param {number} srcIndex The index of `source`. +
85890 * @param {Function} mergeFunc The function to merge values. +
85891 * @param {Function} [customizer] The function to customize assigned values. +
85892 * @param {Object} [stack] Tracks traversed source values and their merged +
85893 * counterparts. +
85894 */ +
85895 function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { +
85896 var objValue = safeGet(object, key), +
85897 srcValue = safeGet(source, key), +
85898 stacked = stack.get(srcValue); +
85899 +
85900 if (stacked) { +
85901 assignMergeValue(object, key, stacked); +
85902 return; +
85903 } +
85904 var newValue = customizer +
85905 ? customizer(objValue, srcValue, (key + ''), object, source, stack) +
85906 : undefined; +
85907 +
85908 var isCommon = newValue === undefined; +
85909 +
85910 if (isCommon) { +
85911 var isArr = isArray(srcValue), +
85912 isBuff = !isArr && isBuffer(srcValue), +
85913 isTyped = !isArr && !isBuff && isTypedArray(srcValue); +
85914 +
85915 newValue = srcValue; +
85916 if (isArr || isBuff || isTyped) { +
85917 if (isArray(objValue)) { +
85918 newValue = objValue; +
85919 } +
85920 else if (isArrayLikeObject(objValue)) { +
85921 newValue = copyArray(objValue); +
85922 } +
85923 else if (isBuff) { +
85924 isCommon = false; +
85925 newValue = cloneBuffer(srcValue, true); +
85926 } +
85927 else if (isTyped) { +
85928 isCommon = false; +
85929 newValue = cloneTypedArray(srcValue, true); +
85930 } +
85931 else { +
85932 newValue = []; +
85933 } +
85934 } +
85935 else if (isPlainObject(srcValue) || isArguments(srcValue)) { +
85936 newValue = objValue; +
85937 if (isArguments(objValue)) { +
85938 newValue = toPlainObject(objValue); +
85939 } +
85940 else if (!isObject(objValue) || isFunction(objValue)) { +
85941 newValue = initCloneObject(srcValue); +
85942 } +
85943 } +
85944 else { +
85945 isCommon = false; +
85946 } +
85947 } +
85948 if (isCommon) { +
85949 // Recursively merge objects and arrays (susceptible to call stack limits). +
85950 stack.set(srcValue, newValue); +
85951 mergeFunc(newValue, srcValue, srcIndex, customizer, stack); +
85952 stack['delete'](srcValue); +
85953 } +
85954 assignMergeValue(object, key, newValue); +
85955 } +
85956 +
85957 /** +
85958 * The base implementation of `_.nth` which doesn't coerce arguments. +
85959 * +
85960 * @private +
85961 * @param {Array} array The array to query. +
85962 * @param {number} n The index of the element to return. +
85963 * @returns {*} Returns the nth element of `array`. +
85964 */ +
85965 function baseNth(array, n) { +
85966 var length = array.length; +
85967 if (!length) { +
85968 return; +
85969 } +
85970 n += n < 0 ? length : 0; +
85971 return isIndex(n, length) ? array[n] : undefined; +
85972 } +
85973 +
85974 /** +
85975 * The base implementation of `_.orderBy` without param guards. +
85976 * +
85977 * @private +
85978 * @param {Array|Object} collection The collection to iterate over. +
85979 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. +
85980 * @param {string[]} orders The sort orders of `iteratees`. +
85981 * @returns {Array} Returns the new sorted array. +
85982 */ +
85983 function baseOrderBy(collection, iteratees, orders) { +
85984 var index = -1; +
85985 iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); +
85986 +
85987 var result = baseMap(collection, function(value, key, collection) { +
85988 var criteria = arrayMap(iteratees, function(iteratee) { +
85989 return iteratee(value); +
85990 }); +
85991 return { 'criteria': criteria, 'index': ++index, 'value': value }; +
85992 }); +
85993 +
85994 return baseSortBy(result, function(object, other) { +
85995 return compareMultiple(object, other, orders); +
85996 }); +
85997 } +
85998 +
85999 /** +
86000 * The base implementation of `_.pick` without support for individual +
86001 * property identifiers. +
86002 * +
86003 * @private +
86004 * @param {Object} object The source object. +
86005 * @param {string[]} paths The property paths to pick. +
86006 * @returns {Object} Returns the new object. +
86007 */ +
86008 function basePick(object, paths) { +
86009 return basePickBy(object, paths, function(value, path) { +
86010 return hasIn(object, path); +
86011 }); +
86012 } +
86013 +
86014 /** +
86015 * The base implementation of `_.pickBy` without support for iteratee shorthands. +
86016 * +
86017 * @private +
86018 * @param {Object} object The source object. +
86019 * @param {string[]} paths The property paths to pick. +
86020 * @param {Function} predicate The function invoked per property. +
86021 * @returns {Object} Returns the new object. +
86022 */ +
86023 function basePickBy(object, paths, predicate) { +
86024 var index = -1, +
86025 length = paths.length, +
86026 result = {}; +
86027 +
86028 while (++index < length) { +
86029 var path = paths[index], +
86030 value = baseGet(object, path); +
86031 +
86032 if (predicate(value, path)) { +
86033 baseSet(result, castPath(path, object), value); +
86034 } +
86035 } +
86036 return result; +
86037 } +
86038 +
86039 /** +
86040 * A specialized version of `baseProperty` which supports deep paths. +
86041 * +
86042 * @private +
86043 * @param {Array|string} path The path of the property to get. +
86044 * @returns {Function} Returns the new accessor function. +
86045 */ +
86046 function basePropertyDeep(path) { +
86047 return function(object) { +
86048 return baseGet(object, path); +
86049 }; +
86050 } +
86051 +
86052 /** +
86053 * The base implementation of `_.pullAllBy` without support for iteratee +
86054 * shorthands. +
86055 * +
86056 * @private +
86057 * @param {Array} array The array to modify. +
86058 * @param {Array} values The values to remove. +
86059 * @param {Function} [iteratee] The iteratee invoked per element. +
86060 * @param {Function} [comparator] The comparator invoked per element. +
86061 * @returns {Array} Returns `array`. +
86062 */ +
86063 function basePullAll(array, values, iteratee, comparator) { +
86064 var indexOf = comparator ? baseIndexOfWith : baseIndexOf, +
86065 index = -1, +
86066 length = values.length, +
86067 seen = array; +
86068 +
86069 if (array === values) { +
86070 values = copyArray(values); +
86071 } +
86072 if (iteratee) { +
86073 seen = arrayMap(array, baseUnary(iteratee)); +
86074 } +
86075 while (++index < length) { +
86076 var fromIndex = 0, +
86077 value = values[index], +
86078 computed = iteratee ? iteratee(value) : value; +
86079 +
86080 while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { +
86081 if (seen !== array) { +
86082 splice.call(seen, fromIndex, 1); +
86083 } +
86084 splice.call(array, fromIndex, 1); +
86085 } +
86086 } +
86087 return array; +
86088 } +
86089 +
86090 /** +
86091 * The base implementation of `_.pullAt` without support for individual +
86092 * indexes or capturing the removed elements. +
86093 * +
86094 * @private +
86095 * @param {Array} array The array to modify. +
86096 * @param {number[]} indexes The indexes of elements to remove. +
86097 * @returns {Array} Returns `array`. +
86098 */ +
86099 function basePullAt(array, indexes) { +
86100 var length = array ? indexes.length : 0, +
86101 lastIndex = length - 1; +
86102 +
86103 while (length--) { +
86104 var index = indexes[length]; +
86105 if (length == lastIndex || index !== previous) { +
86106 var previous = index; +
86107 if (isIndex(index)) { +
86108 splice.call(array, index, 1); +
86109 } else { +
86110 baseUnset(array, index); +
86111 } +
86112 } +
86113 } +
86114 return array; +
86115 } +
86116 +
86117 /** +
86118 * The base implementation of `_.random` without support for returning +
86119 * floating-point numbers. +
86120 * +
86121 * @private +
86122 * @param {number} lower The lower bound. +
86123 * @param {number} upper The upper bound. +
86124 * @returns {number} Returns the random number. +
86125 */ +
86126 function baseRandom(lower, upper) { +
86127 return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +
86128 } +
86129 +
86130 /** +
86131 * The base implementation of `_.range` and `_.rangeRight` which doesn't +
86132 * coerce arguments. +
86133 * +
86134 * @private +
86135 * @param {number} start The start of the range. +
86136 * @param {number} end The end of the range. +
86137 * @param {number} step The value to increment or decrement by. +
86138 * @param {boolean} [fromRight] Specify iterating from right to left. +
86139 * @returns {Array} Returns the range of numbers. +
86140 */ +
86141 function baseRange(start, end, step, fromRight) { +
86142 var index = -1, +
86143 length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), +
86144 result = Array(length); +
86145 +
86146 while (length--) { +
86147 result[fromRight ? length : ++index] = start; +
86148 start += step; +
86149 } +
86150 return result; +
86151 } +
86152 +
86153 /** +
86154 * The base implementation of `_.repeat` which doesn't coerce arguments. +
86155 * +
86156 * @private +
86157 * @param {string} string The string to repeat. +
86158 * @param {number} n The number of times to repeat the string. +
86159 * @returns {string} Returns the repeated string. +
86160 */ +
86161 function baseRepeat(string, n) { +
86162 var result = ''; +
86163 if (!string || n < 1 || n > MAX_SAFE_INTEGER) { +
86164 return result; +
86165 } +
86166 // Leverage the exponentiation by squaring algorithm for a faster repeat. +
86167 // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. +
86168 do { +
86169 if (n % 2) { +
86170 result += string; +
86171 } +
86172 n = nativeFloor(n / 2); +
86173 if (n) { +
86174 string += string; +
86175 } +
86176 } while (n); +
86177 +
86178 return result; +
86179 } +
86180 +
86181 /** +
86182 * The base implementation of `_.rest` which doesn't validate or coerce arguments. +
86183 * +
86184 * @private +
86185 * @param {Function} func The function to apply a rest parameter to. +
86186 * @param {number} [start=func.length-1] The start position of the rest parameter. +
86187 * @returns {Function} Returns the new function. +
86188 */ +
86189 function baseRest(func, start) { +
86190 return setToString(overRest(func, start, identity), func + ''); +
86191 } +
86192 +
86193 /** +
86194 * The base implementation of `_.sample`. +
86195 * +
86196 * @private +
86197 * @param {Array|Object} collection The collection to sample. +
86198 * @returns {*} Returns the random element. +
86199 */ +
86200 function baseSample(collection) { +
86201 return arraySample(values(collection)); +
86202 } +
86203 +
86204 /** +
86205 * The base implementation of `_.sampleSize` without param guards. +
86206 * +
86207 * @private +
86208 * @param {Array|Object} collection The collection to sample. +
86209 * @param {number} n The number of elements to sample. +
86210 * @returns {Array} Returns the random elements. +
86211 */ +
86212 function baseSampleSize(collection, n) { +
86213 var array = values(collection); +
86214 return shuffleSelf(array, baseClamp(n, 0, array.length)); +
86215 } +
86216 +
86217 /** +
86218 * The base implementation of `_.set`. +
86219 * +
86220 * @private +
86221 * @param {Object} object The object to modify. +
86222 * @param {Array|string} path The path of the property to set. +
86223 * @param {*} value The value to set. +
86224 * @param {Function} [customizer] The function to customize path creation. +
86225 * @returns {Object} Returns `object`. +
86226 */ +
86227 function baseSet(object, path, value, customizer) { +
86228 if (!isObject(object)) { +
86229 return object; +
86230 } +
86231 path = castPath(path, object); +
86232 +
86233 var index = -1, +
86234 length = path.length, +
86235 lastIndex = length - 1, +
86236 nested = object; +
86237 +
86238 while (nested != null && ++index < length) { +
86239 var key = toKey(path[index]), +
86240 newValue = value; +
86241 +
86242 if (index != lastIndex) { +
86243 var objValue = nested[key]; +
86244 newValue = customizer ? customizer(objValue, key, nested) : undefined; +
86245 if (newValue === undefined) { +
86246 newValue = isObject(objValue) +
86247 ? objValue +
86248 : (isIndex(path[index + 1]) ? [] : {}); +
86249 } +
86250 } +
86251 assignValue(nested, key, newValue); +
86252 nested = nested[key]; +
86253 } +
86254 return object; +
86255 } +
86256 +
86257 /** +
86258 * The base implementation of `setData` without support for hot loop shorting. +
86259 * +
86260 * @private +
86261 * @param {Function} func The function to associate metadata with. +
86262 * @param {*} data The metadata. +
86263 * @returns {Function} Returns `func`. +
86264 */ +
86265 var baseSetData = !metaMap ? identity : function(func, data) { +
86266 metaMap.set(func, data); +
86267 return func; +
86268 }; +
86269 +
86270 /** +
86271 * The base implementation of `setToString` without support for hot loop shorting. +
86272 * +
86273 * @private +
86274 * @param {Function} func The function to modify. +
86275 * @param {Function} string The `toString` result. +
86276 * @returns {Function} Returns `func`. +
86277 */ +
86278 var baseSetToString = !defineProperty ? identity : function(func, string) { +
86279 return defineProperty(func, 'toString', { +
86280 'configurable': true, +
86281 'enumerable': false, +
86282 'value': constant(string), +
86283 'writable': true +
86284 }); +
86285 }; +
86286 +
86287 /** +
86288 * The base implementation of `_.shuffle`. +
86289 * +
86290 * @private +
86291 * @param {Array|Object} collection The collection to shuffle. +
86292 * @returns {Array} Returns the new shuffled array. +
86293 */ +
86294 function baseShuffle(collection) { +
86295 return shuffleSelf(values(collection)); +
86296 } +
86297 +
86298 /** +
86299 * The base implementation of `_.slice` without an iteratee call guard. +
86300 * +
86301 * @private +
86302 * @param {Array} array The array to slice. +
86303 * @param {number} [start=0] The start position. +
86304 * @param {number} [end=array.length] The end position. +
86305 * @returns {Array} Returns the slice of `array`. +
86306 */ +
86307 function baseSlice(array, start, end) { +
86308 var index = -1, +
86309 length = array.length; +
86310 +
86311 if (start < 0) { +
86312 start = -start > length ? 0 : (length + start); +
86313 } +
86314 end = end > length ? length : end; +
86315 if (end < 0) { +
86316 end += length; +
86317 } +
86318 length = start > end ? 0 : ((end - start) >>> 0); +
86319 start >>>= 0; +
86320 +
86321 var result = Array(length); +
86322 while (++index < length) { +
86323 result[index] = array[index + start]; +
86324 } +
86325 return result; +
86326 } +
86327 +
86328 /** +
86329 * The base implementation of `_.some` without support for iteratee shorthands. +
86330 * +
86331 * @private +
86332 * @param {Array|Object} collection The collection to iterate over. +
86333 * @param {Function} predicate The function invoked per iteration. +
86334 * @returns {boolean} Returns `true` if any element passes the predicate check, +
86335 * else `false`. +
86336 */ +
86337 function baseSome(collection, predicate) { +
86338 var result; +
86339 +
86340 baseEach(collection, function(value, index, collection) { +
86341 result = predicate(value, index, collection); +
86342 return !result; +
86343 }); +
86344 return !!result; +
86345 } +
86346 +
86347 /** +
86348 * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which +
86349 * performs a binary search of `array` to determine the index at which `value` +
86350 * should be inserted into `array` in order to maintain its sort order. +
86351 * +
86352 * @private +
86353 * @param {Array} array The sorted array to inspect. +
86354 * @param {*} value The value to evaluate. +
86355 * @param {boolean} [retHighest] Specify returning the highest qualified index. +
86356 * @returns {number} Returns the index at which `value` should be inserted +
86357 * into `array`. +
86358 */ +
86359 function baseSortedIndex(array, value, retHighest) { +
86360 var low = 0, +
86361 high = array == null ? low : array.length; +
86362 +
86363 if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { +
86364 while (low < high) { +
86365 var mid = (low + high) >>> 1, +
86366 computed = array[mid]; +
86367 +
86368 if (computed !== null && !isSymbol(computed) && +
86369 (retHighest ? (computed <= value) : (computed < value))) { +
86370 low = mid + 1; +
86371 } else { +
86372 high = mid; +
86373 } +
86374 } +
86375 return high; +
86376 } +
86377 return baseSortedIndexBy(array, value, identity, retHighest); +
86378 } +
86379 +
86380 /** +
86381 * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` +
86382 * which invokes `iteratee` for `value` and each element of `array` to compute +
86383 * their sort ranking. The iteratee is invoked with one argument; (value). +
86384 * +
86385 * @private +
86386 * @param {Array} array The sorted array to inspect. +
86387 * @param {*} value The value to evaluate. +
86388 * @param {Function} iteratee The iteratee invoked per element. +
86389 * @param {boolean} [retHighest] Specify returning the highest qualified index. +
86390 * @returns {number} Returns the index at which `value` should be inserted +
86391 * into `array`. +
86392 */ +
86393 function baseSortedIndexBy(array, value, iteratee, retHighest) { +
86394 value = iteratee(value); +
86395 +
86396 var low = 0, +
86397 high = array == null ? 0 : array.length, +
86398 valIsNaN = value !== value, +
86399 valIsNull = value === null, +
86400 valIsSymbol = isSymbol(value), +
86401 valIsUndefined = value === undefined; +
86402 +
86403 while (low < high) { +
86404 var mid = nativeFloor((low + high) / 2), +
86405 computed = iteratee(array[mid]), +
86406 othIsDefined = computed !== undefined, +
86407 othIsNull = computed === null, +
86408 othIsReflexive = computed === computed, +
86409 othIsSymbol = isSymbol(computed); +
86410 +
86411 if (valIsNaN) { +
86412 var setLow = retHighest || othIsReflexive; +
86413 } else if (valIsUndefined) { +
86414 setLow = othIsReflexive && (retHighest || othIsDefined); +
86415 } else if (valIsNull) { +
86416 setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); +
86417 } else if (valIsSymbol) { +
86418 setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); +
86419 } else if (othIsNull || othIsSymbol) { +
86420 setLow = false; +
86421 } else { +
86422 setLow = retHighest ? (computed <= value) : (computed < value); +
86423 } +
86424 if (setLow) { +
86425 low = mid + 1; +
86426 } else { +
86427 high = mid; +
86428 } +
86429 } +
86430 return nativeMin(high, MAX_ARRAY_INDEX); +
86431 } +
86432 +
86433 /** +
86434 * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without +
86435 * support for iteratee shorthands. +
86436 * +
86437 * @private +
86438 * @param {Array} array The array to inspect. +
86439 * @param {Function} [iteratee] The iteratee invoked per element. +
86440 * @returns {Array} Returns the new duplicate free array. +
86441 */ +
86442 function baseSortedUniq(array, iteratee) { +
86443 var index = -1, +
86444 length = array.length, +
86445 resIndex = 0, +
86446 result = []; +
86447 +
86448 while (++index < length) { +
86449 var value = array[index], +
86450 computed = iteratee ? iteratee(value) : value; +
86451 +
86452 if (!index || !eq(computed, seen)) { +
86453 var seen = computed; +
86454 result[resIndex++] = value === 0 ? 0 : value; +
86455 } +
86456 } +
86457 return result; +
86458 } +
86459 +
86460 /** +
86461 * The base implementation of `_.toNumber` which doesn't ensure correct +
86462 * conversions of binary, hexadecimal, or octal string values. +
86463 * +
86464 * @private +
86465 * @param {*} value The value to process. +
86466 * @returns {number} Returns the number. +
86467 */ +
86468 function baseToNumber(value) { +
86469 if (typeof value == 'number') { +
86470 return value; +
86471 } +
86472 if (isSymbol(value)) { +
86473 return NAN; +
86474 } +
86475 return +value; +
86476 } +
86477 +
86478 /** +
86479 * The base implementation of `_.toString` which doesn't convert nullish +
86480 * values to empty strings. +
86481 * +
86482 * @private +
86483 * @param {*} value The value to process. +
86484 * @returns {string} Returns the string. +
86485 */ +
86486 function baseToString(value) { +
86487 // Exit early for strings to avoid a performance hit in some environments. +
86488 if (typeof value == 'string') { +
86489 return value; +
86490 } +
86491 if (isArray(value)) { +
86492 // Recursively convert values (susceptible to call stack limits). +
86493 return arrayMap(value, baseToString) + ''; +
86494 } +
86495 if (isSymbol(value)) { +
86496 return symbolToString ? symbolToString.call(value) : ''; +
86497 } +
86498 var result = (value + ''); +
86499 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +
86500 } +
86501 +
86502 /** +
86503 * The base implementation of `_.uniqBy` without support for iteratee shorthands. +
86504 * +
86505 * @private +
86506 * @param {Array} array The array to inspect. +
86507 * @param {Function} [iteratee] The iteratee invoked per element. +
86508 * @param {Function} [comparator] The comparator invoked per element. +
86509 * @returns {Array} Returns the new duplicate free array. +
86510 */ +
86511 function baseUniq(array, iteratee, comparator) { +
86512 var index = -1, +
86513 includes = arrayIncludes, +
86514 length = array.length, +
86515 isCommon = true, +
86516 result = [], +
86517 seen = result; +
86518 +
86519 if (comparator) { +
86520 isCommon = false; +
86521 includes = arrayIncludesWith; +
86522 } +
86523 else if (length >= LARGE_ARRAY_SIZE) { +
86524 var set = iteratee ? null : createSet(array); +
86525 if (set) { +
86526 return setToArray(set); +
86527 } +
86528 isCommon = false; +
86529 includes = cacheHas; +
86530 seen = new SetCache; +
86531 } +
86532 else { +
86533 seen = iteratee ? [] : result; +
86534 } +
86535 outer: +
86536 while (++index < length) { +
86537 var value = array[index], +
86538 computed = iteratee ? iteratee(value) : value; +
86539 +
86540 value = (comparator || value !== 0) ? value : 0; +
86541 if (isCommon && computed === computed) { +
86542 var seenIndex = seen.length; +
86543 while (seenIndex--) { +
86544 if (seen[seenIndex] === computed) { +
86545 continue outer; +
86546 } +
86547 } +
86548 if (iteratee) { +
86549 seen.push(computed); +
86550 } +
86551 result.push(value); +
86552 } +
86553 else if (!includes(seen, computed, comparator)) { +
86554 if (seen !== result) { +
86555 seen.push(computed); +
86556 } +
86557 result.push(value); +
86558 } +
86559 } +
86560 return result; +
86561 } +
86562 +
86563 /** +
86564 * The base implementation of `_.unset`. +
86565 * +
86566 * @private +
86567 * @param {Object} object The object to modify. +
86568 * @param {Array|string} path The property path to unset. +
86569 * @returns {boolean} Returns `true` if the property is deleted, else `false`. +
86570 */ +
86571 function baseUnset(object, path) { +
86572 path = castPath(path, object); +
86573 object = parent(object, path); +
86574 return object == null || delete object[toKey(last(path))]; +
86575 } +
86576 +
86577 /** +
86578 * The base implementation of `_.update`. +
86579 * +
86580 * @private +
86581 * @param {Object} object The object to modify. +
86582 * @param {Array|string} path The path of the property to update. +
86583 * @param {Function} updater The function to produce the updated value. +
86584 * @param {Function} [customizer] The function to customize path creation. +
86585 * @returns {Object} Returns `object`. +
86586 */ +
86587 function baseUpdate(object, path, updater, customizer) { +
86588 return baseSet(object, path, updater(baseGet(object, path)), customizer); +
86589 } +
86590 +
86591 /** +
86592 * The base implementation of methods like `_.dropWhile` and `_.takeWhile` +
86593 * without support for iteratee shorthands. +
86594 * +
86595 * @private +
86596 * @param {Array} array The array to query. +
86597 * @param {Function} predicate The function invoked per iteration. +
86598 * @param {boolean} [isDrop] Specify dropping elements instead of taking them. +
86599 * @param {boolean} [fromRight] Specify iterating from right to left. +
86600 * @returns {Array} Returns the slice of `array`. +
86601 */ +
86602 function baseWhile(array, predicate, isDrop, fromRight) { +
86603 var length = array.length, +
86604 index = fromRight ? length : -1; +
86605 +
86606 while ((fromRight ? index-- : ++index < length) && +
86607 predicate(array[index], index, array)) {} +
86608 +
86609 return isDrop +
86610 ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) +
86611 : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +
86612 } +
86613 +
86614 /** +
86615 * The base implementation of `wrapperValue` which returns the result of +
86616 * performing a sequence of actions on the unwrapped `value`, where each +
86617 * successive action is supplied the return value of the previous. +
86618 * +
86619 * @private +
86620 * @param {*} value The unwrapped value. +
86621 * @param {Array} actions Actions to perform to resolve the unwrapped value. +
86622 * @returns {*} Returns the resolved value. +
86623 */ +
86624 function baseWrapperValue(value, actions) { +
86625 var result = value; +
86626 if (result instanceof LazyWrapper) { +
86627 result = result.value(); +
86628 } +
86629 return arrayReduce(actions, function(result, action) { +
86630 return action.func.apply(action.thisArg, arrayPush([result], action.args)); +
86631 }, result); +
86632 } +
86633 +
86634 /** +
86635 * The base implementation of methods like `_.xor`, without support for +
86636 * iteratee shorthands, that accepts an array of arrays to inspect. +
86637 * +
86638 * @private +
86639 * @param {Array} arrays The arrays to inspect. +
86640 * @param {Function} [iteratee] The iteratee invoked per element. +
86641 * @param {Function} [comparator] The comparator invoked per element. +
86642 * @returns {Array} Returns the new array of values. +
86643 */ +
86644 function baseXor(arrays, iteratee, comparator) { +
86645 var length = arrays.length; +
86646 if (length < 2) { +
86647 return length ? baseUniq(arrays[0]) : []; +
86648 } +
86649 var index = -1, +
86650 result = Array(length); +
86651 +
86652 while (++index < length) { +
86653 var array = arrays[index], +
86654 othIndex = -1; +
86655 +
86656 while (++othIndex < length) { +
86657 if (othIndex != index) { +
86658 result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); +
86659 } +
86660 } +
86661 } +
86662 return baseUniq(baseFlatten(result, 1), iteratee, comparator); +
86663 } +
86664 +
86665 /** +
86666 * This base implementation of `_.zipObject` which assigns values using `assignFunc`. +
86667 * +
86668 * @private +
86669 * @param {Array} props The property identifiers. +
86670 * @param {Array} values The property values. +
86671 * @param {Function} assignFunc The function to assign values. +
86672 * @returns {Object} Returns the new object. +
86673 */ +
86674 function baseZipObject(props, values, assignFunc) { +
86675 var index = -1, +
86676 length = props.length, +
86677 valsLength = values.length, +
86678 result = {}; +
86679 +
86680 while (++index < length) { +
86681 var value = index < valsLength ? values[index] : undefined; +
86682 assignFunc(result, props[index], value); +
86683 } +
86684 return result; +
86685 } +
86686 +
86687 /** +
86688 * Casts `value` to an empty array if it's not an array like object. +
86689 * +
86690 * @private +
86691 * @param {*} value The value to inspect. +
86692 * @returns {Array|Object} Returns the cast array-like object. +
86693 */ +
86694 function castArrayLikeObject(value) { +
86695 return isArrayLikeObject(value) ? value : []; +
86696 } +
86697 +
86698 /** +
86699 * Casts `value` to `identity` if it's not a function. +
86700 * +
86701 * @private +
86702 * @param {*} value The value to inspect. +
86703 * @returns {Function} Returns cast function. +
86704 */ +
86705 function castFunction(value) { +
86706 return typeof value == 'function' ? value : identity; +
86707 } +
86708 +
86709 /** +
86710 * Casts `value` to a path array if it's not one. +
86711 * +
86712 * @private +
86713 * @param {*} value The value to inspect. +
86714 * @param {Object} [object] The object to query keys on. +
86715 * @returns {Array} Returns the cast property path array. +
86716 */ +
86717 function castPath(value, object) { +
86718 if (isArray(value)) { +
86719 return value; +
86720 } +
86721 return isKey(value, object) ? [value] : stringToPath(toString(value)); +
86722 } +
86723 +
86724 /** +
86725 * A `baseRest` alias which can be replaced with `identity` by module +
86726 * replacement plugins. +
86727 * +
86728 * @private +
86729 * @type {Function} +
86730 * @param {Function} func The function to apply a rest parameter to. +
86731 * @returns {Function} Returns the new function. +
86732 */ +
86733 var castRest = baseRest; +
86734 +
86735 /** +
86736 * Casts `array` to a slice if it's needed. +
86737 * +
86738 * @private +
86739 * @param {Array} array The array to inspect. +
86740 * @param {number} start The start position. +
86741 * @param {number} [end=array.length] The end position. +
86742 * @returns {Array} Returns the cast slice. +
86743 */ +
86744 function castSlice(array, start, end) { +
86745 var length = array.length; +
86746 end = end === undefined ? length : end; +
86747 return (!start && end >= length) ? array : baseSlice(array, start, end); +
86748 } +
86749 +
86750 /** +
86751 * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). +
86752 * +
86753 * @private +
86754 * @param {number|Object} id The timer id or timeout object of the timer to clear. +
86755 */ +
86756 var clearTimeout = ctxClearTimeout || function(id) { +
86757 return root.clearTimeout(id); +
86758 }; +
86759 +
86760 /** +
86761 * Creates a clone of `buffer`. +
86762 * +
86763 * @private +
86764 * @param {Buffer} buffer The buffer to clone. +
86765 * @param {boolean} [isDeep] Specify a deep clone. +
86766 * @returns {Buffer} Returns the cloned buffer. +
86767 */ +
86768 function cloneBuffer(buffer, isDeep) { +
86769 if (isDeep) { +
86770 return buffer.slice(); +
86771 } +
86772 var length = buffer.length, +
86773 result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); +
86774 +
86775 buffer.copy(result); +
86776 return result; +
86777 } +
86778 +
86779 /** +
86780 * Creates a clone of `arrayBuffer`. +
86781 * +
86782 * @private +
86783 * @param {ArrayBuffer} arrayBuffer The array buffer to clone. +
86784 * @returns {ArrayBuffer} Returns the cloned array buffer. +
86785 */ +
86786 function cloneArrayBuffer(arrayBuffer) { +
86787 var result = new arrayBuffer.constructor(arrayBuffer.byteLength); +
86788 new Uint8Array(result).set(new Uint8Array(arrayBuffer)); +
86789 return result; +
86790 } +
86791 +
86792 /** +
86793 * Creates a clone of `dataView`. +
86794 * +
86795 * @private +
86796 * @param {Object} dataView The data view to clone. +
86797 * @param {boolean} [isDeep] Specify a deep clone. +
86798 * @returns {Object} Returns the cloned data view. +
86799 */ +
86800 function cloneDataView(dataView, isDeep) { +
86801 var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; +
86802 return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +
86803 } +
86804 +
86805 /** +
86806 * Creates a clone of `regexp`. +
86807 * +
86808 * @private +
86809 * @param {Object} regexp The regexp to clone. +
86810 * @returns {Object} Returns the cloned regexp. +
86811 */ +
86812 function cloneRegExp(regexp) { +
86813 var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); +
86814 result.lastIndex = regexp.lastIndex; +
86815 return result; +
86816 } +
86817 +
86818 /** +
86819 * Creates a clone of the `symbol` object. +
86820 * +
86821 * @private +
86822 * @param {Object} symbol The symbol object to clone. +
86823 * @returns {Object} Returns the cloned symbol object. +
86824 */ +
86825 function cloneSymbol(symbol) { +
86826 return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +
86827 } +
86828 +
86829 /** +
86830 * Creates a clone of `typedArray`. +
86831 * +
86832 * @private +
86833 * @param {Object} typedArray The typed array to clone. +
86834 * @param {boolean} [isDeep] Specify a deep clone. +
86835 * @returns {Object} Returns the cloned typed array. +
86836 */ +
86837 function cloneTypedArray(typedArray, isDeep) { +
86838 var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; +
86839 return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +
86840 } +
86841 +
86842 /** +
86843 * Compares values to sort them in ascending order. +
86844 * +
86845 * @private +
86846 * @param {*} value The value to compare. +
86847 * @param {*} other The other value to compare. +
86848 * @returns {number} Returns the sort order indicator for `value`. +
86849 */ +
86850 function compareAscending(value, other) { +
86851 if (value !== other) { +
86852 var valIsDefined = value !== undefined, +
86853 valIsNull = value === null, +
86854 valIsReflexive = value === value, +
86855 valIsSymbol = isSymbol(value); +
86856 +
86857 var othIsDefined = other !== undefined, +
86858 othIsNull = other === null, +
86859 othIsReflexive = other === other, +
86860 othIsSymbol = isSymbol(other); +
86861 +
86862 if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || +
86863 (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || +
86864 (valIsNull && othIsDefined && othIsReflexive) || +
86865 (!valIsDefined && othIsReflexive) || +
86866 !valIsReflexive) { +
86867 return 1; +
86868 } +
86869 if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || +
86870 (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || +
86871 (othIsNull && valIsDefined && valIsReflexive) || +
86872 (!othIsDefined && valIsReflexive) || +
86873 !othIsReflexive) { +
86874 return -1; +
86875 } +
86876 } +
86877 return 0; +
86878 } +
86879 +
86880 /** +
86881 * Used by `_.orderBy` to compare multiple properties of a value to another +
86882 * and stable sort them. +
86883 * +
86884 * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, +
86885 * specify an order of "desc" for descending or "asc" for ascending sort order +
86886 * of corresponding values. +
86887 * +
86888 * @private +
86889 * @param {Object} object The object to compare. +
86890 * @param {Object} other The other object to compare. +
86891 * @param {boolean[]|string[]} orders The order to sort by for each property. +
86892 * @returns {number} Returns the sort order indicator for `object`. +
86893 */ +
86894 function compareMultiple(object, other, orders) { +
86895 var index = -1, +
86896 objCriteria = object.criteria, +
86897 othCriteria = other.criteria, +
86898 length = objCriteria.length, +
86899 ordersLength = orders.length; +
86900 +
86901 while (++index < length) { +
86902 var result = compareAscending(objCriteria[index], othCriteria[index]); +
86903 if (result) { +
86904 if (index >= ordersLength) { +
86905 return result; +
86906 } +
86907 var order = orders[index]; +
86908 return result * (order == 'desc' ? -1 : 1); +
86909 } +
86910 } +
86911 // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications +
86912 // that causes it, under certain circumstances, to provide the same value for +
86913 // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 +
86914 // for more details. +
86915 // +
86916 // This also ensures a stable sort in V8 and other engines. +
86917 // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. +
86918 return object.index - other.index; +
86919 } +
86920 +
86921 /** +
86922 * Creates an array that is the composition of partially applied arguments, +
86923 * placeholders, and provided arguments into a single array of arguments. +
86924 * +
86925 * @private +
86926 * @param {Array} args The provided arguments. +
86927 * @param {Array} partials The arguments to prepend to those provided. +
86928 * @param {Array} holders The `partials` placeholder indexes. +
86929 * @params {boolean} [isCurried] Specify composing for a curried function. +
86930 * @returns {Array} Returns the new array of composed arguments. +
86931 */ +
86932 function composeArgs(args, partials, holders, isCurried) { +
86933 var argsIndex = -1, +
86934 argsLength = args.length, +
86935 holdersLength = holders.length, +
86936 leftIndex = -1, +
86937 leftLength = partials.length, +
86938 rangeLength = nativeMax(argsLength - holdersLength, 0), +
86939 result = Array(leftLength + rangeLength), +
86940 isUncurried = !isCurried; +
86941 +
86942 while (++leftIndex < leftLength) { +
86943 result[leftIndex] = partials[leftIndex]; +
86944 } +
86945 while (++argsIndex < holdersLength) { +
86946 if (isUncurried || argsIndex < argsLength) { +
86947 result[holders[argsIndex]] = args[argsIndex]; +
86948 } +
86949 } +
86950 while (rangeLength--) { +
86951 result[leftIndex++] = args[argsIndex++]; +
86952 } +
86953 return result; +
86954 } +
86955 +
86956 /** +
86957 * This function is like `composeArgs` except that the arguments composition +
86958 * is tailored for `_.partialRight`. +
86959 * +
86960 * @private +
86961 * @param {Array} args The provided arguments. +
86962 * @param {Array} partials The arguments to append to those provided. +
86963 * @param {Array} holders The `partials` placeholder indexes. +
86964 * @params {boolean} [isCurried] Specify composing for a curried function. +
86965 * @returns {Array} Returns the new array of composed arguments. +
86966 */ +
86967 function composeArgsRight(args, partials, holders, isCurried) { +
86968 var argsIndex = -1, +
86969 argsLength = args.length, +
86970 holdersIndex = -1, +
86971 holdersLength = holders.length, +
86972 rightIndex = -1, +
86973 rightLength = partials.length, +
86974 rangeLength = nativeMax(argsLength - holdersLength, 0), +
86975 result = Array(rangeLength + rightLength), +
86976 isUncurried = !isCurried; +
86977 +
86978 while (++argsIndex < rangeLength) { +
86979 result[argsIndex] = args[argsIndex]; +
86980 } +
86981 var offset = argsIndex; +
86982 while (++rightIndex < rightLength) { +
86983 result[offset + rightIndex] = partials[rightIndex]; +
86984 } +
86985 while (++holdersIndex < holdersLength) { +
86986 if (isUncurried || argsIndex < argsLength) { +
86987 result[offset + holders[holdersIndex]] = args[argsIndex++]; +
86988 } +
86989 } +
86990 return result; +
86991 } +
86992 +
86993 /** +
86994 * Copies the values of `source` to `array`. +
86995 * +
86996 * @private +
86997 * @param {Array} source The array to copy values from. +
86998 * @param {Array} [array=[]] The array to copy values to. +
86999 * @returns {Array} Returns `array`. +
87000 */ +
87001 function copyArray(source, array) { +
87002 var index = -1, +
87003 length = source.length; +
87004 +
87005 array || (array = Array(length)); +
87006 while (++index < length) { +
87007 array[index] = source[index]; +
87008 } +
87009 return array; +
87010 } +
87011 +
87012 /** +
87013 * Copies properties of `source` to `object`. +
87014 * +
87015 * @private +
87016 * @param {Object} source The object to copy properties from. +
87017 * @param {Array} props The property identifiers to copy. +
87018 * @param {Object} [object={}] The object to copy properties to. +
87019 * @param {Function} [customizer] The function to customize copied values. +
87020 * @returns {Object} Returns `object`. +
87021 */ +
87022 function copyObject(source, props, object, customizer) { +
87023 var isNew = !object; +
87024 object || (object = {}); +
87025 +
87026 var index = -1, +
87027 length = props.length; +
87028 +
87029 while (++index < length) { +
87030 var key = props[index]; +
87031 +
87032 var newValue = customizer +
87033 ? customizer(object[key], source[key], key, object, source) +
87034 : undefined; +
87035 +
87036 if (newValue === undefined) { +
87037 newValue = source[key]; +
87038 } +
87039 if (isNew) { +
87040 baseAssignValue(object, key, newValue); +
87041 } else { +
87042 assignValue(object, key, newValue); +
87043 } +
87044 } +
87045 return object; +
87046 } +
87047 +
87048 /** +
87049 * Copies own symbols of `source` to `object`. +
87050 * +
87051 * @private +
87052 * @param {Object} source The object to copy symbols from. +
87053 * @param {Object} [object={}] The object to copy symbols to. +
87054 * @returns {Object} Returns `object`. +
87055 */ +
87056 function copySymbols(source, object) { +
87057 return copyObject(source, getSymbols(source), object); +
87058 } +
87059 +
87060 /** +
87061 * Copies own and inherited symbols of `source` to `object`. +
87062 * +
87063 * @private +
87064 * @param {Object} source The object to copy symbols from. +
87065 * @param {Object} [object={}] The object to copy symbols to. +
87066 * @returns {Object} Returns `object`. +
87067 */ +
87068 function copySymbolsIn(source, object) { +
87069 return copyObject(source, getSymbolsIn(source), object); +
87070 } +
87071 +
87072 /** +
87073 * Creates a function like `_.groupBy`. +
87074 * +
87075 * @private +
87076 * @param {Function} setter The function to set accumulator values. +
87077 * @param {Function} [initializer] The accumulator object initializer. +
87078 * @returns {Function} Returns the new aggregator function. +
87079 */ +
87080 function createAggregator(setter, initializer) { +
87081 return function(collection, iteratee) { +
87082 var func = isArray(collection) ? arrayAggregator : baseAggregator, +
87083 accumulator = initializer ? initializer() : {}; +
87084 +
87085 return func(collection, setter, getIteratee(iteratee, 2), accumulator); +
87086 }; +
87087 } +
87088 +
87089 /** +
87090 * Creates a function like `_.assign`. +
87091 * +
87092 * @private +
87093 * @param {Function} assigner The function to assign values. +
87094 * @returns {Function} Returns the new assigner function. +
87095 */ +
87096 function createAssigner(assigner) { +
87097 return baseRest(function(object, sources) { +
87098 var index = -1, +
87099 length = sources.length, +
87100 customizer = length > 1 ? sources[length - 1] : undefined, +
87101 guard = length > 2 ? sources[2] : undefined; +
87102 +
87103 customizer = (assigner.length > 3 && typeof customizer == 'function') +
87104 ? (length--, customizer) +
87105 : undefined; +
87106 +
87107 if (guard && isIterateeCall(sources[0], sources[1], guard)) { +
87108 customizer = length < 3 ? undefined : customizer; +
87109 length = 1; +
87110 } +
87111 object = Object(object); +
87112 while (++index < length) { +
87113 var source = sources[index]; +
87114 if (source) { +
87115 assigner(object, source, index, customizer); +
87116 } +
87117 } +
87118 return object; +
87119 }); +
87120 } +
87121 +
87122 /** +
87123 * Creates a `baseEach` or `baseEachRight` function. +
87124 * +
87125 * @private +
87126 * @param {Function} eachFunc The function to iterate over a collection. +
87127 * @param {boolean} [fromRight] Specify iterating from right to left. +
87128 * @returns {Function} Returns the new base function. +
87129 */ +
87130 function createBaseEach(eachFunc, fromRight) { +
87131 return function(collection, iteratee) { +
87132 if (collection == null) { +
87133 return collection; +
87134 } +
87135 if (!isArrayLike(collection)) { +
87136 return eachFunc(collection, iteratee); +
87137 } +
87138 var length = collection.length, +
87139 index = fromRight ? length : -1, +
87140 iterable = Object(collection); +
87141 +
87142 while ((fromRight ? index-- : ++index < length)) { +
87143 if (iteratee(iterable[index], index, iterable) === false) { +
87144 break; +
87145 } +
87146 } +
87147 return collection; +
87148 }; +
87149 } +
87150 +
87151 /** +
87152 * Creates a base function for methods like `_.forIn` and `_.forOwn`. +
87153 * +
87154 * @private +
87155 * @param {boolean} [fromRight] Specify iterating from right to left. +
87156 * @returns {Function} Returns the new base function. +
87157 */ +
87158 function createBaseFor(fromRight) { +
87159 return function(object, iteratee, keysFunc) { +
87160 var index = -1, +
87161 iterable = Object(object), +
87162 props = keysFunc(object), +
87163 length = props.length; +
87164 +
87165 while (length--) { +
87166 var key = props[fromRight ? length : ++index]; +
87167 if (iteratee(iterable[key], key, iterable) === false) { +
87168 break; +
87169 } +
87170 } +
87171 return object; +
87172 }; +
87173 } +
87174 +
87175 /** +
87176 * Creates a function that wraps `func` to invoke it with the optional `this` +
87177 * binding of `thisArg`. +
87178 * +
87179 * @private +
87180 * @param {Function} func The function to wrap. +
87181 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
87182 * @param {*} [thisArg] The `this` binding of `func`. +
87183 * @returns {Function} Returns the new wrapped function. +
87184 */ +
87185 function createBind(func, bitmask, thisArg) { +
87186 var isBind = bitmask & WRAP_BIND_FLAG, +
87187 Ctor = createCtor(func); +
87188 +
87189 function wrapper() { +
87190 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
87191 return fn.apply(isBind ? thisArg : this, arguments); +
87192 } +
87193 return wrapper; +
87194 } +
87195 +
87196 /** +
87197 * Creates a function like `_.lowerFirst`. +
87198 * +
87199 * @private +
87200 * @param {string} methodName The name of the `String` case method to use. +
87201 * @returns {Function} Returns the new case function. +
87202 */ +
87203 function createCaseFirst(methodName) { +
87204 return function(string) { +
87205 string = toString(string); +
87206 +
87207 var strSymbols = hasUnicode(string) +
87208 ? stringToArray(string) +
87209 : undefined; +
87210 +
87211 var chr = strSymbols +
87212 ? strSymbols[0] +
87213 : string.charAt(0); +
87214 +
87215 var trailing = strSymbols +
87216 ? castSlice(strSymbols, 1).join('') +
87217 : string.slice(1); +
87218 +
87219 return chr[methodName]() + trailing; +
87220 }; +
87221 } +
87222 +
87223 /** +
87224 * Creates a function like `_.camelCase`. +
87225 * +
87226 * @private +
87227 * @param {Function} callback The function to combine each word. +
87228 * @returns {Function} Returns the new compounder function. +
87229 */ +
87230 function createCompounder(callback) { +
87231 return function(string) { +
87232 return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); +
87233 }; +
87234 } +
87235 +
87236 /** +
87237 * Creates a function that produces an instance of `Ctor` regardless of +
87238 * whether it was invoked as part of a `new` expression or by `call` or `apply`. +
87239 * +
87240 * @private +
87241 * @param {Function} Ctor The constructor to wrap. +
87242 * @returns {Function} Returns the new wrapped function. +
87243 */ +
87244 function createCtor(Ctor) { +
87245 return function() { +
87246 // Use a `switch` statement to work with class constructors. See +
87247 // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist +
87248 // for more details. +
87249 var args = arguments; +
87250 switch (args.length) { +
87251 case 0: return new Ctor; +
87252 case 1: return new Ctor(args[0]); +
87253 case 2: return new Ctor(args[0], args[1]); +
87254 case 3: return new Ctor(args[0], args[1], args[2]); +
87255 case 4: return new Ctor(args[0], args[1], args[2], args[3]); +
87256 case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); +
87257 case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); +
87258 case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); +
87259 } +
87260 var thisBinding = baseCreate(Ctor.prototype), +
87261 result = Ctor.apply(thisBinding, args); +
87262 +
87263 // Mimic the constructor's `return` behavior. +
87264 // See https://es5.github.io/#x13.2.2 for more details. +
87265 return isObject(result) ? result : thisBinding; +
87266 }; +
87267 } +
87268 +
87269 /** +
87270 * Creates a function that wraps `func` to enable currying. +
87271 * +
87272 * @private +
87273 * @param {Function} func The function to wrap. +
87274 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
87275 * @param {number} arity The arity of `func`. +
87276 * @returns {Function} Returns the new wrapped function. +
87277 */ +
87278 function createCurry(func, bitmask, arity) { +
87279 var Ctor = createCtor(func); +
87280 +
87281 function wrapper() { +
87282 var length = arguments.length, +
87283 args = Array(length), +
87284 index = length, +
87285 placeholder = getHolder(wrapper); +
87286 +
87287 while (index--) { +
87288 args[index] = arguments[index]; +
87289 } +
87290 var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) +
87291 ? [] +
87292 : replaceHolders(args, placeholder); +
87293 +
87294 length -= holders.length; +
87295 if (length < arity) { +
87296 return createRecurry( +
87297 func, bitmask, createHybrid, wrapper.placeholder, undefined, +
87298 args, holders, undefined, undefined, arity - length); +
87299 } +
87300 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
87301 return apply(fn, this, args); +
87302 } +
87303 return wrapper; +
87304 } +
87305 +
87306 /** +
87307 * Creates a `_.find` or `_.findLast` function. +
87308 * +
87309 * @private +
87310 * @param {Function} findIndexFunc The function to find the collection index. +
87311 * @returns {Function} Returns the new find function. +
87312 */ +
87313 function createFind(findIndexFunc) { +
87314 return function(collection, predicate, fromIndex) { +
87315 var iterable = Object(collection); +
87316 if (!isArrayLike(collection)) { +
87317 var iteratee = getIteratee(predicate, 3); +
87318 collection = keys(collection); +
87319 predicate = function(key) { return iteratee(iterable[key], key, iterable); }; +
87320 } +
87321 var index = findIndexFunc(collection, predicate, fromIndex); +
87322 return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; +
87323 }; +
87324 } +
87325 +
87326 /** +
87327 * Creates a `_.flow` or `_.flowRight` function. +
87328 * +
87329 * @private +
87330 * @param {boolean} [fromRight] Specify iterating from right to left. +
87331 * @returns {Function} Returns the new flow function. +
87332 */ +
87333 function createFlow(fromRight) { +
87334 return flatRest(function(funcs) { +
87335 var length = funcs.length, +
87336 index = length, +
87337 prereq = LodashWrapper.prototype.thru; +
87338 +
87339 if (fromRight) { +
87340 funcs.reverse(); +
87341 } +
87342 while (index--) { +
87343 var func = funcs[index]; +
87344 if (typeof func != 'function') { +
87345 throw new TypeError(FUNC_ERROR_TEXT); +
87346 } +
87347 if (prereq && !wrapper && getFuncName(func) == 'wrapper') { +
87348 var wrapper = new LodashWrapper([], true); +
87349 } +
87350 } +
87351 index = wrapper ? index : length; +
87352 while (++index < length) { +
87353 func = funcs[index]; +
87354 +
87355 var funcName = getFuncName(func), +
87356 data = funcName == 'wrapper' ? getData(func) : undefined; +
87357 +
87358 if (data && isLaziable(data[0]) && +
87359 data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && +
87360 !data[4].length && data[9] == 1 +
87361 ) { +
87362 wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); +
87363 } else { +
87364 wrapper = (func.length == 1 && isLaziable(func)) +
87365 ? wrapper[funcName]() +
87366 : wrapper.thru(func); +
87367 } +
87368 } +
87369 return function() { +
87370 var args = arguments, +
87371 value = args[0]; +
87372 +
87373 if (wrapper && args.length == 1 && isArray(value)) { +
87374 return wrapper.plant(value).value(); +
87375 } +
87376 var index = 0, +
87377 result = length ? funcs[index].apply(this, args) : value; +
87378 +
87379 while (++index < length) { +
87380 result = funcs[index].call(this, result); +
87381 } +
87382 return result; +
87383 }; +
87384 }); +
87385 } +
87386 +
87387 /** +
87388 * Creates a function that wraps `func` to invoke it with optional `this` +
87389 * binding of `thisArg`, partial application, and currying. +
87390 * +
87391 * @private +
87392 * @param {Function|string} func The function or method name to wrap. +
87393 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
87394 * @param {*} [thisArg] The `this` binding of `func`. +
87395 * @param {Array} [partials] The arguments to prepend to those provided to +
87396 * the new function. +
87397 * @param {Array} [holders] The `partials` placeholder indexes. +
87398 * @param {Array} [partialsRight] The arguments to append to those provided +
87399 * to the new function. +
87400 * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. +
87401 * @param {Array} [argPos] The argument positions of the new function. +
87402 * @param {number} [ary] The arity cap of `func`. +
87403 * @param {number} [arity] The arity of `func`. +
87404 * @returns {Function} Returns the new wrapped function. +
87405 */ +
87406 function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { +
87407 var isAry = bitmask & WRAP_ARY_FLAG, +
87408 isBind = bitmask & WRAP_BIND_FLAG, +
87409 isBindKey = bitmask & WRAP_BIND_KEY_FLAG, +
87410 isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), +
87411 isFlip = bitmask & WRAP_FLIP_FLAG, +
87412 Ctor = isBindKey ? undefined : createCtor(func); +
87413 +
87414 function wrapper() { +
87415 var length = arguments.length, +
87416 args = Array(length), +
87417 index = length; +
87418 +
87419 while (index--) { +
87420 args[index] = arguments[index]; +
87421 } +
87422 if (isCurried) { +
87423 var placeholder = getHolder(wrapper), +
87424 holdersCount = countHolders(args, placeholder); +
87425 } +
87426 if (partials) { +
87427 args = composeArgs(args, partials, holders, isCurried); +
87428 } +
87429 if (partialsRight) { +
87430 args = composeArgsRight(args, partialsRight, holdersRight, isCurried); +
87431 } +
87432 length -= holdersCount; +
87433 if (isCurried && length < arity) { +
87434 var newHolders = replaceHolders(args, placeholder); +
87435 return createRecurry( +
87436 func, bitmask, createHybrid, wrapper.placeholder, thisArg, +
87437 args, newHolders, argPos, ary, arity - length +
87438 ); +
87439 } +
87440 var thisBinding = isBind ? thisArg : this, +
87441 fn = isBindKey ? thisBinding[func] : func; +
87442 +
87443 length = args.length; +
87444 if (argPos) { +
87445 args = reorder(args, argPos); +
87446 } else if (isFlip && length > 1) { +
87447 args.reverse(); +
87448 } +
87449 if (isAry && ary < length) { +
87450 args.length = ary; +
87451 } +
87452 if (this && this !== root && this instanceof wrapper) { +
87453 fn = Ctor || createCtor(fn); +
87454 } +
87455 return fn.apply(thisBinding, args); +
87456 } +
87457 return wrapper; +
87458 } +
87459 +
87460 /** +
87461 * Creates a function like `_.invertBy`. +
87462 * +
87463 * @private +
87464 * @param {Function} setter The function to set accumulator values. +
87465 * @param {Function} toIteratee The function to resolve iteratees. +
87466 * @returns {Function} Returns the new inverter function. +
87467 */ +
87468 function createInverter(setter, toIteratee) { +
87469 return function(object, iteratee) { +
87470 return baseInverter(object, setter, toIteratee(iteratee), {}); +
87471 }; +
87472 } +
87473 +
87474 /** +
87475 * Creates a function that performs a mathematical operation on two values. +
87476 * +
87477 * @private +
87478 * @param {Function} operator The function to perform the operation. +
87479 * @param {number} [defaultValue] The value used for `undefined` arguments. +
87480 * @returns {Function} Returns the new mathematical operation function. +
87481 */ +
87482 function createMathOperation(operator, defaultValue) { +
87483 return function(value, other) { +
87484 var result; +
87485 if (value === undefined && other === undefined) { +
87486 return defaultValue; +
87487 } +
87488 if (value !== undefined) { +
87489 result = value; +
87490 } +
87491 if (other !== undefined) { +
87492 if (result === undefined) { +
87493 return other; +
87494 } +
87495 if (typeof value == 'string' || typeof other == 'string') { +
87496 value = baseToString(value); +
87497 other = baseToString(other); +
87498 } else { +
87499 value = baseToNumber(value); +
87500 other = baseToNumber(other); +
87501 } +
87502 result = operator(value, other); +
87503 } +
87504 return result; +
87505 }; +
87506 } +
87507 +
87508 /** +
87509 * Creates a function like `_.over`. +
87510 * +
87511 * @private +
87512 * @param {Function} arrayFunc The function to iterate over iteratees. +
87513 * @returns {Function} Returns the new over function. +
87514 */ +
87515 function createOver(arrayFunc) { +
87516 return flatRest(function(iteratees) { +
87517 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); +
87518 return baseRest(function(args) { +
87519 var thisArg = this; +
87520 return arrayFunc(iteratees, function(iteratee) { +
87521 return apply(iteratee, thisArg, args); +
87522 }); +
87523 }); +
87524 }); +
87525 } +
87526 +
87527 /** +
87528 * Creates the padding for `string` based on `length`. The `chars` string +
87529 * is truncated if the number of characters exceeds `length`. +
87530 * +
87531 * @private +
87532 * @param {number} length The padding length. +
87533 * @param {string} [chars=' '] The string used as padding. +
87534 * @returns {string} Returns the padding for `string`. +
87535 */ +
87536 function createPadding(length, chars) { +
87537 chars = chars === undefined ? ' ' : baseToString(chars); +
87538 +
87539 var charsLength = chars.length; +
87540 if (charsLength < 2) { +
87541 return charsLength ? baseRepeat(chars, length) : chars; +
87542 } +
87543 var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); +
87544 return hasUnicode(chars) +
87545 ? castSlice(stringToArray(result), 0, length).join('') +
87546 : result.slice(0, length); +
87547 } +
87548 +
87549 /** +
87550 * Creates a function that wraps `func` to invoke it with the `this` binding +
87551 * of `thisArg` and `partials` prepended to the arguments it receives. +
87552 * +
87553 * @private +
87554 * @param {Function} func The function to wrap. +
87555 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
87556 * @param {*} thisArg The `this` binding of `func`. +
87557 * @param {Array} partials The arguments to prepend to those provided to +
87558 * the new function. +
87559 * @returns {Function} Returns the new wrapped function. +
87560 */ +
87561 function createPartial(func, bitmask, thisArg, partials) { +
87562 var isBind = bitmask & WRAP_BIND_FLAG, +
87563 Ctor = createCtor(func); +
87564 +
87565 function wrapper() { +
87566 var argsIndex = -1, +
87567 argsLength = arguments.length, +
87568 leftIndex = -1, +
87569 leftLength = partials.length, +
87570 args = Array(leftLength + argsLength), +
87571 fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; +
87572 +
87573 while (++leftIndex < leftLength) { +
87574 args[leftIndex] = partials[leftIndex]; +
87575 } +
87576 while (argsLength--) { +
87577 args[leftIndex++] = arguments[++argsIndex]; +
87578 } +
87579 return apply(fn, isBind ? thisArg : this, args); +
87580 } +
87581 return wrapper; +
87582 } +
87583 +
87584 /** +
87585 * Creates a `_.range` or `_.rangeRight` function. +
87586 * +
87587 * @private +
87588 * @param {boolean} [fromRight] Specify iterating from right to left. +
87589 * @returns {Function} Returns the new range function. +
87590 */ +
87591 function createRange(fromRight) { +
87592 return function(start, end, step) { +
87593 if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { +
87594 end = step = undefined; +
87595 } +
87596 // Ensure the sign of `-0` is preserved. +
87597 start = toFinite(start); +
87598 if (end === undefined) { +
87599 end = start; +
87600 start = 0; +
87601 } else { +
87602 end = toFinite(end); +
87603 } +
87604 step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); +
87605 return baseRange(start, end, step, fromRight); +
87606 }; +
87607 } +
87608 +
87609 /** +
87610 * Creates a function that performs a relational operation on two values. +
87611 * +
87612 * @private +
87613 * @param {Function} operator The function to perform the operation. +
87614 * @returns {Function} Returns the new relational operation function. +
87615 */ +
87616 function createRelationalOperation(operator) { +
87617 return function(value, other) { +
87618 if (!(typeof value == 'string' && typeof other == 'string')) { +
87619 value = toNumber(value); +
87620 other = toNumber(other); +
87621 } +
87622 return operator(value, other); +
87623 }; +
87624 } +
87625 +
87626 /** +
87627 * Creates a function that wraps `func` to continue currying. +
87628 * +
87629 * @private +
87630 * @param {Function} func The function to wrap. +
87631 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
87632 * @param {Function} wrapFunc The function to create the `func` wrapper. +
87633 * @param {*} placeholder The placeholder value. +
87634 * @param {*} [thisArg] The `this` binding of `func`. +
87635 * @param {Array} [partials] The arguments to prepend to those provided to +
87636 * the new function. +
87637 * @param {Array} [holders] The `partials` placeholder indexes. +
87638 * @param {Array} [argPos] The argument positions of the new function. +
87639 * @param {number} [ary] The arity cap of `func`. +
87640 * @param {number} [arity] The arity of `func`. +
87641 * @returns {Function} Returns the new wrapped function. +
87642 */ +
87643 function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { +
87644 var isCurry = bitmask & WRAP_CURRY_FLAG, +
87645 newHolders = isCurry ? holders : undefined, +
87646 newHoldersRight = isCurry ? undefined : holders, +
87647 newPartials = isCurry ? partials : undefined, +
87648 newPartialsRight = isCurry ? undefined : partials; +
87649 +
87650 bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); +
87651 bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); +
87652 +
87653 if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { +
87654 bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); +
87655 } +
87656 var newData = [ +
87657 func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, +
87658 newHoldersRight, argPos, ary, arity +
87659 ]; +
87660 +
87661 var result = wrapFunc.apply(undefined, newData); +
87662 if (isLaziable(func)) { +
87663 setData(result, newData); +
87664 } +
87665 result.placeholder = placeholder; +
87666 return setWrapToString(result, func, bitmask); +
87667 } +
87668 +
87669 /** +
87670 * Creates a function like `_.round`. +
87671 * +
87672 * @private +
87673 * @param {string} methodName The name of the `Math` method to use when rounding. +
87674 * @returns {Function} Returns the new round function. +
87675 */ +
87676 function createRound(methodName) { +
87677 var func = Math[methodName]; +
87678 return function(number, precision) { +
87679 number = toNumber(number); +
87680 precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); +
87681 if (precision) { +
87682 // Shift with exponential notation to avoid floating-point issues. +
87683 // See [MDN](https://mdn.io/round#Examples) for more details. +
87684 var pair = (toString(number) + 'e').split('e'), +
87685 value = func(pair[0] + 'e' + (+pair[1] + precision)); +
87686 +
87687 pair = (toString(value) + 'e').split('e'); +
87688 return +(pair[0] + 'e' + (+pair[1] - precision)); +
87689 } +
87690 return func(number); +
87691 }; +
87692 } +
87693 +
87694 /** +
87695 * Creates a set object of `values`. +
87696 * +
87697 * @private +
87698 * @param {Array} values The values to add to the set. +
87699 * @returns {Object} Returns the new set. +
87700 */ +
87701 var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { +
87702 return new Set(values); +
87703 }; +
87704 +
87705 /** +
87706 * Creates a `_.toPairs` or `_.toPairsIn` function. +
87707 * +
87708 * @private +
87709 * @param {Function} keysFunc The function to get the keys of a given object. +
87710 * @returns {Function} Returns the new pairs function. +
87711 */ +
87712 function createToPairs(keysFunc) { +
87713 return function(object) { +
87714 var tag = getTag(object); +
87715 if (tag == mapTag) { +
87716 return mapToArray(object); +
87717 } +
87718 if (tag == setTag) { +
87719 return setToPairs(object); +
87720 } +
87721 return baseToPairs(object, keysFunc(object)); +
87722 }; +
87723 } +
87724 +
87725 /** +
87726 * Creates a function that either curries or invokes `func` with optional +
87727 * `this` binding and partially applied arguments. +
87728 * +
87729 * @private +
87730 * @param {Function|string} func The function or method name to wrap. +
87731 * @param {number} bitmask The bitmask flags. +
87732 * 1 - `_.bind` +
87733 * 2 - `_.bindKey` +
87734 * 4 - `_.curry` or `_.curryRight` of a bound function +
87735 * 8 - `_.curry` +
87736 * 16 - `_.curryRight` +
87737 * 32 - `_.partial` +
87738 * 64 - `_.partialRight` +
87739 * 128 - `_.rearg` +
87740 * 256 - `_.ary` +
87741 * 512 - `_.flip` +
87742 * @param {*} [thisArg] The `this` binding of `func`. +
87743 * @param {Array} [partials] The arguments to be partially applied. +
87744 * @param {Array} [holders] The `partials` placeholder indexes. +
87745 * @param {Array} [argPos] The argument positions of the new function. +
87746 * @param {number} [ary] The arity cap of `func`. +
87747 * @param {number} [arity] The arity of `func`. +
87748 * @returns {Function} Returns the new wrapped function. +
87749 */ +
87750 function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { +
87751 var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; +
87752 if (!isBindKey && typeof func != 'function') { +
87753 throw new TypeError(FUNC_ERROR_TEXT); +
87754 } +
87755 var length = partials ? partials.length : 0; +
87756 if (!length) { +
87757 bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); +
87758 partials = holders = undefined; +
87759 } +
87760 ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); +
87761 arity = arity === undefined ? arity : toInteger(arity); +
87762 length -= holders ? holders.length : 0; +
87763 +
87764 if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { +
87765 var partialsRight = partials, +
87766 holdersRight = holders; +
87767 +
87768 partials = holders = undefined; +
87769 } +
87770 var data = isBindKey ? undefined : getData(func); +
87771 +
87772 var newData = [ +
87773 func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, +
87774 argPos, ary, arity +
87775 ]; +
87776 +
87777 if (data) { +
87778 mergeData(newData, data); +
87779 } +
87780 func = newData[0]; +
87781 bitmask = newData[1]; +
87782 thisArg = newData[2]; +
87783 partials = newData[3]; +
87784 holders = newData[4]; +
87785 arity = newData[9] = newData[9] === undefined +
87786 ? (isBindKey ? 0 : func.length) +
87787 : nativeMax(newData[9] - length, 0); +
87788 +
87789 if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { +
87790 bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); +
87791 } +
87792 if (!bitmask || bitmask == WRAP_BIND_FLAG) { +
87793 var result = createBind(func, bitmask, thisArg); +
87794 } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { +
87795 result = createCurry(func, bitmask, arity); +
87796 } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { +
87797 result = createPartial(func, bitmask, thisArg, partials); +
87798 } else { +
87799 result = createHybrid.apply(undefined, newData); +
87800 } +
87801 var setter = data ? baseSetData : setData; +
87802 return setWrapToString(setter(result, newData), func, bitmask); +
87803 } +
87804 +
87805 /** +
87806 * Used by `_.defaults` to customize its `_.assignIn` use to assign properties +
87807 * of source objects to the destination object for all destination properties +
87808 * that resolve to `undefined`. +
87809 * +
87810 * @private +
87811 * @param {*} objValue The destination value. +
87812 * @param {*} srcValue The source value. +
87813 * @param {string} key The key of the property to assign. +
87814 * @param {Object} object The parent object of `objValue`. +
87815 * @returns {*} Returns the value to assign. +
87816 */ +
87817 function customDefaultsAssignIn(objValue, srcValue, key, object) { +
87818 if (objValue === undefined || +
87819 (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { +
87820 return srcValue; +
87821 } +
87822 return objValue; +
87823 } +
87824 +
87825 /** +
87826 * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source +
87827 * objects into destination objects that are passed thru. +
87828 * +
87829 * @private +
87830 * @param {*} objValue The destination value. +
87831 * @param {*} srcValue The source value. +
87832 * @param {string} key The key of the property to merge. +
87833 * @param {Object} object The parent object of `objValue`. +
87834 * @param {Object} source The parent object of `srcValue`. +
87835 * @param {Object} [stack] Tracks traversed source values and their merged +
87836 * counterparts. +
87837 * @returns {*} Returns the value to assign. +
87838 */ +
87839 function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { +
87840 if (isObject(objValue) && isObject(srcValue)) { +
87841 // Recursively merge objects and arrays (susceptible to call stack limits). +
87842 stack.set(srcValue, objValue); +
87843 baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); +
87844 stack['delete'](srcValue); +
87845 } +
87846 return objValue; +
87847 } +
87848 +
87849 /** +
87850 * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain +
87851 * objects. +
87852 * +
87853 * @private +
87854 * @param {*} value The value to inspect. +
87855 * @param {string} key The key of the property to inspect. +
87856 * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. +
87857 */ +
87858 function customOmitClone(value) { +
87859 return isPlainObject(value) ? undefined : value; +
87860 } +
87861 +
87862 /** +
87863 * A specialized version of `baseIsEqualDeep` for arrays with support for +
87864 * partial deep comparisons. +
87865 * +
87866 * @private +
87867 * @param {Array} array The array to compare. +
87868 * @param {Array} other The other array to compare. +
87869 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
87870 * @param {Function} customizer The function to customize comparisons. +
87871 * @param {Function} equalFunc The function to determine equivalents of values. +
87872 * @param {Object} stack Tracks traversed `array` and `other` objects. +
87873 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. +
87874 */ +
87875 function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { +
87876 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +
87877 arrLength = array.length, +
87878 othLength = other.length; +
87879 +
87880 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { +
87881 return false; +
87882 } +
87883 // Assume cyclic values are equal. +
87884 var stacked = stack.get(array); +
87885 if (stacked && stack.get(other)) { +
87886 return stacked == other; +
87887 } +
87888 var index = -1, +
87889 result = true, +
87890 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; +
87891 +
87892 stack.set(array, other); +
87893 stack.set(other, array); +
87894 +
87895 // Ignore non-index properties. +
87896 while (++index < arrLength) { +
87897 var arrValue = array[index], +
87898 othValue = other[index]; +
87899 +
87900 if (customizer) { +
87901 var compared = isPartial +
87902 ? customizer(othValue, arrValue, index, other, array, stack) +
87903 : customizer(arrValue, othValue, index, array, other, stack); +
87904 } +
87905 if (compared !== undefined) { +
87906 if (compared) { +
87907 continue; +
87908 } +
87909 result = false; +
87910 break; +
87911 } +
87912 // Recursively compare arrays (susceptible to call stack limits). +
87913 if (seen) { +
87914 if (!arraySome(other, function(othValue, othIndex) { +
87915 if (!cacheHas(seen, othIndex) && +
87916 (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { +
87917 return seen.push(othIndex); +
87918 } +
87919 })) { +
87920 result = false; +
87921 break; +
87922 } +
87923 } else if (!( +
87924 arrValue === othValue || +
87925 equalFunc(arrValue, othValue, bitmask, customizer, stack) +
87926 )) { +
87927 result = false; +
87928 break; +
87929 } +
87930 } +
87931 stack['delete'](array); +
87932 stack['delete'](other); +
87933 return result; +
87934 } +
87935 +
87936 /** +
87937 * A specialized version of `baseIsEqualDeep` for comparing objects of +
87938 * the same `toStringTag`. +
87939 * +
87940 * **Note:** This function only supports comparing values with tags of +
87941 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. +
87942 * +
87943 * @private +
87944 * @param {Object} object The object to compare. +
87945 * @param {Object} other The other object to compare. +
87946 * @param {string} tag The `toStringTag` of the objects to compare. +
87947 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
87948 * @param {Function} customizer The function to customize comparisons. +
87949 * @param {Function} equalFunc The function to determine equivalents of values. +
87950 * @param {Object} stack Tracks traversed `object` and `other` objects. +
87951 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
87952 */ +
87953 function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { +
87954 switch (tag) { +
87955 case dataViewTag: +
87956 if ((object.byteLength != other.byteLength) || +
87957 (object.byteOffset != other.byteOffset)) { +
87958 return false; +
87959 } +
87960 object = object.buffer; +
87961 other = other.buffer; +
87962 +
87963 case arrayBufferTag: +
87964 if ((object.byteLength != other.byteLength) || +
87965 !equalFunc(new Uint8Array(object), new Uint8Array(other))) { +
87966 return false; +
87967 } +
87968 return true; +
87969 +
87970 case boolTag: +
87971 case dateTag: +
87972 case numberTag: +
87973 // Coerce booleans to `1` or `0` and dates to milliseconds. +
87974 // Invalid dates are coerced to `NaN`. +
87975 return eq(+object, +other); +
87976 +
87977 case errorTag: +
87978 return object.name == other.name && object.message == other.message; +
87979 +
87980 case regexpTag: +
87981 case stringTag: +
87982 // Coerce regexes to strings and treat strings, primitives and objects, +
87983 // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring +
87984 // for more details. +
87985 return object == (other + ''); +
87986 +
87987 case mapTag: +
87988 var convert = mapToArray; +
87989 +
87990 case setTag: +
87991 var isPartial = bitmask & COMPARE_PARTIAL_FLAG; +
87992 convert || (convert = setToArray); +
87993 +
87994 if (object.size != other.size && !isPartial) { +
87995 return false; +
87996 } +
87997 // Assume cyclic values are equal. +
87998 var stacked = stack.get(object); +
87999 if (stacked) { +
88000 return stacked == other; +
88001 } +
88002 bitmask |= COMPARE_UNORDERED_FLAG; +
88003 +
88004 // Recursively compare objects (susceptible to call stack limits). +
88005 stack.set(object, other); +
88006 var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); +
88007 stack['delete'](object); +
88008 return result; +
88009 +
88010 case symbolTag: +
88011 if (symbolValueOf) { +
88012 return symbolValueOf.call(object) == symbolValueOf.call(other); +
88013 } +
88014 } +
88015 return false; +
88016 } +
88017 +
88018 /** +
88019 * A specialized version of `baseIsEqualDeep` for objects with support for +
88020 * partial deep comparisons. +
88021 * +
88022 * @private +
88023 * @param {Object} object The object to compare. +
88024 * @param {Object} other The other object to compare. +
88025 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. +
88026 * @param {Function} customizer The function to customize comparisons. +
88027 * @param {Function} equalFunc The function to determine equivalents of values. +
88028 * @param {Object} stack Tracks traversed `object` and `other` objects. +
88029 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. +
88030 */ +
88031 function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { +
88032 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, +
88033 objProps = getAllKeys(object), +
88034 objLength = objProps.length, +
88035 othProps = getAllKeys(other), +
88036 othLength = othProps.length; +
88037 +
88038 if (objLength != othLength && !isPartial) { +
88039 return false; +
88040 } +
88041 var index = objLength; +
88042 while (index--) { +
88043 var key = objProps[index]; +
88044 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { +
88045 return false; +
88046 } +
88047 } +
88048 // Assume cyclic values are equal. +
88049 var stacked = stack.get(object); +
88050 if (stacked && stack.get(other)) { +
88051 return stacked == other; +
88052 } +
88053 var result = true; +
88054 stack.set(object, other); +
88055 stack.set(other, object); +
88056 +
88057 var skipCtor = isPartial; +
88058 while (++index < objLength) { +
88059 key = objProps[index]; +
88060 var objValue = object[key], +
88061 othValue = other[key]; +
88062 +
88063 if (customizer) { +
88064 var compared = isPartial +
88065 ? customizer(othValue, objValue, key, other, object, stack) +
88066 : customizer(objValue, othValue, key, object, other, stack); +
88067 } +
88068 // Recursively compare objects (susceptible to call stack limits). +
88069 if (!(compared === undefined +
88070 ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) +
88071 : compared +
88072 )) { +
88073 result = false; +
88074 break; +
88075 } +
88076 skipCtor || (skipCtor = key == 'constructor'); +
88077 } +
88078 if (result && !skipCtor) { +
88079 var objCtor = object.constructor, +
88080 othCtor = other.constructor; +
88081 +
88082 // Non `Object` object instances with different constructors are not equal. +
88083 if (objCtor != othCtor && +
88084 ('constructor' in object && 'constructor' in other) && +
88085 !(typeof objCtor == 'function' && objCtor instanceof objCtor && +
88086 typeof othCtor == 'function' && othCtor instanceof othCtor)) { +
88087 result = false; +
88088 } +
88089 } +
88090 stack['delete'](object); +
88091 stack['delete'](other); +
88092 return result; +
88093 } +
88094 +
88095 /** +
88096 * A specialized version of `baseRest` which flattens the rest array. +
88097 * +
88098 * @private +
88099 * @param {Function} func The function to apply a rest parameter to. +
88100 * @returns {Function} Returns the new function. +
88101 */ +
88102 function flatRest(func) { +
88103 return setToString(overRest(func, undefined, flatten), func + ''); +
88104 } +
88105 +
88106 /** +
88107 * Creates an array of own enumerable property names and symbols of `object`. +
88108 * +
88109 * @private +
88110 * @param {Object} object The object to query. +
88111 * @returns {Array} Returns the array of property names and symbols. +
88112 */ +
88113 function getAllKeys(object) { +
88114 return baseGetAllKeys(object, keys, getSymbols); +
88115 } +
88116 +
88117 /** +
88118 * Creates an array of own and inherited enumerable property names and +
88119 * symbols of `object`. +
88120 * +
88121 * @private +
88122 * @param {Object} object The object to query. +
88123 * @returns {Array} Returns the array of property names and symbols. +
88124 */ +
88125 function getAllKeysIn(object) { +
88126 return baseGetAllKeys(object, keysIn, getSymbolsIn); +
88127 } +
88128 +
88129 /** +
88130 * Gets metadata for `func`. +
88131 * +
88132 * @private +
88133 * @param {Function} func The function to query. +
88134 * @returns {*} Returns the metadata for `func`. +
88135 */ +
88136 var getData = !metaMap ? noop : function(func) { +
88137 return metaMap.get(func); +
88138 }; +
88139 +
88140 /** +
88141 * Gets the name of `func`. +
88142 * +
88143 * @private +
88144 * @param {Function} func The function to query. +
88145 * @returns {string} Returns the function name. +
88146 */ +
88147 function getFuncName(func) { +
88148 var result = (func.name + ''), +
88149 array = realNames[result], +
88150 length = hasOwnProperty.call(realNames, result) ? array.length : 0; +
88151 +
88152 while (length--) { +
88153 var data = array[length], +
88154 otherFunc = data.func; +
88155 if (otherFunc == null || otherFunc == func) { +
88156 return data.name; +
88157 } +
88158 } +
88159 return result; +
88160 } +
88161 +
88162 /** +
88163 * Gets the argument placeholder value for `func`. +
88164 * +
88165 * @private +
88166 * @param {Function} func The function to inspect. +
88167 * @returns {*} Returns the placeholder value. +
88168 */ +
88169 function getHolder(func) { +
88170 var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; +
88171 return object.placeholder; +
88172 } +
88173 +
88174 /** +
88175 * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, +
88176 * this function returns the custom method, otherwise it returns `baseIteratee`. +
88177 * If arguments are provided, the chosen function is invoked with them and +
88178 * its result is returned. +
88179 * +
88180 * @private +
88181 * @param {*} [value] The value to convert to an iteratee. +
88182 * @param {number} [arity] The arity of the created iteratee. +
88183 * @returns {Function} Returns the chosen function or its result. +
88184 */ +
88185 function getIteratee() { +
88186 var result = lodash.iteratee || iteratee; +
88187 result = result === iteratee ? baseIteratee : result; +
88188 return arguments.length ? result(arguments[0], arguments[1]) : result; +
88189 } +
88190 +
88191 /** +
88192 * Gets the data for `map`. +
88193 * +
88194 * @private +
88195 * @param {Object} map The map to query. +
88196 * @param {string} key The reference key. +
88197 * @returns {*} Returns the map data. +
88198 */ +
88199 function getMapData(map, key) { +
88200 var data = map.__data__; +
88201 return isKeyable(key) +
88202 ? data[typeof key == 'string' ? 'string' : 'hash'] +
88203 : data.map; +
88204 } +
88205 +
88206 /** +
88207 * Gets the property names, values, and compare flags of `object`. +
88208 * +
88209 * @private +
88210 * @param {Object} object The object to query. +
88211 * @returns {Array} Returns the match data of `object`. +
88212 */ +
88213 function getMatchData(object) { +
88214 var result = keys(object), +
88215 length = result.length; +
88216 +
88217 while (length--) { +
88218 var key = result[length], +
88219 value = object[key]; +
88220 +
88221 result[length] = [key, value, isStrictComparable(value)]; +
88222 } +
88223 return result; +
88224 } +
88225 +
88226 /** +
88227 * Gets the native function at `key` of `object`. +
88228 * +
88229 * @private +
88230 * @param {Object} object The object to query. +
88231 * @param {string} key The key of the method to get. +
88232 * @returns {*} Returns the function if it's native, else `undefined`. +
88233 */ +
88234 function getNative(object, key) { +
88235 var value = getValue(object, key); +
88236 return baseIsNative(value) ? value : undefined; +
88237 } +
88238 +
88239 /** +
88240 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. +
88241 * +
88242 * @private +
88243 * @param {*} value The value to query. +
88244 * @returns {string} Returns the raw `toStringTag`. +
88245 */ +
88246 function getRawTag(value) { +
88247 var isOwn = hasOwnProperty.call(value, symToStringTag), +
88248 tag = value[symToStringTag]; +
88249 +
88250 try { +
88251 value[symToStringTag] = undefined; +
88252 var unmasked = true; +
88253 } catch (e) {} +
88254 +
88255 var result = nativeObjectToString.call(value); +
88256 if (unmasked) { +
88257 if (isOwn) { +
88258 value[symToStringTag] = tag; +
88259 } else { +
88260 delete value[symToStringTag]; +
88261 } +
88262 } +
88263 return result; +
88264 } +
88265 +
88266 /** +
88267 * Creates an array of the own enumerable symbols of `object`. +
88268 * +
88269 * @private +
88270 * @param {Object} object The object to query. +
88271 * @returns {Array} Returns the array of symbols. +
88272 */ +
88273 var getSymbols = !nativeGetSymbols ? stubArray : function(object) { +
88274 if (object == null) { +
88275 return []; +
88276 } +
88277 object = Object(object); +
88278 return arrayFilter(nativeGetSymbols(object), function(symbol) { +
88279 return propertyIsEnumerable.call(object, symbol); +
88280 }); +
88281 }; +
88282 +
88283 /** +
88284 * Creates an array of the own and inherited enumerable symbols of `object`. +
88285 * +
88286 * @private +
88287 * @param {Object} object The object to query. +
88288 * @returns {Array} Returns the array of symbols. +
88289 */ +
88290 var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { +
88291 var result = []; +
88292 while (object) { +
88293 arrayPush(result, getSymbols(object)); +
88294 object = getPrototype(object); +
88295 } +
88296 return result; +
88297 }; +
88298 +
88299 /** +
88300 * Gets the `toStringTag` of `value`. +
88301 * +
88302 * @private +
88303 * @param {*} value The value to query. +
88304 * @returns {string} Returns the `toStringTag`. +
88305 */ +
88306 var getTag = baseGetTag; +
88307 +
88308 // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +
88309 if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || +
88310 (Map && getTag(new Map) != mapTag) || +
88311 (Promise && getTag(Promise.resolve()) != promiseTag) || +
88312 (Set && getTag(new Set) != setTag) || +
88313 (WeakMap && getTag(new WeakMap) != weakMapTag)) { +
88314 getTag = function(value) { +
88315 var result = baseGetTag(value), +
88316 Ctor = result == objectTag ? value.constructor : undefined, +
88317 ctorString = Ctor ? toSource(Ctor) : ''; +
88318 +
88319 if (ctorString) { +
88320 switch (ctorString) { +
88321 case dataViewCtorString: return dataViewTag; +
88322 case mapCtorString: return mapTag; +
88323 case promiseCtorString: return promiseTag; +
88324 case setCtorString: return setTag; +
88325 case weakMapCtorString: return weakMapTag; +
88326 } +
88327 } +
88328 return result; +
88329 }; +
88330 } +
88331 +
88332 /** +
88333 * Gets the view, applying any `transforms` to the `start` and `end` positions. +
88334 * +
88335 * @private +
88336 * @param {number} start The start of the view. +
88337 * @param {number} end The end of the view. +
88338 * @param {Array} transforms The transformations to apply to the view. +
88339 * @returns {Object} Returns an object containing the `start` and `end` +
88340 * positions of the view. +
88341 */ +
88342 function getView(start, end, transforms) { +
88343 var index = -1, +
88344 length = transforms.length; +
88345 +
88346 while (++index < length) { +
88347 var data = transforms[index], +
88348 size = data.size; +
88349 +
88350 switch (data.type) { +
88351 case 'drop': start += size; break; +
88352 case 'dropRight': end -= size; break; +
88353 case 'take': end = nativeMin(end, start + size); break; +
88354 case 'takeRight': start = nativeMax(start, end - size); break; +
88355 } +
88356 } +
88357 return { 'start': start, 'end': end }; +
88358 } +
88359 +
88360 /** +
88361 * Extracts wrapper details from the `source` body comment. +
88362 * +
88363 * @private +
88364 * @param {string} source The source to inspect. +
88365 * @returns {Array} Returns the wrapper details. +
88366 */ +
88367 function getWrapDetails(source) { +
88368 var match = source.match(reWrapDetails); +
88369 return match ? match[1].split(reSplitDetails) : []; +
88370 } +
88371 +
88372 /** +
88373 * Checks if `path` exists on `object`. +
88374 * +
88375 * @private +
88376 * @param {Object} object The object to query. +
88377 * @param {Array|string} path The path to check. +
88378 * @param {Function} hasFunc The function to check properties. +
88379 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
88380 */ +
88381 function hasPath(object, path, hasFunc) { +
88382 path = castPath(path, object); +
88383 +
88384 var index = -1, +
88385 length = path.length, +
88386 result = false; +
88387 +
88388 while (++index < length) { +
88389 var key = toKey(path[index]); +
88390 if (!(result = object != null && hasFunc(object, key))) { +
88391 break; +
88392 } +
88393 object = object[key]; +
88394 } +
88395 if (result || ++index != length) { +
88396 return result; +
88397 } +
88398 length = object == null ? 0 : object.length; +
88399 return !!length && isLength(length) && isIndex(key, length) && +
88400 (isArray(object) || isArguments(object)); +
88401 } +
88402 +
88403 /** +
88404 * Initializes an array clone. +
88405 * +
88406 * @private +
88407 * @param {Array} array The array to clone. +
88408 * @returns {Array} Returns the initialized clone. +
88409 */ +
88410 function initCloneArray(array) { +
88411 var length = array.length, +
88412 result = new array.constructor(length); +
88413 +
88414 // Add properties assigned by `RegExp#exec`. +
88415 if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { +
88416 result.index = array.index; +
88417 result.input = array.input; +
88418 } +
88419 return result; +
88420 } +
88421 +
88422 /** +
88423 * Initializes an object clone. +
88424 * +
88425 * @private +
88426 * @param {Object} object The object to clone. +
88427 * @returns {Object} Returns the initialized clone. +
88428 */ +
88429 function initCloneObject(object) { +
88430 return (typeof object.constructor == 'function' && !isPrototype(object)) +
88431 ? baseCreate(getPrototype(object)) +
88432 : {}; +
88433 } +
88434 +
88435 /** +
88436 * Initializes an object clone based on its `toStringTag`. +
88437 * +
88438 * **Note:** This function only supports cloning values with tags of +
88439 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. +
88440 * +
88441 * @private +
88442 * @param {Object} object The object to clone. +
88443 * @param {string} tag The `toStringTag` of the object to clone. +
88444 * @param {boolean} [isDeep] Specify a deep clone. +
88445 * @returns {Object} Returns the initialized clone. +
88446 */ +
88447 function initCloneByTag(object, tag, isDeep) { +
88448 var Ctor = object.constructor; +
88449 switch (tag) { +
88450 case arrayBufferTag: +
88451 return cloneArrayBuffer(object); +
88452 +
88453 case boolTag: +
88454 case dateTag: +
88455 return new Ctor(+object); +
88456 +
88457 case dataViewTag: +
88458 return cloneDataView(object, isDeep); +
88459 +
88460 case float32Tag: case float64Tag: +
88461 case int8Tag: case int16Tag: case int32Tag: +
88462 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: +
88463 return cloneTypedArray(object, isDeep); +
88464 +
88465 case mapTag: +
88466 return new Ctor; +
88467 +
88468 case numberTag: +
88469 case stringTag: +
88470 return new Ctor(object); +
88471 +
88472 case regexpTag: +
88473 return cloneRegExp(object); +
88474 +
88475 case setTag: +
88476 return new Ctor; +
88477 +
88478 case symbolTag: +
88479 return cloneSymbol(object); +
88480 } +
88481 } +
88482 +
88483 /** +
88484 * Inserts wrapper `details` in a comment at the top of the `source` body. +
88485 * +
88486 * @private +
88487 * @param {string} source The source to modify. +
88488 * @returns {Array} details The details to insert. +
88489 * @returns {string} Returns the modified source. +
88490 */ +
88491 function insertWrapDetails(source, details) { +
88492 var length = details.length; +
88493 if (!length) { +
88494 return source; +
88495 } +
88496 var lastIndex = length - 1; +
88497 details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; +
88498 details = details.join(length > 2 ? ', ' : ' '); +
88499 return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); +
88500 } +
88501 +
88502 /** +
88503 * Checks if `value` is a flattenable `arguments` object or array. +
88504 * +
88505 * @private +
88506 * @param {*} value The value to check. +
88507 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. +
88508 */ +
88509 function isFlattenable(value) { +
88510 return isArray(value) || isArguments(value) || +
88511 !!(spreadableSymbol && value && value[spreadableSymbol]); +
88512 } +
88513 +
88514 /** +
88515 * Checks if `value` is a valid array-like index. +
88516 * +
88517 * @private +
88518 * @param {*} value The value to check. +
88519 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. +
88520 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. +
88521 */ +
88522 function isIndex(value, length) { +
88523 var type = typeof value; +
88524 length = length == null ? MAX_SAFE_INTEGER : length; +
88525 +
88526 return !!length && +
88527 (type == 'number' || +
88528 (type != 'symbol' && reIsUint.test(value))) && +
88529 (value > -1 && value % 1 == 0 && value < length); +
88530 } +
88531 +
88532 /** +
88533 * Checks if the given arguments are from an iteratee call. +
88534 * +
88535 * @private +
88536 * @param {*} value The potential iteratee value argument. +
88537 * @param {*} index The potential iteratee index or key argument. +
88538 * @param {*} object The potential iteratee object argument. +
88539 * @returns {boolean} Returns `true` if the arguments are from an iteratee call, +
88540 * else `false`. +
88541 */ +
88542 function isIterateeCall(value, index, object) { +
88543 if (!isObject(object)) { +
88544 return false; +
88545 } +
88546 var type = typeof index; +
88547 if (type == 'number' +
88548 ? (isArrayLike(object) && isIndex(index, object.length)) +
88549 : (type == 'string' && index in object) +
88550 ) { +
88551 return eq(object[index], value); +
88552 } +
88553 return false; +
88554 } +
88555 +
88556 /** +
88557 * Checks if `value` is a property name and not a property path. +
88558 * +
88559 * @private +
88560 * @param {*} value The value to check. +
88561 * @param {Object} [object] The object to query keys on. +
88562 * @returns {boolean} Returns `true` if `value` is a property name, else `false`. +
88563 */ +
88564 function isKey(value, object) { +
88565 if (isArray(value)) { +
88566 return false; +
88567 } +
88568 var type = typeof value; +
88569 if (type == 'number' || type == 'symbol' || type == 'boolean' || +
88570 value == null || isSymbol(value)) { +
88571 return true; +
88572 } +
88573 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || +
88574 (object != null && value in Object(object)); +
88575 } +
88576 +
88577 /** +
88578 * Checks if `value` is suitable for use as unique object key. +
88579 * +
88580 * @private +
88581 * @param {*} value The value to check. +
88582 * @returns {boolean} Returns `true` if `value` is suitable, else `false`. +
88583 */ +
88584 function isKeyable(value) { +
88585 var type = typeof value; +
88586 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') +
88587 ? (value !== '__proto__') +
88588 : (value === null); +
88589 } +
88590 +
88591 /** +
88592 * Checks if `func` has a lazy counterpart. +
88593 * +
88594 * @private +
88595 * @param {Function} func The function to check. +
88596 * @returns {boolean} Returns `true` if `func` has a lazy counterpart, +
88597 * else `false`. +
88598 */ +
88599 function isLaziable(func) { +
88600 var funcName = getFuncName(func), +
88601 other = lodash[funcName]; +
88602 +
88603 if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { +
88604 return false; +
88605 } +
88606 if (func === other) { +
88607 return true; +
88608 } +
88609 var data = getData(other); +
88610 return !!data && func === data[0]; +
88611 } +
88612 +
88613 /** +
88614 * Checks if `func` has its source masked. +
88615 * +
88616 * @private +
88617 * @param {Function} func The function to check. +
88618 * @returns {boolean} Returns `true` if `func` is masked, else `false`. +
88619 */ +
88620 function isMasked(func) { +
88621 return !!maskSrcKey && (maskSrcKey in func); +
88622 } +
88623 +
88624 /** +
88625 * Checks if `func` is capable of being masked. +
88626 * +
88627 * @private +
88628 * @param {*} value The value to check. +
88629 * @returns {boolean} Returns `true` if `func` is maskable, else `false`. +
88630 */ +
88631 var isMaskable = coreJsData ? isFunction : stubFalse; +
88632 +
88633 /** +
88634 * Checks if `value` is likely a prototype object. +
88635 * +
88636 * @private +
88637 * @param {*} value The value to check. +
88638 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. +
88639 */ +
88640 function isPrototype(value) { +
88641 var Ctor = value && value.constructor, +
88642 proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; +
88643 +
88644 return value === proto; +
88645 } +
88646 +
88647 /** +
88648 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. +
88649 * +
88650 * @private +
88651 * @param {*} value The value to check. +
88652 * @returns {boolean} Returns `true` if `value` if suitable for strict +
88653 * equality comparisons, else `false`. +
88654 */ +
88655 function isStrictComparable(value) { +
88656 return value === value && !isObject(value); +
88657 } +
88658 +
88659 /** +
88660 * A specialized version of `matchesProperty` for source values suitable +
88661 * for strict equality comparisons, i.e. `===`. +
88662 * +
88663 * @private +
88664 * @param {string} key The key of the property to get. +
88665 * @param {*} srcValue The value to match. +
88666 * @returns {Function} Returns the new spec function. +
88667 */ +
88668 function matchesStrictComparable(key, srcValue) { +
88669 return function(object) { +
88670 if (object == null) { +
88671 return false; +
88672 } +
88673 return object[key] === srcValue && +
88674 (srcValue !== undefined || (key in Object(object))); +
88675 }; +
88676 } +
88677 +
88678 /** +
88679 * A specialized version of `_.memoize` which clears the memoized function's +
88680 * cache when it exceeds `MAX_MEMOIZE_SIZE`. +
88681 * +
88682 * @private +
88683 * @param {Function} func The function to have its output memoized. +
88684 * @returns {Function} Returns the new memoized function. +
88685 */ +
88686 function memoizeCapped(func) { +
88687 var result = memoize(func, function(key) { +
88688 if (cache.size === MAX_MEMOIZE_SIZE) { +
88689 cache.clear(); +
88690 } +
88691 return key; +
88692 }); +
88693 +
88694 var cache = result.cache; +
88695 return result; +
88696 } +
88697 +
88698 /** +
88699 * Merges the function metadata of `source` into `data`. +
88700 * +
88701 * Merging metadata reduces the number of wrappers used to invoke a function. +
88702 * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` +
88703 * may be applied regardless of execution order. Methods like `_.ary` and +
88704 * `_.rearg` modify function arguments, making the order in which they are +
88705 * executed important, preventing the merging of metadata. However, we make +
88706 * an exception for a safe combined case where curried functions have `_.ary` +
88707 * and or `_.rearg` applied. +
88708 * +
88709 * @private +
88710 * @param {Array} data The destination metadata. +
88711 * @param {Array} source The source metadata. +
88712 * @returns {Array} Returns `data`. +
88713 */ +
88714 function mergeData(data, source) { +
88715 var bitmask = data[1], +
88716 srcBitmask = source[1], +
88717 newBitmask = bitmask | srcBitmask, +
88718 isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); +
88719 +
88720 var isCombo = +
88721 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || +
88722 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || +
88723 ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); +
88724 +
88725 // Exit early if metadata can't be merged. +
88726 if (!(isCommon || isCombo)) { +
88727 return data; +
88728 } +
88729 // Use source `thisArg` if available. +
88730 if (srcBitmask & WRAP_BIND_FLAG) { +
88731 data[2] = source[2]; +
88732 // Set when currying a bound function. +
88733 newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; +
88734 } +
88735 // Compose partial arguments. +
88736 var value = source[3]; +
88737 if (value) { +
88738 var partials = data[3]; +
88739 data[3] = partials ? composeArgs(partials, value, source[4]) : value; +
88740 data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; +
88741 } +
88742 // Compose partial right arguments. +
88743 value = source[5]; +
88744 if (value) { +
88745 partials = data[5]; +
88746 data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; +
88747 data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; +
88748 } +
88749 // Use source `argPos` if available. +
88750 value = source[7]; +
88751 if (value) { +
88752 data[7] = value; +
88753 } +
88754 // Use source `ary` if it's smaller. +
88755 if (srcBitmask & WRAP_ARY_FLAG) { +
88756 data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); +
88757 } +
88758 // Use source `arity` if one is not provided. +
88759 if (data[9] == null) { +
88760 data[9] = source[9]; +
88761 } +
88762 // Use source `func` and merge bitmasks. +
88763 data[0] = source[0]; +
88764 data[1] = newBitmask; +
88765 +
88766 return data; +
88767 } +
88768 +
88769 /** +
88770 * This function is like +
88771 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +
88772 * except that it includes inherited enumerable properties. +
88773 * +
88774 * @private +
88775 * @param {Object} object The object to query. +
88776 * @returns {Array} Returns the array of property names. +
88777 */ +
88778 function nativeKeysIn(object) { +
88779 var result = []; +
88780 if (object != null) { +
88781 for (var key in Object(object)) { +
88782 result.push(key); +
88783 } +
88784 } +
88785 return result; +
88786 } +
88787 +
88788 /** +
88789 * Converts `value` to a string using `Object.prototype.toString`. +
88790 * +
88791 * @private +
88792 * @param {*} value The value to convert. +
88793 * @returns {string} Returns the converted string. +
88794 */ +
88795 function objectToString(value) { +
88796 return nativeObjectToString.call(value); +
88797 } +
88798 +
88799 /** +
88800 * A specialized version of `baseRest` which transforms the rest array. +
88801 * +
88802 * @private +
88803 * @param {Function} func The function to apply a rest parameter to. +
88804 * @param {number} [start=func.length-1] The start position of the rest parameter. +
88805 * @param {Function} transform The rest array transform. +
88806 * @returns {Function} Returns the new function. +
88807 */ +
88808 function overRest(func, start, transform) { +
88809 start = nativeMax(start === undefined ? (func.length - 1) : start, 0); +
88810 return function() { +
88811 var args = arguments, +
88812 index = -1, +
88813 length = nativeMax(args.length - start, 0), +
88814 array = Array(length); +
88815 +
88816 while (++index < length) { +
88817 array[index] = args[start + index]; +
88818 } +
88819 index = -1; +
88820 var otherArgs = Array(start + 1); +
88821 while (++index < start) { +
88822 otherArgs[index] = args[index]; +
88823 } +
88824 otherArgs[start] = transform(array); +
88825 return apply(func, this, otherArgs); +
88826 }; +
88827 } +
88828 +
88829 /** +
88830 * Gets the parent value at `path` of `object`. +
88831 * +
88832 * @private +
88833 * @param {Object} object The object to query. +
88834 * @param {Array} path The path to get the parent value of. +
88835 * @returns {*} Returns the parent value. +
88836 */ +
88837 function parent(object, path) { +
88838 return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); +
88839 } +
88840 +
88841 /** +
88842 * Reorder `array` according to the specified indexes where the element at +
88843 * the first index is assigned as the first element, the element at +
88844 * the second index is assigned as the second element, and so on. +
88845 * +
88846 * @private +
88847 * @param {Array} array The array to reorder. +
88848 * @param {Array} indexes The arranged array indexes. +
88849 * @returns {Array} Returns `array`. +
88850 */ +
88851 function reorder(array, indexes) { +
88852 var arrLength = array.length, +
88853 length = nativeMin(indexes.length, arrLength), +
88854 oldArray = copyArray(array); +
88855 +
88856 while (length--) { +
88857 var index = indexes[length]; +
88858 array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; +
88859 } +
88860 return array; +
88861 } +
88862 +
88863 /** +
88864 * Gets the value at `key`, unless `key` is "__proto__". +
88865 * +
88866 * @private +
88867 * @param {Object} object The object to query. +
88868 * @param {string} key The key of the property to get. +
88869 * @returns {*} Returns the property value. +
88870 */ +
88871 function safeGet(object, key) { +
88872 if (key == '__proto__') { +
88873 return; +
88874 } +
88875 +
88876 return object[key]; +
88877 } +
88878 +
88879 /** +
88880 * Sets metadata for `func`. +
88881 * +
88882 * **Note:** If this function becomes hot, i.e. is invoked a lot in a short +
88883 * period of time, it will trip its breaker and transition to an identity +
88884 * function to avoid garbage collection pauses in V8. See +
88885 * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) +
88886 * for more details. +
88887 * +
88888 * @private +
88889 * @param {Function} func The function to associate metadata with. +
88890 * @param {*} data The metadata. +
88891 * @returns {Function} Returns `func`. +
88892 */ +
88893 var setData = shortOut(baseSetData); +
88894 +
88895 /** +
88896 * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). +
88897 * +
88898 * @private +
88899 * @param {Function} func The function to delay. +
88900 * @param {number} wait The number of milliseconds to delay invocation. +
88901 * @returns {number|Object} Returns the timer id or timeout object. +
88902 */ +
88903 var setTimeout = ctxSetTimeout || function(func, wait) { +
88904 return root.setTimeout(func, wait); +
88905 }; +
88906 +
88907 /** +
88908 * Sets the `toString` method of `func` to return `string`. +
88909 * +
88910 * @private +
88911 * @param {Function} func The function to modify. +
88912 * @param {Function} string The `toString` result. +
88913 * @returns {Function} Returns `func`. +
88914 */ +
88915 var setToString = shortOut(baseSetToString); +
88916 +
88917 /** +
88918 * Sets the `toString` method of `wrapper` to mimic the source of `reference` +
88919 * with wrapper details in a comment at the top of the source body. +
88920 * +
88921 * @private +
88922 * @param {Function} wrapper The function to modify. +
88923 * @param {Function} reference The reference function. +
88924 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
88925 * @returns {Function} Returns `wrapper`. +
88926 */ +
88927 function setWrapToString(wrapper, reference, bitmask) { +
88928 var source = (reference + ''); +
88929 return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); +
88930 } +
88931 +
88932 /** +
88933 * Creates a function that'll short out and invoke `identity` instead +
88934 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` +
88935 * milliseconds. +
88936 * +
88937 * @private +
88938 * @param {Function} func The function to restrict. +
88939 * @returns {Function} Returns the new shortable function. +
88940 */ +
88941 function shortOut(func) { +
88942 var count = 0, +
88943 lastCalled = 0; +
88944 +
88945 return function() { +
88946 var stamp = nativeNow(), +
88947 remaining = HOT_SPAN - (stamp - lastCalled); +
88948 +
88949 lastCalled = stamp; +
88950 if (remaining > 0) { +
88951 if (++count >= HOT_COUNT) { +
88952 return arguments[0]; +
88953 } +
88954 } else { +
88955 count = 0; +
88956 } +
88957 return func.apply(undefined, arguments); +
88958 }; +
88959 } +
88960 +
88961 /** +
88962 * A specialized version of `_.shuffle` which mutates and sets the size of `array`. +
88963 * +
88964 * @private +
88965 * @param {Array} array The array to shuffle. +
88966 * @param {number} [size=array.length] The size of `array`. +
88967 * @returns {Array} Returns `array`. +
88968 */ +
88969 function shuffleSelf(array, size) { +
88970 var index = -1, +
88971 length = array.length, +
88972 lastIndex = length - 1; +
88973 +
88974 size = size === undefined ? length : size; +
88975 while (++index < size) { +
88976 var rand = baseRandom(index, lastIndex), +
88977 value = array[rand]; +
88978 +
88979 array[rand] = array[index]; +
88980 array[index] = value; +
88981 } +
88982 array.length = size; +
88983 return array; +
88984 } +
88985 +
88986 /** +
88987 * Converts `string` to a property path array. +
88988 * +
88989 * @private +
88990 * @param {string} string The string to convert. +
88991 * @returns {Array} Returns the property path array. +
88992 */ +
88993 var stringToPath = memoizeCapped(function(string) { +
88994 var result = []; +
88995 if (string.charCodeAt(0) === 46 /* . */) { +
88996 result.push(''); +
88997 } +
88998 string.replace(rePropName, function(match, number, quote, subString) { +
88999 result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); +
89000 }); +
89001 return result; +
89002 }); +
89003 +
89004 /** +
89005 * Converts `value` to a string key if it's not a string or symbol. +
89006 * +
89007 * @private +
89008 * @param {*} value The value to inspect. +
89009 * @returns {string|symbol} Returns the key. +
89010 */ +
89011 function toKey(value) { +
89012 if (typeof value == 'string' || isSymbol(value)) { +
89013 return value; +
89014 } +
89015 var result = (value + ''); +
89016 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +
89017 } +
89018 +
89019 /** +
89020 * Converts `func` to its source code. +
89021 * +
89022 * @private +
89023 * @param {Function} func The function to convert. +
89024 * @returns {string} Returns the source code. +
89025 */ +
89026 function toSource(func) { +
89027 if (func != null) { +
89028 try { +
89029 return funcToString.call(func); +
89030 } catch (e) {} +
89031 try { +
89032 return (func + ''); +
89033 } catch (e) {} +
89034 } +
89035 return ''; +
89036 } +
89037 +
89038 /** +
89039 * Updates wrapper `details` based on `bitmask` flags. +
89040 * +
89041 * @private +
89042 * @returns {Array} details The details to modify. +
89043 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. +
89044 * @returns {Array} Returns `details`. +
89045 */ +
89046 function updateWrapDetails(details, bitmask) { +
89047 arrayEach(wrapFlags, function(pair) { +
89048 var value = '_.' + pair[0]; +
89049 if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { +
89050 details.push(value); +
89051 } +
89052 }); +
89053 return details.sort(); +
89054 } +
89055 +
89056 /** +
89057 * Creates a clone of `wrapper`. +
89058 * +
89059 * @private +
89060 * @param {Object} wrapper The wrapper to clone. +
89061 * @returns {Object} Returns the cloned wrapper. +
89062 */ +
89063 function wrapperClone(wrapper) { +
89064 if (wrapper instanceof LazyWrapper) { +
89065 return wrapper.clone(); +
89066 } +
89067 var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); +
89068 result.__actions__ = copyArray(wrapper.__actions__); +
89069 result.__index__ = wrapper.__index__; +
89070 result.__values__ = wrapper.__values__; +
89071 return result; +
89072 } +
89073 +
89074 /*------------------------------------------------------------------------*/ +
89075 +
89076 /** +
89077 * Creates an array of elements split into groups the length of `size`. +
89078 * If `array` can't be split evenly, the final chunk will be the remaining +
89079 * elements. +
89080 * +
89081 * @static +
89082 * @memberOf _ +
89083 * @since 3.0.0 +
89084 * @category Array +
89085 * @param {Array} array The array to process. +
89086 * @param {number} [size=1] The length of each chunk +
89087 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
89088 * @returns {Array} Returns the new array of chunks. +
89089 * @example +
89090 * +
89091 * _.chunk(['a', 'b', 'c', 'd'], 2); +
89092 * // => [['a', 'b'], ['c', 'd']] +
89093 * +
89094 * _.chunk(['a', 'b', 'c', 'd'], 3); +
89095 * // => [['a', 'b', 'c'], ['d']] +
89096 */ +
89097 function chunk(array, size, guard) { +
89098 if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { +
89099 size = 1; +
89100 } else { +
89101 size = nativeMax(toInteger(size), 0); +
89102 } +
89103 var length = array == null ? 0 : array.length; +
89104 if (!length || size < 1) { +
89105 return []; +
89106 } +
89107 var index = 0, +
89108 resIndex = 0, +
89109 result = Array(nativeCeil(length / size)); +
89110 +
89111 while (index < length) { +
89112 result[resIndex++] = baseSlice(array, index, (index += size)); +
89113 } +
89114 return result; +
89115 } +
89116 +
89117 /** +
89118 * Creates an array with all falsey values removed. The values `false`, `null`, +
89119 * `0`, `""`, `undefined`, and `NaN` are falsey. +
89120 * +
89121 * @static +
89122 * @memberOf _ +
89123 * @since 0.1.0 +
89124 * @category Array +
89125 * @param {Array} array The array to compact. +
89126 * @returns {Array} Returns the new array of filtered values. +
89127 * @example +
89128 * +
89129 * _.compact([0, 1, false, 2, '', 3]); +
89130 * // => [1, 2, 3] +
89131 */ +
89132 function compact(array) { +
89133 var index = -1, +
89134 length = array == null ? 0 : array.length, +
89135 resIndex = 0, +
89136 result = []; +
89137 +
89138 while (++index < length) { +
89139 var value = array[index]; +
89140 if (value) { +
89141 result[resIndex++] = value; +
89142 } +
89143 } +
89144 return result; +
89145 } +
89146 +
89147 /** +
89148 * Creates a new array concatenating `array` with any additional arrays +
89149 * and/or values. +
89150 * +
89151 * @static +
89152 * @memberOf _ +
89153 * @since 4.0.0 +
89154 * @category Array +
89155 * @param {Array} array The array to concatenate. +
89156 * @param {...*} [values] The values to concatenate. +
89157 * @returns {Array} Returns the new concatenated array. +
89158 * @example +
89159 * +
89160 * var array = [1]; +
89161 * var other = _.concat(array, 2, [3], [[4]]); +
89162 * +
89163 * console.log(other); +
89164 * // => [1, 2, 3, [4]] +
89165 * +
89166 * console.log(array); +
89167 * // => [1] +
89168 */ +
89169 function concat() { +
89170 var length = arguments.length; +
89171 if (!length) { +
89172 return []; +
89173 } +
89174 var args = Array(length - 1), +
89175 array = arguments[0], +
89176 index = length; +
89177 +
89178 while (index--) { +
89179 args[index - 1] = arguments[index]; +
89180 } +
89181 return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); +
89182 } +
89183 +
89184 /** +
89185 * Creates an array of `array` values not included in the other given arrays +
89186 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
89187 * for equality comparisons. The order and references of result values are +
89188 * determined by the first array. +
89189 * +
89190 * **Note:** Unlike `_.pullAll`, this method returns a new array. +
89191 * +
89192 * @static +
89193 * @memberOf _ +
89194 * @since 0.1.0 +
89195 * @category Array +
89196 * @param {Array} array The array to inspect. +
89197 * @param {...Array} [values] The values to exclude. +
89198 * @returns {Array} Returns the new array of filtered values. +
89199 * @see _.without, _.xor +
89200 * @example +
89201 * +
89202 * _.difference([2, 1], [2, 3]); +
89203 * // => [1] +
89204 */ +
89205 var difference = baseRest(function(array, values) { +
89206 return isArrayLikeObject(array) +
89207 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) +
89208 : []; +
89209 }); +
89210 +
89211 /** +
89212 * This method is like `_.difference` except that it accepts `iteratee` which +
89213 * is invoked for each element of `array` and `values` to generate the criterion +
89214 * by which they're compared. The order and references of result values are +
89215 * determined by the first array. The iteratee is invoked with one argument: +
89216 * (value). +
89217 * +
89218 * **Note:** Unlike `_.pullAllBy`, this method returns a new array. +
89219 * +
89220 * @static +
89221 * @memberOf _ +
89222 * @since 4.0.0 +
89223 * @category Array +
89224 * @param {Array} array The array to inspect. +
89225 * @param {...Array} [values] The values to exclude. +
89226 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
89227 * @returns {Array} Returns the new array of filtered values. +
89228 * @example +
89229 * +
89230 * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
89231 * // => [1.2] +
89232 * +
89233 * // The `_.property` iteratee shorthand. +
89234 * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); +
89235 * // => [{ 'x': 2 }] +
89236 */ +
89237 var differenceBy = baseRest(function(array, values) { +
89238 var iteratee = last(values); +
89239 if (isArrayLikeObject(iteratee)) { +
89240 iteratee = undefined; +
89241 } +
89242 return isArrayLikeObject(array) +
89243 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) +
89244 : []; +
89245 }); +
89246 +
89247 /** +
89248 * This method is like `_.difference` except that it accepts `comparator` +
89249 * which is invoked to compare elements of `array` to `values`. The order and +
89250 * references of result values are determined by the first array. The comparator +
89251 * is invoked with two arguments: (arrVal, othVal). +
89252 * +
89253 * **Note:** Unlike `_.pullAllWith`, this method returns a new array. +
89254 * +
89255 * @static +
89256 * @memberOf _ +
89257 * @since 4.0.0 +
89258 * @category Array +
89259 * @param {Array} array The array to inspect. +
89260 * @param {...Array} [values] The values to exclude. +
89261 * @param {Function} [comparator] The comparator invoked per element. +
89262 * @returns {Array} Returns the new array of filtered values. +
89263 * @example +
89264 * +
89265 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
89266 * +
89267 * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); +
89268 * // => [{ 'x': 2, 'y': 1 }] +
89269 */ +
89270 var differenceWith = baseRest(function(array, values) { +
89271 var comparator = last(values); +
89272 if (isArrayLikeObject(comparator)) { +
89273 comparator = undefined; +
89274 } +
89275 return isArrayLikeObject(array) +
89276 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) +
89277 : []; +
89278 }); +
89279 +
89280 /** +
89281 * Creates a slice of `array` with `n` elements dropped from the beginning. +
89282 * +
89283 * @static +
89284 * @memberOf _ +
89285 * @since 0.5.0 +
89286 * @category Array +
89287 * @param {Array} array The array to query. +
89288 * @param {number} [n=1] The number of elements to drop. +
89289 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
89290 * @returns {Array} Returns the slice of `array`. +
89291 * @example +
89292 * +
89293 * _.drop([1, 2, 3]); +
89294 * // => [2, 3] +
89295 * +
89296 * _.drop([1, 2, 3], 2); +
89297 * // => [3] +
89298 * +
89299 * _.drop([1, 2, 3], 5); +
89300 * // => [] +
89301 * +
89302 * _.drop([1, 2, 3], 0); +
89303 * // => [1, 2, 3] +
89304 */ +
89305 function drop(array, n, guard) { +
89306 var length = array == null ? 0 : array.length; +
89307 if (!length) { +
89308 return []; +
89309 } +
89310 n = (guard || n === undefined) ? 1 : toInteger(n); +
89311 return baseSlice(array, n < 0 ? 0 : n, length); +
89312 } +
89313 +
89314 /** +
89315 * Creates a slice of `array` with `n` elements dropped from the end. +
89316 * +
89317 * @static +
89318 * @memberOf _ +
89319 * @since 3.0.0 +
89320 * @category Array +
89321 * @param {Array} array The array to query. +
89322 * @param {number} [n=1] The number of elements to drop. +
89323 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
89324 * @returns {Array} Returns the slice of `array`. +
89325 * @example +
89326 * +
89327 * _.dropRight([1, 2, 3]); +
89328 * // => [1, 2] +
89329 * +
89330 * _.dropRight([1, 2, 3], 2); +
89331 * // => [1] +
89332 * +
89333 * _.dropRight([1, 2, 3], 5); +
89334 * // => [] +
89335 * +
89336 * _.dropRight([1, 2, 3], 0); +
89337 * // => [1, 2, 3] +
89338 */ +
89339 function dropRight(array, n, guard) { +
89340 var length = array == null ? 0 : array.length; +
89341 if (!length) { +
89342 return []; +
89343 } +
89344 n = (guard || n === undefined) ? 1 : toInteger(n); +
89345 n = length - n; +
89346 return baseSlice(array, 0, n < 0 ? 0 : n); +
89347 } +
89348 +
89349 /** +
89350 * Creates a slice of `array` excluding elements dropped from the end. +
89351 * Elements are dropped until `predicate` returns falsey. The predicate is +
89352 * invoked with three arguments: (value, index, array). +
89353 * +
89354 * @static +
89355 * @memberOf _ +
89356 * @since 3.0.0 +
89357 * @category Array +
89358 * @param {Array} array The array to query. +
89359 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
89360 * @returns {Array} Returns the slice of `array`. +
89361 * @example +
89362 * +
89363 * var users = [ +
89364 * { 'user': 'barney', 'active': true }, +
89365 * { 'user': 'fred', 'active': false }, +
89366 * { 'user': 'pebbles', 'active': false } +
89367 * ]; +
89368 * +
89369 * _.dropRightWhile(users, function(o) { return !o.active; }); +
89370 * // => objects for ['barney'] +
89371 * +
89372 * // The `_.matches` iteratee shorthand. +
89373 * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); +
89374 * // => objects for ['barney', 'fred'] +
89375 * +
89376 * // The `_.matchesProperty` iteratee shorthand. +
89377 * _.dropRightWhile(users, ['active', false]); +
89378 * // => objects for ['barney'] +
89379 * +
89380 * // The `_.property` iteratee shorthand. +
89381 * _.dropRightWhile(users, 'active'); +
89382 * // => objects for ['barney', 'fred', 'pebbles'] +
89383 */ +
89384 function dropRightWhile(array, predicate) { +
89385 return (array && array.length) +
89386 ? baseWhile(array, getIteratee(predicate, 3), true, true) +
89387 : []; +
89388 } +
89389 +
89390 /** +
89391 * Creates a slice of `array` excluding elements dropped from the beginning. +
89392 * Elements are dropped until `predicate` returns falsey. The predicate is +
89393 * invoked with three arguments: (value, index, array). +
89394 * +
89395 * @static +
89396 * @memberOf _ +
89397 * @since 3.0.0 +
89398 * @category Array +
89399 * @param {Array} array The array to query. +
89400 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
89401 * @returns {Array} Returns the slice of `array`. +
89402 * @example +
89403 * +
89404 * var users = [ +
89405 * { 'user': 'barney', 'active': false }, +
89406 * { 'user': 'fred', 'active': false }, +
89407 * { 'user': 'pebbles', 'active': true } +
89408 * ]; +
89409 * +
89410 * _.dropWhile(users, function(o) { return !o.active; }); +
89411 * // => objects for ['pebbles'] +
89412 * +
89413 * // The `_.matches` iteratee shorthand. +
89414 * _.dropWhile(users, { 'user': 'barney', 'active': false }); +
89415 * // => objects for ['fred', 'pebbles'] +
89416 * +
89417 * // The `_.matchesProperty` iteratee shorthand. +
89418 * _.dropWhile(users, ['active', false]); +
89419 * // => objects for ['pebbles'] +
89420 * +
89421 * // The `_.property` iteratee shorthand. +
89422 * _.dropWhile(users, 'active'); +
89423 * // => objects for ['barney', 'fred', 'pebbles'] +
89424 */ +
89425 function dropWhile(array, predicate) { +
89426 return (array && array.length) +
89427 ? baseWhile(array, getIteratee(predicate, 3), true) +
89428 : []; +
89429 } +
89430 +
89431 /** +
89432 * Fills elements of `array` with `value` from `start` up to, but not +
89433 * including, `end`. +
89434 * +
89435 * **Note:** This method mutates `array`. +
89436 * +
89437 * @static +
89438 * @memberOf _ +
89439 * @since 3.2.0 +
89440 * @category Array +
89441 * @param {Array} array The array to fill. +
89442 * @param {*} value The value to fill `array` with. +
89443 * @param {number} [start=0] The start position. +
89444 * @param {number} [end=array.length] The end position. +
89445 * @returns {Array} Returns `array`. +
89446 * @example +
89447 * +
89448 * var array = [1, 2, 3]; +
89449 * +
89450 * _.fill(array, 'a'); +
89451 * console.log(array); +
89452 * // => ['a', 'a', 'a'] +
89453 * +
89454 * _.fill(Array(3), 2); +
89455 * // => [2, 2, 2] +
89456 * +
89457 * _.fill([4, 6, 8, 10], '*', 1, 3); +
89458 * // => [4, '*', '*', 10] +
89459 */ +
89460 function fill(array, value, start, end) { +
89461 var length = array == null ? 0 : array.length; +
89462 if (!length) { +
89463 return []; +
89464 } +
89465 if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { +
89466 start = 0; +
89467 end = length; +
89468 } +
89469 return baseFill(array, value, start, end); +
89470 } +
89471 +
89472 /** +
89473 * This method is like `_.find` except that it returns the index of the first +
89474 * element `predicate` returns truthy for instead of the element itself. +
89475 * +
89476 * @static +
89477 * @memberOf _ +
89478 * @since 1.1.0 +
89479 * @category Array +
89480 * @param {Array} array The array to inspect. +
89481 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
89482 * @param {number} [fromIndex=0] The index to search from. +
89483 * @returns {number} Returns the index of the found element, else `-1`. +
89484 * @example +
89485 * +
89486 * var users = [ +
89487 * { 'user': 'barney', 'active': false }, +
89488 * { 'user': 'fred', 'active': false }, +
89489 * { 'user': 'pebbles', 'active': true } +
89490 * ]; +
89491 * +
89492 * _.findIndex(users, function(o) { return o.user == 'barney'; }); +
89493 * // => 0 +
89494 * +
89495 * // The `_.matches` iteratee shorthand. +
89496 * _.findIndex(users, { 'user': 'fred', 'active': false }); +
89497 * // => 1 +
89498 * +
89499 * // The `_.matchesProperty` iteratee shorthand. +
89500 * _.findIndex(users, ['active', false]); +
89501 * // => 0 +
89502 * +
89503 * // The `_.property` iteratee shorthand. +
89504 * _.findIndex(users, 'active'); +
89505 * // => 2 +
89506 */ +
89507 function findIndex(array, predicate, fromIndex) { +
89508 var length = array == null ? 0 : array.length; +
89509 if (!length) { +
89510 return -1; +
89511 } +
89512 var index = fromIndex == null ? 0 : toInteger(fromIndex); +
89513 if (index < 0) { +
89514 index = nativeMax(length + index, 0); +
89515 } +
89516 return baseFindIndex(array, getIteratee(predicate, 3), index); +
89517 } +
89518 +
89519 /** +
89520 * This method is like `_.findIndex` except that it iterates over elements +
89521 * of `collection` from right to left. +
89522 * +
89523 * @static +
89524 * @memberOf _ +
89525 * @since 2.0.0 +
89526 * @category Array +
89527 * @param {Array} array The array to inspect. +
89528 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
89529 * @param {number} [fromIndex=array.length-1] The index to search from. +
89530 * @returns {number} Returns the index of the found element, else `-1`. +
89531 * @example +
89532 * +
89533 * var users = [ +
89534 * { 'user': 'barney', 'active': true }, +
89535 * { 'user': 'fred', 'active': false }, +
89536 * { 'user': 'pebbles', 'active': false } +
89537 * ]; +
89538 * +
89539 * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); +
89540 * // => 2 +
89541 * +
89542 * // The `_.matches` iteratee shorthand. +
89543 * _.findLastIndex(users, { 'user': 'barney', 'active': true }); +
89544 * // => 0 +
89545 * +
89546 * // The `_.matchesProperty` iteratee shorthand. +
89547 * _.findLastIndex(users, ['active', false]); +
89548 * // => 2 +
89549 * +
89550 * // The `_.property` iteratee shorthand. +
89551 * _.findLastIndex(users, 'active'); +
89552 * // => 0 +
89553 */ +
89554 function findLastIndex(array, predicate, fromIndex) { +
89555 var length = array == null ? 0 : array.length; +
89556 if (!length) { +
89557 return -1; +
89558 } +
89559 var index = length - 1; +
89560 if (fromIndex !== undefined) { +
89561 index = toInteger(fromIndex); +
89562 index = fromIndex < 0 +
89563 ? nativeMax(length + index, 0) +
89564 : nativeMin(index, length - 1); +
89565 } +
89566 return baseFindIndex(array, getIteratee(predicate, 3), index, true); +
89567 } +
89568 +
89569 /** +
89570 * Flattens `array` a single level deep. +
89571 * +
89572 * @static +
89573 * @memberOf _ +
89574 * @since 0.1.0 +
89575 * @category Array +
89576 * @param {Array} array The array to flatten. +
89577 * @returns {Array} Returns the new flattened array. +
89578 * @example +
89579 * +
89580 * _.flatten([1, [2, [3, [4]], 5]]); +
89581 * // => [1, 2, [3, [4]], 5] +
89582 */ +
89583 function flatten(array) { +
89584 var length = array == null ? 0 : array.length; +
89585 return length ? baseFlatten(array, 1) : []; +
89586 } +
89587 +
89588 /** +
89589 * Recursively flattens `array`. +
89590 * +
89591 * @static +
89592 * @memberOf _ +
89593 * @since 3.0.0 +
89594 * @category Array +
89595 * @param {Array} array The array to flatten. +
89596 * @returns {Array} Returns the new flattened array. +
89597 * @example +
89598 * +
89599 * _.flattenDeep([1, [2, [3, [4]], 5]]); +
89600 * // => [1, 2, 3, 4, 5] +
89601 */ +
89602 function flattenDeep(array) { +
89603 var length = array == null ? 0 : array.length; +
89604 return length ? baseFlatten(array, INFINITY) : []; +
89605 } +
89606 +
89607 /** +
89608 * Recursively flatten `array` up to `depth` times. +
89609 * +
89610 * @static +
89611 * @memberOf _ +
89612 * @since 4.4.0 +
89613 * @category Array +
89614 * @param {Array} array The array to flatten. +
89615 * @param {number} [depth=1] The maximum recursion depth. +
89616 * @returns {Array} Returns the new flattened array. +
89617 * @example +
89618 * +
89619 * var array = [1, [2, [3, [4]], 5]]; +
89620 * +
89621 * _.flattenDepth(array, 1); +
89622 * // => [1, 2, [3, [4]], 5] +
89623 * +
89624 * _.flattenDepth(array, 2); +
89625 * // => [1, 2, 3, [4], 5] +
89626 */ +
89627 function flattenDepth(array, depth) { +
89628 var length = array == null ? 0 : array.length; +
89629 if (!length) { +
89630 return []; +
89631 } +
89632 depth = depth === undefined ? 1 : toInteger(depth); +
89633 return baseFlatten(array, depth); +
89634 } +
89635 +
89636 /** +
89637 * The inverse of `_.toPairs`; this method returns an object composed +
89638 * from key-value `pairs`. +
89639 * +
89640 * @static +
89641 * @memberOf _ +
89642 * @since 4.0.0 +
89643 * @category Array +
89644 * @param {Array} pairs The key-value pairs. +
89645 * @returns {Object} Returns the new object. +
89646 * @example +
89647 * +
89648 * _.fromPairs([['a', 1], ['b', 2]]); +
89649 * // => { 'a': 1, 'b': 2 } +
89650 */ +
89651 function fromPairs(pairs) { +
89652 var index = -1, +
89653 length = pairs == null ? 0 : pairs.length, +
89654 result = {}; +
89655 +
89656 while (++index < length) { +
89657 var pair = pairs[index]; +
89658 result[pair[0]] = pair[1]; +
89659 } +
89660 return result; +
89661 } +
89662 +
89663 /** +
89664 * Gets the first element of `array`. +
89665 * +
89666 * @static +
89667 * @memberOf _ +
89668 * @since 0.1.0 +
89669 * @alias first +
89670 * @category Array +
89671 * @param {Array} array The array to query. +
89672 * @returns {*} Returns the first element of `array`. +
89673 * @example +
89674 * +
89675 * _.head([1, 2, 3]); +
89676 * // => 1 +
89677 * +
89678 * _.head([]); +
89679 * // => undefined +
89680 */ +
89681 function head(array) { +
89682 return (array && array.length) ? array[0] : undefined; +
89683 } +
89684 +
89685 /** +
89686 * Gets the index at which the first occurrence of `value` is found in `array` +
89687 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
89688 * for equality comparisons. If `fromIndex` is negative, it's used as the +
89689 * offset from the end of `array`. +
89690 * +
89691 * @static +
89692 * @memberOf _ +
89693 * @since 0.1.0 +
89694 * @category Array +
89695 * @param {Array} array The array to inspect. +
89696 * @param {*} value The value to search for. +
89697 * @param {number} [fromIndex=0] The index to search from. +
89698 * @returns {number} Returns the index of the matched value, else `-1`. +
89699 * @example +
89700 * +
89701 * _.indexOf([1, 2, 1, 2], 2); +
89702 * // => 1 +
89703 * +
89704 * // Search from the `fromIndex`. +
89705 * _.indexOf([1, 2, 1, 2], 2, 2); +
89706 * // => 3 +
89707 */ +
89708 function indexOf(array, value, fromIndex) { +
89709 var length = array == null ? 0 : array.length; +
89710 if (!length) { +
89711 return -1; +
89712 } +
89713 var index = fromIndex == null ? 0 : toInteger(fromIndex); +
89714 if (index < 0) { +
89715 index = nativeMax(length + index, 0); +
89716 } +
89717 return baseIndexOf(array, value, index); +
89718 } +
89719 +
89720 /** +
89721 * Gets all but the last element of `array`. +
89722 * +
89723 * @static +
89724 * @memberOf _ +
89725 * @since 0.1.0 +
89726 * @category Array +
89727 * @param {Array} array The array to query. +
89728 * @returns {Array} Returns the slice of `array`. +
89729 * @example +
89730 * +
89731 * _.initial([1, 2, 3]); +
89732 * // => [1, 2] +
89733 */ +
89734 function initial(array) { +
89735 var length = array == null ? 0 : array.length; +
89736 return length ? baseSlice(array, 0, -1) : []; +
89737 } +
89738 +
89739 /** +
89740 * Creates an array of unique values that are included in all given arrays +
89741 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
89742 * for equality comparisons. The order and references of result values are +
89743 * determined by the first array. +
89744 * +
89745 * @static +
89746 * @memberOf _ +
89747 * @since 0.1.0 +
89748 * @category Array +
89749 * @param {...Array} [arrays] The arrays to inspect. +
89750 * @returns {Array} Returns the new array of intersecting values. +
89751 * @example +
89752 * +
89753 * _.intersection([2, 1], [2, 3]); +
89754 * // => [2] +
89755 */ +
89756 var intersection = baseRest(function(arrays) { +
89757 var mapped = arrayMap(arrays, castArrayLikeObject); +
89758 return (mapped.length && mapped[0] === arrays[0]) +
89759 ? baseIntersection(mapped) +
89760 : []; +
89761 }); +
89762 +
89763 /** +
89764 * This method is like `_.intersection` except that it accepts `iteratee` +
89765 * which is invoked for each element of each `arrays` to generate the criterion +
89766 * by which they're compared. The order and references of result values are +
89767 * determined by the first array. The iteratee is invoked with one argument: +
89768 * (value). +
89769 * +
89770 * @static +
89771 * @memberOf _ +
89772 * @since 4.0.0 +
89773 * @category Array +
89774 * @param {...Array} [arrays] The arrays to inspect. +
89775 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
89776 * @returns {Array} Returns the new array of intersecting values. +
89777 * @example +
89778 * +
89779 * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
89780 * // => [2.1] +
89781 * +
89782 * // The `_.property` iteratee shorthand. +
89783 * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
89784 * // => [{ 'x': 1 }] +
89785 */ +
89786 var intersectionBy = baseRest(function(arrays) { +
89787 var iteratee = last(arrays), +
89788 mapped = arrayMap(arrays, castArrayLikeObject); +
89789 +
89790 if (iteratee === last(mapped)) { +
89791 iteratee = undefined; +
89792 } else { +
89793 mapped.pop(); +
89794 } +
89795 return (mapped.length && mapped[0] === arrays[0]) +
89796 ? baseIntersection(mapped, getIteratee(iteratee, 2)) +
89797 : []; +
89798 }); +
89799 +
89800 /** +
89801 * This method is like `_.intersection` except that it accepts `comparator` +
89802 * which is invoked to compare elements of `arrays`. The order and references +
89803 * of result values are determined by the first array. The comparator is +
89804 * invoked with two arguments: (arrVal, othVal). +
89805 * +
89806 * @static +
89807 * @memberOf _ +
89808 * @since 4.0.0 +
89809 * @category Array +
89810 * @param {...Array} [arrays] The arrays to inspect. +
89811 * @param {Function} [comparator] The comparator invoked per element. +
89812 * @returns {Array} Returns the new array of intersecting values. +
89813 * @example +
89814 * +
89815 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
89816 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
89817 * +
89818 * _.intersectionWith(objects, others, _.isEqual); +
89819 * // => [{ 'x': 1, 'y': 2 }] +
89820 */ +
89821 var intersectionWith = baseRest(function(arrays) { +
89822 var comparator = last(arrays), +
89823 mapped = arrayMap(arrays, castArrayLikeObject); +
89824 +
89825 comparator = typeof comparator == 'function' ? comparator : undefined; +
89826 if (comparator) { +
89827 mapped.pop(); +
89828 } +
89829 return (mapped.length && mapped[0] === arrays[0]) +
89830 ? baseIntersection(mapped, undefined, comparator) +
89831 : []; +
89832 }); +
89833 +
89834 /** +
89835 * Converts all elements in `array` into a string separated by `separator`. +
89836 * +
89837 * @static +
89838 * @memberOf _ +
89839 * @since 4.0.0 +
89840 * @category Array +
89841 * @param {Array} array The array to convert. +
89842 * @param {string} [separator=','] The element separator. +
89843 * @returns {string} Returns the joined string. +
89844 * @example +
89845 * +
89846 * _.join(['a', 'b', 'c'], '~'); +
89847 * // => 'a~b~c' +
89848 */ +
89849 function join(array, separator) { +
89850 return array == null ? '' : nativeJoin.call(array, separator); +
89851 } +
89852 +
89853 /** +
89854 * Gets the last element of `array`. +
89855 * +
89856 * @static +
89857 * @memberOf _ +
89858 * @since 0.1.0 +
89859 * @category Array +
89860 * @param {Array} array The array to query. +
89861 * @returns {*} Returns the last element of `array`. +
89862 * @example +
89863 * +
89864 * _.last([1, 2, 3]); +
89865 * // => 3 +
89866 */ +
89867 function last(array) { +
89868 var length = array == null ? 0 : array.length; +
89869 return length ? array[length - 1] : undefined; +
89870 } +
89871 +
89872 /** +
89873 * This method is like `_.indexOf` except that it iterates over elements of +
89874 * `array` from right to left. +
89875 * +
89876 * @static +
89877 * @memberOf _ +
89878 * @since 0.1.0 +
89879 * @category Array +
89880 * @param {Array} array The array to inspect. +
89881 * @param {*} value The value to search for. +
89882 * @param {number} [fromIndex=array.length-1] The index to search from. +
89883 * @returns {number} Returns the index of the matched value, else `-1`. +
89884 * @example +
89885 * +
89886 * _.lastIndexOf([1, 2, 1, 2], 2); +
89887 * // => 3 +
89888 * +
89889 * // Search from the `fromIndex`. +
89890 * _.lastIndexOf([1, 2, 1, 2], 2, 2); +
89891 * // => 1 +
89892 */ +
89893 function lastIndexOf(array, value, fromIndex) { +
89894 var length = array == null ? 0 : array.length; +
89895 if (!length) { +
89896 return -1; +
89897 } +
89898 var index = length; +
89899 if (fromIndex !== undefined) { +
89900 index = toInteger(fromIndex); +
89901 index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); +
89902 } +
89903 return value === value +
89904 ? strictLastIndexOf(array, value, index) +
89905 : baseFindIndex(array, baseIsNaN, index, true); +
89906 } +
89907 +
89908 /** +
89909 * Gets the element at index `n` of `array`. If `n` is negative, the nth +
89910 * element from the end is returned. +
89911 * +
89912 * @static +
89913 * @memberOf _ +
89914 * @since 4.11.0 +
89915 * @category Array +
89916 * @param {Array} array The array to query. +
89917 * @param {number} [n=0] The index of the element to return. +
89918 * @returns {*} Returns the nth element of `array`. +
89919 * @example +
89920 * +
89921 * var array = ['a', 'b', 'c', 'd']; +
89922 * +
89923 * _.nth(array, 1); +
89924 * // => 'b' +
89925 * +
89926 * _.nth(array, -2); +
89927 * // => 'c'; +
89928 */ +
89929 function nth(array, n) { +
89930 return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; +
89931 } +
89932 +
89933 /** +
89934 * Removes all given values from `array` using +
89935 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
89936 * for equality comparisons. +
89937 * +
89938 * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` +
89939 * to remove elements from an array by predicate. +
89940 * +
89941 * @static +
89942 * @memberOf _ +
89943 * @since 2.0.0 +
89944 * @category Array +
89945 * @param {Array} array The array to modify. +
89946 * @param {...*} [values] The values to remove. +
89947 * @returns {Array} Returns `array`. +
89948 * @example +
89949 * +
89950 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +
89951 * +
89952 * _.pull(array, 'a', 'c'); +
89953 * console.log(array); +
89954 * // => ['b', 'b'] +
89955 */ +
89956 var pull = baseRest(pullAll); +
89957 +
89958 /** +
89959 * This method is like `_.pull` except that it accepts an array of values to remove. +
89960 * +
89961 * **Note:** Unlike `_.difference`, this method mutates `array`. +
89962 * +
89963 * @static +
89964 * @memberOf _ +
89965 * @since 4.0.0 +
89966 * @category Array +
89967 * @param {Array} array The array to modify. +
89968 * @param {Array} values The values to remove. +
89969 * @returns {Array} Returns `array`. +
89970 * @example +
89971 * +
89972 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; +
89973 * +
89974 * _.pullAll(array, ['a', 'c']); +
89975 * console.log(array); +
89976 * // => ['b', 'b'] +
89977 */ +
89978 function pullAll(array, values) { +
89979 return (array && array.length && values && values.length) +
89980 ? basePullAll(array, values) +
89981 : array; +
89982 } +
89983 +
89984 /** +
89985 * This method is like `_.pullAll` except that it accepts `iteratee` which is +
89986 * invoked for each element of `array` and `values` to generate the criterion +
89987 * by which they're compared. The iteratee is invoked with one argument: (value). +
89988 * +
89989 * **Note:** Unlike `_.differenceBy`, this method mutates `array`. +
89990 * +
89991 * @static +
89992 * @memberOf _ +
89993 * @since 4.0.0 +
89994 * @category Array +
89995 * @param {Array} array The array to modify. +
89996 * @param {Array} values The values to remove. +
89997 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
89998 * @returns {Array} Returns `array`. +
89999 * @example +
90000 * +
90001 * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; +
90002 * +
90003 * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); +
90004 * console.log(array); +
90005 * // => [{ 'x': 2 }] +
90006 */ +
90007 function pullAllBy(array, values, iteratee) { +
90008 return (array && array.length && values && values.length) +
90009 ? basePullAll(array, values, getIteratee(iteratee, 2)) +
90010 : array; +
90011 } +
90012 +
90013 /** +
90014 * This method is like `_.pullAll` except that it accepts `comparator` which +
90015 * is invoked to compare elements of `array` to `values`. The comparator is +
90016 * invoked with two arguments: (arrVal, othVal). +
90017 * +
90018 * **Note:** Unlike `_.differenceWith`, this method mutates `array`. +
90019 * +
90020 * @static +
90021 * @memberOf _ +
90022 * @since 4.6.0 +
90023 * @category Array +
90024 * @param {Array} array The array to modify. +
90025 * @param {Array} values The values to remove. +
90026 * @param {Function} [comparator] The comparator invoked per element. +
90027 * @returns {Array} Returns `array`. +
90028 * @example +
90029 * +
90030 * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; +
90031 * +
90032 * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); +
90033 * console.log(array); +
90034 * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] +
90035 */ +
90036 function pullAllWith(array, values, comparator) { +
90037 return (array && array.length && values && values.length) +
90038 ? basePullAll(array, values, undefined, comparator) +
90039 : array; +
90040 } +
90041 +
90042 /** +
90043 * Removes elements from `array` corresponding to `indexes` and returns an +
90044 * array of removed elements. +
90045 * +
90046 * **Note:** Unlike `_.at`, this method mutates `array`. +
90047 * +
90048 * @static +
90049 * @memberOf _ +
90050 * @since 3.0.0 +
90051 * @category Array +
90052 * @param {Array} array The array to modify. +
90053 * @param {...(number|number[])} [indexes] The indexes of elements to remove. +
90054 * @returns {Array} Returns the new array of removed elements. +
90055 * @example +
90056 * +
90057 * var array = ['a', 'b', 'c', 'd']; +
90058 * var pulled = _.pullAt(array, [1, 3]); +
90059 * +
90060 * console.log(array); +
90061 * // => ['a', 'c'] +
90062 * +
90063 * console.log(pulled); +
90064 * // => ['b', 'd'] +
90065 */ +
90066 var pullAt = flatRest(function(array, indexes) { +
90067 var length = array == null ? 0 : array.length, +
90068 result = baseAt(array, indexes); +
90069 +
90070 basePullAt(array, arrayMap(indexes, function(index) { +
90071 return isIndex(index, length) ? +index : index; +
90072 }).sort(compareAscending)); +
90073 +
90074 return result; +
90075 }); +
90076 +
90077 /** +
90078 * Removes all elements from `array` that `predicate` returns truthy for +
90079 * and returns an array of the removed elements. The predicate is invoked +
90080 * with three arguments: (value, index, array). +
90081 * +
90082 * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` +
90083 * to pull elements from an array by value. +
90084 * +
90085 * @static +
90086 * @memberOf _ +
90087 * @since 2.0.0 +
90088 * @category Array +
90089 * @param {Array} array The array to modify. +
90090 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
90091 * @returns {Array} Returns the new array of removed elements. +
90092 * @example +
90093 * +
90094 * var array = [1, 2, 3, 4]; +
90095 * var evens = _.remove(array, function(n) { +
90096 * return n % 2 == 0; +
90097 * }); +
90098 * +
90099 * console.log(array); +
90100 * // => [1, 3] +
90101 * +
90102 * console.log(evens); +
90103 * // => [2, 4] +
90104 */ +
90105 function remove(array, predicate) { +
90106 var result = []; +
90107 if (!(array && array.length)) { +
90108 return result; +
90109 } +
90110 var index = -1, +
90111 indexes = [], +
90112 length = array.length; +
90113 +
90114 predicate = getIteratee(predicate, 3); +
90115 while (++index < length) { +
90116 var value = array[index]; +
90117 if (predicate(value, index, array)) { +
90118 result.push(value); +
90119 indexes.push(index); +
90120 } +
90121 } +
90122 basePullAt(array, indexes); +
90123 return result; +
90124 } +
90125 +
90126 /** +
90127 * Reverses `array` so that the first element becomes the last, the second +
90128 * element becomes the second to last, and so on. +
90129 * +
90130 * **Note:** This method mutates `array` and is based on +
90131 * [`Array#reverse`](https://mdn.io/Array/reverse). +
90132 * +
90133 * @static +
90134 * @memberOf _ +
90135 * @since 4.0.0 +
90136 * @category Array +
90137 * @param {Array} array The array to modify. +
90138 * @returns {Array} Returns `array`. +
90139 * @example +
90140 * +
90141 * var array = [1, 2, 3]; +
90142 * +
90143 * _.reverse(array); +
90144 * // => [3, 2, 1] +
90145 * +
90146 * console.log(array); +
90147 * // => [3, 2, 1] +
90148 */ +
90149 function reverse(array) { +
90150 return array == null ? array : nativeReverse.call(array); +
90151 } +
90152 +
90153 /** +
90154 * Creates a slice of `array` from `start` up to, but not including, `end`. +
90155 * +
90156 * **Note:** This method is used instead of +
90157 * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are +
90158 * returned. +
90159 * +
90160 * @static +
90161 * @memberOf _ +
90162 * @since 3.0.0 +
90163 * @category Array +
90164 * @param {Array} array The array to slice. +
90165 * @param {number} [start=0] The start position. +
90166 * @param {number} [end=array.length] The end position. +
90167 * @returns {Array} Returns the slice of `array`. +
90168 */ +
90169 function slice(array, start, end) { +
90170 var length = array == null ? 0 : array.length; +
90171 if (!length) { +
90172 return []; +
90173 } +
90174 if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { +
90175 start = 0; +
90176 end = length; +
90177 } +
90178 else { +
90179 start = start == null ? 0 : toInteger(start); +
90180 end = end === undefined ? length : toInteger(end); +
90181 } +
90182 return baseSlice(array, start, end); +
90183 } +
90184 +
90185 /** +
90186 * Uses a binary search to determine the lowest index at which `value` +
90187 * should be inserted into `array` in order to maintain its sort order. +
90188 * +
90189 * @static +
90190 * @memberOf _ +
90191 * @since 0.1.0 +
90192 * @category Array +
90193 * @param {Array} array The sorted array to inspect. +
90194 * @param {*} value The value to evaluate. +
90195 * @returns {number} Returns the index at which `value` should be inserted +
90196 * into `array`. +
90197 * @example +
90198 * +
90199 * _.sortedIndex([30, 50], 40); +
90200 * // => 1 +
90201 */ +
90202 function sortedIndex(array, value) { +
90203 return baseSortedIndex(array, value); +
90204 } +
90205 +
90206 /** +
90207 * This method is like `_.sortedIndex` except that it accepts `iteratee` +
90208 * which is invoked for `value` and each element of `array` to compute their +
90209 * sort ranking. The iteratee is invoked with one argument: (value). +
90210 * +
90211 * @static +
90212 * @memberOf _ +
90213 * @since 4.0.0 +
90214 * @category Array +
90215 * @param {Array} array The sorted array to inspect. +
90216 * @param {*} value The value to evaluate. +
90217 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
90218 * @returns {number} Returns the index at which `value` should be inserted +
90219 * into `array`. +
90220 * @example +
90221 * +
90222 * var objects = [{ 'x': 4 }, { 'x': 5 }]; +
90223 * +
90224 * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +
90225 * // => 0 +
90226 * +
90227 * // The `_.property` iteratee shorthand. +
90228 * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); +
90229 * // => 0 +
90230 */ +
90231 function sortedIndexBy(array, value, iteratee) { +
90232 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); +
90233 } +
90234 +
90235 /** +
90236 * This method is like `_.indexOf` except that it performs a binary +
90237 * search on a sorted `array`. +
90238 * +
90239 * @static +
90240 * @memberOf _ +
90241 * @since 4.0.0 +
90242 * @category Array +
90243 * @param {Array} array The array to inspect. +
90244 * @param {*} value The value to search for. +
90245 * @returns {number} Returns the index of the matched value, else `-1`. +
90246 * @example +
90247 * +
90248 * _.sortedIndexOf([4, 5, 5, 5, 6], 5); +
90249 * // => 1 +
90250 */ +
90251 function sortedIndexOf(array, value) { +
90252 var length = array == null ? 0 : array.length; +
90253 if (length) { +
90254 var index = baseSortedIndex(array, value); +
90255 if (index < length && eq(array[index], value)) { +
90256 return index; +
90257 } +
90258 } +
90259 return -1; +
90260 } +
90261 +
90262 /** +
90263 * This method is like `_.sortedIndex` except that it returns the highest +
90264 * index at which `value` should be inserted into `array` in order to +
90265 * maintain its sort order. +
90266 * +
90267 * @static +
90268 * @memberOf _ +
90269 * @since 3.0.0 +
90270 * @category Array +
90271 * @param {Array} array The sorted array to inspect. +
90272 * @param {*} value The value to evaluate. +
90273 * @returns {number} Returns the index at which `value` should be inserted +
90274 * into `array`. +
90275 * @example +
90276 * +
90277 * _.sortedLastIndex([4, 5, 5, 5, 6], 5); +
90278 * // => 4 +
90279 */ +
90280 function sortedLastIndex(array, value) { +
90281 return baseSortedIndex(array, value, true); +
90282 } +
90283 +
90284 /** +
90285 * This method is like `_.sortedLastIndex` except that it accepts `iteratee` +
90286 * which is invoked for `value` and each element of `array` to compute their +
90287 * sort ranking. The iteratee is invoked with one argument: (value). +
90288 * +
90289 * @static +
90290 * @memberOf _ +
90291 * @since 4.0.0 +
90292 * @category Array +
90293 * @param {Array} array The sorted array to inspect. +
90294 * @param {*} value The value to evaluate. +
90295 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
90296 * @returns {number} Returns the index at which `value` should be inserted +
90297 * into `array`. +
90298 * @example +
90299 * +
90300 * var objects = [{ 'x': 4 }, { 'x': 5 }]; +
90301 * +
90302 * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); +
90303 * // => 1 +
90304 * +
90305 * // The `_.property` iteratee shorthand. +
90306 * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); +
90307 * // => 1 +
90308 */ +
90309 function sortedLastIndexBy(array, value, iteratee) { +
90310 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); +
90311 } +
90312 +
90313 /** +
90314 * This method is like `_.lastIndexOf` except that it performs a binary +
90315 * search on a sorted `array`. +
90316 * +
90317 * @static +
90318 * @memberOf _ +
90319 * @since 4.0.0 +
90320 * @category Array +
90321 * @param {Array} array The array to inspect. +
90322 * @param {*} value The value to search for. +
90323 * @returns {number} Returns the index of the matched value, else `-1`. +
90324 * @example +
90325 * +
90326 * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); +
90327 * // => 3 +
90328 */ +
90329 function sortedLastIndexOf(array, value) { +
90330 var length = array == null ? 0 : array.length; +
90331 if (length) { +
90332 var index = baseSortedIndex(array, value, true) - 1; +
90333 if (eq(array[index], value)) { +
90334 return index; +
90335 } +
90336 } +
90337 return -1; +
90338 } +
90339 +
90340 /** +
90341 * This method is like `_.uniq` except that it's designed and optimized +
90342 * for sorted arrays. +
90343 * +
90344 * @static +
90345 * @memberOf _ +
90346 * @since 4.0.0 +
90347 * @category Array +
90348 * @param {Array} array The array to inspect. +
90349 * @returns {Array} Returns the new duplicate free array. +
90350 * @example +
90351 * +
90352 * _.sortedUniq([1, 1, 2]); +
90353 * // => [1, 2] +
90354 */ +
90355 function sortedUniq(array) { +
90356 return (array && array.length) +
90357 ? baseSortedUniq(array) +
90358 : []; +
90359 } +
90360 +
90361 /** +
90362 * This method is like `_.uniqBy` except that it's designed and optimized +
90363 * for sorted arrays. +
90364 * +
90365 * @static +
90366 * @memberOf _ +
90367 * @since 4.0.0 +
90368 * @category Array +
90369 * @param {Array} array The array to inspect. +
90370 * @param {Function} [iteratee] The iteratee invoked per element. +
90371 * @returns {Array} Returns the new duplicate free array. +
90372 * @example +
90373 * +
90374 * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); +
90375 * // => [1.1, 2.3] +
90376 */ +
90377 function sortedUniqBy(array, iteratee) { +
90378 return (array && array.length) +
90379 ? baseSortedUniq(array, getIteratee(iteratee, 2)) +
90380 : []; +
90381 } +
90382 +
90383 /** +
90384 * Gets all but the first element of `array`. +
90385 * +
90386 * @static +
90387 * @memberOf _ +
90388 * @since 4.0.0 +
90389 * @category Array +
90390 * @param {Array} array The array to query. +
90391 * @returns {Array} Returns the slice of `array`. +
90392 * @example +
90393 * +
90394 * _.tail([1, 2, 3]); +
90395 * // => [2, 3] +
90396 */ +
90397 function tail(array) { +
90398 var length = array == null ? 0 : array.length; +
90399 return length ? baseSlice(array, 1, length) : []; +
90400 } +
90401 +
90402 /** +
90403 * Creates a slice of `array` with `n` elements taken from the beginning. +
90404 * +
90405 * @static +
90406 * @memberOf _ +
90407 * @since 0.1.0 +
90408 * @category Array +
90409 * @param {Array} array The array to query. +
90410 * @param {number} [n=1] The number of elements to take. +
90411 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
90412 * @returns {Array} Returns the slice of `array`. +
90413 * @example +
90414 * +
90415 * _.take([1, 2, 3]); +
90416 * // => [1] +
90417 * +
90418 * _.take([1, 2, 3], 2); +
90419 * // => [1, 2] +
90420 * +
90421 * _.take([1, 2, 3], 5); +
90422 * // => [1, 2, 3] +
90423 * +
90424 * _.take([1, 2, 3], 0); +
90425 * // => [] +
90426 */ +
90427 function take(array, n, guard) { +
90428 if (!(array && array.length)) { +
90429 return []; +
90430 } +
90431 n = (guard || n === undefined) ? 1 : toInteger(n); +
90432 return baseSlice(array, 0, n < 0 ? 0 : n); +
90433 } +
90434 +
90435 /** +
90436 * Creates a slice of `array` with `n` elements taken from the end. +
90437 * +
90438 * @static +
90439 * @memberOf _ +
90440 * @since 3.0.0 +
90441 * @category Array +
90442 * @param {Array} array The array to query. +
90443 * @param {number} [n=1] The number of elements to take. +
90444 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
90445 * @returns {Array} Returns the slice of `array`. +
90446 * @example +
90447 * +
90448 * _.takeRight([1, 2, 3]); +
90449 * // => [3] +
90450 * +
90451 * _.takeRight([1, 2, 3], 2); +
90452 * // => [2, 3] +
90453 * +
90454 * _.takeRight([1, 2, 3], 5); +
90455 * // => [1, 2, 3] +
90456 * +
90457 * _.takeRight([1, 2, 3], 0); +
90458 * // => [] +
90459 */ +
90460 function takeRight(array, n, guard) { +
90461 var length = array == null ? 0 : array.length; +
90462 if (!length) { +
90463 return []; +
90464 } +
90465 n = (guard || n === undefined) ? 1 : toInteger(n); +
90466 n = length - n; +
90467 return baseSlice(array, n < 0 ? 0 : n, length); +
90468 } +
90469 +
90470 /** +
90471 * Creates a slice of `array` with elements taken from the end. Elements are +
90472 * taken until `predicate` returns falsey. The predicate is invoked with +
90473 * three arguments: (value, index, array). +
90474 * +
90475 * @static +
90476 * @memberOf _ +
90477 * @since 3.0.0 +
90478 * @category Array +
90479 * @param {Array} array The array to query. +
90480 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
90481 * @returns {Array} Returns the slice of `array`. +
90482 * @example +
90483 * +
90484 * var users = [ +
90485 * { 'user': 'barney', 'active': true }, +
90486 * { 'user': 'fred', 'active': false }, +
90487 * { 'user': 'pebbles', 'active': false } +
90488 * ]; +
90489 * +
90490 * _.takeRightWhile(users, function(o) { return !o.active; }); +
90491 * // => objects for ['fred', 'pebbles'] +
90492 * +
90493 * // The `_.matches` iteratee shorthand. +
90494 * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); +
90495 * // => objects for ['pebbles'] +
90496 * +
90497 * // The `_.matchesProperty` iteratee shorthand. +
90498 * _.takeRightWhile(users, ['active', false]); +
90499 * // => objects for ['fred', 'pebbles'] +
90500 * +
90501 * // The `_.property` iteratee shorthand. +
90502 * _.takeRightWhile(users, 'active'); +
90503 * // => [] +
90504 */ +
90505 function takeRightWhile(array, predicate) { +
90506 return (array && array.length) +
90507 ? baseWhile(array, getIteratee(predicate, 3), false, true) +
90508 : []; +
90509 } +
90510 +
90511 /** +
90512 * Creates a slice of `array` with elements taken from the beginning. Elements +
90513 * are taken until `predicate` returns falsey. The predicate is invoked with +
90514 * three arguments: (value, index, array). +
90515 * +
90516 * @static +
90517 * @memberOf _ +
90518 * @since 3.0.0 +
90519 * @category Array +
90520 * @param {Array} array The array to query. +
90521 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
90522 * @returns {Array} Returns the slice of `array`. +
90523 * @example +
90524 * +
90525 * var users = [ +
90526 * { 'user': 'barney', 'active': false }, +
90527 * { 'user': 'fred', 'active': false }, +
90528 * { 'user': 'pebbles', 'active': true } +
90529 * ]; +
90530 * +
90531 * _.takeWhile(users, function(o) { return !o.active; }); +
90532 * // => objects for ['barney', 'fred'] +
90533 * +
90534 * // The `_.matches` iteratee shorthand. +
90535 * _.takeWhile(users, { 'user': 'barney', 'active': false }); +
90536 * // => objects for ['barney'] +
90537 * +
90538 * // The `_.matchesProperty` iteratee shorthand. +
90539 * _.takeWhile(users, ['active', false]); +
90540 * // => objects for ['barney', 'fred'] +
90541 * +
90542 * // The `_.property` iteratee shorthand. +
90543 * _.takeWhile(users, 'active'); +
90544 * // => [] +
90545 */ +
90546 function takeWhile(array, predicate) { +
90547 return (array && array.length) +
90548 ? baseWhile(array, getIteratee(predicate, 3)) +
90549 : []; +
90550 } +
90551 +
90552 /** +
90553 * Creates an array of unique values, in order, from all given arrays using +
90554 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
90555 * for equality comparisons. +
90556 * +
90557 * @static +
90558 * @memberOf _ +
90559 * @since 0.1.0 +
90560 * @category Array +
90561 * @param {...Array} [arrays] The arrays to inspect. +
90562 * @returns {Array} Returns the new array of combined values. +
90563 * @example +
90564 * +
90565 * _.union([2], [1, 2]); +
90566 * // => [2, 1] +
90567 */ +
90568 var union = baseRest(function(arrays) { +
90569 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); +
90570 }); +
90571 +
90572 /** +
90573 * This method is like `_.union` except that it accepts `iteratee` which is +
90574 * invoked for each element of each `arrays` to generate the criterion by +
90575 * which uniqueness is computed. Result values are chosen from the first +
90576 * array in which the value occurs. The iteratee is invoked with one argument: +
90577 * (value). +
90578 * +
90579 * @static +
90580 * @memberOf _ +
90581 * @since 4.0.0 +
90582 * @category Array +
90583 * @param {...Array} [arrays] The arrays to inspect. +
90584 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
90585 * @returns {Array} Returns the new array of combined values. +
90586 * @example +
90587 * +
90588 * _.unionBy([2.1], [1.2, 2.3], Math.floor); +
90589 * // => [2.1, 1.2] +
90590 * +
90591 * // The `_.property` iteratee shorthand. +
90592 * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
90593 * // => [{ 'x': 1 }, { 'x': 2 }] +
90594 */ +
90595 var unionBy = baseRest(function(arrays) { +
90596 var iteratee = last(arrays); +
90597 if (isArrayLikeObject(iteratee)) { +
90598 iteratee = undefined; +
90599 } +
90600 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); +
90601 }); +
90602 +
90603 /** +
90604 * This method is like `_.union` except that it accepts `comparator` which +
90605 * is invoked to compare elements of `arrays`. Result values are chosen from +
90606 * the first array in which the value occurs. The comparator is invoked +
90607 * with two arguments: (arrVal, othVal). +
90608 * +
90609 * @static +
90610 * @memberOf _ +
90611 * @since 4.0.0 +
90612 * @category Array +
90613 * @param {...Array} [arrays] The arrays to inspect. +
90614 * @param {Function} [comparator] The comparator invoked per element. +
90615 * @returns {Array} Returns the new array of combined values. +
90616 * @example +
90617 * +
90618 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
90619 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
90620 * +
90621 * _.unionWith(objects, others, _.isEqual); +
90622 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +
90623 */ +
90624 var unionWith = baseRest(function(arrays) { +
90625 var comparator = last(arrays); +
90626 comparator = typeof comparator == 'function' ? comparator : undefined; +
90627 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); +
90628 }); +
90629 +
90630 /** +
90631 * Creates a duplicate-free version of an array, using +
90632 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
90633 * for equality comparisons, in which only the first occurrence of each element +
90634 * is kept. The order of result values is determined by the order they occur +
90635 * in the array. +
90636 * +
90637 * @static +
90638 * @memberOf _ +
90639 * @since 0.1.0 +
90640 * @category Array +
90641 * @param {Array} array The array to inspect. +
90642 * @returns {Array} Returns the new duplicate free array. +
90643 * @example +
90644 * +
90645 * _.uniq([2, 1, 2]); +
90646 * // => [2, 1] +
90647 */ +
90648 function uniq(array) { +
90649 return (array && array.length) ? baseUniq(array) : []; +
90650 } +
90651 +
90652 /** +
90653 * This method is like `_.uniq` except that it accepts `iteratee` which is +
90654 * invoked for each element in `array` to generate the criterion by which +
90655 * uniqueness is computed. The order of result values is determined by the +
90656 * order they occur in the array. The iteratee is invoked with one argument: +
90657 * (value). +
90658 * +
90659 * @static +
90660 * @memberOf _ +
90661 * @since 4.0.0 +
90662 * @category Array +
90663 * @param {Array} array The array to inspect. +
90664 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
90665 * @returns {Array} Returns the new duplicate free array. +
90666 * @example +
90667 * +
90668 * _.uniqBy([2.1, 1.2, 2.3], Math.floor); +
90669 * // => [2.1, 1.2] +
90670 * +
90671 * // The `_.property` iteratee shorthand. +
90672 * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); +
90673 * // => [{ 'x': 1 }, { 'x': 2 }] +
90674 */ +
90675 function uniqBy(array, iteratee) { +
90676 return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; +
90677 } +
90678 +
90679 /** +
90680 * This method is like `_.uniq` except that it accepts `comparator` which +
90681 * is invoked to compare elements of `array`. The order of result values is +
90682 * determined by the order they occur in the array.The comparator is invoked +
90683 * with two arguments: (arrVal, othVal). +
90684 * +
90685 * @static +
90686 * @memberOf _ +
90687 * @since 4.0.0 +
90688 * @category Array +
90689 * @param {Array} array The array to inspect. +
90690 * @param {Function} [comparator] The comparator invoked per element. +
90691 * @returns {Array} Returns the new duplicate free array. +
90692 * @example +
90693 * +
90694 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
90695 * +
90696 * _.uniqWith(objects, _.isEqual); +
90697 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] +
90698 */ +
90699 function uniqWith(array, comparator) { +
90700 comparator = typeof comparator == 'function' ? comparator : undefined; +
90701 return (array && array.length) ? baseUniq(array, undefined, comparator) : []; +
90702 } +
90703 +
90704 /** +
90705 * This method is like `_.zip` except that it accepts an array of grouped +
90706 * elements and creates an array regrouping the elements to their pre-zip +
90707 * configuration. +
90708 * +
90709 * @static +
90710 * @memberOf _ +
90711 * @since 1.2.0 +
90712 * @category Array +
90713 * @param {Array} array The array of grouped elements to process. +
90714 * @returns {Array} Returns the new array of regrouped elements. +
90715 * @example +
90716 * +
90717 * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); +
90718 * // => [['a', 1, true], ['b', 2, false]] +
90719 * +
90720 * _.unzip(zipped); +
90721 * // => [['a', 'b'], [1, 2], [true, false]] +
90722 */ +
90723 function unzip(array) { +
90724 if (!(array && array.length)) { +
90725 return []; +
90726 } +
90727 var length = 0; +
90728 array = arrayFilter(array, function(group) { +
90729 if (isArrayLikeObject(group)) { +
90730 length = nativeMax(group.length, length); +
90731 return true; +
90732 } +
90733 }); +
90734 return baseTimes(length, function(index) { +
90735 return arrayMap(array, baseProperty(index)); +
90736 }); +
90737 } +
90738 +
90739 /** +
90740 * This method is like `_.unzip` except that it accepts `iteratee` to specify +
90741 * how regrouped values should be combined. The iteratee is invoked with the +
90742 * elements of each group: (...group). +
90743 * +
90744 * @static +
90745 * @memberOf _ +
90746 * @since 3.8.0 +
90747 * @category Array +
90748 * @param {Array} array The array of grouped elements to process. +
90749 * @param {Function} [iteratee=_.identity] The function to combine +
90750 * regrouped values. +
90751 * @returns {Array} Returns the new array of regrouped elements. +
90752 * @example +
90753 * +
90754 * var zipped = _.zip([1, 2], [10, 20], [100, 200]); +
90755 * // => [[1, 10, 100], [2, 20, 200]] +
90756 * +
90757 * _.unzipWith(zipped, _.add); +
90758 * // => [3, 30, 300] +
90759 */ +
90760 function unzipWith(array, iteratee) { +
90761 if (!(array && array.length)) { +
90762 return []; +
90763 } +
90764 var result = unzip(array); +
90765 if (iteratee == null) { +
90766 return result; +
90767 } +
90768 return arrayMap(result, function(group) { +
90769 return apply(iteratee, undefined, group); +
90770 }); +
90771 } +
90772 +
90773 /** +
90774 * Creates an array excluding all given values using +
90775 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
90776 * for equality comparisons. +
90777 * +
90778 * **Note:** Unlike `_.pull`, this method returns a new array. +
90779 * +
90780 * @static +
90781 * @memberOf _ +
90782 * @since 0.1.0 +
90783 * @category Array +
90784 * @param {Array} array The array to inspect. +
90785 * @param {...*} [values] The values to exclude. +
90786 * @returns {Array} Returns the new array of filtered values. +
90787 * @see _.difference, _.xor +
90788 * @example +
90789 * +
90790 * _.without([2, 1, 2, 3], 1, 2); +
90791 * // => [3] +
90792 */ +
90793 var without = baseRest(function(array, values) { +
90794 return isArrayLikeObject(array) +
90795 ? baseDifference(array, values) +
90796 : []; +
90797 }); +
90798 +
90799 /** +
90800 * Creates an array of unique values that is the +
90801 * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) +
90802 * of the given arrays. The order of result values is determined by the order +
90803 * they occur in the arrays. +
90804 * +
90805 * @static +
90806 * @memberOf _ +
90807 * @since 2.4.0 +
90808 * @category Array +
90809 * @param {...Array} [arrays] The arrays to inspect. +
90810 * @returns {Array} Returns the new array of filtered values. +
90811 * @see _.difference, _.without +
90812 * @example +
90813 * +
90814 * _.xor([2, 1], [2, 3]); +
90815 * // => [1, 3] +
90816 */ +
90817 var xor = baseRest(function(arrays) { +
90818 return baseXor(arrayFilter(arrays, isArrayLikeObject)); +
90819 }); +
90820 +
90821 /** +
90822 * This method is like `_.xor` except that it accepts `iteratee` which is +
90823 * invoked for each element of each `arrays` to generate the criterion by +
90824 * which by which they're compared. The order of result values is determined +
90825 * by the order they occur in the arrays. The iteratee is invoked with one +
90826 * argument: (value). +
90827 * +
90828 * @static +
90829 * @memberOf _ +
90830 * @since 4.0.0 +
90831 * @category Array +
90832 * @param {...Array} [arrays] The arrays to inspect. +
90833 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
90834 * @returns {Array} Returns the new array of filtered values. +
90835 * @example +
90836 * +
90837 * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); +
90838 * // => [1.2, 3.4] +
90839 * +
90840 * // The `_.property` iteratee shorthand. +
90841 * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); +
90842 * // => [{ 'x': 2 }] +
90843 */ +
90844 var xorBy = baseRest(function(arrays) { +
90845 var iteratee = last(arrays); +
90846 if (isArrayLikeObject(iteratee)) { +
90847 iteratee = undefined; +
90848 } +
90849 return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); +
90850 }); +
90851 +
90852 /** +
90853 * This method is like `_.xor` except that it accepts `comparator` which is +
90854 * invoked to compare elements of `arrays`. The order of result values is +
90855 * determined by the order they occur in the arrays. The comparator is invoked +
90856 * with two arguments: (arrVal, othVal). +
90857 * +
90858 * @static +
90859 * @memberOf _ +
90860 * @since 4.0.0 +
90861 * @category Array +
90862 * @param {...Array} [arrays] The arrays to inspect. +
90863 * @param {Function} [comparator] The comparator invoked per element. +
90864 * @returns {Array} Returns the new array of filtered values. +
90865 * @example +
90866 * +
90867 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; +
90868 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; +
90869 * +
90870 * _.xorWith(objects, others, _.isEqual); +
90871 * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] +
90872 */ +
90873 var xorWith = baseRest(function(arrays) { +
90874 var comparator = last(arrays); +
90875 comparator = typeof comparator == 'function' ? comparator : undefined; +
90876 return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); +
90877 }); +
90878 +
90879 /** +
90880 * Creates an array of grouped elements, the first of which contains the +
90881 * first elements of the given arrays, the second of which contains the +
90882 * second elements of the given arrays, and so on. +
90883 * +
90884 * @static +
90885 * @memberOf _ +
90886 * @since 0.1.0 +
90887 * @category Array +
90888 * @param {...Array} [arrays] The arrays to process. +
90889 * @returns {Array} Returns the new array of grouped elements. +
90890 * @example +
90891 * +
90892 * _.zip(['a', 'b'], [1, 2], [true, false]); +
90893 * // => [['a', 1, true], ['b', 2, false]] +
90894 */ +
90895 var zip = baseRest(unzip); +
90896 +
90897 /** +
90898 * This method is like `_.fromPairs` except that it accepts two arrays, +
90899 * one of property identifiers and one of corresponding values. +
90900 * +
90901 * @static +
90902 * @memberOf _ +
90903 * @since 0.4.0 +
90904 * @category Array +
90905 * @param {Array} [props=[]] The property identifiers. +
90906 * @param {Array} [values=[]] The property values. +
90907 * @returns {Object} Returns the new object. +
90908 * @example +
90909 * +
90910 * _.zipObject(['a', 'b'], [1, 2]); +
90911 * // => { 'a': 1, 'b': 2 } +
90912 */ +
90913 function zipObject(props, values) { +
90914 return baseZipObject(props || [], values || [], assignValue); +
90915 } +
90916 +
90917 /** +
90918 * This method is like `_.zipObject` except that it supports property paths. +
90919 * +
90920 * @static +
90921 * @memberOf _ +
90922 * @since 4.1.0 +
90923 * @category Array +
90924 * @param {Array} [props=[]] The property identifiers. +
90925 * @param {Array} [values=[]] The property values. +
90926 * @returns {Object} Returns the new object. +
90927 * @example +
90928 * +
90929 * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); +
90930 * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } +
90931 */ +
90932 function zipObjectDeep(props, values) { +
90933 return baseZipObject(props || [], values || [], baseSet); +
90934 } +
90935 +
90936 /** +
90937 * This method is like `_.zip` except that it accepts `iteratee` to specify +
90938 * how grouped values should be combined. The iteratee is invoked with the +
90939 * elements of each group: (...group). +
90940 * +
90941 * @static +
90942 * @memberOf _ +
90943 * @since 3.8.0 +
90944 * @category Array +
90945 * @param {...Array} [arrays] The arrays to process. +
90946 * @param {Function} [iteratee=_.identity] The function to combine +
90947 * grouped values. +
90948 * @returns {Array} Returns the new array of grouped elements. +
90949 * @example +
90950 * +
90951 * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { +
90952 * return a + b + c; +
90953 * }); +
90954 * // => [111, 222] +
90955 */ +
90956 var zipWith = baseRest(function(arrays) { +
90957 var length = arrays.length, +
90958 iteratee = length > 1 ? arrays[length - 1] : undefined; +
90959 +
90960 iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; +
90961 return unzipWith(arrays, iteratee); +
90962 }); +
90963 +
90964 /*------------------------------------------------------------------------*/ +
90965 +
90966 /** +
90967 * Creates a `lodash` wrapper instance that wraps `value` with explicit method +
90968 * chain sequences enabled. The result of such sequences must be unwrapped +
90969 * with `_#value`. +
90970 * +
90971 * @static +
90972 * @memberOf _ +
90973 * @since 1.3.0 +
90974 * @category Seq +
90975 * @param {*} value The value to wrap. +
90976 * @returns {Object} Returns the new `lodash` wrapper instance. +
90977 * @example +
90978 * +
90979 * var users = [ +
90980 * { 'user': 'barney', 'age': 36 }, +
90981 * { 'user': 'fred', 'age': 40 }, +
90982 * { 'user': 'pebbles', 'age': 1 } +
90983 * ]; +
90984 * +
90985 * var youngest = _ +
90986 * .chain(users) +
90987 * .sortBy('age') +
90988 * .map(function(o) { +
90989 * return o.user + ' is ' + o.age; +
90990 * }) +
90991 * .head() +
90992 * .value(); +
90993 * // => 'pebbles is 1' +
90994 */ +
90995 function chain(value) { +
90996 var result = lodash(value); +
90997 result.__chain__ = true; +
90998 return result; +
90999 } +
91000 +
91001 /** +
91002 * This method invokes `interceptor` and returns `value`. The interceptor +
91003 * is invoked with one argument; (value). The purpose of this method is to +
91004 * "tap into" a method chain sequence in order to modify intermediate results. +
91005 * +
91006 * @static +
91007 * @memberOf _ +
91008 * @since 0.1.0 +
91009 * @category Seq +
91010 * @param {*} value The value to provide to `interceptor`. +
91011 * @param {Function} interceptor The function to invoke. +
91012 * @returns {*} Returns `value`. +
91013 * @example +
91014 * +
91015 * _([1, 2, 3]) +
91016 * .tap(function(array) { +
91017 * // Mutate input array. +
91018 * array.pop(); +
91019 * }) +
91020 * .reverse() +
91021 * .value(); +
91022 * // => [2, 1] +
91023 */ +
91024 function tap(value, interceptor) { +
91025 interceptor(value); +
91026 return value; +
91027 } +
91028 +
91029 /** +
91030 * This method is like `_.tap` except that it returns the result of `interceptor`. +
91031 * The purpose of this method is to "pass thru" values replacing intermediate +
91032 * results in a method chain sequence. +
91033 * +
91034 * @static +
91035 * @memberOf _ +
91036 * @since 3.0.0 +
91037 * @category Seq +
91038 * @param {*} value The value to provide to `interceptor`. +
91039 * @param {Function} interceptor The function to invoke. +
91040 * @returns {*} Returns the result of `interceptor`. +
91041 * @example +
91042 * +
91043 * _(' abc ') +
91044 * .chain() +
91045 * .trim() +
91046 * .thru(function(value) { +
91047 * return [value]; +
91048 * }) +
91049 * .value(); +
91050 * // => ['abc'] +
91051 */ +
91052 function thru(value, interceptor) { +
91053 return interceptor(value); +
91054 } +
91055 +
91056 /** +
91057 * This method is the wrapper version of `_.at`. +
91058 * +
91059 * @name at +
91060 * @memberOf _ +
91061 * @since 1.0.0 +
91062 * @category Seq +
91063 * @param {...(string|string[])} [paths] The property paths to pick. +
91064 * @returns {Object} Returns the new `lodash` wrapper instance. +
91065 * @example +
91066 * +
91067 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +
91068 * +
91069 * _(object).at(['a[0].b.c', 'a[1]']).value(); +
91070 * // => [3, 4] +
91071 */ +
91072 var wrapperAt = flatRest(function(paths) { +
91073 var length = paths.length, +
91074 start = length ? paths[0] : 0, +
91075 value = this.__wrapped__, +
91076 interceptor = function(object) { return baseAt(object, paths); }; +
91077 +
91078 if (length > 1 || this.__actions__.length || +
91079 !(value instanceof LazyWrapper) || !isIndex(start)) { +
91080 return this.thru(interceptor); +
91081 } +
91082 value = value.slice(start, +start + (length ? 1 : 0)); +
91083 value.__actions__.push({ +
91084 'func': thru, +
91085 'args': [interceptor], +
91086 'thisArg': undefined +
91087 }); +
91088 return new LodashWrapper(value, this.__chain__).thru(function(array) { +
91089 if (length && !array.length) { +
91090 array.push(undefined); +
91091 } +
91092 return array; +
91093 }); +
91094 }); +
91095 +
91096 /** +
91097 * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. +
91098 * +
91099 * @name chain +
91100 * @memberOf _ +
91101 * @since 0.1.0 +
91102 * @category Seq +
91103 * @returns {Object} Returns the new `lodash` wrapper instance. +
91104 * @example +
91105 * +
91106 * var users = [ +
91107 * { 'user': 'barney', 'age': 36 }, +
91108 * { 'user': 'fred', 'age': 40 } +
91109 * ]; +
91110 * +
91111 * // A sequence without explicit chaining. +
91112 * _(users).head(); +
91113 * // => { 'user': 'barney', 'age': 36 } +
91114 * +
91115 * // A sequence with explicit chaining. +
91116 * _(users) +
91117 * .chain() +
91118 * .head() +
91119 * .pick('user') +
91120 * .value(); +
91121 * // => { 'user': 'barney' } +
91122 */ +
91123 function wrapperChain() { +
91124 return chain(this); +
91125 } +
91126 +
91127 /** +
91128 * Executes the chain sequence and returns the wrapped result. +
91129 * +
91130 * @name commit +
91131 * @memberOf _ +
91132 * @since 3.2.0 +
91133 * @category Seq +
91134 * @returns {Object} Returns the new `lodash` wrapper instance. +
91135 * @example +
91136 * +
91137 * var array = [1, 2]; +
91138 * var wrapped = _(array).push(3); +
91139 * +
91140 * console.log(array); +
91141 * // => [1, 2] +
91142 * +
91143 * wrapped = wrapped.commit(); +
91144 * console.log(array); +
91145 * // => [1, 2, 3] +
91146 * +
91147 * wrapped.last(); +
91148 * // => 3 +
91149 * +
91150 * console.log(array); +
91151 * // => [1, 2, 3] +
91152 */ +
91153 function wrapperCommit() { +
91154 return new LodashWrapper(this.value(), this.__chain__); +
91155 } +
91156 +
91157 /** +
91158 * Gets the next value on a wrapped object following the +
91159 * [iterator protocol](https://mdn.io/iteration_protocols#iterator). +
91160 * +
91161 * @name next +
91162 * @memberOf _ +
91163 * @since 4.0.0 +
91164 * @category Seq +
91165 * @returns {Object} Returns the next iterator value. +
91166 * @example +
91167 * +
91168 * var wrapped = _([1, 2]); +
91169 * +
91170 * wrapped.next(); +
91171 * // => { 'done': false, 'value': 1 } +
91172 * +
91173 * wrapped.next(); +
91174 * // => { 'done': false, 'value': 2 } +
91175 * +
91176 * wrapped.next(); +
91177 * // => { 'done': true, 'value': undefined } +
91178 */ +
91179 function wrapperNext() { +
91180 if (this.__values__ === undefined) { +
91181 this.__values__ = toArray(this.value()); +
91182 } +
91183 var done = this.__index__ >= this.__values__.length, +
91184 value = done ? undefined : this.__values__[this.__index__++]; +
91185 +
91186 return { 'done': done, 'value': value }; +
91187 } +
91188 +
91189 /** +
91190 * Enables the wrapper to be iterable. +
91191 * +
91192 * @name Symbol.iterator +
91193 * @memberOf _ +
91194 * @since 4.0.0 +
91195 * @category Seq +
91196 * @returns {Object} Returns the wrapper object. +
91197 * @example +
91198 * +
91199 * var wrapped = _([1, 2]); +
91200 * +
91201 * wrapped[Symbol.iterator]() === wrapped; +
91202 * // => true +
91203 * +
91204 * Array.from(wrapped); +
91205 * // => [1, 2] +
91206 */ +
91207 function wrapperToIterator() { +
91208 return this; +
91209 } +
91210 +
91211 /** +
91212 * Creates a clone of the chain sequence planting `value` as the wrapped value. +
91213 * +
91214 * @name plant +
91215 * @memberOf _ +
91216 * @since 3.2.0 +
91217 * @category Seq +
91218 * @param {*} value The value to plant. +
91219 * @returns {Object} Returns the new `lodash` wrapper instance. +
91220 * @example +
91221 * +
91222 * function square(n) { +
91223 * return n * n; +
91224 * } +
91225 * +
91226 * var wrapped = _([1, 2]).map(square); +
91227 * var other = wrapped.plant([3, 4]); +
91228 * +
91229 * other.value(); +
91230 * // => [9, 16] +
91231 * +
91232 * wrapped.value(); +
91233 * // => [1, 4] +
91234 */ +
91235 function wrapperPlant(value) { +
91236 var result, +
91237 parent = this; +
91238 +
91239 while (parent instanceof baseLodash) { +
91240 var clone = wrapperClone(parent); +
91241 clone.__index__ = 0; +
91242 clone.__values__ = undefined; +
91243 if (result) { +
91244 previous.__wrapped__ = clone; +
91245 } else { +
91246 result = clone; +
91247 } +
91248 var previous = clone; +
91249 parent = parent.__wrapped__; +
91250 } +
91251 previous.__wrapped__ = value; +
91252 return result; +
91253 } +
91254 +
91255 /** +
91256 * This method is the wrapper version of `_.reverse`. +
91257 * +
91258 * **Note:** This method mutates the wrapped array. +
91259 * +
91260 * @name reverse +
91261 * @memberOf _ +
91262 * @since 0.1.0 +
91263 * @category Seq +
91264 * @returns {Object} Returns the new `lodash` wrapper instance. +
91265 * @example +
91266 * +
91267 * var array = [1, 2, 3]; +
91268 * +
91269 * _(array).reverse().value() +
91270 * // => [3, 2, 1] +
91271 * +
91272 * console.log(array); +
91273 * // => [3, 2, 1] +
91274 */ +
91275 function wrapperReverse() { +
91276 var value = this.__wrapped__; +
91277 if (value instanceof LazyWrapper) { +
91278 var wrapped = value; +
91279 if (this.__actions__.length) { +
91280 wrapped = new LazyWrapper(this); +
91281 } +
91282 wrapped = wrapped.reverse(); +
91283 wrapped.__actions__.push({ +
91284 'func': thru, +
91285 'args': [reverse], +
91286 'thisArg': undefined +
91287 }); +
91288 return new LodashWrapper(wrapped, this.__chain__); +
91289 } +
91290 return this.thru(reverse); +
91291 } +
91292 +
91293 /** +
91294 * Executes the chain sequence to resolve the unwrapped value. +
91295 * +
91296 * @name value +
91297 * @memberOf _ +
91298 * @since 0.1.0 +
91299 * @alias toJSON, valueOf +
91300 * @category Seq +
91301 * @returns {*} Returns the resolved unwrapped value. +
91302 * @example +
91303 * +
91304 * _([1, 2, 3]).value(); +
91305 * // => [1, 2, 3] +
91306 */ +
91307 function wrapperValue() { +
91308 return baseWrapperValue(this.__wrapped__, this.__actions__); +
91309 } +
91310 +
91311 /*------------------------------------------------------------------------*/ +
91312 +
91313 /** +
91314 * Creates an object composed of keys generated from the results of running +
91315 * each element of `collection` thru `iteratee`. The corresponding value of +
91316 * each key is the number of times the key was returned by `iteratee`. The +
91317 * iteratee is invoked with one argument: (value). +
91318 * +
91319 * @static +
91320 * @memberOf _ +
91321 * @since 0.5.0 +
91322 * @category Collection +
91323 * @param {Array|Object} collection The collection to iterate over. +
91324 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
91325 * @returns {Object} Returns the composed aggregate object. +
91326 * @example +
91327 * +
91328 * _.countBy([6.1, 4.2, 6.3], Math.floor); +
91329 * // => { '4': 1, '6': 2 } +
91330 * +
91331 * // The `_.property` iteratee shorthand. +
91332 * _.countBy(['one', 'two', 'three'], 'length'); +
91333 * // => { '3': 2, '5': 1 } +
91334 */ +
91335 var countBy = createAggregator(function(result, value, key) { +
91336 if (hasOwnProperty.call(result, key)) { +
91337 ++result[key]; +
91338 } else { +
91339 baseAssignValue(result, key, 1); +
91340 } +
91341 }); +
91342 +
91343 /** +
91344 * Checks if `predicate` returns truthy for **all** elements of `collection`. +
91345 * Iteration is stopped once `predicate` returns falsey. The predicate is +
91346 * invoked with three arguments: (value, index|key, collection). +
91347 * +
91348 * **Note:** This method returns `true` for +
91349 * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because +
91350 * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of +
91351 * elements of empty collections. +
91352 * +
91353 * @static +
91354 * @memberOf _ +
91355 * @since 0.1.0 +
91356 * @category Collection +
91357 * @param {Array|Object} collection The collection to iterate over. +
91358 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
91359 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
91360 * @returns {boolean} Returns `true` if all elements pass the predicate check, +
91361 * else `false`. +
91362 * @example +
91363 * +
91364 * _.every([true, 1, null, 'yes'], Boolean); +
91365 * // => false +
91366 * +
91367 * var users = [ +
91368 * { 'user': 'barney', 'age': 36, 'active': false }, +
91369 * { 'user': 'fred', 'age': 40, 'active': false } +
91370 * ]; +
91371 * +
91372 * // The `_.matches` iteratee shorthand. +
91373 * _.every(users, { 'user': 'barney', 'active': false }); +
91374 * // => false +
91375 * +
91376 * // The `_.matchesProperty` iteratee shorthand. +
91377 * _.every(users, ['active', false]); +
91378 * // => true +
91379 * +
91380 * // The `_.property` iteratee shorthand. +
91381 * _.every(users, 'active'); +
91382 * // => false +
91383 */ +
91384 function every(collection, predicate, guard) { +
91385 var func = isArray(collection) ? arrayEvery : baseEvery; +
91386 if (guard && isIterateeCall(collection, predicate, guard)) { +
91387 predicate = undefined; +
91388 } +
91389 return func(collection, getIteratee(predicate, 3)); +
91390 } +
91391 +
91392 /** +
91393 * Iterates over elements of `collection`, returning an array of all elements +
91394 * `predicate` returns truthy for. The predicate is invoked with three +
91395 * arguments: (value, index|key, collection). +
91396 * +
91397 * **Note:** Unlike `_.remove`, this method returns a new array. +
91398 * +
91399 * @static +
91400 * @memberOf _ +
91401 * @since 0.1.0 +
91402 * @category Collection +
91403 * @param {Array|Object} collection The collection to iterate over. +
91404 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
91405 * @returns {Array} Returns the new filtered array. +
91406 * @see _.reject +
91407 * @example +
91408 * +
91409 * var users = [ +
91410 * { 'user': 'barney', 'age': 36, 'active': true }, +
91411 * { 'user': 'fred', 'age': 40, 'active': false } +
91412 * ]; +
91413 * +
91414 * _.filter(users, function(o) { return !o.active; }); +
91415 * // => objects for ['fred'] +
91416 * +
91417 * // The `_.matches` iteratee shorthand. +
91418 * _.filter(users, { 'age': 36, 'active': true }); +
91419 * // => objects for ['barney'] +
91420 * +
91421 * // The `_.matchesProperty` iteratee shorthand. +
91422 * _.filter(users, ['active', false]); +
91423 * // => objects for ['fred'] +
91424 * +
91425 * // The `_.property` iteratee shorthand. +
91426 * _.filter(users, 'active'); +
91427 * // => objects for ['barney'] +
91428 */ +
91429 function filter(collection, predicate) { +
91430 var func = isArray(collection) ? arrayFilter : baseFilter; +
91431 return func(collection, getIteratee(predicate, 3)); +
91432 } +
91433 +
91434 /** +
91435 * Iterates over elements of `collection`, returning the first element +
91436 * `predicate` returns truthy for. The predicate is invoked with three +
91437 * arguments: (value, index|key, collection). +
91438 * +
91439 * @static +
91440 * @memberOf _ +
91441 * @since 0.1.0 +
91442 * @category Collection +
91443 * @param {Array|Object} collection The collection to inspect. +
91444 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
91445 * @param {number} [fromIndex=0] The index to search from. +
91446 * @returns {*} Returns the matched element, else `undefined`. +
91447 * @example +
91448 * +
91449 * var users = [ +
91450 * { 'user': 'barney', 'age': 36, 'active': true }, +
91451 * { 'user': 'fred', 'age': 40, 'active': false }, +
91452 * { 'user': 'pebbles', 'age': 1, 'active': true } +
91453 * ]; +
91454 * +
91455 * _.find(users, function(o) { return o.age < 40; }); +
91456 * // => object for 'barney' +
91457 * +
91458 * // The `_.matches` iteratee shorthand. +
91459 * _.find(users, { 'age': 1, 'active': true }); +
91460 * // => object for 'pebbles' +
91461 * +
91462 * // The `_.matchesProperty` iteratee shorthand. +
91463 * _.find(users, ['active', false]); +
91464 * // => object for 'fred' +
91465 * +
91466 * // The `_.property` iteratee shorthand. +
91467 * _.find(users, 'active'); +
91468 * // => object for 'barney' +
91469 */ +
91470 var find = createFind(findIndex); +
91471 +
91472 /** +
91473 * This method is like `_.find` except that it iterates over elements of +
91474 * `collection` from right to left. +
91475 * +
91476 * @static +
91477 * @memberOf _ +
91478 * @since 2.0.0 +
91479 * @category Collection +
91480 * @param {Array|Object} collection The collection to inspect. +
91481 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
91482 * @param {number} [fromIndex=collection.length-1] The index to search from. +
91483 * @returns {*} Returns the matched element, else `undefined`. +
91484 * @example +
91485 * +
91486 * _.findLast([1, 2, 3, 4], function(n) { +
91487 * return n % 2 == 1; +
91488 * }); +
91489 * // => 3 +
91490 */ +
91491 var findLast = createFind(findLastIndex); +
91492 +
91493 /** +
91494 * Creates a flattened array of values by running each element in `collection` +
91495 * thru `iteratee` and flattening the mapped results. The iteratee is invoked +
91496 * with three arguments: (value, index|key, collection). +
91497 * +
91498 * @static +
91499 * @memberOf _ +
91500 * @since 4.0.0 +
91501 * @category Collection +
91502 * @param {Array|Object} collection The collection to iterate over. +
91503 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
91504 * @returns {Array} Returns the new flattened array. +
91505 * @example +
91506 * +
91507 * function duplicate(n) { +
91508 * return [n, n]; +
91509 * } +
91510 * +
91511 * _.flatMap([1, 2], duplicate); +
91512 * // => [1, 1, 2, 2] +
91513 */ +
91514 function flatMap(collection, iteratee) { +
91515 return baseFlatten(map(collection, iteratee), 1); +
91516 } +
91517 +
91518 /** +
91519 * This method is like `_.flatMap` except that it recursively flattens the +
91520 * mapped results. +
91521 * +
91522 * @static +
91523 * @memberOf _ +
91524 * @since 4.7.0 +
91525 * @category Collection +
91526 * @param {Array|Object} collection The collection to iterate over. +
91527 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
91528 * @returns {Array} Returns the new flattened array. +
91529 * @example +
91530 * +
91531 * function duplicate(n) { +
91532 * return [[[n, n]]]; +
91533 * } +
91534 * +
91535 * _.flatMapDeep([1, 2], duplicate); +
91536 * // => [1, 1, 2, 2] +
91537 */ +
91538 function flatMapDeep(collection, iteratee) { +
91539 return baseFlatten(map(collection, iteratee), INFINITY); +
91540 } +
91541 +
91542 /** +
91543 * This method is like `_.flatMap` except that it recursively flattens the +
91544 * mapped results up to `depth` times. +
91545 * +
91546 * @static +
91547 * @memberOf _ +
91548 * @since 4.7.0 +
91549 * @category Collection +
91550 * @param {Array|Object} collection The collection to iterate over. +
91551 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
91552 * @param {number} [depth=1] The maximum recursion depth. +
91553 * @returns {Array} Returns the new flattened array. +
91554 * @example +
91555 * +
91556 * function duplicate(n) { +
91557 * return [[[n, n]]]; +
91558 * } +
91559 * +
91560 * _.flatMapDepth([1, 2], duplicate, 2); +
91561 * // => [[1, 1], [2, 2]] +
91562 */ +
91563 function flatMapDepth(collection, iteratee, depth) { +
91564 depth = depth === undefined ? 1 : toInteger(depth); +
91565 return baseFlatten(map(collection, iteratee), depth); +
91566 } +
91567 +
91568 /** +
91569 * Iterates over elements of `collection` and invokes `iteratee` for each element. +
91570 * The iteratee is invoked with three arguments: (value, index|key, collection). +
91571 * Iteratee functions may exit iteration early by explicitly returning `false`. +
91572 * +
91573 * **Note:** As with other "Collections" methods, objects with a "length" +
91574 * property are iterated like arrays. To avoid this behavior use `_.forIn` +
91575 * or `_.forOwn` for object iteration. +
91576 * +
91577 * @static +
91578 * @memberOf _ +
91579 * @since 0.1.0 +
91580 * @alias each +
91581 * @category Collection +
91582 * @param {Array|Object} collection The collection to iterate over. +
91583 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
91584 * @returns {Array|Object} Returns `collection`. +
91585 * @see _.forEachRight +
91586 * @example +
91587 * +
91588 * _.forEach([1, 2], function(value) { +
91589 * console.log(value); +
91590 * }); +
91591 * // => Logs `1` then `2`. +
91592 * +
91593 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { +
91594 * console.log(key); +
91595 * }); +
91596 * // => Logs 'a' then 'b' (iteration order is not guaranteed). +
91597 */ +
91598 function forEach(collection, iteratee) { +
91599 var func = isArray(collection) ? arrayEach : baseEach; +
91600 return func(collection, getIteratee(iteratee, 3)); +
91601 } +
91602 +
91603 /** +
91604 * This method is like `_.forEach` except that it iterates over elements of +
91605 * `collection` from right to left. +
91606 * +
91607 * @static +
91608 * @memberOf _ +
91609 * @since 2.0.0 +
91610 * @alias eachRight +
91611 * @category Collection +
91612 * @param {Array|Object} collection The collection to iterate over. +
91613 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
91614 * @returns {Array|Object} Returns `collection`. +
91615 * @see _.forEach +
91616 * @example +
91617 * +
91618 * _.forEachRight([1, 2], function(value) { +
91619 * console.log(value); +
91620 * }); +
91621 * // => Logs `2` then `1`. +
91622 */ +
91623 function forEachRight(collection, iteratee) { +
91624 var func = isArray(collection) ? arrayEachRight : baseEachRight; +
91625 return func(collection, getIteratee(iteratee, 3)); +
91626 } +
91627 +
91628 /** +
91629 * Creates an object composed of keys generated from the results of running +
91630 * each element of `collection` thru `iteratee`. The order of grouped values +
91631 * is determined by the order they occur in `collection`. The corresponding +
91632 * value of each key is an array of elements responsible for generating the +
91633 * key. The iteratee is invoked with one argument: (value). +
91634 * +
91635 * @static +
91636 * @memberOf _ +
91637 * @since 0.1.0 +
91638 * @category Collection +
91639 * @param {Array|Object} collection The collection to iterate over. +
91640 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
91641 * @returns {Object} Returns the composed aggregate object. +
91642 * @example +
91643 * +
91644 * _.groupBy([6.1, 4.2, 6.3], Math.floor); +
91645 * // => { '4': [4.2], '6': [6.1, 6.3] } +
91646 * +
91647 * // The `_.property` iteratee shorthand. +
91648 * _.groupBy(['one', 'two', 'three'], 'length'); +
91649 * // => { '3': ['one', 'two'], '5': ['three'] } +
91650 */ +
91651 var groupBy = createAggregator(function(result, value, key) { +
91652 if (hasOwnProperty.call(result, key)) { +
91653 result[key].push(value); +
91654 } else { +
91655 baseAssignValue(result, key, [value]); +
91656 } +
91657 }); +
91658 +
91659 /** +
91660 * Checks if `value` is in `collection`. If `collection` is a string, it's +
91661 * checked for a substring of `value`, otherwise +
91662 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
91663 * is used for equality comparisons. If `fromIndex` is negative, it's used as +
91664 * the offset from the end of `collection`. +
91665 * +
91666 * @static +
91667 * @memberOf _ +
91668 * @since 0.1.0 +
91669 * @category Collection +
91670 * @param {Array|Object|string} collection The collection to inspect. +
91671 * @param {*} value The value to search for. +
91672 * @param {number} [fromIndex=0] The index to search from. +
91673 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +
91674 * @returns {boolean} Returns `true` if `value` is found, else `false`. +
91675 * @example +
91676 * +
91677 * _.includes([1, 2, 3], 1); +
91678 * // => true +
91679 * +
91680 * _.includes([1, 2, 3], 1, 2); +
91681 * // => false +
91682 * +
91683 * _.includes({ 'a': 1, 'b': 2 }, 1); +
91684 * // => true +
91685 * +
91686 * _.includes('abcd', 'bc'); +
91687 * // => true +
91688 */ +
91689 function includes(collection, value, fromIndex, guard) { +
91690 collection = isArrayLike(collection) ? collection : values(collection); +
91691 fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; +
91692 +
91693 var length = collection.length; +
91694 if (fromIndex < 0) { +
91695 fromIndex = nativeMax(length + fromIndex, 0); +
91696 } +
91697 return isString(collection) +
91698 ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) +
91699 : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +
91700 } +
91701 +
91702 /** +
91703 * Invokes the method at `path` of each element in `collection`, returning +
91704 * an array of the results of each invoked method. Any additional arguments +
91705 * are provided to each invoked method. If `path` is a function, it's invoked +
91706 * for, and `this` bound to, each element in `collection`. +
91707 * +
91708 * @static +
91709 * @memberOf _ +
91710 * @since 4.0.0 +
91711 * @category Collection +
91712 * @param {Array|Object} collection The collection to iterate over. +
91713 * @param {Array|Function|string} path The path of the method to invoke or +
91714 * the function invoked per iteration. +
91715 * @param {...*} [args] The arguments to invoke each method with. +
91716 * @returns {Array} Returns the array of results. +
91717 * @example +
91718 * +
91719 * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); +
91720 * // => [[1, 5, 7], [1, 2, 3]] +
91721 * +
91722 * _.invokeMap([123, 456], String.prototype.split, ''); +
91723 * // => [['1', '2', '3'], ['4', '5', '6']] +
91724 */ +
91725 var invokeMap = baseRest(function(collection, path, args) { +
91726 var index = -1, +
91727 isFunc = typeof path == 'function', +
91728 result = isArrayLike(collection) ? Array(collection.length) : []; +
91729 +
91730 baseEach(collection, function(value) { +
91731 result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); +
91732 }); +
91733 return result; +
91734 }); +
91735 +
91736 /** +
91737 * Creates an object composed of keys generated from the results of running +
91738 * each element of `collection` thru `iteratee`. The corresponding value of +
91739 * each key is the last element responsible for generating the key. The +
91740 * iteratee is invoked with one argument: (value). +
91741 * +
91742 * @static +
91743 * @memberOf _ +
91744 * @since 4.0.0 +
91745 * @category Collection +
91746 * @param {Array|Object} collection The collection to iterate over. +
91747 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. +
91748 * @returns {Object} Returns the composed aggregate object. +
91749 * @example +
91750 * +
91751 * var array = [ +
91752 * { 'dir': 'left', 'code': 97 }, +
91753 * { 'dir': 'right', 'code': 100 } +
91754 * ]; +
91755 * +
91756 * _.keyBy(array, function(o) { +
91757 * return String.fromCharCode(o.code); +
91758 * }); +
91759 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } +
91760 * +
91761 * _.keyBy(array, 'dir'); +
91762 * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } +
91763 */ +
91764 var keyBy = createAggregator(function(result, value, key) { +
91765 baseAssignValue(result, key, value); +
91766 }); +
91767 +
91768 /** +
91769 * Creates an array of values by running each element in `collection` thru +
91770 * `iteratee`. The iteratee is invoked with three arguments: +
91771 * (value, index|key, collection). +
91772 * +
91773 * Many lodash methods are guarded to work as iteratees for methods like +
91774 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. +
91775 * +
91776 * The guarded methods are: +
91777 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, +
91778 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, +
91779 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, +
91780 * `template`, `trim`, `trimEnd`, `trimStart`, and `words` +
91781 * +
91782 * @static +
91783 * @memberOf _ +
91784 * @since 0.1.0 +
91785 * @category Collection +
91786 * @param {Array|Object} collection The collection to iterate over. +
91787 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
91788 * @returns {Array} Returns the new mapped array. +
91789 * @example +
91790 * +
91791 * function square(n) { +
91792 * return n * n; +
91793 * } +
91794 * +
91795 * _.map([4, 8], square); +
91796 * // => [16, 64] +
91797 * +
91798 * _.map({ 'a': 4, 'b': 8 }, square); +
91799 * // => [16, 64] (iteration order is not guaranteed) +
91800 * +
91801 * var users = [ +
91802 * { 'user': 'barney' }, +
91803 * { 'user': 'fred' } +
91804 * ]; +
91805 * +
91806 * // The `_.property` iteratee shorthand. +
91807 * _.map(users, 'user'); +
91808 * // => ['barney', 'fred'] +
91809 */ +
91810 function map(collection, iteratee) { +
91811 var func = isArray(collection) ? arrayMap : baseMap; +
91812 return func(collection, getIteratee(iteratee, 3)); +
91813 } +
91814 +
91815 /** +
91816 * This method is like `_.sortBy` except that it allows specifying the sort +
91817 * orders of the iteratees to sort by. If `orders` is unspecified, all values +
91818 * are sorted in ascending order. Otherwise, specify an order of "desc" for +
91819 * descending or "asc" for ascending sort order of corresponding values. +
91820 * +
91821 * @static +
91822 * @memberOf _ +
91823 * @since 4.0.0 +
91824 * @category Collection +
91825 * @param {Array|Object} collection The collection to iterate over. +
91826 * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] +
91827 * The iteratees to sort by. +
91828 * @param {string[]} [orders] The sort orders of `iteratees`. +
91829 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. +
91830 * @returns {Array} Returns the new sorted array. +
91831 * @example +
91832 * +
91833 * var users = [ +
91834 * { 'user': 'fred', 'age': 48 }, +
91835 * { 'user': 'barney', 'age': 34 }, +
91836 * { 'user': 'fred', 'age': 40 }, +
91837 * { 'user': 'barney', 'age': 36 } +
91838 * ]; +
91839 * +
91840 * // Sort by `user` in ascending order and by `age` in descending order. +
91841 * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); +
91842 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] +
91843 */ +
91844 function orderBy(collection, iteratees, orders, guard) { +
91845 if (collection == null) { +
91846 return []; +
91847 } +
91848 if (!isArray(iteratees)) { +
91849 iteratees = iteratees == null ? [] : [iteratees]; +
91850 } +
91851 orders = guard ? undefined : orders; +
91852 if (!isArray(orders)) { +
91853 orders = orders == null ? [] : [orders]; +
91854 } +
91855 return baseOrderBy(collection, iteratees, orders); +
91856 } +
91857 +
91858 /** +
91859 * Creates an array of elements split into two groups, the first of which +
91860 * contains elements `predicate` returns truthy for, the second of which +
91861 * contains elements `predicate` returns falsey for. The predicate is +
91862 * invoked with one argument: (value). +
91863 * +
91864 * @static +
91865 * @memberOf _ +
91866 * @since 3.0.0 +
91867 * @category Collection +
91868 * @param {Array|Object} collection The collection to iterate over. +
91869 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
91870 * @returns {Array} Returns the array of grouped elements. +
91871 * @example +
91872 * +
91873 * var users = [ +
91874 * { 'user': 'barney', 'age': 36, 'active': false }, +
91875 * { 'user': 'fred', 'age': 40, 'active': true }, +
91876 * { 'user': 'pebbles', 'age': 1, 'active': false } +
91877 * ]; +
91878 * +
91879 * _.partition(users, function(o) { return o.active; }); +
91880 * // => objects for [['fred'], ['barney', 'pebbles']] +
91881 * +
91882 * // The `_.matches` iteratee shorthand. +
91883 * _.partition(users, { 'age': 1, 'active': false }); +
91884 * // => objects for [['pebbles'], ['barney', 'fred']] +
91885 * +
91886 * // The `_.matchesProperty` iteratee shorthand. +
91887 * _.partition(users, ['active', false]); +
91888 * // => objects for [['barney', 'pebbles'], ['fred']] +
91889 * +
91890 * // The `_.property` iteratee shorthand. +
91891 * _.partition(users, 'active'); +
91892 * // => objects for [['fred'], ['barney', 'pebbles']] +
91893 */ +
91894 var partition = createAggregator(function(result, value, key) { +
91895 result[key ? 0 : 1].push(value); +
91896 }, function() { return [[], []]; }); +
91897 +
91898 /** +
91899 * Reduces `collection` to a value which is the accumulated result of running +
91900 * each element in `collection` thru `iteratee`, where each successive +
91901 * invocation is supplied the return value of the previous. If `accumulator` +
91902 * is not given, the first element of `collection` is used as the initial +
91903 * value. The iteratee is invoked with four arguments: +
91904 * (accumulator, value, index|key, collection). +
91905 * +
91906 * Many lodash methods are guarded to work as iteratees for methods like +
91907 * `_.reduce`, `_.reduceRight`, and `_.transform`. +
91908 * +
91909 * The guarded methods are: +
91910 * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, +
91911 * and `sortBy` +
91912 * +
91913 * @static +
91914 * @memberOf _ +
91915 * @since 0.1.0 +
91916 * @category Collection +
91917 * @param {Array|Object} collection The collection to iterate over. +
91918 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
91919 * @param {*} [accumulator] The initial value. +
91920 * @returns {*} Returns the accumulated value. +
91921 * @see _.reduceRight +
91922 * @example +
91923 * +
91924 * _.reduce([1, 2], function(sum, n) { +
91925 * return sum + n; +
91926 * }, 0); +
91927 * // => 3 +
91928 * +
91929 * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +
91930 * (result[value] || (result[value] = [])).push(key); +
91931 * return result; +
91932 * }, {}); +
91933 * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) +
91934 */ +
91935 function reduce(collection, iteratee, accumulator) { +
91936 var func = isArray(collection) ? arrayReduce : baseReduce, +
91937 initAccum = arguments.length < 3; +
91938 +
91939 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); +
91940 } +
91941 +
91942 /** +
91943 * This method is like `_.reduce` except that it iterates over elements of +
91944 * `collection` from right to left. +
91945 * +
91946 * @static +
91947 * @memberOf _ +
91948 * @since 0.1.0 +
91949 * @category Collection +
91950 * @param {Array|Object} collection The collection to iterate over. +
91951 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
91952 * @param {*} [accumulator] The initial value. +
91953 * @returns {*} Returns the accumulated value. +
91954 * @see _.reduce +
91955 * @example +
91956 * +
91957 * var array = [[0, 1], [2, 3], [4, 5]]; +
91958 * +
91959 * _.reduceRight(array, function(flattened, other) { +
91960 * return flattened.concat(other); +
91961 * }, []); +
91962 * // => [4, 5, 2, 3, 0, 1] +
91963 */ +
91964 function reduceRight(collection, iteratee, accumulator) { +
91965 var func = isArray(collection) ? arrayReduceRight : baseReduce, +
91966 initAccum = arguments.length < 3; +
91967 +
91968 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); +
91969 } +
91970 +
91971 /** +
91972 * The opposite of `_.filter`; this method returns the elements of `collection` +
91973 * that `predicate` does **not** return truthy for. +
91974 * +
91975 * @static +
91976 * @memberOf _ +
91977 * @since 0.1.0 +
91978 * @category Collection +
91979 * @param {Array|Object} collection The collection to iterate over. +
91980 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
91981 * @returns {Array} Returns the new filtered array. +
91982 * @see _.filter +
91983 * @example +
91984 * +
91985 * var users = [ +
91986 * { 'user': 'barney', 'age': 36, 'active': false }, +
91987 * { 'user': 'fred', 'age': 40, 'active': true } +
91988 * ]; +
91989 * +
91990 * _.reject(users, function(o) { return !o.active; }); +
91991 * // => objects for ['fred'] +
91992 * +
91993 * // The `_.matches` iteratee shorthand. +
91994 * _.reject(users, { 'age': 40, 'active': true }); +
91995 * // => objects for ['barney'] +
91996 * +
91997 * // The `_.matchesProperty` iteratee shorthand. +
91998 * _.reject(users, ['active', false]); +
91999 * // => objects for ['fred'] +
92000 * +
92001 * // The `_.property` iteratee shorthand. +
92002 * _.reject(users, 'active'); +
92003 * // => objects for ['barney'] +
92004 */ +
92005 function reject(collection, predicate) { +
92006 var func = isArray(collection) ? arrayFilter : baseFilter; +
92007 return func(collection, negate(getIteratee(predicate, 3))); +
92008 } +
92009 +
92010 /** +
92011 * Gets a random element from `collection`. +
92012 * +
92013 * @static +
92014 * @memberOf _ +
92015 * @since 2.0.0 +
92016 * @category Collection +
92017 * @param {Array|Object} collection The collection to sample. +
92018 * @returns {*} Returns the random element. +
92019 * @example +
92020 * +
92021 * _.sample([1, 2, 3, 4]); +
92022 * // => 2 +
92023 */ +
92024 function sample(collection) { +
92025 var func = isArray(collection) ? arraySample : baseSample; +
92026 return func(collection); +
92027 } +
92028 +
92029 /** +
92030 * Gets `n` random elements at unique keys from `collection` up to the +
92031 * size of `collection`. +
92032 * +
92033 * @static +
92034 * @memberOf _ +
92035 * @since 4.0.0 +
92036 * @category Collection +
92037 * @param {Array|Object} collection The collection to sample. +
92038 * @param {number} [n=1] The number of elements to sample. +
92039 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
92040 * @returns {Array} Returns the random elements. +
92041 * @example +
92042 * +
92043 * _.sampleSize([1, 2, 3], 2); +
92044 * // => [3, 1] +
92045 * +
92046 * _.sampleSize([1, 2, 3], 4); +
92047 * // => [2, 3, 1] +
92048 */ +
92049 function sampleSize(collection, n, guard) { +
92050 if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { +
92051 n = 1; +
92052 } else { +
92053 n = toInteger(n); +
92054 } +
92055 var func = isArray(collection) ? arraySampleSize : baseSampleSize; +
92056 return func(collection, n); +
92057 } +
92058 +
92059 /** +
92060 * Creates an array of shuffled values, using a version of the +
92061 * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). +
92062 * +
92063 * @static +
92064 * @memberOf _ +
92065 * @since 0.1.0 +
92066 * @category Collection +
92067 * @param {Array|Object} collection The collection to shuffle. +
92068 * @returns {Array} Returns the new shuffled array. +
92069 * @example +
92070 * +
92071 * _.shuffle([1, 2, 3, 4]); +
92072 * // => [4, 1, 3, 2] +
92073 */ +
92074 function shuffle(collection) { +
92075 var func = isArray(collection) ? arrayShuffle : baseShuffle; +
92076 return func(collection); +
92077 } +
92078 +
92079 /** +
92080 * Gets the size of `collection` by returning its length for array-like +
92081 * values or the number of own enumerable string keyed properties for objects. +
92082 * +
92083 * @static +
92084 * @memberOf _ +
92085 * @since 0.1.0 +
92086 * @category Collection +
92087 * @param {Array|Object|string} collection The collection to inspect. +
92088 * @returns {number} Returns the collection size. +
92089 * @example +
92090 * +
92091 * _.size([1, 2, 3]); +
92092 * // => 3 +
92093 * +
92094 * _.size({ 'a': 1, 'b': 2 }); +
92095 * // => 2 +
92096 * +
92097 * _.size('pebbles'); +
92098 * // => 7 +
92099 */ +
92100 function size(collection) { +
92101 if (collection == null) { +
92102 return 0; +
92103 } +
92104 if (isArrayLike(collection)) { +
92105 return isString(collection) ? stringSize(collection) : collection.length; +
92106 } +
92107 var tag = getTag(collection); +
92108 if (tag == mapTag || tag == setTag) { +
92109 return collection.size; +
92110 } +
92111 return baseKeys(collection).length; +
92112 } +
92113 +
92114 /** +
92115 * Checks if `predicate` returns truthy for **any** element of `collection`. +
92116 * Iteration is stopped once `predicate` returns truthy. The predicate is +
92117 * invoked with three arguments: (value, index|key, collection). +
92118 * +
92119 * @static +
92120 * @memberOf _ +
92121 * @since 0.1.0 +
92122 * @category Collection +
92123 * @param {Array|Object} collection The collection to iterate over. +
92124 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
92125 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
92126 * @returns {boolean} Returns `true` if any element passes the predicate check, +
92127 * else `false`. +
92128 * @example +
92129 * +
92130 * _.some([null, 0, 'yes', false], Boolean); +
92131 * // => true +
92132 * +
92133 * var users = [ +
92134 * { 'user': 'barney', 'active': true }, +
92135 * { 'user': 'fred', 'active': false } +
92136 * ]; +
92137 * +
92138 * // The `_.matches` iteratee shorthand. +
92139 * _.some(users, { 'user': 'barney', 'active': false }); +
92140 * // => false +
92141 * +
92142 * // The `_.matchesProperty` iteratee shorthand. +
92143 * _.some(users, ['active', false]); +
92144 * // => true +
92145 * +
92146 * // The `_.property` iteratee shorthand. +
92147 * _.some(users, 'active'); +
92148 * // => true +
92149 */ +
92150 function some(collection, predicate, guard) { +
92151 var func = isArray(collection) ? arraySome : baseSome; +
92152 if (guard && isIterateeCall(collection, predicate, guard)) { +
92153 predicate = undefined; +
92154 } +
92155 return func(collection, getIteratee(predicate, 3)); +
92156 } +
92157 +
92158 /** +
92159 * Creates an array of elements, sorted in ascending order by the results of +
92160 * running each element in a collection thru each iteratee. This method +
92161 * performs a stable sort, that is, it preserves the original sort order of +
92162 * equal elements. The iteratees are invoked with one argument: (value). +
92163 * +
92164 * @static +
92165 * @memberOf _ +
92166 * @since 0.1.0 +
92167 * @category Collection +
92168 * @param {Array|Object} collection The collection to iterate over. +
92169 * @param {...(Function|Function[])} [iteratees=[_.identity]] +
92170 * The iteratees to sort by. +
92171 * @returns {Array} Returns the new sorted array. +
92172 * @example +
92173 * +
92174 * var users = [ +
92175 * { 'user': 'fred', 'age': 48 }, +
92176 * { 'user': 'barney', 'age': 36 }, +
92177 * { 'user': 'fred', 'age': 40 }, +
92178 * { 'user': 'barney', 'age': 34 } +
92179 * ]; +
92180 * +
92181 * _.sortBy(users, [function(o) { return o.user; }]); +
92182 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] +
92183 * +
92184 * _.sortBy(users, ['user', 'age']); +
92185 * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] +
92186 */ +
92187 var sortBy = baseRest(function(collection, iteratees) { +
92188 if (collection == null) { +
92189 return []; +
92190 } +
92191 var length = iteratees.length; +
92192 if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { +
92193 iteratees = []; +
92194 } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { +
92195 iteratees = [iteratees[0]]; +
92196 } +
92197 return baseOrderBy(collection, baseFlatten(iteratees, 1), []); +
92198 }); +
92199 +
92200 /*------------------------------------------------------------------------*/ +
92201 +
92202 /** +
92203 * Gets the timestamp of the number of milliseconds that have elapsed since +
92204 * the Unix epoch (1 January 1970 00:00:00 UTC). +
92205 * +
92206 * @static +
92207 * @memberOf _ +
92208 * @since 2.4.0 +
92209 * @category Date +
92210 * @returns {number} Returns the timestamp. +
92211 * @example +
92212 * +
92213 * _.defer(function(stamp) { +
92214 * console.log(_.now() - stamp); +
92215 * }, _.now()); +
92216 * // => Logs the number of milliseconds it took for the deferred invocation. +
92217 */ +
92218 var now = ctxNow || function() { +
92219 return root.Date.now(); +
92220 }; +
92221 +
92222 /*------------------------------------------------------------------------*/ +
92223 +
92224 /** +
92225 * The opposite of `_.before`; this method creates a function that invokes +
92226 * `func` once it's called `n` or more times. +
92227 * +
92228 * @static +
92229 * @memberOf _ +
92230 * @since 0.1.0 +
92231 * @category Function +
92232 * @param {number} n The number of calls before `func` is invoked. +
92233 * @param {Function} func The function to restrict. +
92234 * @returns {Function} Returns the new restricted function. +
92235 * @example +
92236 * +
92237 * var saves = ['profile', 'settings']; +
92238 * +
92239 * var done = _.after(saves.length, function() { +
92240 * console.log('done saving!'); +
92241 * }); +
92242 * +
92243 * _.forEach(saves, function(type) { +
92244 * asyncSave({ 'type': type, 'complete': done }); +
92245 * }); +
92246 * // => Logs 'done saving!' after the two async saves have completed. +
92247 */ +
92248 function after(n, func) { +
92249 if (typeof func != 'function') { +
92250 throw new TypeError(FUNC_ERROR_TEXT); +
92251 } +
92252 n = toInteger(n); +
92253 return function() { +
92254 if (--n < 1) { +
92255 return func.apply(this, arguments); +
92256 } +
92257 }; +
92258 } +
92259 +
92260 /** +
92261 * Creates a function that invokes `func`, with up to `n` arguments, +
92262 * ignoring any additional arguments. +
92263 * +
92264 * @static +
92265 * @memberOf _ +
92266 * @since 3.0.0 +
92267 * @category Function +
92268 * @param {Function} func The function to cap arguments for. +
92269 * @param {number} [n=func.length] The arity cap. +
92270 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
92271 * @returns {Function} Returns the new capped function. +
92272 * @example +
92273 * +
92274 * _.map(['6', '8', '10'], _.ary(parseInt, 1)); +
92275 * // => [6, 8, 10] +
92276 */ +
92277 function ary(func, n, guard) { +
92278 n = guard ? undefined : n; +
92279 n = (func && n == null) ? func.length : n; +
92280 return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); +
92281 } +
92282 +
92283 /** +
92284 * Creates a function that invokes `func`, with the `this` binding and arguments +
92285 * of the created function, while it's called less than `n` times. Subsequent +
92286 * calls to the created function return the result of the last `func` invocation. +
92287 * +
92288 * @static +
92289 * @memberOf _ +
92290 * @since 3.0.0 +
92291 * @category Function +
92292 * @param {number} n The number of calls at which `func` is no longer invoked. +
92293 * @param {Function} func The function to restrict. +
92294 * @returns {Function} Returns the new restricted function. +
92295 * @example +
92296 * +
92297 * jQuery(element).on('click', _.before(5, addContactToList)); +
92298 * // => Allows adding up to 4 contacts to the list. +
92299 */ +
92300 function before(n, func) { +
92301 var result; +
92302 if (typeof func != 'function') { +
92303 throw new TypeError(FUNC_ERROR_TEXT); +
92304 } +
92305 n = toInteger(n); +
92306 return function() { +
92307 if (--n > 0) { +
92308 result = func.apply(this, arguments); +
92309 } +
92310 if (n <= 1) { +
92311 func = undefined; +
92312 } +
92313 return result; +
92314 }; +
92315 } +
92316 +
92317 /** +
92318 * Creates a function that invokes `func` with the `this` binding of `thisArg` +
92319 * and `partials` prepended to the arguments it receives. +
92320 * +
92321 * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, +
92322 * may be used as a placeholder for partially applied arguments. +
92323 * +
92324 * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" +
92325 * property of bound functions. +
92326 * +
92327 * @static +
92328 * @memberOf _ +
92329 * @since 0.1.0 +
92330 * @category Function +
92331 * @param {Function} func The function to bind. +
92332 * @param {*} thisArg The `this` binding of `func`. +
92333 * @param {...*} [partials] The arguments to be partially applied. +
92334 * @returns {Function} Returns the new bound function. +
92335 * @example +
92336 * +
92337 * function greet(greeting, punctuation) { +
92338 * return greeting + ' ' + this.user + punctuation; +
92339 * } +
92340 * +
92341 * var object = { 'user': 'fred' }; +
92342 * +
92343 * var bound = _.bind(greet, object, 'hi'); +
92344 * bound('!'); +
92345 * // => 'hi fred!' +
92346 * +
92347 * // Bound with placeholders. +
92348 * var bound = _.bind(greet, object, _, '!'); +
92349 * bound('hi'); +
92350 * // => 'hi fred!' +
92351 */ +
92352 var bind = baseRest(function(func, thisArg, partials) { +
92353 var bitmask = WRAP_BIND_FLAG; +
92354 if (partials.length) { +
92355 var holders = replaceHolders(partials, getHolder(bind)); +
92356 bitmask |= WRAP_PARTIAL_FLAG; +
92357 } +
92358 return createWrap(func, bitmask, thisArg, partials, holders); +
92359 }); +
92360 +
92361 /** +
92362 * Creates a function that invokes the method at `object[key]` with `partials` +
92363 * prepended to the arguments it receives. +
92364 * +
92365 * This method differs from `_.bind` by allowing bound functions to reference +
92366 * methods that may be redefined or don't yet exist. See +
92367 * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) +
92368 * for more details. +
92369 * +
92370 * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic +
92371 * builds, may be used as a placeholder for partially applied arguments. +
92372 * +
92373 * @static +
92374 * @memberOf _ +
92375 * @since 0.10.0 +
92376 * @category Function +
92377 * @param {Object} object The object to invoke the method on. +
92378 * @param {string} key The key of the method. +
92379 * @param {...*} [partials] The arguments to be partially applied. +
92380 * @returns {Function} Returns the new bound function. +
92381 * @example +
92382 * +
92383 * var object = { +
92384 * 'user': 'fred', +
92385 * 'greet': function(greeting, punctuation) { +
92386 * return greeting + ' ' + this.user + punctuation; +
92387 * } +
92388 * }; +
92389 * +
92390 * var bound = _.bindKey(object, 'greet', 'hi'); +
92391 * bound('!'); +
92392 * // => 'hi fred!' +
92393 * +
92394 * object.greet = function(greeting, punctuation) { +
92395 * return greeting + 'ya ' + this.user + punctuation; +
92396 * }; +
92397 * +
92398 * bound('!'); +
92399 * // => 'hiya fred!' +
92400 * +
92401 * // Bound with placeholders. +
92402 * var bound = _.bindKey(object, 'greet', _, '!'); +
92403 * bound('hi'); +
92404 * // => 'hiya fred!' +
92405 */ +
92406 var bindKey = baseRest(function(object, key, partials) { +
92407 var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; +
92408 if (partials.length) { +
92409 var holders = replaceHolders(partials, getHolder(bindKey)); +
92410 bitmask |= WRAP_PARTIAL_FLAG; +
92411 } +
92412 return createWrap(key, bitmask, object, partials, holders); +
92413 }); +
92414 +
92415 /** +
92416 * Creates a function that accepts arguments of `func` and either invokes +
92417 * `func` returning its result, if at least `arity` number of arguments have +
92418 * been provided, or returns a function that accepts the remaining `func` +
92419 * arguments, and so on. The arity of `func` may be specified if `func.length` +
92420 * is not sufficient. +
92421 * +
92422 * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, +
92423 * may be used as a placeholder for provided arguments. +
92424 * +
92425 * **Note:** This method doesn't set the "length" property of curried functions. +
92426 * +
92427 * @static +
92428 * @memberOf _ +
92429 * @since 2.0.0 +
92430 * @category Function +
92431 * @param {Function} func The function to curry. +
92432 * @param {number} [arity=func.length] The arity of `func`. +
92433 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
92434 * @returns {Function} Returns the new curried function. +
92435 * @example +
92436 * +
92437 * var abc = function(a, b, c) { +
92438 * return [a, b, c]; +
92439 * }; +
92440 * +
92441 * var curried = _.curry(abc); +
92442 * +
92443 * curried(1)(2)(3); +
92444 * // => [1, 2, 3] +
92445 * +
92446 * curried(1, 2)(3); +
92447 * // => [1, 2, 3] +
92448 * +
92449 * curried(1, 2, 3); +
92450 * // => [1, 2, 3] +
92451 * +
92452 * // Curried with placeholders. +
92453 * curried(1)(_, 3)(2); +
92454 * // => [1, 2, 3] +
92455 */ +
92456 function curry(func, arity, guard) { +
92457 arity = guard ? undefined : arity; +
92458 var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +
92459 result.placeholder = curry.placeholder; +
92460 return result; +
92461 } +
92462 +
92463 /** +
92464 * This method is like `_.curry` except that arguments are applied to `func` +
92465 * in the manner of `_.partialRight` instead of `_.partial`. +
92466 * +
92467 * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic +
92468 * builds, may be used as a placeholder for provided arguments. +
92469 * +
92470 * **Note:** This method doesn't set the "length" property of curried functions. +
92471 * +
92472 * @static +
92473 * @memberOf _ +
92474 * @since 3.0.0 +
92475 * @category Function +
92476 * @param {Function} func The function to curry. +
92477 * @param {number} [arity=func.length] The arity of `func`. +
92478 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
92479 * @returns {Function} Returns the new curried function. +
92480 * @example +
92481 * +
92482 * var abc = function(a, b, c) { +
92483 * return [a, b, c]; +
92484 * }; +
92485 * +
92486 * var curried = _.curryRight(abc); +
92487 * +
92488 * curried(3)(2)(1); +
92489 * // => [1, 2, 3] +
92490 * +
92491 * curried(2, 3)(1); +
92492 * // => [1, 2, 3] +
92493 * +
92494 * curried(1, 2, 3); +
92495 * // => [1, 2, 3] +
92496 * +
92497 * // Curried with placeholders. +
92498 * curried(3)(1, _)(2); +
92499 * // => [1, 2, 3] +
92500 */ +
92501 function curryRight(func, arity, guard) { +
92502 arity = guard ? undefined : arity; +
92503 var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); +
92504 result.placeholder = curryRight.placeholder; +
92505 return result; +
92506 } +
92507 +
92508 /** +
92509 * Creates a debounced function that delays invoking `func` until after `wait` +
92510 * milliseconds have elapsed since the last time the debounced function was +
92511 * invoked. The debounced function comes with a `cancel` method to cancel +
92512 * delayed `func` invocations and a `flush` method to immediately invoke them. +
92513 * Provide `options` to indicate whether `func` should be invoked on the +
92514 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked +
92515 * with the last arguments provided to the debounced function. Subsequent +
92516 * calls to the debounced function return the result of the last `func` +
92517 * invocation. +
92518 * +
92519 * **Note:** If `leading` and `trailing` options are `true`, `func` is +
92520 * invoked on the trailing edge of the timeout only if the debounced function +
92521 * is invoked more than once during the `wait` timeout. +
92522 * +
92523 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +
92524 * until to the next tick, similar to `setTimeout` with a timeout of `0`. +
92525 * +
92526 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +
92527 * for details over the differences between `_.debounce` and `_.throttle`. +
92528 * +
92529 * @static +
92530 * @memberOf _ +
92531 * @since 0.1.0 +
92532 * @category Function +
92533 * @param {Function} func The function to debounce. +
92534 * @param {number} [wait=0] The number of milliseconds to delay. +
92535 * @param {Object} [options={}] The options object. +
92536 * @param {boolean} [options.leading=false] +
92537 * Specify invoking on the leading edge of the timeout. +
92538 * @param {number} [options.maxWait] +
92539 * The maximum time `func` is allowed to be delayed before it's invoked. +
92540 * @param {boolean} [options.trailing=true] +
92541 * Specify invoking on the trailing edge of the timeout. +
92542 * @returns {Function} Returns the new debounced function. +
92543 * @example +
92544 * +
92545 * // Avoid costly calculations while the window size is in flux. +
92546 * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); +
92547 * +
92548 * // Invoke `sendMail` when clicked, debouncing subsequent calls. +
92549 * jQuery(element).on('click', _.debounce(sendMail, 300, { +
92550 * 'leading': true, +
92551 * 'trailing': false +
92552 * })); +
92553 * +
92554 * // Ensure `batchLog` is invoked once after 1 second of debounced calls. +
92555 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); +
92556 * var source = new EventSource('/stream'); +
92557 * jQuery(source).on('message', debounced); +
92558 * +
92559 * // Cancel the trailing debounced invocation. +
92560 * jQuery(window).on('popstate', debounced.cancel); +
92561 */ +
92562 function debounce(func, wait, options) { +
92563 var lastArgs, +
92564 lastThis, +
92565 maxWait, +
92566 result, +
92567 timerId, +
92568 lastCallTime, +
92569 lastInvokeTime = 0, +
92570 leading = false, +
92571 maxing = false, +
92572 trailing = true; +
92573 +
92574 if (typeof func != 'function') { +
92575 throw new TypeError(FUNC_ERROR_TEXT); +
92576 } +
92577 wait = toNumber(wait) || 0; +
92578 if (isObject(options)) { +
92579 leading = !!options.leading; +
92580 maxing = 'maxWait' in options; +
92581 maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; +
92582 trailing = 'trailing' in options ? !!options.trailing : trailing; +
92583 } +
92584 +
92585 function invokeFunc(time) { +
92586 var args = lastArgs, +
92587 thisArg = lastThis; +
92588 +
92589 lastArgs = lastThis = undefined; +
92590 lastInvokeTime = time; +
92591 result = func.apply(thisArg, args); +
92592 return result; +
92593 } +
92594 +
92595 function leadingEdge(time) { +
92596 // Reset any `maxWait` timer. +
92597 lastInvokeTime = time; +
92598 // Start the timer for the trailing edge. +
92599 timerId = setTimeout(timerExpired, wait); +
92600 // Invoke the leading edge. +
92601 return leading ? invokeFunc(time) : result; +
92602 } +
92603 +
92604 function remainingWait(time) { +
92605 var timeSinceLastCall = time - lastCallTime, +
92606 timeSinceLastInvoke = time - lastInvokeTime, +
92607 timeWaiting = wait - timeSinceLastCall; +
92608 +
92609 return maxing +
92610 ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) +
92611 : timeWaiting; +
92612 } +
92613 +
92614 function shouldInvoke(time) { +
92615 var timeSinceLastCall = time - lastCallTime, +
92616 timeSinceLastInvoke = time - lastInvokeTime; +
92617 +
92618 // Either this is the first call, activity has stopped and we're at the +
92619 // trailing edge, the system time has gone backwards and we're treating +
92620 // it as the trailing edge, or we've hit the `maxWait` limit. +
92621 return (lastCallTime === undefined || (timeSinceLastCall >= wait) || +
92622 (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); +
92623 } +
92624 +
92625 function timerExpired() { +
92626 var time = now(); +
92627 if (shouldInvoke(time)) { +
92628 return trailingEdge(time); +
92629 } +
92630 // Restart the timer. +
92631 timerId = setTimeout(timerExpired, remainingWait(time)); +
92632 } +
92633 +
92634 function trailingEdge(time) { +
92635 timerId = undefined; +
92636 +
92637 // Only invoke if we have `lastArgs` which means `func` has been +
92638 // debounced at least once. +
92639 if (trailing && lastArgs) { +
92640 return invokeFunc(time); +
92641 } +
92642 lastArgs = lastThis = undefined; +
92643 return result; +
92644 } +
92645 +
92646 function cancel() { +
92647 if (timerId !== undefined) { +
92648 clearTimeout(timerId); +
92649 } +
92650 lastInvokeTime = 0; +
92651 lastArgs = lastCallTime = lastThis = timerId = undefined; +
92652 } +
92653 +
92654 function flush() { +
92655 return timerId === undefined ? result : trailingEdge(now()); +
92656 } +
92657 +
92658 function debounced() { +
92659 var time = now(), +
92660 isInvoking = shouldInvoke(time); +
92661 +
92662 lastArgs = arguments; +
92663 lastThis = this; +
92664 lastCallTime = time; +
92665 +
92666 if (isInvoking) { +
92667 if (timerId === undefined) { +
92668 return leadingEdge(lastCallTime); +
92669 } +
92670 if (maxing) { +
92671 // Handle invocations in a tight loop. +
92672 timerId = setTimeout(timerExpired, wait); +
92673 return invokeFunc(lastCallTime); +
92674 } +
92675 } +
92676 if (timerId === undefined) { +
92677 timerId = setTimeout(timerExpired, wait); +
92678 } +
92679 return result; +
92680 } +
92681 debounced.cancel = cancel; +
92682 debounced.flush = flush; +
92683 return debounced; +
92684 } +
92685 +
92686 /** +
92687 * Defers invoking the `func` until the current call stack has cleared. Any +
92688 * additional arguments are provided to `func` when it's invoked. +
92689 * +
92690 * @static +
92691 * @memberOf _ +
92692 * @since 0.1.0 +
92693 * @category Function +
92694 * @param {Function} func The function to defer. +
92695 * @param {...*} [args] The arguments to invoke `func` with. +
92696 * @returns {number} Returns the timer id. +
92697 * @example +
92698 * +
92699 * _.defer(function(text) { +
92700 * console.log(text); +
92701 * }, 'deferred'); +
92702 * // => Logs 'deferred' after one millisecond. +
92703 */ +
92704 var defer = baseRest(function(func, args) { +
92705 return baseDelay(func, 1, args); +
92706 }); +
92707 +
92708 /** +
92709 * Invokes `func` after `wait` milliseconds. Any additional arguments are +
92710 * provided to `func` when it's invoked. +
92711 * +
92712 * @static +
92713 * @memberOf _ +
92714 * @since 0.1.0 +
92715 * @category Function +
92716 * @param {Function} func The function to delay. +
92717 * @param {number} wait The number of milliseconds to delay invocation. +
92718 * @param {...*} [args] The arguments to invoke `func` with. +
92719 * @returns {number} Returns the timer id. +
92720 * @example +
92721 * +
92722 * _.delay(function(text) { +
92723 * console.log(text); +
92724 * }, 1000, 'later'); +
92725 * // => Logs 'later' after one second. +
92726 */ +
92727 var delay = baseRest(function(func, wait, args) { +
92728 return baseDelay(func, toNumber(wait) || 0, args); +
92729 }); +
92730 +
92731 /** +
92732 * Creates a function that invokes `func` with arguments reversed. +
92733 * +
92734 * @static +
92735 * @memberOf _ +
92736 * @since 4.0.0 +
92737 * @category Function +
92738 * @param {Function} func The function to flip arguments for. +
92739 * @returns {Function} Returns the new flipped function. +
92740 * @example +
92741 * +
92742 * var flipped = _.flip(function() { +
92743 * return _.toArray(arguments); +
92744 * }); +
92745 * +
92746 * flipped('a', 'b', 'c', 'd'); +
92747 * // => ['d', 'c', 'b', 'a'] +
92748 */ +
92749 function flip(func) { +
92750 return createWrap(func, WRAP_FLIP_FLAG); +
92751 } +
92752 +
92753 /** +
92754 * Creates a function that memoizes the result of `func`. If `resolver` is +
92755 * provided, it determines the cache key for storing the result based on the +
92756 * arguments provided to the memoized function. By default, the first argument +
92757 * provided to the memoized function is used as the map cache key. The `func` +
92758 * is invoked with the `this` binding of the memoized function. +
92759 * +
92760 * **Note:** The cache is exposed as the `cache` property on the memoized +
92761 * function. Its creation may be customized by replacing the `_.memoize.Cache` +
92762 * constructor with one whose instances implement the +
92763 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) +
92764 * method interface of `clear`, `delete`, `get`, `has`, and `set`. +
92765 * +
92766 * @static +
92767 * @memberOf _ +
92768 * @since 0.1.0 +
92769 * @category Function +
92770 * @param {Function} func The function to have its output memoized. +
92771 * @param {Function} [resolver] The function to resolve the cache key. +
92772 * @returns {Function} Returns the new memoized function. +
92773 * @example +
92774 * +
92775 * var object = { 'a': 1, 'b': 2 }; +
92776 * var other = { 'c': 3, 'd': 4 }; +
92777 * +
92778 * var values = _.memoize(_.values); +
92779 * values(object); +
92780 * // => [1, 2] +
92781 * +
92782 * values(other); +
92783 * // => [3, 4] +
92784 * +
92785 * object.a = 2; +
92786 * values(object); +
92787 * // => [1, 2] +
92788 * +
92789 * // Modify the result cache. +
92790 * values.cache.set(object, ['a', 'b']); +
92791 * values(object); +
92792 * // => ['a', 'b'] +
92793 * +
92794 * // Replace `_.memoize.Cache`. +
92795 * _.memoize.Cache = WeakMap; +
92796 */ +
92797 function memoize(func, resolver) { +
92798 if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { +
92799 throw new TypeError(FUNC_ERROR_TEXT); +
92800 } +
92801 var memoized = function() { +
92802 var args = arguments, +
92803 key = resolver ? resolver.apply(this, args) : args[0], +
92804 cache = memoized.cache; +
92805 +
92806 if (cache.has(key)) { +
92807 return cache.get(key); +
92808 } +
92809 var result = func.apply(this, args); +
92810 memoized.cache = cache.set(key, result) || cache; +
92811 return result; +
92812 }; +
92813 memoized.cache = new (memoize.Cache || MapCache); +
92814 return memoized; +
92815 } +
92816 +
92817 // Expose `MapCache`. +
92818 memoize.Cache = MapCache; +
92819 +
92820 /** +
92821 * Creates a function that negates the result of the predicate `func`. The +
92822 * `func` predicate is invoked with the `this` binding and arguments of the +
92823 * created function. +
92824 * +
92825 * @static +
92826 * @memberOf _ +
92827 * @since 3.0.0 +
92828 * @category Function +
92829 * @param {Function} predicate The predicate to negate. +
92830 * @returns {Function} Returns the new negated function. +
92831 * @example +
92832 * +
92833 * function isEven(n) { +
92834 * return n % 2 == 0; +
92835 * } +
92836 * +
92837 * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); +
92838 * // => [1, 3, 5] +
92839 */ +
92840 function negate(predicate) { +
92841 if (typeof predicate != 'function') { +
92842 throw new TypeError(FUNC_ERROR_TEXT); +
92843 } +
92844 return function() { +
92845 var args = arguments; +
92846 switch (args.length) { +
92847 case 0: return !predicate.call(this); +
92848 case 1: return !predicate.call(this, args[0]); +
92849 case 2: return !predicate.call(this, args[0], args[1]); +
92850 case 3: return !predicate.call(this, args[0], args[1], args[2]); +
92851 } +
92852 return !predicate.apply(this, args); +
92853 }; +
92854 } +
92855 +
92856 /** +
92857 * Creates a function that is restricted to invoking `func` once. Repeat calls +
92858 * to the function return the value of the first invocation. The `func` is +
92859 * invoked with the `this` binding and arguments of the created function. +
92860 * +
92861 * @static +
92862 * @memberOf _ +
92863 * @since 0.1.0 +
92864 * @category Function +
92865 * @param {Function} func The function to restrict. +
92866 * @returns {Function} Returns the new restricted function. +
92867 * @example +
92868 * +
92869 * var initialize = _.once(createApplication); +
92870 * initialize(); +
92871 * initialize(); +
92872 * // => `createApplication` is invoked once +
92873 */ +
92874 function once(func) { +
92875 return before(2, func); +
92876 } +
92877 +
92878 /** +
92879 * Creates a function that invokes `func` with its arguments transformed. +
92880 * +
92881 * @static +
92882 * @since 4.0.0 +
92883 * @memberOf _ +
92884 * @category Function +
92885 * @param {Function} func The function to wrap. +
92886 * @param {...(Function|Function[])} [transforms=[_.identity]] +
92887 * The argument transforms. +
92888 * @returns {Function} Returns the new function. +
92889 * @example +
92890 * +
92891 * function doubled(n) { +
92892 * return n * 2; +
92893 * } +
92894 * +
92895 * function square(n) { +
92896 * return n * n; +
92897 * } +
92898 * +
92899 * var func = _.overArgs(function(x, y) { +
92900 * return [x, y]; +
92901 * }, [square, doubled]); +
92902 * +
92903 * func(9, 3); +
92904 * // => [81, 6] +
92905 * +
92906 * func(10, 5); +
92907 * // => [100, 10] +
92908 */ +
92909 var overArgs = castRest(function(func, transforms) { +
92910 transforms = (transforms.length == 1 && isArray(transforms[0])) +
92911 ? arrayMap(transforms[0], baseUnary(getIteratee())) +
92912 : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); +
92913 +
92914 var funcsLength = transforms.length; +
92915 return baseRest(function(args) { +
92916 var index = -1, +
92917 length = nativeMin(args.length, funcsLength); +
92918 +
92919 while (++index < length) { +
92920 args[index] = transforms[index].call(this, args[index]); +
92921 } +
92922 return apply(func, this, args); +
92923 }); +
92924 }); +
92925 +
92926 /** +
92927 * Creates a function that invokes `func` with `partials` prepended to the +
92928 * arguments it receives. This method is like `_.bind` except it does **not** +
92929 * alter the `this` binding. +
92930 * +
92931 * The `_.partial.placeholder` value, which defaults to `_` in monolithic +
92932 * builds, may be used as a placeholder for partially applied arguments. +
92933 * +
92934 * **Note:** This method doesn't set the "length" property of partially +
92935 * applied functions. +
92936 * +
92937 * @static +
92938 * @memberOf _ +
92939 * @since 0.2.0 +
92940 * @category Function +
92941 * @param {Function} func The function to partially apply arguments to. +
92942 * @param {...*} [partials] The arguments to be partially applied. +
92943 * @returns {Function} Returns the new partially applied function. +
92944 * @example +
92945 * +
92946 * function greet(greeting, name) { +
92947 * return greeting + ' ' + name; +
92948 * } +
92949 * +
92950 * var sayHelloTo = _.partial(greet, 'hello'); +
92951 * sayHelloTo('fred'); +
92952 * // => 'hello fred' +
92953 * +
92954 * // Partially applied with placeholders. +
92955 * var greetFred = _.partial(greet, _, 'fred'); +
92956 * greetFred('hi'); +
92957 * // => 'hi fred' +
92958 */ +
92959 var partial = baseRest(function(func, partials) { +
92960 var holders = replaceHolders(partials, getHolder(partial)); +
92961 return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); +
92962 }); +
92963 +
92964 /** +
92965 * This method is like `_.partial` except that partially applied arguments +
92966 * are appended to the arguments it receives. +
92967 * +
92968 * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic +
92969 * builds, may be used as a placeholder for partially applied arguments. +
92970 * +
92971 * **Note:** This method doesn't set the "length" property of partially +
92972 * applied functions. +
92973 * +
92974 * @static +
92975 * @memberOf _ +
92976 * @since 1.0.0 +
92977 * @category Function +
92978 * @param {Function} func The function to partially apply arguments to. +
92979 * @param {...*} [partials] The arguments to be partially applied. +
92980 * @returns {Function} Returns the new partially applied function. +
92981 * @example +
92982 * +
92983 * function greet(greeting, name) { +
92984 * return greeting + ' ' + name; +
92985 * } +
92986 * +
92987 * var greetFred = _.partialRight(greet, 'fred'); +
92988 * greetFred('hi'); +
92989 * // => 'hi fred' +
92990 * +
92991 * // Partially applied with placeholders. +
92992 * var sayHelloTo = _.partialRight(greet, 'hello', _); +
92993 * sayHelloTo('fred'); +
92994 * // => 'hello fred' +
92995 */ +
92996 var partialRight = baseRest(function(func, partials) { +
92997 var holders = replaceHolders(partials, getHolder(partialRight)); +
92998 return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); +
92999 }); +
93000 +
93001 /** +
93002 * Creates a function that invokes `func` with arguments arranged according +
93003 * to the specified `indexes` where the argument value at the first index is +
93004 * provided as the first argument, the argument value at the second index is +
93005 * provided as the second argument, and so on. +
93006 * +
93007 * @static +
93008 * @memberOf _ +
93009 * @since 3.0.0 +
93010 * @category Function +
93011 * @param {Function} func The function to rearrange arguments for. +
93012 * @param {...(number|number[])} indexes The arranged argument indexes. +
93013 * @returns {Function} Returns the new function. +
93014 * @example +
93015 * +
93016 * var rearged = _.rearg(function(a, b, c) { +
93017 * return [a, b, c]; +
93018 * }, [2, 0, 1]); +
93019 * +
93020 * rearged('b', 'c', 'a') +
93021 * // => ['a', 'b', 'c'] +
93022 */ +
93023 var rearg = flatRest(function(func, indexes) { +
93024 return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); +
93025 }); +
93026 +
93027 /** +
93028 * Creates a function that invokes `func` with the `this` binding of the +
93029 * created function and arguments from `start` and beyond provided as +
93030 * an array. +
93031 * +
93032 * **Note:** This method is based on the +
93033 * [rest parameter](https://mdn.io/rest_parameters). +
93034 * +
93035 * @static +
93036 * @memberOf _ +
93037 * @since 4.0.0 +
93038 * @category Function +
93039 * @param {Function} func The function to apply a rest parameter to. +
93040 * @param {number} [start=func.length-1] The start position of the rest parameter. +
93041 * @returns {Function} Returns the new function. +
93042 * @example +
93043 * +
93044 * var say = _.rest(function(what, names) { +
93045 * return what + ' ' + _.initial(names).join(', ') + +
93046 * (_.size(names) > 1 ? ', & ' : '') + _.last(names); +
93047 * }); +
93048 * +
93049 * say('hello', 'fred', 'barney', 'pebbles'); +
93050 * // => 'hello fred, barney, & pebbles' +
93051 */ +
93052 function rest(func, start) { +
93053 if (typeof func != 'function') { +
93054 throw new TypeError(FUNC_ERROR_TEXT); +
93055 } +
93056 start = start === undefined ? start : toInteger(start); +
93057 return baseRest(func, start); +
93058 } +
93059 +
93060 /** +
93061 * Creates a function that invokes `func` with the `this` binding of the +
93062 * create function and an array of arguments much like +
93063 * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). +
93064 * +
93065 * **Note:** This method is based on the +
93066 * [spread operator](https://mdn.io/spread_operator). +
93067 * +
93068 * @static +
93069 * @memberOf _ +
93070 * @since 3.2.0 +
93071 * @category Function +
93072 * @param {Function} func The function to spread arguments over. +
93073 * @param {number} [start=0] The start position of the spread. +
93074 * @returns {Function} Returns the new function. +
93075 * @example +
93076 * +
93077 * var say = _.spread(function(who, what) { +
93078 * return who + ' says ' + what; +
93079 * }); +
93080 * +
93081 * say(['fred', 'hello']); +
93082 * // => 'fred says hello' +
93083 * +
93084 * var numbers = Promise.all([ +
93085 * Promise.resolve(40), +
93086 * Promise.resolve(36) +
93087 * ]); +
93088 * +
93089 * numbers.then(_.spread(function(x, y) { +
93090 * return x + y; +
93091 * })); +
93092 * // => a Promise of 76 +
93093 */ +
93094 function spread(func, start) { +
93095 if (typeof func != 'function') { +
93096 throw new TypeError(FUNC_ERROR_TEXT); +
93097 } +
93098 start = start == null ? 0 : nativeMax(toInteger(start), 0); +
93099 return baseRest(function(args) { +
93100 var array = args[start], +
93101 otherArgs = castSlice(args, 0, start); +
93102 +
93103 if (array) { +
93104 arrayPush(otherArgs, array); +
93105 } +
93106 return apply(func, this, otherArgs); +
93107 }); +
93108 } +
93109 +
93110 /** +
93111 * Creates a throttled function that only invokes `func` at most once per +
93112 * every `wait` milliseconds. The throttled function comes with a `cancel` +
93113 * method to cancel delayed `func` invocations and a `flush` method to +
93114 * immediately invoke them. Provide `options` to indicate whether `func` +
93115 * should be invoked on the leading and/or trailing edge of the `wait` +
93116 * timeout. The `func` is invoked with the last arguments provided to the +
93117 * throttled function. Subsequent calls to the throttled function return the +
93118 * result of the last `func` invocation. +
93119 * +
93120 * **Note:** If `leading` and `trailing` options are `true`, `func` is +
93121 * invoked on the trailing edge of the timeout only if the throttled function +
93122 * is invoked more than once during the `wait` timeout. +
93123 * +
93124 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred +
93125 * until to the next tick, similar to `setTimeout` with a timeout of `0`. +
93126 * +
93127 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) +
93128 * for details over the differences between `_.throttle` and `_.debounce`. +
93129 * +
93130 * @static +
93131 * @memberOf _ +
93132 * @since 0.1.0 +
93133 * @category Function +
93134 * @param {Function} func The function to throttle. +
93135 * @param {number} [wait=0] The number of milliseconds to throttle invocations to. +
93136 * @param {Object} [options={}] The options object. +
93137 * @param {boolean} [options.leading=true] +
93138 * Specify invoking on the leading edge of the timeout. +
93139 * @param {boolean} [options.trailing=true] +
93140 * Specify invoking on the trailing edge of the timeout. +
93141 * @returns {Function} Returns the new throttled function. +
93142 * @example +
93143 * +
93144 * // Avoid excessively updating the position while scrolling. +
93145 * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); +
93146 * +
93147 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. +
93148 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); +
93149 * jQuery(element).on('click', throttled); +
93150 * +
93151 * // Cancel the trailing throttled invocation. +
93152 * jQuery(window).on('popstate', throttled.cancel); +
93153 */ +
93154 function throttle(func, wait, options) { +
93155 var leading = true, +
93156 trailing = true; +
93157 +
93158 if (typeof func != 'function') { +
93159 throw new TypeError(FUNC_ERROR_TEXT); +
93160 } +
93161 if (isObject(options)) { +
93162 leading = 'leading' in options ? !!options.leading : leading; +
93163 trailing = 'trailing' in options ? !!options.trailing : trailing; +
93164 } +
93165 return debounce(func, wait, { +
93166 'leading': leading, +
93167 'maxWait': wait, +
93168 'trailing': trailing +
93169 }); +
93170 } +
93171 +
93172 /** +
93173 * Creates a function that accepts up to one argument, ignoring any +
93174 * additional arguments. +
93175 * +
93176 * @static +
93177 * @memberOf _ +
93178 * @since 4.0.0 +
93179 * @category Function +
93180 * @param {Function} func The function to cap arguments for. +
93181 * @returns {Function} Returns the new capped function. +
93182 * @example +
93183 * +
93184 * _.map(['6', '8', '10'], _.unary(parseInt)); +
93185 * // => [6, 8, 10] +
93186 */ +
93187 function unary(func) { +
93188 return ary(func, 1); +
93189 } +
93190 +
93191 /** +
93192 * Creates a function that provides `value` to `wrapper` as its first +
93193 * argument. Any additional arguments provided to the function are appended +
93194 * to those provided to the `wrapper`. The wrapper is invoked with the `this` +
93195 * binding of the created function. +
93196 * +
93197 * @static +
93198 * @memberOf _ +
93199 * @since 0.1.0 +
93200 * @category Function +
93201 * @param {*} value The value to wrap. +
93202 * @param {Function} [wrapper=identity] The wrapper function. +
93203 * @returns {Function} Returns the new function. +
93204 * @example +
93205 * +
93206 * var p = _.wrap(_.escape, function(func, text) { +
93207 * return '<p>' + func(text) + '</p>'; +
93208 * }); +
93209 * +
93210 * p('fred, barney, & pebbles'); +
93211 * // => '<p>fred, barney, &amp; pebbles</p>' +
93212 */ +
93213 function wrap(value, wrapper) { +
93214 return partial(castFunction(wrapper), value); +
93215 } +
93216 +
93217 /*------------------------------------------------------------------------*/ +
93218 +
93219 /** +
93220 * Casts `value` as an array if it's not one. +
93221 * +
93222 * @static +
93223 * @memberOf _ +
93224 * @since 4.4.0 +
93225 * @category Lang +
93226 * @param {*} value The value to inspect. +
93227 * @returns {Array} Returns the cast array. +
93228 * @example +
93229 * +
93230 * _.castArray(1); +
93231 * // => [1] +
93232 * +
93233 * _.castArray({ 'a': 1 }); +
93234 * // => [{ 'a': 1 }] +
93235 * +
93236 * _.castArray('abc'); +
93237 * // => ['abc'] +
93238 * +
93239 * _.castArray(null); +
93240 * // => [null] +
93241 * +
93242 * _.castArray(undefined); +
93243 * // => [undefined] +
93244 * +
93245 * _.castArray(); +
93246 * // => [] +
93247 * +
93248 * var array = [1, 2, 3]; +
93249 * console.log(_.castArray(array) === array); +
93250 * // => true +
93251 */ +
93252 function castArray() { +
93253 if (!arguments.length) { +
93254 return []; +
93255 } +
93256 var value = arguments[0]; +
93257 return isArray(value) ? value : [value]; +
93258 } +
93259 +
93260 /** +
93261 * Creates a shallow clone of `value`. +
93262 * +
93263 * **Note:** This method is loosely based on the +
93264 * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) +
93265 * and supports cloning arrays, array buffers, booleans, date objects, maps, +
93266 * numbers, `Object` objects, regexes, sets, strings, symbols, and typed +
93267 * arrays. The own enumerable properties of `arguments` objects are cloned +
93268 * as plain objects. An empty object is returned for uncloneable values such +
93269 * as error objects, functions, DOM nodes, and WeakMaps. +
93270 * +
93271 * @static +
93272 * @memberOf _ +
93273 * @since 0.1.0 +
93274 * @category Lang +
93275 * @param {*} value The value to clone. +
93276 * @returns {*} Returns the cloned value. +
93277 * @see _.cloneDeep +
93278 * @example +
93279 * +
93280 * var objects = [{ 'a': 1 }, { 'b': 2 }]; +
93281 * +
93282 * var shallow = _.clone(objects); +
93283 * console.log(shallow[0] === objects[0]); +
93284 * // => true +
93285 */ +
93286 function clone(value) { +
93287 return baseClone(value, CLONE_SYMBOLS_FLAG); +
93288 } +
93289 +
93290 /** +
93291 * This method is like `_.clone` except that it accepts `customizer` which +
93292 * is invoked to produce the cloned value. If `customizer` returns `undefined`, +
93293 * cloning is handled by the method instead. The `customizer` is invoked with +
93294 * up to four arguments; (value [, index|key, object, stack]). +
93295 * +
93296 * @static +
93297 * @memberOf _ +
93298 * @since 4.0.0 +
93299 * @category Lang +
93300 * @param {*} value The value to clone. +
93301 * @param {Function} [customizer] The function to customize cloning. +
93302 * @returns {*} Returns the cloned value. +
93303 * @see _.cloneDeepWith +
93304 * @example +
93305 * +
93306 * function customizer(value) { +
93307 * if (_.isElement(value)) { +
93308 * return value.cloneNode(false); +
93309 * } +
93310 * } +
93311 * +
93312 * var el = _.cloneWith(document.body, customizer); +
93313 * +
93314 * console.log(el === document.body); +
93315 * // => false +
93316 * console.log(el.nodeName); +
93317 * // => 'BODY' +
93318 * console.log(el.childNodes.length); +
93319 * // => 0 +
93320 */ +
93321 function cloneWith(value, customizer) { +
93322 customizer = typeof customizer == 'function' ? customizer : undefined; +
93323 return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); +
93324 } +
93325 +
93326 /** +
93327 * This method is like `_.clone` except that it recursively clones `value`. +
93328 * +
93329 * @static +
93330 * @memberOf _ +
93331 * @since 1.0.0 +
93332 * @category Lang +
93333 * @param {*} value The value to recursively clone. +
93334 * @returns {*} Returns the deep cloned value. +
93335 * @see _.clone +
93336 * @example +
93337 * +
93338 * var objects = [{ 'a': 1 }, { 'b': 2 }]; +
93339 * +
93340 * var deep = _.cloneDeep(objects); +
93341 * console.log(deep[0] === objects[0]); +
93342 * // => false +
93343 */ +
93344 function cloneDeep(value) { +
93345 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +
93346 } +
93347 +
93348 /** +
93349 * This method is like `_.cloneWith` except that it recursively clones `value`. +
93350 * +
93351 * @static +
93352 * @memberOf _ +
93353 * @since 4.0.0 +
93354 * @category Lang +
93355 * @param {*} value The value to recursively clone. +
93356 * @param {Function} [customizer] The function to customize cloning. +
93357 * @returns {*} Returns the deep cloned value. +
93358 * @see _.cloneWith +
93359 * @example +
93360 * +
93361 * function customizer(value) { +
93362 * if (_.isElement(value)) { +
93363 * return value.cloneNode(true); +
93364 * } +
93365 * } +
93366 * +
93367 * var el = _.cloneDeepWith(document.body, customizer); +
93368 * +
93369 * console.log(el === document.body); +
93370 * // => false +
93371 * console.log(el.nodeName); +
93372 * // => 'BODY' +
93373 * console.log(el.childNodes.length); +
93374 * // => 20 +
93375 */ +
93376 function cloneDeepWith(value, customizer) { +
93377 customizer = typeof customizer == 'function' ? customizer : undefined; +
93378 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); +
93379 } +
93380 +
93381 /** +
93382 * Checks if `object` conforms to `source` by invoking the predicate +
93383 * properties of `source` with the corresponding property values of `object`. +
93384 * +
93385 * **Note:** This method is equivalent to `_.conforms` when `source` is +
93386 * partially applied. +
93387 * +
93388 * @static +
93389 * @memberOf _ +
93390 * @since 4.14.0 +
93391 * @category Lang +
93392 * @param {Object} object The object to inspect. +
93393 * @param {Object} source The object of property predicates to conform to. +
93394 * @returns {boolean} Returns `true` if `object` conforms, else `false`. +
93395 * @example +
93396 * +
93397 * var object = { 'a': 1, 'b': 2 }; +
93398 * +
93399 * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); +
93400 * // => true +
93401 * +
93402 * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); +
93403 * // => false +
93404 */ +
93405 function conformsTo(object, source) { +
93406 return source == null || baseConformsTo(object, source, keys(source)); +
93407 } +
93408 +
93409 /** +
93410 * Performs a +
93411 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) +
93412 * comparison between two values to determine if they are equivalent. +
93413 * +
93414 * @static +
93415 * @memberOf _ +
93416 * @since 4.0.0 +
93417 * @category Lang +
93418 * @param {*} value The value to compare. +
93419 * @param {*} other The other value to compare. +
93420 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
93421 * @example +
93422 * +
93423 * var object = { 'a': 1 }; +
93424 * var other = { 'a': 1 }; +
93425 * +
93426 * _.eq(object, object); +
93427 * // => true +
93428 * +
93429 * _.eq(object, other); +
93430 * // => false +
93431 * +
93432 * _.eq('a', 'a'); +
93433 * // => true +
93434 * +
93435 * _.eq('a', Object('a')); +
93436 * // => false +
93437 * +
93438 * _.eq(NaN, NaN); +
93439 * // => true +
93440 */ +
93441 function eq(value, other) { +
93442 return value === other || (value !== value && other !== other); +
93443 } +
93444 +
93445 /** +
93446 * Checks if `value` is greater than `other`. +
93447 * +
93448 * @static +
93449 * @memberOf _ +
93450 * @since 3.9.0 +
93451 * @category Lang +
93452 * @param {*} value The value to compare. +
93453 * @param {*} other The other value to compare. +
93454 * @returns {boolean} Returns `true` if `value` is greater than `other`, +
93455 * else `false`. +
93456 * @see _.lt +
93457 * @example +
93458 * +
93459 * _.gt(3, 1); +
93460 * // => true +
93461 * +
93462 * _.gt(3, 3); +
93463 * // => false +
93464 * +
93465 * _.gt(1, 3); +
93466 * // => false +
93467 */ +
93468 var gt = createRelationalOperation(baseGt); +
93469 +
93470 /** +
93471 * Checks if `value` is greater than or equal to `other`. +
93472 * +
93473 * @static +
93474 * @memberOf _ +
93475 * @since 3.9.0 +
93476 * @category Lang +
93477 * @param {*} value The value to compare. +
93478 * @param {*} other The other value to compare. +
93479 * @returns {boolean} Returns `true` if `value` is greater than or equal to +
93480 * `other`, else `false`. +
93481 * @see _.lte +
93482 * @example +
93483 * +
93484 * _.gte(3, 1); +
93485 * // => true +
93486 * +
93487 * _.gte(3, 3); +
93488 * // => true +
93489 * +
93490 * _.gte(1, 3); +
93491 * // => false +
93492 */ +
93493 var gte = createRelationalOperation(function(value, other) { +
93494 return value >= other; +
93495 }); +
93496 +
93497 /** +
93498 * Checks if `value` is likely an `arguments` object. +
93499 * +
93500 * @static +
93501 * @memberOf _ +
93502 * @since 0.1.0 +
93503 * @category Lang +
93504 * @param {*} value The value to check. +
93505 * @returns {boolean} Returns `true` if `value` is an `arguments` object, +
93506 * else `false`. +
93507 * @example +
93508 * +
93509 * _.isArguments(function() { return arguments; }()); +
93510 * // => true +
93511 * +
93512 * _.isArguments([1, 2, 3]); +
93513 * // => false +
93514 */ +
93515 var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { +
93516 return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && +
93517 !propertyIsEnumerable.call(value, 'callee'); +
93518 }; +
93519 +
93520 /** +
93521 * Checks if `value` is classified as an `Array` object. +
93522 * +
93523 * @static +
93524 * @memberOf _ +
93525 * @since 0.1.0 +
93526 * @category Lang +
93527 * @param {*} value The value to check. +
93528 * @returns {boolean} Returns `true` if `value` is an array, else `false`. +
93529 * @example +
93530 * +
93531 * _.isArray([1, 2, 3]); +
93532 * // => true +
93533 * +
93534 * _.isArray(document.body.children); +
93535 * // => false +
93536 * +
93537 * _.isArray('abc'); +
93538 * // => false +
93539 * +
93540 * _.isArray(_.noop); +
93541 * // => false +
93542 */ +
93543 var isArray = Array.isArray; +
93544 +
93545 /** +
93546 * Checks if `value` is classified as an `ArrayBuffer` object. +
93547 * +
93548 * @static +
93549 * @memberOf _ +
93550 * @since 4.3.0 +
93551 * @category Lang +
93552 * @param {*} value The value to check. +
93553 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. +
93554 * @example +
93555 * +
93556 * _.isArrayBuffer(new ArrayBuffer(2)); +
93557 * // => true +
93558 * +
93559 * _.isArrayBuffer(new Array(2)); +
93560 * // => false +
93561 */ +
93562 var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; +
93563 +
93564 /** +
93565 * Checks if `value` is array-like. A value is considered array-like if it's +
93566 * not a function and has a `value.length` that's an integer greater than or +
93567 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. +
93568 * +
93569 * @static +
93570 * @memberOf _ +
93571 * @since 4.0.0 +
93572 * @category Lang +
93573 * @param {*} value The value to check. +
93574 * @returns {boolean} Returns `true` if `value` is array-like, else `false`. +
93575 * @example +
93576 * +
93577 * _.isArrayLike([1, 2, 3]); +
93578 * // => true +
93579 * +
93580 * _.isArrayLike(document.body.children); +
93581 * // => true +
93582 * +
93583 * _.isArrayLike('abc'); +
93584 * // => true +
93585 * +
93586 * _.isArrayLike(_.noop); +
93587 * // => false +
93588 */ +
93589 function isArrayLike(value) { +
93590 return value != null && isLength(value.length) && !isFunction(value); +
93591 } +
93592 +
93593 /** +
93594 * This method is like `_.isArrayLike` except that it also checks if `value` +
93595 * is an object. +
93596 * +
93597 * @static +
93598 * @memberOf _ +
93599 * @since 4.0.0 +
93600 * @category Lang +
93601 * @param {*} value The value to check. +
93602 * @returns {boolean} Returns `true` if `value` is an array-like object, +
93603 * else `false`. +
93604 * @example +
93605 * +
93606 * _.isArrayLikeObject([1, 2, 3]); +
93607 * // => true +
93608 * +
93609 * _.isArrayLikeObject(document.body.children); +
93610 * // => true +
93611 * +
93612 * _.isArrayLikeObject('abc'); +
93613 * // => false +
93614 * +
93615 * _.isArrayLikeObject(_.noop); +
93616 * // => false +
93617 */ +
93618 function isArrayLikeObject(value) { +
93619 return isObjectLike(value) && isArrayLike(value); +
93620 } +
93621 +
93622 /** +
93623 * Checks if `value` is classified as a boolean primitive or object. +
93624 * +
93625 * @static +
93626 * @memberOf _ +
93627 * @since 0.1.0 +
93628 * @category Lang +
93629 * @param {*} value The value to check. +
93630 * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. +
93631 * @example +
93632 * +
93633 * _.isBoolean(false); +
93634 * // => true +
93635 * +
93636 * _.isBoolean(null); +
93637 * // => false +
93638 */ +
93639 function isBoolean(value) { +
93640 return value === true || value === false || +
93641 (isObjectLike(value) && baseGetTag(value) == boolTag); +
93642 } +
93643 +
93644 /** +
93645 * Checks if `value` is a buffer. +
93646 * +
93647 * @static +
93648 * @memberOf _ +
93649 * @since 4.3.0 +
93650 * @category Lang +
93651 * @param {*} value The value to check. +
93652 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. +
93653 * @example +
93654 * +
93655 * _.isBuffer(new Buffer(2)); +
93656 * // => true +
93657 * +
93658 * _.isBuffer(new Uint8Array(2)); +
93659 * // => false +
93660 */ +
93661 var isBuffer = nativeIsBuffer || stubFalse; +
93662 +
93663 /** +
93664 * Checks if `value` is classified as a `Date` object. +
93665 * +
93666 * @static +
93667 * @memberOf _ +
93668 * @since 0.1.0 +
93669 * @category Lang +
93670 * @param {*} value The value to check. +
93671 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. +
93672 * @example +
93673 * +
93674 * _.isDate(new Date); +
93675 * // => true +
93676 * +
93677 * _.isDate('Mon April 23 2012'); +
93678 * // => false +
93679 */ +
93680 var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; +
93681 +
93682 /** +
93683 * Checks if `value` is likely a DOM element. +
93684 * +
93685 * @static +
93686 * @memberOf _ +
93687 * @since 0.1.0 +
93688 * @category Lang +
93689 * @param {*} value The value to check. +
93690 * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. +
93691 * @example +
93692 * +
93693 * _.isElement(document.body); +
93694 * // => true +
93695 * +
93696 * _.isElement('<body>'); +
93697 * // => false +
93698 */ +
93699 function isElement(value) { +
93700 return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); +
93701 } +
93702 +
93703 /** +
93704 * Checks if `value` is an empty object, collection, map, or set. +
93705 * +
93706 * Objects are considered empty if they have no own enumerable string keyed +
93707 * properties. +
93708 * +
93709 * Array-like values such as `arguments` objects, arrays, buffers, strings, or +
93710 * jQuery-like collections are considered empty if they have a `length` of `0`. +
93711 * Similarly, maps and sets are considered empty if they have a `size` of `0`. +
93712 * +
93713 * @static +
93714 * @memberOf _ +
93715 * @since 0.1.0 +
93716 * @category Lang +
93717 * @param {*} value The value to check. +
93718 * @returns {boolean} Returns `true` if `value` is empty, else `false`. +
93719 * @example +
93720 * +
93721 * _.isEmpty(null); +
93722 * // => true +
93723 * +
93724 * _.isEmpty(true); +
93725 * // => true +
93726 * +
93727 * _.isEmpty(1); +
93728 * // => true +
93729 * +
93730 * _.isEmpty([1, 2, 3]); +
93731 * // => false +
93732 * +
93733 * _.isEmpty({ 'a': 1 }); +
93734 * // => false +
93735 */ +
93736 function isEmpty(value) { +
93737 if (value == null) { +
93738 return true; +
93739 } +
93740 if (isArrayLike(value) && +
93741 (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || +
93742 isBuffer(value) || isTypedArray(value) || isArguments(value))) { +
93743 return !value.length; +
93744 } +
93745 var tag = getTag(value); +
93746 if (tag == mapTag || tag == setTag) { +
93747 return !value.size; +
93748 } +
93749 if (isPrototype(value)) { +
93750 return !baseKeys(value).length; +
93751 } +
93752 for (var key in value) { +
93753 if (hasOwnProperty.call(value, key)) { +
93754 return false; +
93755 } +
93756 } +
93757 return true; +
93758 } +
93759 +
93760 /** +
93761 * Performs a deep comparison between two values to determine if they are +
93762 * equivalent. +
93763 * +
93764 * **Note:** This method supports comparing arrays, array buffers, booleans, +
93765 * date objects, error objects, maps, numbers, `Object` objects, regexes, +
93766 * sets, strings, symbols, and typed arrays. `Object` objects are compared +
93767 * by their own, not inherited, enumerable properties. Functions and DOM +
93768 * nodes are compared by strict equality, i.e. `===`. +
93769 * +
93770 * @static +
93771 * @memberOf _ +
93772 * @since 0.1.0 +
93773 * @category Lang +
93774 * @param {*} value The value to compare. +
93775 * @param {*} other The other value to compare. +
93776 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
93777 * @example +
93778 * +
93779 * var object = { 'a': 1 }; +
93780 * var other = { 'a': 1 }; +
93781 * +
93782 * _.isEqual(object, other); +
93783 * // => true +
93784 * +
93785 * object === other; +
93786 * // => false +
93787 */ +
93788 function isEqual(value, other) { +
93789 return baseIsEqual(value, other); +
93790 } +
93791 +
93792 /** +
93793 * This method is like `_.isEqual` except that it accepts `customizer` which +
93794 * is invoked to compare values. If `customizer` returns `undefined`, comparisons +
93795 * are handled by the method instead. The `customizer` is invoked with up to +
93796 * six arguments: (objValue, othValue [, index|key, object, other, stack]). +
93797 * +
93798 * @static +
93799 * @memberOf _ +
93800 * @since 4.0.0 +
93801 * @category Lang +
93802 * @param {*} value The value to compare. +
93803 * @param {*} other The other value to compare. +
93804 * @param {Function} [customizer] The function to customize comparisons. +
93805 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. +
93806 * @example +
93807 * +
93808 * function isGreeting(value) { +
93809 * return /^h(?:i|ello)$/.test(value); +
93810 * } +
93811 * +
93812 * function customizer(objValue, othValue) { +
93813 * if (isGreeting(objValue) && isGreeting(othValue)) { +
93814 * return true; +
93815 * } +
93816 * } +
93817 * +
93818 * var array = ['hello', 'goodbye']; +
93819 * var other = ['hi', 'goodbye']; +
93820 * +
93821 * _.isEqualWith(array, other, customizer); +
93822 * // => true +
93823 */ +
93824 function isEqualWith(value, other, customizer) { +
93825 customizer = typeof customizer == 'function' ? customizer : undefined; +
93826 var result = customizer ? customizer(value, other) : undefined; +
93827 return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; +
93828 } +
93829 +
93830 /** +
93831 * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, +
93832 * `SyntaxError`, `TypeError`, or `URIError` object. +
93833 * +
93834 * @static +
93835 * @memberOf _ +
93836 * @since 3.0.0 +
93837 * @category Lang +
93838 * @param {*} value The value to check. +
93839 * @returns {boolean} Returns `true` if `value` is an error object, else `false`. +
93840 * @example +
93841 * +
93842 * _.isError(new Error); +
93843 * // => true +
93844 * +
93845 * _.isError(Error); +
93846 * // => false +
93847 */ +
93848 function isError(value) { +
93849 if (!isObjectLike(value)) { +
93850 return false; +
93851 } +
93852 var tag = baseGetTag(value); +
93853 return tag == errorTag || tag == domExcTag || +
93854 (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); +
93855 } +
93856 +
93857 /** +
93858 * Checks if `value` is a finite primitive number. +
93859 * +
93860 * **Note:** This method is based on +
93861 * [`Number.isFinite`](https://mdn.io/Number/isFinite). +
93862 * +
93863 * @static +
93864 * @memberOf _ +
93865 * @since 0.1.0 +
93866 * @category Lang +
93867 * @param {*} value The value to check. +
93868 * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. +
93869 * @example +
93870 * +
93871 * _.isFinite(3); +
93872 * // => true +
93873 * +
93874 * _.isFinite(Number.MIN_VALUE); +
93875 * // => true +
93876 * +
93877 * _.isFinite(Infinity); +
93878 * // => false +
93879 * +
93880 * _.isFinite('3'); +
93881 * // => false +
93882 */ +
93883 function isFinite(value) { +
93884 return typeof value == 'number' && nativeIsFinite(value); +
93885 } +
93886 +
93887 /** +
93888 * Checks if `value` is classified as a `Function` object. +
93889 * +
93890 * @static +
93891 * @memberOf _ +
93892 * @since 0.1.0 +
93893 * @category Lang +
93894 * @param {*} value The value to check. +
93895 * @returns {boolean} Returns `true` if `value` is a function, else `false`. +
93896 * @example +
93897 * +
93898 * _.isFunction(_); +
93899 * // => true +
93900 * +
93901 * _.isFunction(/abc/); +
93902 * // => false +
93903 */ +
93904 function isFunction(value) { +
93905 if (!isObject(value)) { +
93906 return false; +
93907 } +
93908 // The use of `Object#toString` avoids issues with the `typeof` operator +
93909 // in Safari 9 which returns 'object' for typed arrays and other constructors. +
93910 var tag = baseGetTag(value); +
93911 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +
93912 } +
93913 +
93914 /** +
93915 * Checks if `value` is an integer. +
93916 * +
93917 * **Note:** This method is based on +
93918 * [`Number.isInteger`](https://mdn.io/Number/isInteger). +
93919 * +
93920 * @static +
93921 * @memberOf _ +
93922 * @since 4.0.0 +
93923 * @category Lang +
93924 * @param {*} value The value to check. +
93925 * @returns {boolean} Returns `true` if `value` is an integer, else `false`. +
93926 * @example +
93927 * +
93928 * _.isInteger(3); +
93929 * // => true +
93930 * +
93931 * _.isInteger(Number.MIN_VALUE); +
93932 * // => false +
93933 * +
93934 * _.isInteger(Infinity); +
93935 * // => false +
93936 * +
93937 * _.isInteger('3'); +
93938 * // => false +
93939 */ +
93940 function isInteger(value) { +
93941 return typeof value == 'number' && value == toInteger(value); +
93942 } +
93943 +
93944 /** +
93945 * Checks if `value` is a valid array-like length. +
93946 * +
93947 * **Note:** This method is loosely based on +
93948 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +
93949 * +
93950 * @static +
93951 * @memberOf _ +
93952 * @since 4.0.0 +
93953 * @category Lang +
93954 * @param {*} value The value to check. +
93955 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. +
93956 * @example +
93957 * +
93958 * _.isLength(3); +
93959 * // => true +
93960 * +
93961 * _.isLength(Number.MIN_VALUE); +
93962 * // => false +
93963 * +
93964 * _.isLength(Infinity); +
93965 * // => false +
93966 * +
93967 * _.isLength('3'); +
93968 * // => false +
93969 */ +
93970 function isLength(value) { +
93971 return typeof value == 'number' && +
93972 value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +
93973 } +
93974 +
93975 /** +
93976 * Checks if `value` is the +
93977 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) +
93978 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) +
93979 * +
93980 * @static +
93981 * @memberOf _ +
93982 * @since 0.1.0 +
93983 * @category Lang +
93984 * @param {*} value The value to check. +
93985 * @returns {boolean} Returns `true` if `value` is an object, else `false`. +
93986 * @example +
93987 * +
93988 * _.isObject({}); +
93989 * // => true +
93990 * +
93991 * _.isObject([1, 2, 3]); +
93992 * // => true +
93993 * +
93994 * _.isObject(_.noop); +
93995 * // => true +
93996 * +
93997 * _.isObject(null); +
93998 * // => false +
93999 */ +
94000 function isObject(value) { +
94001 var type = typeof value; +
94002 return value != null && (type == 'object' || type == 'function'); +
94003 } +
94004 +
94005 /** +
94006 * Checks if `value` is object-like. A value is object-like if it's not `null` +
94007 * and has a `typeof` result of "object". +
94008 * +
94009 * @static +
94010 * @memberOf _ +
94011 * @since 4.0.0 +
94012 * @category Lang +
94013 * @param {*} value The value to check. +
94014 * @returns {boolean} Returns `true` if `value` is object-like, else `false`. +
94015 * @example +
94016 * +
94017 * _.isObjectLike({}); +
94018 * // => true +
94019 * +
94020 * _.isObjectLike([1, 2, 3]); +
94021 * // => true +
94022 * +
94023 * _.isObjectLike(_.noop); +
94024 * // => false +
94025 * +
94026 * _.isObjectLike(null); +
94027 * // => false +
94028 */ +
94029 function isObjectLike(value) { +
94030 return value != null && typeof value == 'object'; +
94031 } +
94032 +
94033 /** +
94034 * Checks if `value` is classified as a `Map` object. +
94035 * +
94036 * @static +
94037 * @memberOf _ +
94038 * @since 4.3.0 +
94039 * @category Lang +
94040 * @param {*} value The value to check. +
94041 * @returns {boolean} Returns `true` if `value` is a map, else `false`. +
94042 * @example +
94043 * +
94044 * _.isMap(new Map); +
94045 * // => true +
94046 * +
94047 * _.isMap(new WeakMap); +
94048 * // => false +
94049 */ +
94050 var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; +
94051 +
94052 /** +
94053 * Performs a partial deep comparison between `object` and `source` to +
94054 * determine if `object` contains equivalent property values. +
94055 * +
94056 * **Note:** This method is equivalent to `_.matches` when `source` is +
94057 * partially applied. +
94058 * +
94059 * Partial comparisons will match empty array and empty object `source` +
94060 * values against any array or object value, respectively. See `_.isEqual` +
94061 * for a list of supported value comparisons. +
94062 * +
94063 * @static +
94064 * @memberOf _ +
94065 * @since 3.0.0 +
94066 * @category Lang +
94067 * @param {Object} object The object to inspect. +
94068 * @param {Object} source The object of property values to match. +
94069 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
94070 * @example +
94071 * +
94072 * var object = { 'a': 1, 'b': 2 }; +
94073 * +
94074 * _.isMatch(object, { 'b': 2 }); +
94075 * // => true +
94076 * +
94077 * _.isMatch(object, { 'b': 1 }); +
94078 * // => false +
94079 */ +
94080 function isMatch(object, source) { +
94081 return object === source || baseIsMatch(object, source, getMatchData(source)); +
94082 } +
94083 +
94084 /** +
94085 * This method is like `_.isMatch` except that it accepts `customizer` which +
94086 * is invoked to compare values. If `customizer` returns `undefined`, comparisons +
94087 * are handled by the method instead. The `customizer` is invoked with five +
94088 * arguments: (objValue, srcValue, index|key, object, source). +
94089 * +
94090 * @static +
94091 * @memberOf _ +
94092 * @since 4.0.0 +
94093 * @category Lang +
94094 * @param {Object} object The object to inspect. +
94095 * @param {Object} source The object of property values to match. +
94096 * @param {Function} [customizer] The function to customize comparisons. +
94097 * @returns {boolean} Returns `true` if `object` is a match, else `false`. +
94098 * @example +
94099 * +
94100 * function isGreeting(value) { +
94101 * return /^h(?:i|ello)$/.test(value); +
94102 * } +
94103 * +
94104 * function customizer(objValue, srcValue) { +
94105 * if (isGreeting(objValue) && isGreeting(srcValue)) { +
94106 * return true; +
94107 * } +
94108 * } +
94109 * +
94110 * var object = { 'greeting': 'hello' }; +
94111 * var source = { 'greeting': 'hi' }; +
94112 * +
94113 * _.isMatchWith(object, source, customizer); +
94114 * // => true +
94115 */ +
94116 function isMatchWith(object, source, customizer) { +
94117 customizer = typeof customizer == 'function' ? customizer : undefined; +
94118 return baseIsMatch(object, source, getMatchData(source), customizer); +
94119 } +
94120 +
94121 /** +
94122 * Checks if `value` is `NaN`. +
94123 * +
94124 * **Note:** This method is based on +
94125 * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as +
94126 * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for +
94127 * `undefined` and other non-number values. +
94128 * +
94129 * @static +
94130 * @memberOf _ +
94131 * @since 0.1.0 +
94132 * @category Lang +
94133 * @param {*} value The value to check. +
94134 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. +
94135 * @example +
94136 * +
94137 * _.isNaN(NaN); +
94138 * // => true +
94139 * +
94140 * _.isNaN(new Number(NaN)); +
94141 * // => true +
94142 * +
94143 * isNaN(undefined); +
94144 * // => true +
94145 * +
94146 * _.isNaN(undefined); +
94147 * // => false +
94148 */ +
94149 function isNaN(value) { +
94150 // An `NaN` primitive is the only value that is not equal to itself. +
94151 // Perform the `toStringTag` check first to avoid errors with some +
94152 // ActiveX objects in IE. +
94153 return isNumber(value) && value != +value; +
94154 } +
94155 +
94156 /** +
94157 * Checks if `value` is a pristine native function. +
94158 * +
94159 * **Note:** This method can't reliably detect native functions in the presence +
94160 * of the core-js package because core-js circumvents this kind of detection. +
94161 * Despite multiple requests, the core-js maintainer has made it clear: any +
94162 * attempt to fix the detection will be obstructed. As a result, we're left +
94163 * with little choice but to throw an error. Unfortunately, this also affects +
94164 * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), +
94165 * which rely on core-js. +
94166 * +
94167 * @static +
94168 * @memberOf _ +
94169 * @since 3.0.0 +
94170 * @category Lang +
94171 * @param {*} value The value to check. +
94172 * @returns {boolean} Returns `true` if `value` is a native function, +
94173 * else `false`. +
94174 * @example +
94175 * +
94176 * _.isNative(Array.prototype.push); +
94177 * // => true +
94178 * +
94179 * _.isNative(_); +
94180 * // => false +
94181 */ +
94182 function isNative(value) { +
94183 if (isMaskable(value)) { +
94184 throw new Error(CORE_ERROR_TEXT); +
94185 } +
94186 return baseIsNative(value); +
94187 } +
94188 +
94189 /** +
94190 * Checks if `value` is `null`. +
94191 * +
94192 * @static +
94193 * @memberOf _ +
94194 * @since 0.1.0 +
94195 * @category Lang +
94196 * @param {*} value The value to check. +
94197 * @returns {boolean} Returns `true` if `value` is `null`, else `false`. +
94198 * @example +
94199 * +
94200 * _.isNull(null); +
94201 * // => true +
94202 * +
94203 * _.isNull(void 0); +
94204 * // => false +
94205 */ +
94206 function isNull(value) { +
94207 return value === null; +
94208 } +
94209 +
94210 /** +
94211 * Checks if `value` is `null` or `undefined`. +
94212 * +
94213 * @static +
94214 * @memberOf _ +
94215 * @since 4.0.0 +
94216 * @category Lang +
94217 * @param {*} value The value to check. +
94218 * @returns {boolean} Returns `true` if `value` is nullish, else `false`. +
94219 * @example +
94220 * +
94221 * _.isNil(null); +
94222 * // => true +
94223 * +
94224 * _.isNil(void 0); +
94225 * // => true +
94226 * +
94227 * _.isNil(NaN); +
94228 * // => false +
94229 */ +
94230 function isNil(value) { +
94231 return value == null; +
94232 } +
94233 +
94234 /** +
94235 * Checks if `value` is classified as a `Number` primitive or object. +
94236 * +
94237 * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are +
94238 * classified as numbers, use the `_.isFinite` method. +
94239 * +
94240 * @static +
94241 * @memberOf _ +
94242 * @since 0.1.0 +
94243 * @category Lang +
94244 * @param {*} value The value to check. +
94245 * @returns {boolean} Returns `true` if `value` is a number, else `false`. +
94246 * @example +
94247 * +
94248 * _.isNumber(3); +
94249 * // => true +
94250 * +
94251 * _.isNumber(Number.MIN_VALUE); +
94252 * // => true +
94253 * +
94254 * _.isNumber(Infinity); +
94255 * // => true +
94256 * +
94257 * _.isNumber('3'); +
94258 * // => false +
94259 */ +
94260 function isNumber(value) { +
94261 return typeof value == 'number' || +
94262 (isObjectLike(value) && baseGetTag(value) == numberTag); +
94263 } +
94264 +
94265 /** +
94266 * Checks if `value` is a plain object, that is, an object created by the +
94267 * `Object` constructor or one with a `[[Prototype]]` of `null`. +
94268 * +
94269 * @static +
94270 * @memberOf _ +
94271 * @since 0.8.0 +
94272 * @category Lang +
94273 * @param {*} value The value to check. +
94274 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. +
94275 * @example +
94276 * +
94277 * function Foo() { +
94278 * this.a = 1; +
94279 * } +
94280 * +
94281 * _.isPlainObject(new Foo); +
94282 * // => false +
94283 * +
94284 * _.isPlainObject([1, 2, 3]); +
94285 * // => false +
94286 * +
94287 * _.isPlainObject({ 'x': 0, 'y': 0 }); +
94288 * // => true +
94289 * +
94290 * _.isPlainObject(Object.create(null)); +
94291 * // => true +
94292 */ +
94293 function isPlainObject(value) { +
94294 if (!isObjectLike(value) || baseGetTag(value) != objectTag) { +
94295 return false; +
94296 } +
94297 var proto = getPrototype(value); +
94298 if (proto === null) { +
94299 return true; +
94300 } +
94301 var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; +
94302 return typeof Ctor == 'function' && Ctor instanceof Ctor && +
94303 funcToString.call(Ctor) == objectCtorString; +
94304 } +
94305 +
94306 /** +
94307 * Checks if `value` is classified as a `RegExp` object. +
94308 * +
94309 * @static +
94310 * @memberOf _ +
94311 * @since 0.1.0 +
94312 * @category Lang +
94313 * @param {*} value The value to check. +
94314 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. +
94315 * @example +
94316 * +
94317 * _.isRegExp(/abc/); +
94318 * // => true +
94319 * +
94320 * _.isRegExp('/abc/'); +
94321 * // => false +
94322 */ +
94323 var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; +
94324 +
94325 /** +
94326 * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 +
94327 * double precision number which isn't the result of a rounded unsafe integer. +
94328 * +
94329 * **Note:** This method is based on +
94330 * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). +
94331 * +
94332 * @static +
94333 * @memberOf _ +
94334 * @since 4.0.0 +
94335 * @category Lang +
94336 * @param {*} value The value to check. +
94337 * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. +
94338 * @example +
94339 * +
94340 * _.isSafeInteger(3); +
94341 * // => true +
94342 * +
94343 * _.isSafeInteger(Number.MIN_VALUE); +
94344 * // => false +
94345 * +
94346 * _.isSafeInteger(Infinity); +
94347 * // => false +
94348 * +
94349 * _.isSafeInteger('3'); +
94350 * // => false +
94351 */ +
94352 function isSafeInteger(value) { +
94353 return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; +
94354 } +
94355 +
94356 /** +
94357 * Checks if `value` is classified as a `Set` object. +
94358 * +
94359 * @static +
94360 * @memberOf _ +
94361 * @since 4.3.0 +
94362 * @category Lang +
94363 * @param {*} value The value to check. +
94364 * @returns {boolean} Returns `true` if `value` is a set, else `false`. +
94365 * @example +
94366 * +
94367 * _.isSet(new Set); +
94368 * // => true +
94369 * +
94370 * _.isSet(new WeakSet); +
94371 * // => false +
94372 */ +
94373 var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; +
94374 +
94375 /** +
94376 * Checks if `value` is classified as a `String` primitive or object. +
94377 * +
94378 * @static +
94379 * @since 0.1.0 +
94380 * @memberOf _ +
94381 * @category Lang +
94382 * @param {*} value The value to check. +
94383 * @returns {boolean} Returns `true` if `value` is a string, else `false`. +
94384 * @example +
94385 * +
94386 * _.isString('abc'); +
94387 * // => true +
94388 * +
94389 * _.isString(1); +
94390 * // => false +
94391 */ +
94392 function isString(value) { +
94393 return typeof value == 'string' || +
94394 (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +
94395 } +
94396 +
94397 /** +
94398 * Checks if `value` is classified as a `Symbol` primitive or object. +
94399 * +
94400 * @static +
94401 * @memberOf _ +
94402 * @since 4.0.0 +
94403 * @category Lang +
94404 * @param {*} value The value to check. +
94405 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. +
94406 * @example +
94407 * +
94408 * _.isSymbol(Symbol.iterator); +
94409 * // => true +
94410 * +
94411 * _.isSymbol('abc'); +
94412 * // => false +
94413 */ +
94414 function isSymbol(value) { +
94415 return typeof value == 'symbol' || +
94416 (isObjectLike(value) && baseGetTag(value) == symbolTag); +
94417 } +
94418 +
94419 /** +
94420 * Checks if `value` is classified as a typed array. +
94421 * +
94422 * @static +
94423 * @memberOf _ +
94424 * @since 3.0.0 +
94425 * @category Lang +
94426 * @param {*} value The value to check. +
94427 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. +
94428 * @example +
94429 * +
94430 * _.isTypedArray(new Uint8Array); +
94431 * // => true +
94432 * +
94433 * _.isTypedArray([]); +
94434 * // => false +
94435 */ +
94436 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; +
94437 +
94438 /** +
94439 * Checks if `value` is `undefined`. +
94440 * +
94441 * @static +
94442 * @since 0.1.0 +
94443 * @memberOf _ +
94444 * @category Lang +
94445 * @param {*} value The value to check. +
94446 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. +
94447 * @example +
94448 * +
94449 * _.isUndefined(void 0); +
94450 * // => true +
94451 * +
94452 * _.isUndefined(null); +
94453 * // => false +
94454 */ +
94455 function isUndefined(value) { +
94456 return value === undefined; +
94457 } +
94458 +
94459 /** +
94460 * Checks if `value` is classified as a `WeakMap` object. +
94461 * +
94462 * @static +
94463 * @memberOf _ +
94464 * @since 4.3.0 +
94465 * @category Lang +
94466 * @param {*} value The value to check. +
94467 * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. +
94468 * @example +
94469 * +
94470 * _.isWeakMap(new WeakMap); +
94471 * // => true +
94472 * +
94473 * _.isWeakMap(new Map); +
94474 * // => false +
94475 */ +
94476 function isWeakMap(value) { +
94477 return isObjectLike(value) && getTag(value) == weakMapTag; +
94478 } +
94479 +
94480 /** +
94481 * Checks if `value` is classified as a `WeakSet` object. +
94482 * +
94483 * @static +
94484 * @memberOf _ +
94485 * @since 4.3.0 +
94486 * @category Lang +
94487 * @param {*} value The value to check. +
94488 * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. +
94489 * @example +
94490 * +
94491 * _.isWeakSet(new WeakSet); +
94492 * // => true +
94493 * +
94494 * _.isWeakSet(new Set); +
94495 * // => false +
94496 */ +
94497 function isWeakSet(value) { +
94498 return isObjectLike(value) && baseGetTag(value) == weakSetTag; +
94499 } +
94500 +
94501 /** +
94502 * Checks if `value` is less than `other`. +
94503 * +
94504 * @static +
94505 * @memberOf _ +
94506 * @since 3.9.0 +
94507 * @category Lang +
94508 * @param {*} value The value to compare. +
94509 * @param {*} other The other value to compare. +
94510 * @returns {boolean} Returns `true` if `value` is less than `other`, +
94511 * else `false`. +
94512 * @see _.gt +
94513 * @example +
94514 * +
94515 * _.lt(1, 3); +
94516 * // => true +
94517 * +
94518 * _.lt(3, 3); +
94519 * // => false +
94520 * +
94521 * _.lt(3, 1); +
94522 * // => false +
94523 */ +
94524 var lt = createRelationalOperation(baseLt); +
94525 +
94526 /** +
94527 * Checks if `value` is less than or equal to `other`. +
94528 * +
94529 * @static +
94530 * @memberOf _ +
94531 * @since 3.9.0 +
94532 * @category Lang +
94533 * @param {*} value The value to compare. +
94534 * @param {*} other The other value to compare. +
94535 * @returns {boolean} Returns `true` if `value` is less than or equal to +
94536 * `other`, else `false`. +
94537 * @see _.gte +
94538 * @example +
94539 * +
94540 * _.lte(1, 3); +
94541 * // => true +
94542 * +
94543 * _.lte(3, 3); +
94544 * // => true +
94545 * +
94546 * _.lte(3, 1); +
94547 * // => false +
94548 */ +
94549 var lte = createRelationalOperation(function(value, other) { +
94550 return value <= other; +
94551 }); +
94552 +
94553 /** +
94554 * Converts `value` to an array. +
94555 * +
94556 * @static +
94557 * @since 0.1.0 +
94558 * @memberOf _ +
94559 * @category Lang +
94560 * @param {*} value The value to convert. +
94561 * @returns {Array} Returns the converted array. +
94562 * @example +
94563 * +
94564 * _.toArray({ 'a': 1, 'b': 2 }); +
94565 * // => [1, 2] +
94566 * +
94567 * _.toArray('abc'); +
94568 * // => ['a', 'b', 'c'] +
94569 * +
94570 * _.toArray(1); +
94571 * // => [] +
94572 * +
94573 * _.toArray(null); +
94574 * // => [] +
94575 */ +
94576 function toArray(value) { +
94577 if (!value) { +
94578 return []; +
94579 } +
94580 if (isArrayLike(value)) { +
94581 return isString(value) ? stringToArray(value) : copyArray(value); +
94582 } +
94583 if (symIterator && value[symIterator]) { +
94584 return iteratorToArray(value[symIterator]()); +
94585 } +
94586 var tag = getTag(value), +
94587 func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); +
94588 +
94589 return func(value); +
94590 } +
94591 +
94592 /** +
94593 * Converts `value` to a finite number. +
94594 * +
94595 * @static +
94596 * @memberOf _ +
94597 * @since 4.12.0 +
94598 * @category Lang +
94599 * @param {*} value The value to convert. +
94600 * @returns {number} Returns the converted number. +
94601 * @example +
94602 * +
94603 * _.toFinite(3.2); +
94604 * // => 3.2 +
94605 * +
94606 * _.toFinite(Number.MIN_VALUE); +
94607 * // => 5e-324 +
94608 * +
94609 * _.toFinite(Infinity); +
94610 * // => 1.7976931348623157e+308 +
94611 * +
94612 * _.toFinite('3.2'); +
94613 * // => 3.2 +
94614 */ +
94615 function toFinite(value) { +
94616 if (!value) { +
94617 return value === 0 ? value : 0; +
94618 } +
94619 value = toNumber(value); +
94620 if (value === INFINITY || value === -INFINITY) { +
94621 var sign = (value < 0 ? -1 : 1); +
94622 return sign * MAX_INTEGER; +
94623 } +
94624 return value === value ? value : 0; +
94625 } +
94626 +
94627 /** +
94628 * Converts `value` to an integer. +
94629 * +
94630 * **Note:** This method is loosely based on +
94631 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). +
94632 * +
94633 * @static +
94634 * @memberOf _ +
94635 * @since 4.0.0 +
94636 * @category Lang +
94637 * @param {*} value The value to convert. +
94638 * @returns {number} Returns the converted integer. +
94639 * @example +
94640 * +
94641 * _.toInteger(3.2); +
94642 * // => 3 +
94643 * +
94644 * _.toInteger(Number.MIN_VALUE); +
94645 * // => 0 +
94646 * +
94647 * _.toInteger(Infinity); +
94648 * // => 1.7976931348623157e+308 +
94649 * +
94650 * _.toInteger('3.2'); +
94651 * // => 3 +
94652 */ +
94653 function toInteger(value) { +
94654 var result = toFinite(value), +
94655 remainder = result % 1; +
94656 +
94657 return result === result ? (remainder ? result - remainder : result) : 0; +
94658 } +
94659 +
94660 /** +
94661 * Converts `value` to an integer suitable for use as the length of an +
94662 * array-like object. +
94663 * +
94664 * **Note:** This method is based on +
94665 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). +
94666 * +
94667 * @static +
94668 * @memberOf _ +
94669 * @since 4.0.0 +
94670 * @category Lang +
94671 * @param {*} value The value to convert. +
94672 * @returns {number} Returns the converted integer. +
94673 * @example +
94674 * +
94675 * _.toLength(3.2); +
94676 * // => 3 +
94677 * +
94678 * _.toLength(Number.MIN_VALUE); +
94679 * // => 0 +
94680 * +
94681 * _.toLength(Infinity); +
94682 * // => 4294967295 +
94683 * +
94684 * _.toLength('3.2'); +
94685 * // => 3 +
94686 */ +
94687 function toLength(value) { +
94688 return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; +
94689 } +
94690 +
94691 /** +
94692 * Converts `value` to a number. +
94693 * +
94694 * @static +
94695 * @memberOf _ +
94696 * @since 4.0.0 +
94697 * @category Lang +
94698 * @param {*} value The value to process. +
94699 * @returns {number} Returns the number. +
94700 * @example +
94701 * +
94702 * _.toNumber(3.2); +
94703 * // => 3.2 +
94704 * +
94705 * _.toNumber(Number.MIN_VALUE); +
94706 * // => 5e-324 +
94707 * +
94708 * _.toNumber(Infinity); +
94709 * // => Infinity +
94710 * +
94711 * _.toNumber('3.2'); +
94712 * // => 3.2 +
94713 */ +
94714 function toNumber(value) { +
94715 if (typeof value == 'number') { +
94716 return value; +
94717 } +
94718 if (isSymbol(value)) { +
94719 return NAN; +
94720 } +
94721 if (isObject(value)) { +
94722 var other = typeof value.valueOf == 'function' ? value.valueOf() : value; +
94723 value = isObject(other) ? (other + '') : other; +
94724 } +
94725 if (typeof value != 'string') { +
94726 return value === 0 ? value : +value; +
94727 } +
94728 value = value.replace(reTrim, ''); +
94729 var isBinary = reIsBinary.test(value); +
94730 return (isBinary || reIsOctal.test(value)) +
94731 ? freeParseInt(value.slice(2), isBinary ? 2 : 8) +
94732 : (reIsBadHex.test(value) ? NAN : +value); +
94733 } +
94734 +
94735 /** +
94736 * Converts `value` to a plain object flattening inherited enumerable string +
94737 * keyed properties of `value` to own properties of the plain object. +
94738 * +
94739 * @static +
94740 * @memberOf _ +
94741 * @since 3.0.0 +
94742 * @category Lang +
94743 * @param {*} value The value to convert. +
94744 * @returns {Object} Returns the converted plain object. +
94745 * @example +
94746 * +
94747 * function Foo() { +
94748 * this.b = 2; +
94749 * } +
94750 * +
94751 * Foo.prototype.c = 3; +
94752 * +
94753 * _.assign({ 'a': 1 }, new Foo); +
94754 * // => { 'a': 1, 'b': 2 } +
94755 * +
94756 * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); +
94757 * // => { 'a': 1, 'b': 2, 'c': 3 } +
94758 */ +
94759 function toPlainObject(value) { +
94760 return copyObject(value, keysIn(value)); +
94761 } +
94762 +
94763 /** +
94764 * Converts `value` to a safe integer. A safe integer can be compared and +
94765 * represented correctly. +
94766 * +
94767 * @static +
94768 * @memberOf _ +
94769 * @since 4.0.0 +
94770 * @category Lang +
94771 * @param {*} value The value to convert. +
94772 * @returns {number} Returns the converted integer. +
94773 * @example +
94774 * +
94775 * _.toSafeInteger(3.2); +
94776 * // => 3 +
94777 * +
94778 * _.toSafeInteger(Number.MIN_VALUE); +
94779 * // => 0 +
94780 * +
94781 * _.toSafeInteger(Infinity); +
94782 * // => 9007199254740991 +
94783 * +
94784 * _.toSafeInteger('3.2'); +
94785 * // => 3 +
94786 */ +
94787 function toSafeInteger(value) { +
94788 return value +
94789 ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) +
94790 : (value === 0 ? value : 0); +
94791 } +
94792 +
94793 /** +
94794 * Converts `value` to a string. An empty string is returned for `null` +
94795 * and `undefined` values. The sign of `-0` is preserved. +
94796 * +
94797 * @static +
94798 * @memberOf _ +
94799 * @since 4.0.0 +
94800 * @category Lang +
94801 * @param {*} value The value to convert. +
94802 * @returns {string} Returns the converted string. +
94803 * @example +
94804 * +
94805 * _.toString(null); +
94806 * // => '' +
94807 * +
94808 * _.toString(-0); +
94809 * // => '-0' +
94810 * +
94811 * _.toString([1, 2, 3]); +
94812 * // => '1,2,3' +
94813 */ +
94814 function toString(value) { +
94815 return value == null ? '' : baseToString(value); +
94816 } +
94817 +
94818 /*------------------------------------------------------------------------*/ +
94819 +
94820 /** +
94821 * Assigns own enumerable string keyed properties of source objects to the +
94822 * destination object. Source objects are applied from left to right. +
94823 * Subsequent sources overwrite property assignments of previous sources. +
94824 * +
94825 * **Note:** This method mutates `object` and is loosely based on +
94826 * [`Object.assign`](https://mdn.io/Object/assign). +
94827 * +
94828 * @static +
94829 * @memberOf _ +
94830 * @since 0.10.0 +
94831 * @category Object +
94832 * @param {Object} object The destination object. +
94833 * @param {...Object} [sources] The source objects. +
94834 * @returns {Object} Returns `object`. +
94835 * @see _.assignIn +
94836 * @example +
94837 * +
94838 * function Foo() { +
94839 * this.a = 1; +
94840 * } +
94841 * +
94842 * function Bar() { +
94843 * this.c = 3; +
94844 * } +
94845 * +
94846 * Foo.prototype.b = 2; +
94847 * Bar.prototype.d = 4; +
94848 * +
94849 * _.assign({ 'a': 0 }, new Foo, new Bar); +
94850 * // => { 'a': 1, 'c': 3 } +
94851 */ +
94852 var assign = createAssigner(function(object, source) { +
94853 if (isPrototype(source) || isArrayLike(source)) { +
94854 copyObject(source, keys(source), object); +
94855 return; +
94856 } +
94857 for (var key in source) { +
94858 if (hasOwnProperty.call(source, key)) { +
94859 assignValue(object, key, source[key]); +
94860 } +
94861 } +
94862 }); +
94863 +
94864 /** +
94865 * This method is like `_.assign` except that it iterates over own and +
94866 * inherited source properties. +
94867 * +
94868 * **Note:** This method mutates `object`. +
94869 * +
94870 * @static +
94871 * @memberOf _ +
94872 * @since 4.0.0 +
94873 * @alias extend +
94874 * @category Object +
94875 * @param {Object} object The destination object. +
94876 * @param {...Object} [sources] The source objects. +
94877 * @returns {Object} Returns `object`. +
94878 * @see _.assign +
94879 * @example +
94880 * +
94881 * function Foo() { +
94882 * this.a = 1; +
94883 * } +
94884 * +
94885 * function Bar() { +
94886 * this.c = 3; +
94887 * } +
94888 * +
94889 * Foo.prototype.b = 2; +
94890 * Bar.prototype.d = 4; +
94891 * +
94892 * _.assignIn({ 'a': 0 }, new Foo, new Bar); +
94893 * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } +
94894 */ +
94895 var assignIn = createAssigner(function(object, source) { +
94896 copyObject(source, keysIn(source), object); +
94897 }); +
94898 +
94899 /** +
94900 * This method is like `_.assignIn` except that it accepts `customizer` +
94901 * which is invoked to produce the assigned values. If `customizer` returns +
94902 * `undefined`, assignment is handled by the method instead. The `customizer` +
94903 * is invoked with five arguments: (objValue, srcValue, key, object, source). +
94904 * +
94905 * **Note:** This method mutates `object`. +
94906 * +
94907 * @static +
94908 * @memberOf _ +
94909 * @since 4.0.0 +
94910 * @alias extendWith +
94911 * @category Object +
94912 * @param {Object} object The destination object. +
94913 * @param {...Object} sources The source objects. +
94914 * @param {Function} [customizer] The function to customize assigned values. +
94915 * @returns {Object} Returns `object`. +
94916 * @see _.assignWith +
94917 * @example +
94918 * +
94919 * function customizer(objValue, srcValue) { +
94920 * return _.isUndefined(objValue) ? srcValue : objValue; +
94921 * } +
94922 * +
94923 * var defaults = _.partialRight(_.assignInWith, customizer); +
94924 * +
94925 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
94926 * // => { 'a': 1, 'b': 2 } +
94927 */ +
94928 var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { +
94929 copyObject(source, keysIn(source), object, customizer); +
94930 }); +
94931 +
94932 /** +
94933 * This method is like `_.assign` except that it accepts `customizer` +
94934 * which is invoked to produce the assigned values. If `customizer` returns +
94935 * `undefined`, assignment is handled by the method instead. The `customizer` +
94936 * is invoked with five arguments: (objValue, srcValue, key, object, source). +
94937 * +
94938 * **Note:** This method mutates `object`. +
94939 * +
94940 * @static +
94941 * @memberOf _ +
94942 * @since 4.0.0 +
94943 * @category Object +
94944 * @param {Object} object The destination object. +
94945 * @param {...Object} sources The source objects. +
94946 * @param {Function} [customizer] The function to customize assigned values. +
94947 * @returns {Object} Returns `object`. +
94948 * @see _.assignInWith +
94949 * @example +
94950 * +
94951 * function customizer(objValue, srcValue) { +
94952 * return _.isUndefined(objValue) ? srcValue : objValue; +
94953 * } +
94954 * +
94955 * var defaults = _.partialRight(_.assignWith, customizer); +
94956 * +
94957 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
94958 * // => { 'a': 1, 'b': 2 } +
94959 */ +
94960 var assignWith = createAssigner(function(object, source, srcIndex, customizer) { +
94961 copyObject(source, keys(source), object, customizer); +
94962 }); +
94963 +
94964 /** +
94965 * Creates an array of values corresponding to `paths` of `object`. +
94966 * +
94967 * @static +
94968 * @memberOf _ +
94969 * @since 1.0.0 +
94970 * @category Object +
94971 * @param {Object} object The object to iterate over. +
94972 * @param {...(string|string[])} [paths] The property paths to pick. +
94973 * @returns {Array} Returns the picked values. +
94974 * @example +
94975 * +
94976 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; +
94977 * +
94978 * _.at(object, ['a[0].b.c', 'a[1]']); +
94979 * // => [3, 4] +
94980 */ +
94981 var at = flatRest(baseAt); +
94982 +
94983 /** +
94984 * Creates an object that inherits from the `prototype` object. If a +
94985 * `properties` object is given, its own enumerable string keyed properties +
94986 * are assigned to the created object. +
94987 * +
94988 * @static +
94989 * @memberOf _ +
94990 * @since 2.3.0 +
94991 * @category Object +
94992 * @param {Object} prototype The object to inherit from. +
94993 * @param {Object} [properties] The properties to assign to the object. +
94994 * @returns {Object} Returns the new object. +
94995 * @example +
94996 * +
94997 * function Shape() { +
94998 * this.x = 0; +
94999 * this.y = 0; +
95000 * } +
95001 * +
95002 * function Circle() { +
95003 * Shape.call(this); +
95004 * } +
95005 * +
95006 * Circle.prototype = _.create(Shape.prototype, { +
95007 * 'constructor': Circle +
95008 * }); +
95009 * +
95010 * var circle = new Circle; +
95011 * circle instanceof Circle; +
95012 * // => true +
95013 * +
95014 * circle instanceof Shape; +
95015 * // => true +
95016 */ +
95017 function create(prototype, properties) { +
95018 var result = baseCreate(prototype); +
95019 return properties == null ? result : baseAssign(result, properties); +
95020 } +
95021 +
95022 /** +
95023 * Assigns own and inherited enumerable string keyed properties of source +
95024 * objects to the destination object for all destination properties that +
95025 * resolve to `undefined`. Source objects are applied from left to right. +
95026 * Once a property is set, additional values of the same property are ignored. +
95027 * +
95028 * **Note:** This method mutates `object`. +
95029 * +
95030 * @static +
95031 * @since 0.1.0 +
95032 * @memberOf _ +
95033 * @category Object +
95034 * @param {Object} object The destination object. +
95035 * @param {...Object} [sources] The source objects. +
95036 * @returns {Object} Returns `object`. +
95037 * @see _.defaultsDeep +
95038 * @example +
95039 * +
95040 * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); +
95041 * // => { 'a': 1, 'b': 2 } +
95042 */ +
95043 var defaults = baseRest(function(object, sources) { +
95044 object = Object(object); +
95045 +
95046 var index = -1; +
95047 var length = sources.length; +
95048 var guard = length > 2 ? sources[2] : undefined; +
95049 +
95050 if (guard && isIterateeCall(sources[0], sources[1], guard)) { +
95051 length = 1; +
95052 } +
95053 +
95054 while (++index < length) { +
95055 var source = sources[index]; +
95056 var props = keysIn(source); +
95057 var propsIndex = -1; +
95058 var propsLength = props.length; +
95059 +
95060 while (++propsIndex < propsLength) { +
95061 var key = props[propsIndex]; +
95062 var value = object[key]; +
95063 +
95064 if (value === undefined || +
95065 (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { +
95066 object[key] = source[key]; +
95067 } +
95068 } +
95069 } +
95070 +
95071 return object; +
95072 }); +
95073 +
95074 /** +
95075 * This method is like `_.defaults` except that it recursively assigns +
95076 * default properties. +
95077 * +
95078 * **Note:** This method mutates `object`. +
95079 * +
95080 * @static +
95081 * @memberOf _ +
95082 * @since 3.10.0 +
95083 * @category Object +
95084 * @param {Object} object The destination object. +
95085 * @param {...Object} [sources] The source objects. +
95086 * @returns {Object} Returns `object`. +
95087 * @see _.defaults +
95088 * @example +
95089 * +
95090 * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); +
95091 * // => { 'a': { 'b': 2, 'c': 3 } } +
95092 */ +
95093 var defaultsDeep = baseRest(function(args) { +
95094 args.push(undefined, customDefaultsMerge); +
95095 return apply(mergeWith, undefined, args); +
95096 }); +
95097 +
95098 /** +
95099 * This method is like `_.find` except that it returns the key of the first +
95100 * element `predicate` returns truthy for instead of the element itself. +
95101 * +
95102 * @static +
95103 * @memberOf _ +
95104 * @since 1.1.0 +
95105 * @category Object +
95106 * @param {Object} object The object to inspect. +
95107 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
95108 * @returns {string|undefined} Returns the key of the matched element, +
95109 * else `undefined`. +
95110 * @example +
95111 * +
95112 * var users = { +
95113 * 'barney': { 'age': 36, 'active': true }, +
95114 * 'fred': { 'age': 40, 'active': false }, +
95115 * 'pebbles': { 'age': 1, 'active': true } +
95116 * }; +
95117 * +
95118 * _.findKey(users, function(o) { return o.age < 40; }); +
95119 * // => 'barney' (iteration order is not guaranteed) +
95120 * +
95121 * // The `_.matches` iteratee shorthand. +
95122 * _.findKey(users, { 'age': 1, 'active': true }); +
95123 * // => 'pebbles' +
95124 * +
95125 * // The `_.matchesProperty` iteratee shorthand. +
95126 * _.findKey(users, ['active', false]); +
95127 * // => 'fred' +
95128 * +
95129 * // The `_.property` iteratee shorthand. +
95130 * _.findKey(users, 'active'); +
95131 * // => 'barney' +
95132 */ +
95133 function findKey(object, predicate) { +
95134 return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); +
95135 } +
95136 +
95137 /** +
95138 * This method is like `_.findKey` except that it iterates over elements of +
95139 * a collection in the opposite order. +
95140 * +
95141 * @static +
95142 * @memberOf _ +
95143 * @since 2.0.0 +
95144 * @category Object +
95145 * @param {Object} object The object to inspect. +
95146 * @param {Function} [predicate=_.identity] The function invoked per iteration. +
95147 * @returns {string|undefined} Returns the key of the matched element, +
95148 * else `undefined`. +
95149 * @example +
95150 * +
95151 * var users = { +
95152 * 'barney': { 'age': 36, 'active': true }, +
95153 * 'fred': { 'age': 40, 'active': false }, +
95154 * 'pebbles': { 'age': 1, 'active': true } +
95155 * }; +
95156 * +
95157 * _.findLastKey(users, function(o) { return o.age < 40; }); +
95158 * // => returns 'pebbles' assuming `_.findKey` returns 'barney' +
95159 * +
95160 * // The `_.matches` iteratee shorthand. +
95161 * _.findLastKey(users, { 'age': 36, 'active': true }); +
95162 * // => 'barney' +
95163 * +
95164 * // The `_.matchesProperty` iteratee shorthand. +
95165 * _.findLastKey(users, ['active', false]); +
95166 * // => 'fred' +
95167 * +
95168 * // The `_.property` iteratee shorthand. +
95169 * _.findLastKey(users, 'active'); +
95170 * // => 'pebbles' +
95171 */ +
95172 function findLastKey(object, predicate) { +
95173 return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); +
95174 } +
95175 +
95176 /** +
95177 * Iterates over own and inherited enumerable string keyed properties of an +
95178 * object and invokes `iteratee` for each property. The iteratee is invoked +
95179 * with three arguments: (value, key, object). Iteratee functions may exit +
95180 * iteration early by explicitly returning `false`. +
95181 * +
95182 * @static +
95183 * @memberOf _ +
95184 * @since 0.3.0 +
95185 * @category Object +
95186 * @param {Object} object The object to iterate over. +
95187 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
95188 * @returns {Object} Returns `object`. +
95189 * @see _.forInRight +
95190 * @example +
95191 * +
95192 * function Foo() { +
95193 * this.a = 1; +
95194 * this.b = 2; +
95195 * } +
95196 * +
95197 * Foo.prototype.c = 3; +
95198 * +
95199 * _.forIn(new Foo, function(value, key) { +
95200 * console.log(key); +
95201 * }); +
95202 * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). +
95203 */ +
95204 function forIn(object, iteratee) { +
95205 return object == null +
95206 ? object +
95207 : baseFor(object, getIteratee(iteratee, 3), keysIn); +
95208 } +
95209 +
95210 /** +
95211 * This method is like `_.forIn` except that it iterates over properties of +
95212 * `object` in the opposite order. +
95213 * +
95214 * @static +
95215 * @memberOf _ +
95216 * @since 2.0.0 +
95217 * @category Object +
95218 * @param {Object} object The object to iterate over. +
95219 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
95220 * @returns {Object} Returns `object`. +
95221 * @see _.forIn +
95222 * @example +
95223 * +
95224 * function Foo() { +
95225 * this.a = 1; +
95226 * this.b = 2; +
95227 * } +
95228 * +
95229 * Foo.prototype.c = 3; +
95230 * +
95231 * _.forInRight(new Foo, function(value, key) { +
95232 * console.log(key); +
95233 * }); +
95234 * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. +
95235 */ +
95236 function forInRight(object, iteratee) { +
95237 return object == null +
95238 ? object +
95239 : baseForRight(object, getIteratee(iteratee, 3), keysIn); +
95240 } +
95241 +
95242 /** +
95243 * Iterates over own enumerable string keyed properties of an object and +
95244 * invokes `iteratee` for each property. The iteratee is invoked with three +
95245 * arguments: (value, key, object). Iteratee functions may exit iteration +
95246 * early by explicitly returning `false`. +
95247 * +
95248 * @static +
95249 * @memberOf _ +
95250 * @since 0.3.0 +
95251 * @category Object +
95252 * @param {Object} object The object to iterate over. +
95253 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
95254 * @returns {Object} Returns `object`. +
95255 * @see _.forOwnRight +
95256 * @example +
95257 * +
95258 * function Foo() { +
95259 * this.a = 1; +
95260 * this.b = 2; +
95261 * } +
95262 * +
95263 * Foo.prototype.c = 3; +
95264 * +
95265 * _.forOwn(new Foo, function(value, key) { +
95266 * console.log(key); +
95267 * }); +
95268 * // => Logs 'a' then 'b' (iteration order is not guaranteed). +
95269 */ +
95270 function forOwn(object, iteratee) { +
95271 return object && baseForOwn(object, getIteratee(iteratee, 3)); +
95272 } +
95273 +
95274 /** +
95275 * This method is like `_.forOwn` except that it iterates over properties of +
95276 * `object` in the opposite order. +
95277 * +
95278 * @static +
95279 * @memberOf _ +
95280 * @since 2.0.0 +
95281 * @category Object +
95282 * @param {Object} object The object to iterate over. +
95283 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
95284 * @returns {Object} Returns `object`. +
95285 * @see _.forOwn +
95286 * @example +
95287 * +
95288 * function Foo() { +
95289 * this.a = 1; +
95290 * this.b = 2; +
95291 * } +
95292 * +
95293 * Foo.prototype.c = 3; +
95294 * +
95295 * _.forOwnRight(new Foo, function(value, key) { +
95296 * console.log(key); +
95297 * }); +
95298 * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. +
95299 */ +
95300 function forOwnRight(object, iteratee) { +
95301 return object && baseForOwnRight(object, getIteratee(iteratee, 3)); +
95302 } +
95303 +
95304 /** +
95305 * Creates an array of function property names from own enumerable properties +
95306 * of `object`. +
95307 * +
95308 * @static +
95309 * @since 0.1.0 +
95310 * @memberOf _ +
95311 * @category Object +
95312 * @param {Object} object The object to inspect. +
95313 * @returns {Array} Returns the function names. +
95314 * @see _.functionsIn +
95315 * @example +
95316 * +
95317 * function Foo() { +
95318 * this.a = _.constant('a'); +
95319 * this.b = _.constant('b'); +
95320 * } +
95321 * +
95322 * Foo.prototype.c = _.constant('c'); +
95323 * +
95324 * _.functions(new Foo); +
95325 * // => ['a', 'b'] +
95326 */ +
95327 function functions(object) { +
95328 return object == null ? [] : baseFunctions(object, keys(object)); +
95329 } +
95330 +
95331 /** +
95332 * Creates an array of function property names from own and inherited +
95333 * enumerable properties of `object`. +
95334 * +
95335 * @static +
95336 * @memberOf _ +
95337 * @since 4.0.0 +
95338 * @category Object +
95339 * @param {Object} object The object to inspect. +
95340 * @returns {Array} Returns the function names. +
95341 * @see _.functions +
95342 * @example +
95343 * +
95344 * function Foo() { +
95345 * this.a = _.constant('a'); +
95346 * this.b = _.constant('b'); +
95347 * } +
95348 * +
95349 * Foo.prototype.c = _.constant('c'); +
95350 * +
95351 * _.functionsIn(new Foo); +
95352 * // => ['a', 'b', 'c'] +
95353 */ +
95354 function functionsIn(object) { +
95355 return object == null ? [] : baseFunctions(object, keysIn(object)); +
95356 } +
95357 +
95358 /** +
95359 * Gets the value at `path` of `object`. If the resolved value is +
95360 * `undefined`, the `defaultValue` is returned in its place. +
95361 * +
95362 * @static +
95363 * @memberOf _ +
95364 * @since 3.7.0 +
95365 * @category Object +
95366 * @param {Object} object The object to query. +
95367 * @param {Array|string} path The path of the property to get. +
95368 * @param {*} [defaultValue] The value returned for `undefined` resolved values. +
95369 * @returns {*} Returns the resolved value. +
95370 * @example +
95371 * +
95372 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
95373 * +
95374 * _.get(object, 'a[0].b.c'); +
95375 * // => 3 +
95376 * +
95377 * _.get(object, ['a', '0', 'b', 'c']); +
95378 * // => 3 +
95379 * +
95380 * _.get(object, 'a.b.c', 'default'); +
95381 * // => 'default' +
95382 */ +
95383 function get(object, path, defaultValue) { +
95384 var result = object == null ? undefined : baseGet(object, path); +
95385 return result === undefined ? defaultValue : result; +
95386 } +
95387 +
95388 /** +
95389 * Checks if `path` is a direct property of `object`. +
95390 * +
95391 * @static +
95392 * @since 0.1.0 +
95393 * @memberOf _ +
95394 * @category Object +
95395 * @param {Object} object The object to query. +
95396 * @param {Array|string} path The path to check. +
95397 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
95398 * @example +
95399 * +
95400 * var object = { 'a': { 'b': 2 } }; +
95401 * var other = _.create({ 'a': _.create({ 'b': 2 }) }); +
95402 * +
95403 * _.has(object, 'a'); +
95404 * // => true +
95405 * +
95406 * _.has(object, 'a.b'); +
95407 * // => true +
95408 * +
95409 * _.has(object, ['a', 'b']); +
95410 * // => true +
95411 * +
95412 * _.has(other, 'a'); +
95413 * // => false +
95414 */ +
95415 function has(object, path) { +
95416 return object != null && hasPath(object, path, baseHas); +
95417 } +
95418 +
95419 /** +
95420 * Checks if `path` is a direct or inherited property of `object`. +
95421 * +
95422 * @static +
95423 * @memberOf _ +
95424 * @since 4.0.0 +
95425 * @category Object +
95426 * @param {Object} object The object to query. +
95427 * @param {Array|string} path The path to check. +
95428 * @returns {boolean} Returns `true` if `path` exists, else `false`. +
95429 * @example +
95430 * +
95431 * var object = _.create({ 'a': _.create({ 'b': 2 }) }); +
95432 * +
95433 * _.hasIn(object, 'a'); +
95434 * // => true +
95435 * +
95436 * _.hasIn(object, 'a.b'); +
95437 * // => true +
95438 * +
95439 * _.hasIn(object, ['a', 'b']); +
95440 * // => true +
95441 * +
95442 * _.hasIn(object, 'b'); +
95443 * // => false +
95444 */ +
95445 function hasIn(object, path) { +
95446 return object != null && hasPath(object, path, baseHasIn); +
95447 } +
95448 +
95449 /** +
95450 * Creates an object composed of the inverted keys and values of `object`. +
95451 * If `object` contains duplicate values, subsequent values overwrite +
95452 * property assignments of previous values. +
95453 * +
95454 * @static +
95455 * @memberOf _ +
95456 * @since 0.7.0 +
95457 * @category Object +
95458 * @param {Object} object The object to invert. +
95459 * @returns {Object} Returns the new inverted object. +
95460 * @example +
95461 * +
95462 * var object = { 'a': 1, 'b': 2, 'c': 1 }; +
95463 * +
95464 * _.invert(object); +
95465 * // => { '1': 'c', '2': 'b' } +
95466 */ +
95467 var invert = createInverter(function(result, value, key) { +
95468 if (value != null && +
95469 typeof value.toString != 'function') { +
95470 value = nativeObjectToString.call(value); +
95471 } +
95472 +
95473 result[value] = key; +
95474 }, constant(identity)); +
95475 +
95476 /** +
95477 * This method is like `_.invert` except that the inverted object is generated +
95478 * from the results of running each element of `object` thru `iteratee`. The +
95479 * corresponding inverted value of each inverted key is an array of keys +
95480 * responsible for generating the inverted value. The iteratee is invoked +
95481 * with one argument: (value). +
95482 * +
95483 * @static +
95484 * @memberOf _ +
95485 * @since 4.1.0 +
95486 * @category Object +
95487 * @param {Object} object The object to invert. +
95488 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
95489 * @returns {Object} Returns the new inverted object. +
95490 * @example +
95491 * +
95492 * var object = { 'a': 1, 'b': 2, 'c': 1 }; +
95493 * +
95494 * _.invertBy(object); +
95495 * // => { '1': ['a', 'c'], '2': ['b'] } +
95496 * +
95497 * _.invertBy(object, function(value) { +
95498 * return 'group' + value; +
95499 * }); +
95500 * // => { 'group1': ['a', 'c'], 'group2': ['b'] } +
95501 */ +
95502 var invertBy = createInverter(function(result, value, key) { +
95503 if (value != null && +
95504 typeof value.toString != 'function') { +
95505 value = nativeObjectToString.call(value); +
95506 } +
95507 +
95508 if (hasOwnProperty.call(result, value)) { +
95509 result[value].push(key); +
95510 } else { +
95511 result[value] = [key]; +
95512 } +
95513 }, getIteratee); +
95514 +
95515 /** +
95516 * Invokes the method at `path` of `object`. +
95517 * +
95518 * @static +
95519 * @memberOf _ +
95520 * @since 4.0.0 +
95521 * @category Object +
95522 * @param {Object} object The object to query. +
95523 * @param {Array|string} path The path of the method to invoke. +
95524 * @param {...*} [args] The arguments to invoke the method with. +
95525 * @returns {*} Returns the result of the invoked method. +
95526 * @example +
95527 * +
95528 * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; +
95529 * +
95530 * _.invoke(object, 'a[0].b.c.slice', 1, 3); +
95531 * // => [2, 3] +
95532 */ +
95533 var invoke = baseRest(baseInvoke); +
95534 +
95535 /** +
95536 * Creates an array of the own enumerable property names of `object`. +
95537 * +
95538 * **Note:** Non-object values are coerced to objects. See the +
95539 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) +
95540 * for more details. +
95541 * +
95542 * @static +
95543 * @since 0.1.0 +
95544 * @memberOf _ +
95545 * @category Object +
95546 * @param {Object} object The object to query. +
95547 * @returns {Array} Returns the array of property names. +
95548 * @example +
95549 * +
95550 * function Foo() { +
95551 * this.a = 1; +
95552 * this.b = 2; +
95553 * } +
95554 * +
95555 * Foo.prototype.c = 3; +
95556 * +
95557 * _.keys(new Foo); +
95558 * // => ['a', 'b'] (iteration order is not guaranteed) +
95559 * +
95560 * _.keys('hi'); +
95561 * // => ['0', '1'] +
95562 */ +
95563 function keys(object) { +
95564 return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +
95565 } +
95566 +
95567 /** +
95568 * Creates an array of the own and inherited enumerable property names of `object`. +
95569 * +
95570 * **Note:** Non-object values are coerced to objects. +
95571 * +
95572 * @static +
95573 * @memberOf _ +
95574 * @since 3.0.0 +
95575 * @category Object +
95576 * @param {Object} object The object to query. +
95577 * @returns {Array} Returns the array of property names. +
95578 * @example +
95579 * +
95580 * function Foo() { +
95581 * this.a = 1; +
95582 * this.b = 2; +
95583 * } +
95584 * +
95585 * Foo.prototype.c = 3; +
95586 * +
95587 * _.keysIn(new Foo); +
95588 * // => ['a', 'b', 'c'] (iteration order is not guaranteed) +
95589 */ +
95590 function keysIn(object) { +
95591 return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +
95592 } +
95593 +
95594 /** +
95595 * The opposite of `_.mapValues`; this method creates an object with the +
95596 * same values as `object` and keys generated by running each own enumerable +
95597 * string keyed property of `object` thru `iteratee`. The iteratee is invoked +
95598 * with three arguments: (value, key, object). +
95599 * +
95600 * @static +
95601 * @memberOf _ +
95602 * @since 3.8.0 +
95603 * @category Object +
95604 * @param {Object} object The object to iterate over. +
95605 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
95606 * @returns {Object} Returns the new mapped object. +
95607 * @see _.mapValues +
95608 * @example +
95609 * +
95610 * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { +
95611 * return key + value; +
95612 * }); +
95613 * // => { 'a1': 1, 'b2': 2 } +
95614 */ +
95615 function mapKeys(object, iteratee) { +
95616 var result = {}; +
95617 iteratee = getIteratee(iteratee, 3); +
95618 +
95619 baseForOwn(object, function(value, key, object) { +
95620 baseAssignValue(result, iteratee(value, key, object), value); +
95621 }); +
95622 return result; +
95623 } +
95624 +
95625 /** +
95626 * Creates an object with the same keys as `object` and values generated +
95627 * by running each own enumerable string keyed property of `object` thru +
95628 * `iteratee`. The iteratee is invoked with three arguments: +
95629 * (value, key, object). +
95630 * +
95631 * @static +
95632 * @memberOf _ +
95633 * @since 2.4.0 +
95634 * @category Object +
95635 * @param {Object} object The object to iterate over. +
95636 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
95637 * @returns {Object} Returns the new mapped object. +
95638 * @see _.mapKeys +
95639 * @example +
95640 * +
95641 * var users = { +
95642 * 'fred': { 'user': 'fred', 'age': 40 }, +
95643 * 'pebbles': { 'user': 'pebbles', 'age': 1 } +
95644 * }; +
95645 * +
95646 * _.mapValues(users, function(o) { return o.age; }); +
95647 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +
95648 * +
95649 * // The `_.property` iteratee shorthand. +
95650 * _.mapValues(users, 'age'); +
95651 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) +
95652 */ +
95653 function mapValues(object, iteratee) { +
95654 var result = {}; +
95655 iteratee = getIteratee(iteratee, 3); +
95656 +
95657 baseForOwn(object, function(value, key, object) { +
95658 baseAssignValue(result, key, iteratee(value, key, object)); +
95659 }); +
95660 return result; +
95661 } +
95662 +
95663 /** +
95664 * This method is like `_.assign` except that it recursively merges own and +
95665 * inherited enumerable string keyed properties of source objects into the +
95666 * destination object. Source properties that resolve to `undefined` are +
95667 * skipped if a destination value exists. Array and plain object properties +
95668 * are merged recursively. Other objects and value types are overridden by +
95669 * assignment. Source objects are applied from left to right. Subsequent +
95670 * sources overwrite property assignments of previous sources. +
95671 * +
95672 * **Note:** This method mutates `object`. +
95673 * +
95674 * @static +
95675 * @memberOf _ +
95676 * @since 0.5.0 +
95677 * @category Object +
95678 * @param {Object} object The destination object. +
95679 * @param {...Object} [sources] The source objects. +
95680 * @returns {Object} Returns `object`. +
95681 * @example +
95682 * +
95683 * var object = { +
95684 * 'a': [{ 'b': 2 }, { 'd': 4 }] +
95685 * }; +
95686 * +
95687 * var other = { +
95688 * 'a': [{ 'c': 3 }, { 'e': 5 }] +
95689 * }; +
95690 * +
95691 * _.merge(object, other); +
95692 * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } +
95693 */ +
95694 var merge = createAssigner(function(object, source, srcIndex) { +
95695 baseMerge(object, source, srcIndex); +
95696 }); +
95697 +
95698 /** +
95699 * This method is like `_.merge` except that it accepts `customizer` which +
95700 * is invoked to produce the merged values of the destination and source +
95701 * properties. If `customizer` returns `undefined`, merging is handled by the +
95702 * method instead. The `customizer` is invoked with six arguments: +
95703 * (objValue, srcValue, key, object, source, stack). +
95704 * +
95705 * **Note:** This method mutates `object`. +
95706 * +
95707 * @static +
95708 * @memberOf _ +
95709 * @since 4.0.0 +
95710 * @category Object +
95711 * @param {Object} object The destination object. +
95712 * @param {...Object} sources The source objects. +
95713 * @param {Function} customizer The function to customize assigned values. +
95714 * @returns {Object} Returns `object`. +
95715 * @example +
95716 * +
95717 * function customizer(objValue, srcValue) { +
95718 * if (_.isArray(objValue)) { +
95719 * return objValue.concat(srcValue); +
95720 * } +
95721 * } +
95722 * +
95723 * var object = { 'a': [1], 'b': [2] }; +
95724 * var other = { 'a': [3], 'b': [4] }; +
95725 * +
95726 * _.mergeWith(object, other, customizer); +
95727 * // => { 'a': [1, 3], 'b': [2, 4] } +
95728 */ +
95729 var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { +
95730 baseMerge(object, source, srcIndex, customizer); +
95731 }); +
95732 +
95733 /** +
95734 * The opposite of `_.pick`; this method creates an object composed of the +
95735 * own and inherited enumerable property paths of `object` that are not omitted. +
95736 * +
95737 * **Note:** This method is considerably slower than `_.pick`. +
95738 * +
95739 * @static +
95740 * @since 0.1.0 +
95741 * @memberOf _ +
95742 * @category Object +
95743 * @param {Object} object The source object. +
95744 * @param {...(string|string[])} [paths] The property paths to omit. +
95745 * @returns {Object} Returns the new object. +
95746 * @example +
95747 * +
95748 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
95749 * +
95750 * _.omit(object, ['a', 'c']); +
95751 * // => { 'b': '2' } +
95752 */ +
95753 var omit = flatRest(function(object, paths) { +
95754 var result = {}; +
95755 if (object == null) { +
95756 return result; +
95757 } +
95758 var isDeep = false; +
95759 paths = arrayMap(paths, function(path) { +
95760 path = castPath(path, object); +
95761 isDeep || (isDeep = path.length > 1); +
95762 return path; +
95763 }); +
95764 copyObject(object, getAllKeysIn(object), result); +
95765 if (isDeep) { +
95766 result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); +
95767 } +
95768 var length = paths.length; +
95769 while (length--) { +
95770 baseUnset(result, paths[length]); +
95771 } +
95772 return result; +
95773 }); +
95774 +
95775 /** +
95776 * The opposite of `_.pickBy`; this method creates an object composed of +
95777 * the own and inherited enumerable string keyed properties of `object` that +
95778 * `predicate` doesn't return truthy for. The predicate is invoked with two +
95779 * arguments: (value, key). +
95780 * +
95781 * @static +
95782 * @memberOf _ +
95783 * @since 4.0.0 +
95784 * @category Object +
95785 * @param {Object} object The source object. +
95786 * @param {Function} [predicate=_.identity] The function invoked per property. +
95787 * @returns {Object} Returns the new object. +
95788 * @example +
95789 * +
95790 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
95791 * +
95792 * _.omitBy(object, _.isNumber); +
95793 * // => { 'b': '2' } +
95794 */ +
95795 function omitBy(object, predicate) { +
95796 return pickBy(object, negate(getIteratee(predicate))); +
95797 } +
95798 +
95799 /** +
95800 * Creates an object composed of the picked `object` properties. +
95801 * +
95802 * @static +
95803 * @since 0.1.0 +
95804 * @memberOf _ +
95805 * @category Object +
95806 * @param {Object} object The source object. +
95807 * @param {...(string|string[])} [paths] The property paths to pick. +
95808 * @returns {Object} Returns the new object. +
95809 * @example +
95810 * +
95811 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
95812 * +
95813 * _.pick(object, ['a', 'c']); +
95814 * // => { 'a': 1, 'c': 3 } +
95815 */ +
95816 var pick = flatRest(function(object, paths) { +
95817 return object == null ? {} : basePick(object, paths); +
95818 }); +
95819 +
95820 /** +
95821 * Creates an object composed of the `object` properties `predicate` returns +
95822 * truthy for. The predicate is invoked with two arguments: (value, key). +
95823 * +
95824 * @static +
95825 * @memberOf _ +
95826 * @since 4.0.0 +
95827 * @category Object +
95828 * @param {Object} object The source object. +
95829 * @param {Function} [predicate=_.identity] The function invoked per property. +
95830 * @returns {Object} Returns the new object. +
95831 * @example +
95832 * +
95833 * var object = { 'a': 1, 'b': '2', 'c': 3 }; +
95834 * +
95835 * _.pickBy(object, _.isNumber); +
95836 * // => { 'a': 1, 'c': 3 } +
95837 */ +
95838 function pickBy(object, predicate) { +
95839 if (object == null) { +
95840 return {}; +
95841 } +
95842 var props = arrayMap(getAllKeysIn(object), function(prop) { +
95843 return [prop]; +
95844 }); +
95845 predicate = getIteratee(predicate); +
95846 return basePickBy(object, props, function(value, path) { +
95847 return predicate(value, path[0]); +
95848 }); +
95849 } +
95850 +
95851 /** +
95852 * This method is like `_.get` except that if the resolved value is a +
95853 * function it's invoked with the `this` binding of its parent object and +
95854 * its result is returned. +
95855 * +
95856 * @static +
95857 * @since 0.1.0 +
95858 * @memberOf _ +
95859 * @category Object +
95860 * @param {Object} object The object to query. +
95861 * @param {Array|string} path The path of the property to resolve. +
95862 * @param {*} [defaultValue] The value returned for `undefined` resolved values. +
95863 * @returns {*} Returns the resolved value. +
95864 * @example +
95865 * +
95866 * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; +
95867 * +
95868 * _.result(object, 'a[0].b.c1'); +
95869 * // => 3 +
95870 * +
95871 * _.result(object, 'a[0].b.c2'); +
95872 * // => 4 +
95873 * +
95874 * _.result(object, 'a[0].b.c3', 'default'); +
95875 * // => 'default' +
95876 * +
95877 * _.result(object, 'a[0].b.c3', _.constant('default')); +
95878 * // => 'default' +
95879 */ +
95880 function result(object, path, defaultValue) { +
95881 path = castPath(path, object); +
95882 +
95883 var index = -1, +
95884 length = path.length; +
95885 +
95886 // Ensure the loop is entered when path is empty. +
95887 if (!length) { +
95888 length = 1; +
95889 object = undefined; +
95890 } +
95891 while (++index < length) { +
95892 var value = object == null ? undefined : object[toKey(path[index])]; +
95893 if (value === undefined) { +
95894 index = length; +
95895 value = defaultValue; +
95896 } +
95897 object = isFunction(value) ? value.call(object) : value; +
95898 } +
95899 return object; +
95900 } +
95901 +
95902 /** +
95903 * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, +
95904 * it's created. Arrays are created for missing index properties while objects +
95905 * are created for all other missing properties. Use `_.setWith` to customize +
95906 * `path` creation. +
95907 * +
95908 * **Note:** This method mutates `object`. +
95909 * +
95910 * @static +
95911 * @memberOf _ +
95912 * @since 3.7.0 +
95913 * @category Object +
95914 * @param {Object} object The object to modify. +
95915 * @param {Array|string} path The path of the property to set. +
95916 * @param {*} value The value to set. +
95917 * @returns {Object} Returns `object`. +
95918 * @example +
95919 * +
95920 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
95921 * +
95922 * _.set(object, 'a[0].b.c', 4); +
95923 * console.log(object.a[0].b.c); +
95924 * // => 4 +
95925 * +
95926 * _.set(object, ['x', '0', 'y', 'z'], 5); +
95927 * console.log(object.x[0].y.z); +
95928 * // => 5 +
95929 */ +
95930 function set(object, path, value) { +
95931 return object == null ? object : baseSet(object, path, value); +
95932 } +
95933 +
95934 /** +
95935 * This method is like `_.set` except that it accepts `customizer` which is +
95936 * invoked to produce the objects of `path`. If `customizer` returns `undefined` +
95937 * path creation is handled by the method instead. The `customizer` is invoked +
95938 * with three arguments: (nsValue, key, nsObject). +
95939 * +
95940 * **Note:** This method mutates `object`. +
95941 * +
95942 * @static +
95943 * @memberOf _ +
95944 * @since 4.0.0 +
95945 * @category Object +
95946 * @param {Object} object The object to modify. +
95947 * @param {Array|string} path The path of the property to set. +
95948 * @param {*} value The value to set. +
95949 * @param {Function} [customizer] The function to customize assigned values. +
95950 * @returns {Object} Returns `object`. +
95951 * @example +
95952 * +
95953 * var object = {}; +
95954 * +
95955 * _.setWith(object, '[0][1]', 'a', Object); +
95956 * // => { '0': { '1': 'a' } } +
95957 */ +
95958 function setWith(object, path, value, customizer) { +
95959 customizer = typeof customizer == 'function' ? customizer : undefined; +
95960 return object == null ? object : baseSet(object, path, value, customizer); +
95961 } +
95962 +
95963 /** +
95964 * Creates an array of own enumerable string keyed-value pairs for `object` +
95965 * which can be consumed by `_.fromPairs`. If `object` is a map or set, its +
95966 * entries are returned. +
95967 * +
95968 * @static +
95969 * @memberOf _ +
95970 * @since 4.0.0 +
95971 * @alias entries +
95972 * @category Object +
95973 * @param {Object} object The object to query. +
95974 * @returns {Array} Returns the key-value pairs. +
95975 * @example +
95976 * +
95977 * function Foo() { +
95978 * this.a = 1; +
95979 * this.b = 2; +
95980 * } +
95981 * +
95982 * Foo.prototype.c = 3; +
95983 * +
95984 * _.toPairs(new Foo); +
95985 * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) +
95986 */ +
95987 var toPairs = createToPairs(keys); +
95988 +
95989 /** +
95990 * Creates an array of own and inherited enumerable string keyed-value pairs +
95991 * for `object` which can be consumed by `_.fromPairs`. If `object` is a map +
95992 * or set, its entries are returned. +
95993 * +
95994 * @static +
95995 * @memberOf _ +
95996 * @since 4.0.0 +
95997 * @alias entriesIn +
95998 * @category Object +
95999 * @param {Object} object The object to query. +
96000 * @returns {Array} Returns the key-value pairs. +
96001 * @example +
96002 * +
96003 * function Foo() { +
96004 * this.a = 1; +
96005 * this.b = 2; +
96006 * } +
96007 * +
96008 * Foo.prototype.c = 3; +
96009 * +
96010 * _.toPairsIn(new Foo); +
96011 * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) +
96012 */ +
96013 var toPairsIn = createToPairs(keysIn); +
96014 +
96015 /** +
96016 * An alternative to `_.reduce`; this method transforms `object` to a new +
96017 * `accumulator` object which is the result of running each of its own +
96018 * enumerable string keyed properties thru `iteratee`, with each invocation +
96019 * potentially mutating the `accumulator` object. If `accumulator` is not +
96020 * provided, a new object with the same `[[Prototype]]` will be used. The +
96021 * iteratee is invoked with four arguments: (accumulator, value, key, object). +
96022 * Iteratee functions may exit iteration early by explicitly returning `false`. +
96023 * +
96024 * @static +
96025 * @memberOf _ +
96026 * @since 1.3.0 +
96027 * @category Object +
96028 * @param {Object} object The object to iterate over. +
96029 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
96030 * @param {*} [accumulator] The custom accumulator value. +
96031 * @returns {*} Returns the accumulated value. +
96032 * @example +
96033 * +
96034 * _.transform([2, 3, 4], function(result, n) { +
96035 * result.push(n *= n); +
96036 * return n % 2 == 0; +
96037 * }, []); +
96038 * // => [4, 9] +
96039 * +
96040 * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { +
96041 * (result[value] || (result[value] = [])).push(key); +
96042 * }, {}); +
96043 * // => { '1': ['a', 'c'], '2': ['b'] } +
96044 */ +
96045 function transform(object, iteratee, accumulator) { +
96046 var isArr = isArray(object), +
96047 isArrLike = isArr || isBuffer(object) || isTypedArray(object); +
96048 +
96049 iteratee = getIteratee(iteratee, 4); +
96050 if (accumulator == null) { +
96051 var Ctor = object && object.constructor; +
96052 if (isArrLike) { +
96053 accumulator = isArr ? new Ctor : []; +
96054 } +
96055 else if (isObject(object)) { +
96056 accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; +
96057 } +
96058 else { +
96059 accumulator = {}; +
96060 } +
96061 } +
96062 (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { +
96063 return iteratee(accumulator, value, index, object); +
96064 }); +
96065 return accumulator; +
96066 } +
96067 +
96068 /** +
96069 * Removes the property at `path` of `object`. +
96070 * +
96071 * **Note:** This method mutates `object`. +
96072 * +
96073 * @static +
96074 * @memberOf _ +
96075 * @since 4.0.0 +
96076 * @category Object +
96077 * @param {Object} object The object to modify. +
96078 * @param {Array|string} path The path of the property to unset. +
96079 * @returns {boolean} Returns `true` if the property is deleted, else `false`. +
96080 * @example +
96081 * +
96082 * var object = { 'a': [{ 'b': { 'c': 7 } }] }; +
96083 * _.unset(object, 'a[0].b.c'); +
96084 * // => true +
96085 * +
96086 * console.log(object); +
96087 * // => { 'a': [{ 'b': {} }] }; +
96088 * +
96089 * _.unset(object, ['a', '0', 'b', 'c']); +
96090 * // => true +
96091 * +
96092 * console.log(object); +
96093 * // => { 'a': [{ 'b': {} }] }; +
96094 */ +
96095 function unset(object, path) { +
96096 return object == null ? true : baseUnset(object, path); +
96097 } +
96098 +
96099 /** +
96100 * This method is like `_.set` except that accepts `updater` to produce the +
96101 * value to set. Use `_.updateWith` to customize `path` creation. The `updater` +
96102 * is invoked with one argument: (value). +
96103 * +
96104 * **Note:** This method mutates `object`. +
96105 * +
96106 * @static +
96107 * @memberOf _ +
96108 * @since 4.6.0 +
96109 * @category Object +
96110 * @param {Object} object The object to modify. +
96111 * @param {Array|string} path The path of the property to set. +
96112 * @param {Function} updater The function to produce the updated value. +
96113 * @returns {Object} Returns `object`. +
96114 * @example +
96115 * +
96116 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; +
96117 * +
96118 * _.update(object, 'a[0].b.c', function(n) { return n * n; }); +
96119 * console.log(object.a[0].b.c); +
96120 * // => 9 +
96121 * +
96122 * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); +
96123 * console.log(object.x[0].y.z); +
96124 * // => 0 +
96125 */ +
96126 function update(object, path, updater) { +
96127 return object == null ? object : baseUpdate(object, path, castFunction(updater)); +
96128 } +
96129 +
96130 /** +
96131 * This method is like `_.update` except that it accepts `customizer` which is +
96132 * invoked to produce the objects of `path`. If `customizer` returns `undefined` +
96133 * path creation is handled by the method instead. The `customizer` is invoked +
96134 * with three arguments: (nsValue, key, nsObject). +
96135 * +
96136 * **Note:** This method mutates `object`. +
96137 * +
96138 * @static +
96139 * @memberOf _ +
96140 * @since 4.6.0 +
96141 * @category Object +
96142 * @param {Object} object The object to modify. +
96143 * @param {Array|string} path The path of the property to set. +
96144 * @param {Function} updater The function to produce the updated value. +
96145 * @param {Function} [customizer] The function to customize assigned values. +
96146 * @returns {Object} Returns `object`. +
96147 * @example +
96148 * +
96149 * var object = {}; +
96150 * +
96151 * _.updateWith(object, '[0][1]', _.constant('a'), Object); +
96152 * // => { '0': { '1': 'a' } } +
96153 */ +
96154 function updateWith(object, path, updater, customizer) { +
96155 customizer = typeof customizer == 'function' ? customizer : undefined; +
96156 return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); +
96157 } +
96158 +
96159 /** +
96160 * Creates an array of the own enumerable string keyed property values of `object`. +
96161 * +
96162 * **Note:** Non-object values are coerced to objects. +
96163 * +
96164 * @static +
96165 * @since 0.1.0 +
96166 * @memberOf _ +
96167 * @category Object +
96168 * @param {Object} object The object to query. +
96169 * @returns {Array} Returns the array of property values. +
96170 * @example +
96171 * +
96172 * function Foo() { +
96173 * this.a = 1; +
96174 * this.b = 2; +
96175 * } +
96176 * +
96177 * Foo.prototype.c = 3; +
96178 * +
96179 * _.values(new Foo); +
96180 * // => [1, 2] (iteration order is not guaranteed) +
96181 * +
96182 * _.values('hi'); +
96183 * // => ['h', 'i'] +
96184 */ +
96185 function values(object) { +
96186 return object == null ? [] : baseValues(object, keys(object)); +
96187 } +
96188 +
96189 /** +
96190 * Creates an array of the own and inherited enumerable string keyed property +
96191 * values of `object`. +
96192 * +
96193 * **Note:** Non-object values are coerced to objects. +
96194 * +
96195 * @static +
96196 * @memberOf _ +
96197 * @since 3.0.0 +
96198 * @category Object +
96199 * @param {Object} object The object to query. +
96200 * @returns {Array} Returns the array of property values. +
96201 * @example +
96202 * +
96203 * function Foo() { +
96204 * this.a = 1; +
96205 * this.b = 2; +
96206 * } +
96207 * +
96208 * Foo.prototype.c = 3; +
96209 * +
96210 * _.valuesIn(new Foo); +
96211 * // => [1, 2, 3] (iteration order is not guaranteed) +
96212 */ +
96213 function valuesIn(object) { +
96214 return object == null ? [] : baseValues(object, keysIn(object)); +
96215 } +
96216 +
96217 /*------------------------------------------------------------------------*/ +
96218 +
96219 /** +
96220 * Clamps `number` within the inclusive `lower` and `upper` bounds. +
96221 * +
96222 * @static +
96223 * @memberOf _ +
96224 * @since 4.0.0 +
96225 * @category Number +
96226 * @param {number} number The number to clamp. +
96227 * @param {number} [lower] The lower bound. +
96228 * @param {number} upper The upper bound. +
96229 * @returns {number} Returns the clamped number. +
96230 * @example +
96231 * +
96232 * _.clamp(-10, -5, 5); +
96233 * // => -5 +
96234 * +
96235 * _.clamp(10, -5, 5); +
96236 * // => 5 +
96237 */ +
96238 function clamp(number, lower, upper) { +
96239 if (upper === undefined) { +
96240 upper = lower; +
96241 lower = undefined; +
96242 } +
96243 if (upper !== undefined) { +
96244 upper = toNumber(upper); +
96245 upper = upper === upper ? upper : 0; +
96246 } +
96247 if (lower !== undefined) { +
96248 lower = toNumber(lower); +
96249 lower = lower === lower ? lower : 0; +
96250 } +
96251 return baseClamp(toNumber(number), lower, upper); +
96252 } +
96253 +
96254 /** +
96255 * Checks if `n` is between `start` and up to, but not including, `end`. If +
96256 * `end` is not specified, it's set to `start` with `start` then set to `0`. +
96257 * If `start` is greater than `end` the params are swapped to support +
96258 * negative ranges. +
96259 * +
96260 * @static +
96261 * @memberOf _ +
96262 * @since 3.3.0 +
96263 * @category Number +
96264 * @param {number} number The number to check. +
96265 * @param {number} [start=0] The start of the range. +
96266 * @param {number} end The end of the range. +
96267 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. +
96268 * @see _.range, _.rangeRight +
96269 * @example +
96270 * +
96271 * _.inRange(3, 2, 4); +
96272 * // => true +
96273 * +
96274 * _.inRange(4, 8); +
96275 * // => true +
96276 * +
96277 * _.inRange(4, 2); +
96278 * // => false +
96279 * +
96280 * _.inRange(2, 2); +
96281 * // => false +
96282 * +
96283 * _.inRange(1.2, 2); +
96284 * // => true +
96285 * +
96286 * _.inRange(5.2, 4); +
96287 * // => false +
96288 * +
96289 * _.inRange(-3, -2, -6); +
96290 * // => true +
96291 */ +
96292 function inRange(number, start, end) { +
96293 start = toFinite(start); +
96294 if (end === undefined) { +
96295 end = start; +
96296 start = 0; +
96297 } else { +
96298 end = toFinite(end); +
96299 } +
96300 number = toNumber(number); +
96301 return baseInRange(number, start, end); +
96302 } +
96303 +
96304 /** +
96305 * Produces a random number between the inclusive `lower` and `upper` bounds. +
96306 * If only one argument is provided a number between `0` and the given number +
96307 * is returned. If `floating` is `true`, or either `lower` or `upper` are +
96308 * floats, a floating-point number is returned instead of an integer. +
96309 * +
96310 * **Note:** JavaScript follows the IEEE-754 standard for resolving +
96311 * floating-point values which can produce unexpected results. +
96312 * +
96313 * @static +
96314 * @memberOf _ +
96315 * @since 0.7.0 +
96316 * @category Number +
96317 * @param {number} [lower=0] The lower bound. +
96318 * @param {number} [upper=1] The upper bound. +
96319 * @param {boolean} [floating] Specify returning a floating-point number. +
96320 * @returns {number} Returns the random number. +
96321 * @example +
96322 * +
96323 * _.random(0, 5); +
96324 * // => an integer between 0 and 5 +
96325 * +
96326 * _.random(5); +
96327 * // => also an integer between 0 and 5 +
96328 * +
96329 * _.random(5, true); +
96330 * // => a floating-point number between 0 and 5 +
96331 * +
96332 * _.random(1.2, 5.2); +
96333 * // => a floating-point number between 1.2 and 5.2 +
96334 */ +
96335 function random(lower, upper, floating) { +
96336 if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { +
96337 upper = floating = undefined; +
96338 } +
96339 if (floating === undefined) { +
96340 if (typeof upper == 'boolean') { +
96341 floating = upper; +
96342 upper = undefined; +
96343 } +
96344 else if (typeof lower == 'boolean') { +
96345 floating = lower; +
96346 lower = undefined; +
96347 } +
96348 } +
96349 if (lower === undefined && upper === undefined) { +
96350 lower = 0; +
96351 upper = 1; +
96352 } +
96353 else { +
96354 lower = toFinite(lower); +
96355 if (upper === undefined) { +
96356 upper = lower; +
96357 lower = 0; +
96358 } else { +
96359 upper = toFinite(upper); +
96360 } +
96361 } +
96362 if (lower > upper) { +
96363 var temp = lower; +
96364 lower = upper; +
96365 upper = temp; +
96366 } +
96367 if (floating || lower % 1 || upper % 1) { +
96368 var rand = nativeRandom(); +
96369 return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); +
96370 } +
96371 return baseRandom(lower, upper); +
96372 } +
96373 +
96374 /*------------------------------------------------------------------------*/ +
96375 +
96376 /** +
96377 * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). +
96378 * +
96379 * @static +
96380 * @memberOf _ +
96381 * @since 3.0.0 +
96382 * @category String +
96383 * @param {string} [string=''] The string to convert. +
96384 * @returns {string} Returns the camel cased string. +
96385 * @example +
96386 * +
96387 * _.camelCase('Foo Bar'); +
96388 * // => 'fooBar' +
96389 * +
96390 * _.camelCase('--foo-bar--'); +
96391 * // => 'fooBar' +
96392 * +
96393 * _.camelCase('__FOO_BAR__'); +
96394 * // => 'fooBar' +
96395 */ +
96396 var camelCase = createCompounder(function(result, word, index) { +
96397 word = word.toLowerCase(); +
96398 return result + (index ? capitalize(word) : word); +
96399 }); +
96400 +
96401 /** +
96402 * Converts the first character of `string` to upper case and the remaining +
96403 * to lower case. +
96404 * +
96405 * @static +
96406 * @memberOf _ +
96407 * @since 3.0.0 +
96408 * @category String +
96409 * @param {string} [string=''] The string to capitalize. +
96410 * @returns {string} Returns the capitalized string. +
96411 * @example +
96412 * +
96413 * _.capitalize('FRED'); +
96414 * // => 'Fred' +
96415 */ +
96416 function capitalize(string) { +
96417 return upperFirst(toString(string).toLowerCase()); +
96418 } +
96419 +
96420 /** +
96421 * Deburrs `string` by converting +
96422 * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) +
96423 * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) +
96424 * letters to basic Latin letters and removing +
96425 * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). +
96426 * +
96427 * @static +
96428 * @memberOf _ +
96429 * @since 3.0.0 +
96430 * @category String +
96431 * @param {string} [string=''] The string to deburr. +
96432 * @returns {string} Returns the deburred string. +
96433 * @example +
96434 * +
96435 * _.deburr('déjà vu'); +
96436 * // => 'deja vu' +
96437 */ +
96438 function deburr(string) { +
96439 string = toString(string); +
96440 return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +
96441 } +
96442 +
96443 /** +
96444 * Checks if `string` ends with the given target string. +
96445 * +
96446 * @static +
96447 * @memberOf _ +
96448 * @since 3.0.0 +
96449 * @category String +
96450 * @param {string} [string=''] The string to inspect. +
96451 * @param {string} [target] The string to search for. +
96452 * @param {number} [position=string.length] The position to search up to. +
96453 * @returns {boolean} Returns `true` if `string` ends with `target`, +
96454 * else `false`. +
96455 * @example +
96456 * +
96457 * _.endsWith('abc', 'c'); +
96458 * // => true +
96459 * +
96460 * _.endsWith('abc', 'b'); +
96461 * // => false +
96462 * +
96463 * _.endsWith('abc', 'b', 2); +
96464 * // => true +
96465 */ +
96466 function endsWith(string, target, position) { +
96467 string = toString(string); +
96468 target = baseToString(target); +
96469 +
96470 var length = string.length; +
96471 position = position === undefined +
96472 ? length +
96473 : baseClamp(toInteger(position), 0, length); +
96474 +
96475 var end = position; +
96476 position -= target.length; +
96477 return position >= 0 && string.slice(position, end) == target; +
96478 } +
96479 +
96480 /** +
96481 * Converts the characters "&", "<", ">", '"', and "'" in `string` to their +
96482 * corresponding HTML entities. +
96483 * +
96484 * **Note:** No other characters are escaped. To escape additional +
96485 * characters use a third-party library like [_he_](https://mths.be/he). +
96486 * +
96487 * Though the ">" character is escaped for symmetry, characters like +
96488 * ">" and "/" don't need escaping in HTML and have no special meaning +
96489 * unless they're part of a tag or unquoted attribute value. See +
96490 * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) +
96491 * (under "semi-related fun fact") for more details. +
96492 * +
96493 * When working with HTML you should always +
96494 * [quote attribute values](http://wonko.com/post/html-escaping) to reduce +
96495 * XSS vectors. +
96496 * +
96497 * @static +
96498 * @since 0.1.0 +
96499 * @memberOf _ +
96500 * @category String +
96501 * @param {string} [string=''] The string to escape. +
96502 * @returns {string} Returns the escaped string. +
96503 * @example +
96504 * +
96505 * _.escape('fred, barney, & pebbles'); +
96506 * // => 'fred, barney, &amp; pebbles' +
96507 */ +
96508 function escape(string) { +
96509 string = toString(string); +
96510 return (string && reHasUnescapedHtml.test(string)) +
96511 ? string.replace(reUnescapedHtml, escapeHtmlChar) +
96512 : string; +
96513 } +
96514 +
96515 /** +
96516 * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", +
96517 * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. +
96518 * +
96519 * @static +
96520 * @memberOf _ +
96521 * @since 3.0.0 +
96522 * @category String +
96523 * @param {string} [string=''] The string to escape. +
96524 * @returns {string} Returns the escaped string. +
96525 * @example +
96526 * +
96527 * _.escapeRegExp('[lodash](https://lodash.com/)'); +
96528 * // => '\[lodash\]\(https://lodash\.com/\)' +
96529 */ +
96530 function escapeRegExp(string) { +
96531 string = toString(string); +
96532 return (string && reHasRegExpChar.test(string)) +
96533 ? string.replace(reRegExpChar, '\\$&') +
96534 : string; +
96535 } +
96536 +
96537 /** +
96538 * Converts `string` to +
96539 * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). +
96540 * +
96541 * @static +
96542 * @memberOf _ +
96543 * @since 3.0.0 +
96544 * @category String +
96545 * @param {string} [string=''] The string to convert. +
96546 * @returns {string} Returns the kebab cased string. +
96547 * @example +
96548 * +
96549 * _.kebabCase('Foo Bar'); +
96550 * // => 'foo-bar' +
96551 * +
96552 * _.kebabCase('fooBar'); +
96553 * // => 'foo-bar' +
96554 * +
96555 * _.kebabCase('__FOO_BAR__'); +
96556 * // => 'foo-bar' +
96557 */ +
96558 var kebabCase = createCompounder(function(result, word, index) { +
96559 return result + (index ? '-' : '') + word.toLowerCase(); +
96560 }); +
96561 +
96562 /** +
96563 * Converts `string`, as space separated words, to lower case. +
96564 * +
96565 * @static +
96566 * @memberOf _ +
96567 * @since 4.0.0 +
96568 * @category String +
96569 * @param {string} [string=''] The string to convert. +
96570 * @returns {string} Returns the lower cased string. +
96571 * @example +
96572 * +
96573 * _.lowerCase('--Foo-Bar--'); +
96574 * // => 'foo bar' +
96575 * +
96576 * _.lowerCase('fooBar'); +
96577 * // => 'foo bar' +
96578 * +
96579 * _.lowerCase('__FOO_BAR__'); +
96580 * // => 'foo bar' +
96581 */ +
96582 var lowerCase = createCompounder(function(result, word, index) { +
96583 return result + (index ? ' ' : '') + word.toLowerCase(); +
96584 }); +
96585 +
96586 /** +
96587 * Converts the first character of `string` to lower case. +
96588 * +
96589 * @static +
96590 * @memberOf _ +
96591 * @since 4.0.0 +
96592 * @category String +
96593 * @param {string} [string=''] The string to convert. +
96594 * @returns {string} Returns the converted string. +
96595 * @example +
96596 * +
96597 * _.lowerFirst('Fred'); +
96598 * // => 'fred' +
96599 * +
96600 * _.lowerFirst('FRED'); +
96601 * // => 'fRED' +
96602 */ +
96603 var lowerFirst = createCaseFirst('toLowerCase'); +
96604 +
96605 /** +
96606 * Pads `string` on the left and right sides if it's shorter than `length`. +
96607 * Padding characters are truncated if they can't be evenly divided by `length`. +
96608 * +
96609 * @static +
96610 * @memberOf _ +
96611 * @since 3.0.0 +
96612 * @category String +
96613 * @param {string} [string=''] The string to pad. +
96614 * @param {number} [length=0] The padding length. +
96615 * @param {string} [chars=' '] The string used as padding. +
96616 * @returns {string} Returns the padded string. +
96617 * @example +
96618 * +
96619 * _.pad('abc', 8); +
96620 * // => ' abc ' +
96621 * +
96622 * _.pad('abc', 8, '_-'); +
96623 * // => '_-abc_-_' +
96624 * +
96625 * _.pad('abc', 3); +
96626 * // => 'abc' +
96627 */ +
96628 function pad(string, length, chars) { +
96629 string = toString(string); +
96630 length = toInteger(length); +
96631 +
96632 var strLength = length ? stringSize(string) : 0; +
96633 if (!length || strLength >= length) { +
96634 return string; +
96635 } +
96636 var mid = (length - strLength) / 2; +
96637 return ( +
96638 createPadding(nativeFloor(mid), chars) + +
96639 string + +
96640 createPadding(nativeCeil(mid), chars) +
96641 ); +
96642 } +
96643 +
96644 /** +
96645 * Pads `string` on the right side if it's shorter than `length`. Padding +
96646 * characters are truncated if they exceed `length`. +
96647 * +
96648 * @static +
96649 * @memberOf _ +
96650 * @since 4.0.0 +
96651 * @category String +
96652 * @param {string} [string=''] The string to pad. +
96653 * @param {number} [length=0] The padding length. +
96654 * @param {string} [chars=' '] The string used as padding. +
96655 * @returns {string} Returns the padded string. +
96656 * @example +
96657 * +
96658 * _.padEnd('abc', 6); +
96659 * // => 'abc ' +
96660 * +
96661 * _.padEnd('abc', 6, '_-'); +
96662 * // => 'abc_-_' +
96663 * +
96664 * _.padEnd('abc', 3); +
96665 * // => 'abc' +
96666 */ +
96667 function padEnd(string, length, chars) { +
96668 string = toString(string); +
96669 length = toInteger(length); +
96670 +
96671 var strLength = length ? stringSize(string) : 0; +
96672 return (length && strLength < length) +
96673 ? (string + createPadding(length - strLength, chars)) +
96674 : string; +
96675 } +
96676 +
96677 /** +
96678 * Pads `string` on the left side if it's shorter than `length`. Padding +
96679 * characters are truncated if they exceed `length`. +
96680 * +
96681 * @static +
96682 * @memberOf _ +
96683 * @since 4.0.0 +
96684 * @category String +
96685 * @param {string} [string=''] The string to pad. +
96686 * @param {number} [length=0] The padding length. +
96687 * @param {string} [chars=' '] The string used as padding. +
96688 * @returns {string} Returns the padded string. +
96689 * @example +
96690 * +
96691 * _.padStart('abc', 6); +
96692 * // => ' abc' +
96693 * +
96694 * _.padStart('abc', 6, '_-'); +
96695 * // => '_-_abc' +
96696 * +
96697 * _.padStart('abc', 3); +
96698 * // => 'abc' +
96699 */ +
96700 function padStart(string, length, chars) { +
96701 string = toString(string); +
96702 length = toInteger(length); +
96703 +
96704 var strLength = length ? stringSize(string) : 0; +
96705 return (length && strLength < length) +
96706 ? (createPadding(length - strLength, chars) + string) +
96707 : string; +
96708 } +
96709 +
96710 /** +
96711 * Converts `string` to an integer of the specified radix. If `radix` is +
96712 * `undefined` or `0`, a `radix` of `10` is used unless `value` is a +
96713 * hexadecimal, in which case a `radix` of `16` is used. +
96714 * +
96715 * **Note:** This method aligns with the +
96716 * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. +
96717 * +
96718 * @static +
96719 * @memberOf _ +
96720 * @since 1.1.0 +
96721 * @category String +
96722 * @param {string} string The string to convert. +
96723 * @param {number} [radix=10] The radix to interpret `value` by. +
96724 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
96725 * @returns {number} Returns the converted integer. +
96726 * @example +
96727 * +
96728 * _.parseInt('08'); +
96729 * // => 8 +
96730 * +
96731 * _.map(['6', '08', '10'], _.parseInt); +
96732 * // => [6, 8, 10] +
96733 */ +
96734 function parseInt(string, radix, guard) { +
96735 if (guard || radix == null) { +
96736 radix = 0; +
96737 } else if (radix) { +
96738 radix = +radix; +
96739 } +
96740 return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); +
96741 } +
96742 +
96743 /** +
96744 * Repeats the given string `n` times. +
96745 * +
96746 * @static +
96747 * @memberOf _ +
96748 * @since 3.0.0 +
96749 * @category String +
96750 * @param {string} [string=''] The string to repeat. +
96751 * @param {number} [n=1] The number of times to repeat the string. +
96752 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
96753 * @returns {string} Returns the repeated string. +
96754 * @example +
96755 * +
96756 * _.repeat('*', 3); +
96757 * // => '***' +
96758 * +
96759 * _.repeat('abc', 2); +
96760 * // => 'abcabc' +
96761 * +
96762 * _.repeat('abc', 0); +
96763 * // => '' +
96764 */ +
96765 function repeat(string, n, guard) { +
96766 if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { +
96767 n = 1; +
96768 } else { +
96769 n = toInteger(n); +
96770 } +
96771 return baseRepeat(toString(string), n); +
96772 } +
96773 +
96774 /** +
96775 * Replaces matches for `pattern` in `string` with `replacement`. +
96776 * +
96777 * **Note:** This method is based on +
96778 * [`String#replace`](https://mdn.io/String/replace). +
96779 * +
96780 * @static +
96781 * @memberOf _ +
96782 * @since 4.0.0 +
96783 * @category String +
96784 * @param {string} [string=''] The string to modify. +
96785 * @param {RegExp|string} pattern The pattern to replace. +
96786 * @param {Function|string} replacement The match replacement. +
96787 * @returns {string} Returns the modified string. +
96788 * @example +
96789 * +
96790 * _.replace('Hi Fred', 'Fred', 'Barney'); +
96791 * // => 'Hi Barney' +
96792 */ +
96793 function replace() { +
96794 var args = arguments, +
96795 string = toString(args[0]); +
96796 +
96797 return args.length < 3 ? string : string.replace(args[1], args[2]); +
96798 } +
96799 +
96800 /** +
96801 * Converts `string` to +
96802 * [snake case](https://en.wikipedia.org/wiki/Snake_case). +
96803 * +
96804 * @static +
96805 * @memberOf _ +
96806 * @since 3.0.0 +
96807 * @category String +
96808 * @param {string} [string=''] The string to convert. +
96809 * @returns {string} Returns the snake cased string. +
96810 * @example +
96811 * +
96812 * _.snakeCase('Foo Bar'); +
96813 * // => 'foo_bar' +
96814 * +
96815 * _.snakeCase('fooBar'); +
96816 * // => 'foo_bar' +
96817 * +
96818 * _.snakeCase('--FOO-BAR--'); +
96819 * // => 'foo_bar' +
96820 */ +
96821 var snakeCase = createCompounder(function(result, word, index) { +
96822 return result + (index ? '_' : '') + word.toLowerCase(); +
96823 }); +
96824 +
96825 /** +
96826 * Splits `string` by `separator`. +
96827 * +
96828 * **Note:** This method is based on +
96829 * [`String#split`](https://mdn.io/String/split). +
96830 * +
96831 * @static +
96832 * @memberOf _ +
96833 * @since 4.0.0 +
96834 * @category String +
96835 * @param {string} [string=''] The string to split. +
96836 * @param {RegExp|string} separator The separator pattern to split by. +
96837 * @param {number} [limit] The length to truncate results to. +
96838 * @returns {Array} Returns the string segments. +
96839 * @example +
96840 * +
96841 * _.split('a-b-c', '-', 2); +
96842 * // => ['a', 'b'] +
96843 */ +
96844 function split(string, separator, limit) { +
96845 if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { +
96846 separator = limit = undefined; +
96847 } +
96848 limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; +
96849 if (!limit) { +
96850 return []; +
96851 } +
96852 string = toString(string); +
96853 if (string && ( +
96854 typeof separator == 'string' || +
96855 (separator != null && !isRegExp(separator)) +
96856 )) { +
96857 separator = baseToString(separator); +
96858 if (!separator && hasUnicode(string)) { +
96859 return castSlice(stringToArray(string), 0, limit); +
96860 } +
96861 } +
96862 return string.split(separator, limit); +
96863 } +
96864 +
96865 /** +
96866 * Converts `string` to +
96867 * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). +
96868 * +
96869 * @static +
96870 * @memberOf _ +
96871 * @since 3.1.0 +
96872 * @category String +
96873 * @param {string} [string=''] The string to convert. +
96874 * @returns {string} Returns the start cased string. +
96875 * @example +
96876 * +
96877 * _.startCase('--foo-bar--'); +
96878 * // => 'Foo Bar' +
96879 * +
96880 * _.startCase('fooBar'); +
96881 * // => 'Foo Bar' +
96882 * +
96883 * _.startCase('__FOO_BAR__'); +
96884 * // => 'FOO BAR' +
96885 */ +
96886 var startCase = createCompounder(function(result, word, index) { +
96887 return result + (index ? ' ' : '') + upperFirst(word); +
96888 }); +
96889 +
96890 /** +
96891 * Checks if `string` starts with the given target string. +
96892 * +
96893 * @static +
96894 * @memberOf _ +
96895 * @since 3.0.0 +
96896 * @category String +
96897 * @param {string} [string=''] The string to inspect. +
96898 * @param {string} [target] The string to search for. +
96899 * @param {number} [position=0] The position to search from. +
96900 * @returns {boolean} Returns `true` if `string` starts with `target`, +
96901 * else `false`. +
96902 * @example +
96903 * +
96904 * _.startsWith('abc', 'a'); +
96905 * // => true +
96906 * +
96907 * _.startsWith('abc', 'b'); +
96908 * // => false +
96909 * +
96910 * _.startsWith('abc', 'b', 1); +
96911 * // => true +
96912 */ +
96913 function startsWith(string, target, position) { +
96914 string = toString(string); +
96915 position = position == null +
96916 ? 0 +
96917 : baseClamp(toInteger(position), 0, string.length); +
96918 +
96919 target = baseToString(target); +
96920 return string.slice(position, position + target.length) == target; +
96921 } +
96922 +
96923 /** +
96924 * Creates a compiled template function that can interpolate data properties +
96925 * in "interpolate" delimiters, HTML-escape interpolated data properties in +
96926 * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data +
96927 * properties may be accessed as free variables in the template. If a setting +
96928 * object is given, it takes precedence over `_.templateSettings` values. +
96929 * +
96930 * **Note:** In the development build `_.template` utilizes +
96931 * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) +
96932 * for easier debugging. +
96933 * +
96934 * For more information on precompiling templates see +
96935 * [lodash's custom builds documentation](https://lodash.com/custom-builds). +
96936 * +
96937 * For more information on Chrome extension sandboxes see +
96938 * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). +
96939 * +
96940 * @static +
96941 * @since 0.1.0 +
96942 * @memberOf _ +
96943 * @category String +
96944 * @param {string} [string=''] The template string. +
96945 * @param {Object} [options={}] The options object. +
96946 * @param {RegExp} [options.escape=_.templateSettings.escape] +
96947 * The HTML "escape" delimiter. +
96948 * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] +
96949 * The "evaluate" delimiter. +
96950 * @param {Object} [options.imports=_.templateSettings.imports] +
96951 * An object to import into the template as free variables. +
96952 * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] +
96953 * The "interpolate" delimiter. +
96954 * @param {string} [options.sourceURL='lodash.templateSources[n]'] +
96955 * The sourceURL of the compiled template. +
96956 * @param {string} [options.variable='obj'] +
96957 * The data object variable name. +
96958 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
96959 * @returns {Function} Returns the compiled template function. +
96960 * @example +
96961 * +
96962 * // Use the "interpolate" delimiter to create a compiled template. +
96963 * var compiled = _.template('hello <%= user %>!'); +
96964 * compiled({ 'user': 'fred' }); +
96965 * // => 'hello fred!' +
96966 * +
96967 * // Use the HTML "escape" delimiter to escape data property values. +
96968 * var compiled = _.template('<b><%- value %></b>'); +
96969 * compiled({ 'value': '<script>' }); +
96970 * // => '<b>&lt;script&gt;</b>' +
96971 * +
96972 * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. +
96973 * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); +
96974 * compiled({ 'users': ['fred', 'barney'] }); +
96975 * // => '<li>fred</li><li>barney</li>' +
96976 * +
96977 * // Use the internal `print` function in "evaluate" delimiters. +
96978 * var compiled = _.template('<% print("hello " + user); %>!'); +
96979 * compiled({ 'user': 'barney' }); +
96980 * // => 'hello barney!' +
96981 * +
96982 * // Use the ES template literal delimiter as an "interpolate" delimiter. +
96983 * // Disable support by replacing the "interpolate" delimiter. +
96984 * var compiled = _.template('hello ${ user }!'); +
96985 * compiled({ 'user': 'pebbles' }); +
96986 * // => 'hello pebbles!' +
96987 * +
96988 * // Use backslashes to treat delimiters as plain text. +
96989 * var compiled = _.template('<%= "\\<%- value %\\>" %>'); +
96990 * compiled({ 'value': 'ignored' }); +
96991 * // => '<%- value %>' +
96992 * +
96993 * // Use the `imports` option to import `jQuery` as `jq`. +
96994 * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; +
96995 * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); +
96996 * compiled({ 'users': ['fred', 'barney'] }); +
96997 * // => '<li>fred</li><li>barney</li>' +
96998 * +
96999 * // Use the `sourceURL` option to specify a custom sourceURL for the template. +
97000 * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); +
97001 * compiled(data); +
97002 * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. +
97003 * +
97004 * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. +
97005 * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); +
97006 * compiled.source; +
97007 * // => function(data) { +
97008 * // var __t, __p = ''; +
97009 * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; +
97010 * // return __p; +
97011 * // } +
97012 * +
97013 * // Use custom template delimiters. +
97014 * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; +
97015 * var compiled = _.template('hello {{ user }}!'); +
97016 * compiled({ 'user': 'mustache' }); +
97017 * // => 'hello mustache!' +
97018 * +
97019 * // Use the `source` property to inline compiled templates for meaningful +
97020 * // line numbers in error messages and stack traces. +
97021 * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ +
97022 * var JST = {\ +
97023 * "main": ' + _.template(mainText).source + '\ +
97024 * };\ +
97025 * '); +
97026 */ +
97027 function template(string, options, guard) { +
97028 // Based on John Resig's `tmpl` implementation +
97029 // (http://ejohn.org/blog/javascript-micro-templating/) +
97030 // and Laura Doktorova's doT.js (https://github.com/olado/doT). +
97031 var settings = lodash.templateSettings; +
97032 +
97033 if (guard && isIterateeCall(string, options, guard)) { +
97034 options = undefined; +
97035 } +
97036 string = toString(string); +
97037 options = assignInWith({}, options, settings, customDefaultsAssignIn); +
97038 +
97039 var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), +
97040 importsKeys = keys(imports), +
97041 importsValues = baseValues(imports, importsKeys); +
97042 +
97043 var isEscaping, +
97044 isEvaluating, +
97045 index = 0, +
97046 interpolate = options.interpolate || reNoMatch, +
97047 source = "__p += '"; +
97048 +
97049 // Compile the regexp to match each delimiter. +
97050 var reDelimiters = RegExp( +
97051 (options.escape || reNoMatch).source + '|' + +
97052 interpolate.source + '|' + +
97053 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + +
97054 (options.evaluate || reNoMatch).source + '|$' +
97055 , 'g'); +
97056 +
97057 // Use a sourceURL for easier debugging. +
97058 var sourceURL = '//# sourceURL=' + +
97059 ('sourceURL' in options +
97060 ? options.sourceURL +
97061 : ('lodash.templateSources[' + (++templateCounter) + ']') +
97062 ) + '\n'; +
97063 +
97064 string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { +
97065 interpolateValue || (interpolateValue = esTemplateValue); +
97066 +
97067 // Escape characters that can't be included in string literals. +
97068 source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); +
97069 +
97070 // Replace delimiters with snippets. +
97071 if (escapeValue) { +
97072 isEscaping = true; +
97073 source += "' +\n__e(" + escapeValue + ") +\n'"; +
97074 } +
97075 if (evaluateValue) { +
97076 isEvaluating = true; +
97077 source += "';\n" + evaluateValue + ";\n__p += '"; +
97078 } +
97079 if (interpolateValue) { +
97080 source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; +
97081 } +
97082 index = offset + match.length; +
97083 +
97084 // The JS engine embedded in Adobe products needs `match` returned in +
97085 // order to produce the correct `offset` value. +
97086 return match; +
97087 }); +
97088 +
97089 source += "';\n"; +
97090 +
97091 // If `variable` is not specified wrap a with-statement around the generated +
97092 // code to add the data object to the top of the scope chain. +
97093 var variable = options.variable; +
97094 if (!variable) { +
97095 source = 'with (obj) {\n' + source + '\n}\n'; +
97096 } +
97097 // Cleanup code by stripping empty strings. +
97098 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) +
97099 .replace(reEmptyStringMiddle, '$1') +
97100 .replace(reEmptyStringTrailing, '$1;'); +
97101 +
97102 // Frame code as the function body. +
97103 source = 'function(' + (variable || 'obj') + ') {\n' + +
97104 (variable +
97105 ? '' +
97106 : 'obj || (obj = {});\n' +
97107 ) + +
97108 "var __t, __p = ''" + +
97109 (isEscaping +
97110 ? ', __e = _.escape' +
97111 : '' +
97112 ) + +
97113 (isEvaluating +
97114 ? ', __j = Array.prototype.join;\n' + +
97115 "function print() { __p += __j.call(arguments, '') }\n" +
97116 : ';\n' +
97117 ) + +
97118 source + +
97119 'return __p\n}'; +
97120 +
97121 var result = attempt(function() { +
97122 return Function(importsKeys, sourceURL + 'return ' + source) +
97123 .apply(undefined, importsValues); +
97124 }); +
97125 +
97126 // Provide the compiled function's source by its `toString` method or +
97127 // the `source` property as a convenience for inlining compiled templates. +
97128 result.source = source; +
97129 if (isError(result)) { +
97130 throw result; +
97131 } +
97132 return result; +
97133 } +
97134 +
97135 /** +
97136 * Converts `string`, as a whole, to lower case just like +
97137 * [String#toLowerCase](https://mdn.io/toLowerCase). +
97138 * +
97139 * @static +
97140 * @memberOf _ +
97141 * @since 4.0.0 +
97142 * @category String +
97143 * @param {string} [string=''] The string to convert. +
97144 * @returns {string} Returns the lower cased string. +
97145 * @example +
97146 * +
97147 * _.toLower('--Foo-Bar--'); +
97148 * // => '--foo-bar--' +
97149 * +
97150 * _.toLower('fooBar'); +
97151 * // => 'foobar' +
97152 * +
97153 * _.toLower('__FOO_BAR__'); +
97154 * // => '__foo_bar__' +
97155 */ +
97156 function toLower(value) { +
97157 return toString(value).toLowerCase(); +
97158 } +
97159 +
97160 /** +
97161 * Converts `string`, as a whole, to upper case just like +
97162 * [String#toUpperCase](https://mdn.io/toUpperCase). +
97163 * +
97164 * @static +
97165 * @memberOf _ +
97166 * @since 4.0.0 +
97167 * @category String +
97168 * @param {string} [string=''] The string to convert. +
97169 * @returns {string} Returns the upper cased string. +
97170 * @example +
97171 * +
97172 * _.toUpper('--foo-bar--'); +
97173 * // => '--FOO-BAR--' +
97174 * +
97175 * _.toUpper('fooBar'); +
97176 * // => 'FOOBAR' +
97177 * +
97178 * _.toUpper('__foo_bar__'); +
97179 * // => '__FOO_BAR__' +
97180 */ +
97181 function toUpper(value) { +
97182 return toString(value).toUpperCase(); +
97183 } +
97184 +
97185 /** +
97186 * Removes leading and trailing whitespace or specified characters from `string`. +
97187 * +
97188 * @static +
97189 * @memberOf _ +
97190 * @since 3.0.0 +
97191 * @category String +
97192 * @param {string} [string=''] The string to trim. +
97193 * @param {string} [chars=whitespace] The characters to trim. +
97194 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
97195 * @returns {string} Returns the trimmed string. +
97196 * @example +
97197 * +
97198 * _.trim(' abc '); +
97199 * // => 'abc' +
97200 * +
97201 * _.trim('-_-abc-_-', '_-'); +
97202 * // => 'abc' +
97203 * +
97204 * _.map([' foo ', ' bar '], _.trim); +
97205 * // => ['foo', 'bar'] +
97206 */ +
97207 function trim(string, chars, guard) { +
97208 string = toString(string); +
97209 if (string && (guard || chars === undefined)) { +
97210 return string.replace(reTrim, ''); +
97211 } +
97212 if (!string || !(chars = baseToString(chars))) { +
97213 return string; +
97214 } +
97215 var strSymbols = stringToArray(string), +
97216 chrSymbols = stringToArray(chars), +
97217 start = charsStartIndex(strSymbols, chrSymbols), +
97218 end = charsEndIndex(strSymbols, chrSymbols) + 1; +
97219 +
97220 return castSlice(strSymbols, start, end).join(''); +
97221 } +
97222 +
97223 /** +
97224 * Removes trailing whitespace or specified characters from `string`. +
97225 * +
97226 * @static +
97227 * @memberOf _ +
97228 * @since 4.0.0 +
97229 * @category String +
97230 * @param {string} [string=''] The string to trim. +
97231 * @param {string} [chars=whitespace] The characters to trim. +
97232 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
97233 * @returns {string} Returns the trimmed string. +
97234 * @example +
97235 * +
97236 * _.trimEnd(' abc '); +
97237 * // => ' abc' +
97238 * +
97239 * _.trimEnd('-_-abc-_-', '_-'); +
97240 * // => '-_-abc' +
97241 */ +
97242 function trimEnd(string, chars, guard) { +
97243 string = toString(string); +
97244 if (string && (guard || chars === undefined)) { +
97245 return string.replace(reTrimEnd, ''); +
97246 } +
97247 if (!string || !(chars = baseToString(chars))) { +
97248 return string; +
97249 } +
97250 var strSymbols = stringToArray(string), +
97251 end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; +
97252 +
97253 return castSlice(strSymbols, 0, end).join(''); +
97254 } +
97255 +
97256 /** +
97257 * Removes leading whitespace or specified characters from `string`. +
97258 * +
97259 * @static +
97260 * @memberOf _ +
97261 * @since 4.0.0 +
97262 * @category String +
97263 * @param {string} [string=''] The string to trim. +
97264 * @param {string} [chars=whitespace] The characters to trim. +
97265 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
97266 * @returns {string} Returns the trimmed string. +
97267 * @example +
97268 * +
97269 * _.trimStart(' abc '); +
97270 * // => 'abc ' +
97271 * +
97272 * _.trimStart('-_-abc-_-', '_-'); +
97273 * // => 'abc-_-' +
97274 */ +
97275 function trimStart(string, chars, guard) { +
97276 string = toString(string); +
97277 if (string && (guard || chars === undefined)) { +
97278 return string.replace(reTrimStart, ''); +
97279 } +
97280 if (!string || !(chars = baseToString(chars))) { +
97281 return string; +
97282 } +
97283 var strSymbols = stringToArray(string), +
97284 start = charsStartIndex(strSymbols, stringToArray(chars)); +
97285 +
97286 return castSlice(strSymbols, start).join(''); +
97287 } +
97288 +
97289 /** +
97290 * Truncates `string` if it's longer than the given maximum string length. +
97291 * The last characters of the truncated string are replaced with the omission +
97292 * string which defaults to "...". +
97293 * +
97294 * @static +
97295 * @memberOf _ +
97296 * @since 4.0.0 +
97297 * @category String +
97298 * @param {string} [string=''] The string to truncate. +
97299 * @param {Object} [options={}] The options object. +
97300 * @param {number} [options.length=30] The maximum string length. +
97301 * @param {string} [options.omission='...'] The string to indicate text is omitted. +
97302 * @param {RegExp|string} [options.separator] The separator pattern to truncate to. +
97303 * @returns {string} Returns the truncated string. +
97304 * @example +
97305 * +
97306 * _.truncate('hi-diddly-ho there, neighborino'); +
97307 * // => 'hi-diddly-ho there, neighbo...' +
97308 * +
97309 * _.truncate('hi-diddly-ho there, neighborino', { +
97310 * 'length': 24, +
97311 * 'separator': ' ' +
97312 * }); +
97313 * // => 'hi-diddly-ho there,...' +
97314 * +
97315 * _.truncate('hi-diddly-ho there, neighborino', { +
97316 * 'length': 24, +
97317 * 'separator': /,? +/ +
97318 * }); +
97319 * // => 'hi-diddly-ho there...' +
97320 * +
97321 * _.truncate('hi-diddly-ho there, neighborino', { +
97322 * 'omission': ' [...]' +
97323 * }); +
97324 * // => 'hi-diddly-ho there, neig [...]' +
97325 */ +
97326 function truncate(string, options) { +
97327 var length = DEFAULT_TRUNC_LENGTH, +
97328 omission = DEFAULT_TRUNC_OMISSION; +
97329 +
97330 if (isObject(options)) { +
97331 var separator = 'separator' in options ? options.separator : separator; +
97332 length = 'length' in options ? toInteger(options.length) : length; +
97333 omission = 'omission' in options ? baseToString(options.omission) : omission; +
97334 } +
97335 string = toString(string); +
97336 +
97337 var strLength = string.length; +
97338 if (hasUnicode(string)) { +
97339 var strSymbols = stringToArray(string); +
97340 strLength = strSymbols.length; +
97341 } +
97342 if (length >= strLength) { +
97343 return string; +
97344 } +
97345 var end = length - stringSize(omission); +
97346 if (end < 1) { +
97347 return omission; +
97348 } +
97349 var result = strSymbols +
97350 ? castSlice(strSymbols, 0, end).join('') +
97351 : string.slice(0, end); +
97352 +
97353 if (separator === undefined) { +
97354 return result + omission; +
97355 } +
97356 if (strSymbols) { +
97357 end += (result.length - end); +
97358 } +
97359 if (isRegExp(separator)) { +
97360 if (string.slice(end).search(separator)) { +
97361 var match, +
97362 substring = result; +
97363 +
97364 if (!separator.global) { +
97365 separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); +
97366 } +
97367 separator.lastIndex = 0; +
97368 while ((match = separator.exec(substring))) { +
97369 var newEnd = match.index; +
97370 } +
97371 result = result.slice(0, newEnd === undefined ? end : newEnd); +
97372 } +
97373 } else if (string.indexOf(baseToString(separator), end) != end) { +
97374 var index = result.lastIndexOf(separator); +
97375 if (index > -1) { +
97376 result = result.slice(0, index); +
97377 } +
97378 } +
97379 return result + omission; +
97380 } +
97381 +
97382 /** +
97383 * The inverse of `_.escape`; this method converts the HTML entities +
97384 * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to +
97385 * their corresponding characters. +
97386 * +
97387 * **Note:** No other HTML entities are unescaped. To unescape additional +
97388 * HTML entities use a third-party library like [_he_](https://mths.be/he). +
97389 * +
97390 * @static +
97391 * @memberOf _ +
97392 * @since 0.6.0 +
97393 * @category String +
97394 * @param {string} [string=''] The string to unescape. +
97395 * @returns {string} Returns the unescaped string. +
97396 * @example +
97397 * +
97398 * _.unescape('fred, barney, &amp; pebbles'); +
97399 * // => 'fred, barney, & pebbles' +
97400 */ +
97401 function unescape(string) { +
97402 string = toString(string); +
97403 return (string && reHasEscapedHtml.test(string)) +
97404 ? string.replace(reEscapedHtml, unescapeHtmlChar) +
97405 : string; +
97406 } +
97407 +
97408 /** +
97409 * Converts `string`, as space separated words, to upper case. +
97410 * +
97411 * @static +
97412 * @memberOf _ +
97413 * @since 4.0.0 +
97414 * @category String +
97415 * @param {string} [string=''] The string to convert. +
97416 * @returns {string} Returns the upper cased string. +
97417 * @example +
97418 * +
97419 * _.upperCase('--foo-bar'); +
97420 * // => 'FOO BAR' +
97421 * +
97422 * _.upperCase('fooBar'); +
97423 * // => 'FOO BAR' +
97424 * +
97425 * _.upperCase('__foo_bar__'); +
97426 * // => 'FOO BAR' +
97427 */ +
97428 var upperCase = createCompounder(function(result, word, index) { +
97429 return result + (index ? ' ' : '') + word.toUpperCase(); +
97430 }); +
97431 +
97432 /** +
97433 * Converts the first character of `string` to upper case. +
97434 * +
97435 * @static +
97436 * @memberOf _ +
97437 * @since 4.0.0 +
97438 * @category String +
97439 * @param {string} [string=''] The string to convert. +
97440 * @returns {string} Returns the converted string. +
97441 * @example +
97442 * +
97443 * _.upperFirst('fred'); +
97444 * // => 'Fred' +
97445 * +
97446 * _.upperFirst('FRED'); +
97447 * // => 'FRED' +
97448 */ +
97449 var upperFirst = createCaseFirst('toUpperCase'); +
97450 +
97451 /** +
97452 * Splits `string` into an array of its words. +
97453 * +
97454 * @static +
97455 * @memberOf _ +
97456 * @since 3.0.0 +
97457 * @category String +
97458 * @param {string} [string=''] The string to inspect. +
97459 * @param {RegExp|string} [pattern] The pattern to match words. +
97460 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. +
97461 * @returns {Array} Returns the words of `string`. +
97462 * @example +
97463 * +
97464 * _.words('fred, barney, & pebbles'); +
97465 * // => ['fred', 'barney', 'pebbles'] +
97466 * +
97467 * _.words('fred, barney, & pebbles', /[^, ]+/g); +
97468 * // => ['fred', 'barney', '&', 'pebbles'] +
97469 */ +
97470 function words(string, pattern, guard) { +
97471 string = toString(string); +
97472 pattern = guard ? undefined : pattern; +
97473 +
97474 if (pattern === undefined) { +
97475 return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); +
97476 } +
97477 return string.match(pattern) || []; +
97478 } +
97479 +
97480 /*------------------------------------------------------------------------*/ +
97481 +
97482 /** +
97483 * Attempts to invoke `func`, returning either the result or the caught error +
97484 * object. Any additional arguments are provided to `func` when it's invoked. +
97485 * +
97486 * @static +
97487 * @memberOf _ +
97488 * @since 3.0.0 +
97489 * @category Util +
97490 * @param {Function} func The function to attempt. +
97491 * @param {...*} [args] The arguments to invoke `func` with. +
97492 * @returns {*} Returns the `func` result or error object. +
97493 * @example +
97494 * +
97495 * // Avoid throwing errors for invalid selectors. +
97496 * var elements = _.attempt(function(selector) { +
97497 * return document.querySelectorAll(selector); +
97498 * }, '>_>'); +
97499 * +
97500 * if (_.isError(elements)) { +
97501 * elements = []; +
97502 * } +
97503 */ +
97504 var attempt = baseRest(function(func, args) { +
97505 try { +
97506 return apply(func, undefined, args); +
97507 } catch (e) { +
97508 return isError(e) ? e : new Error(e); +
97509 } +
97510 }); +
97511 +
97512 /** +
97513 * Binds methods of an object to the object itself, overwriting the existing +
97514 * method. +
97515 * +
97516 * **Note:** This method doesn't set the "length" property of bound functions. +
97517 * +
97518 * @static +
97519 * @since 0.1.0 +
97520 * @memberOf _ +
97521 * @category Util +
97522 * @param {Object} object The object to bind and assign the bound methods to. +
97523 * @param {...(string|string[])} methodNames The object method names to bind. +
97524 * @returns {Object} Returns `object`. +
97525 * @example +
97526 * +
97527 * var view = { +
97528 * 'label': 'docs', +
97529 * 'click': function() { +
97530 * console.log('clicked ' + this.label); +
97531 * } +
97532 * }; +
97533 * +
97534 * _.bindAll(view, ['click']); +
97535 * jQuery(element).on('click', view.click); +
97536 * // => Logs 'clicked docs' when clicked. +
97537 */ +
97538 var bindAll = flatRest(function(object, methodNames) { +
97539 arrayEach(methodNames, function(key) { +
97540 key = toKey(key); +
97541 baseAssignValue(object, key, bind(object[key], object)); +
97542 }); +
97543 return object; +
97544 }); +
97545 +
97546 /** +
97547 * Creates a function that iterates over `pairs` and invokes the corresponding +
97548 * function of the first predicate to return truthy. The predicate-function +
97549 * pairs are invoked with the `this` binding and arguments of the created +
97550 * function. +
97551 * +
97552 * @static +
97553 * @memberOf _ +
97554 * @since 4.0.0 +
97555 * @category Util +
97556 * @param {Array} pairs The predicate-function pairs. +
97557 * @returns {Function} Returns the new composite function. +
97558 * @example +
97559 * +
97560 * var func = _.cond([ +
97561 * [_.matches({ 'a': 1 }), _.constant('matches A')], +
97562 * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], +
97563 * [_.stubTrue, _.constant('no match')] +
97564 * ]); +
97565 * +
97566 * func({ 'a': 1, 'b': 2 }); +
97567 * // => 'matches A' +
97568 * +
97569 * func({ 'a': 0, 'b': 1 }); +
97570 * // => 'matches B' +
97571 * +
97572 * func({ 'a': '1', 'b': '2' }); +
97573 * // => 'no match' +
97574 */ +
97575 function cond(pairs) { +
97576 var length = pairs == null ? 0 : pairs.length, +
97577 toIteratee = getIteratee(); +
97578 +
97579 pairs = !length ? [] : arrayMap(pairs, function(pair) { +
97580 if (typeof pair[1] != 'function') { +
97581 throw new TypeError(FUNC_ERROR_TEXT); +
97582 } +
97583 return [toIteratee(pair[0]), pair[1]]; +
97584 }); +
97585 +
97586 return baseRest(function(args) { +
97587 var index = -1; +
97588 while (++index < length) { +
97589 var pair = pairs[index]; +
97590 if (apply(pair[0], this, args)) { +
97591 return apply(pair[1], this, args); +
97592 } +
97593 } +
97594 }); +
97595 } +
97596 +
97597 /** +
97598 * Creates a function that invokes the predicate properties of `source` with +
97599 * the corresponding property values of a given object, returning `true` if +
97600 * all predicates return truthy, else `false`. +
97601 * +
97602 * **Note:** The created function is equivalent to `_.conformsTo` with +
97603 * `source` partially applied. +
97604 * +
97605 * @static +
97606 * @memberOf _ +
97607 * @since 4.0.0 +
97608 * @category Util +
97609 * @param {Object} source The object of property predicates to conform to. +
97610 * @returns {Function} Returns the new spec function. +
97611 * @example +
97612 * +
97613 * var objects = [ +
97614 * { 'a': 2, 'b': 1 }, +
97615 * { 'a': 1, 'b': 2 } +
97616 * ]; +
97617 * +
97618 * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); +
97619 * // => [{ 'a': 1, 'b': 2 }] +
97620 */ +
97621 function conforms(source) { +
97622 return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); +
97623 } +
97624 +
97625 /** +
97626 * Creates a function that returns `value`. +
97627 * +
97628 * @static +
97629 * @memberOf _ +
97630 * @since 2.4.0 +
97631 * @category Util +
97632 * @param {*} value The value to return from the new function. +
97633 * @returns {Function} Returns the new constant function. +
97634 * @example +
97635 * +
97636 * var objects = _.times(2, _.constant({ 'a': 1 })); +
97637 * +
97638 * console.log(objects); +
97639 * // => [{ 'a': 1 }, { 'a': 1 }] +
97640 * +
97641 * console.log(objects[0] === objects[1]); +
97642 * // => true +
97643 */ +
97644 function constant(value) { +
97645 return function() { +
97646 return value; +
97647 }; +
97648 } +
97649 +
97650 /** +
97651 * Checks `value` to determine whether a default value should be returned in +
97652 * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, +
97653 * or `undefined`. +
97654 * +
97655 * @static +
97656 * @memberOf _ +
97657 * @since 4.14.0 +
97658 * @category Util +
97659 * @param {*} value The value to check. +
97660 * @param {*} defaultValue The default value. +
97661 * @returns {*} Returns the resolved value. +
97662 * @example +
97663 * +
97664 * _.defaultTo(1, 10); +
97665 * // => 1 +
97666 * +
97667 * _.defaultTo(undefined, 10); +
97668 * // => 10 +
97669 */ +
97670 function defaultTo(value, defaultValue) { +
97671 return (value == null || value !== value) ? defaultValue : value; +
97672 } +
97673 +
97674 /** +
97675 * Creates a function that returns the result of invoking the given functions +
97676 * with the `this` binding of the created function, where each successive +
97677 * invocation is supplied the return value of the previous. +
97678 * +
97679 * @static +
97680 * @memberOf _ +
97681 * @since 3.0.0 +
97682 * @category Util +
97683 * @param {...(Function|Function[])} [funcs] The functions to invoke. +
97684 * @returns {Function} Returns the new composite function. +
97685 * @see _.flowRight +
97686 * @example +
97687 * +
97688 * function square(n) { +
97689 * return n * n; +
97690 * } +
97691 * +
97692 * var addSquare = _.flow([_.add, square]); +
97693 * addSquare(1, 2); +
97694 * // => 9 +
97695 */ +
97696 var flow = createFlow(); +
97697 +
97698 /** +
97699 * This method is like `_.flow` except that it creates a function that +
97700 * invokes the given functions from right to left. +
97701 * +
97702 * @static +
97703 * @since 3.0.0 +
97704 * @memberOf _ +
97705 * @category Util +
97706 * @param {...(Function|Function[])} [funcs] The functions to invoke. +
97707 * @returns {Function} Returns the new composite function. +
97708 * @see _.flow +
97709 * @example +
97710 * +
97711 * function square(n) { +
97712 * return n * n; +
97713 * } +
97714 * +
97715 * var addSquare = _.flowRight([square, _.add]); +
97716 * addSquare(1, 2); +
97717 * // => 9 +
97718 */ +
97719 var flowRight = createFlow(true); +
97720 +
97721 /** +
97722 * This method returns the first argument it receives. +
97723 * +
97724 * @static +
97725 * @since 0.1.0 +
97726 * @memberOf _ +
97727 * @category Util +
97728 * @param {*} value Any value. +
97729 * @returns {*} Returns `value`. +
97730 * @example +
97731 * +
97732 * var object = { 'a': 1 }; +
97733 * +
97734 * console.log(_.identity(object) === object); +
97735 * // => true +
97736 */ +
97737 function identity(value) { +
97738 return value; +
97739 } +
97740 +
97741 /** +
97742 * Creates a function that invokes `func` with the arguments of the created +
97743 * function. If `func` is a property name, the created function returns the +
97744 * property value for a given element. If `func` is an array or object, the +
97745 * created function returns `true` for elements that contain the equivalent +
97746 * source properties, otherwise it returns `false`. +
97747 * +
97748 * @static +
97749 * @since 4.0.0 +
97750 * @memberOf _ +
97751 * @category Util +
97752 * @param {*} [func=_.identity] The value to convert to a callback. +
97753 * @returns {Function} Returns the callback. +
97754 * @example +
97755 * +
97756 * var users = [ +
97757 * { 'user': 'barney', 'age': 36, 'active': true }, +
97758 * { 'user': 'fred', 'age': 40, 'active': false } +
97759 * ]; +
97760 * +
97761 * // The `_.matches` iteratee shorthand. +
97762 * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); +
97763 * // => [{ 'user': 'barney', 'age': 36, 'active': true }] +
97764 * +
97765 * // The `_.matchesProperty` iteratee shorthand. +
97766 * _.filter(users, _.iteratee(['user', 'fred'])); +
97767 * // => [{ 'user': 'fred', 'age': 40 }] +
97768 * +
97769 * // The `_.property` iteratee shorthand. +
97770 * _.map(users, _.iteratee('user')); +
97771 * // => ['barney', 'fred'] +
97772 * +
97773 * // Create custom iteratee shorthands. +
97774 * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { +
97775 * return !_.isRegExp(func) ? iteratee(func) : function(string) { +
97776 * return func.test(string); +
97777 * }; +
97778 * }); +
97779 * +
97780 * _.filter(['abc', 'def'], /ef/); +
97781 * // => ['def'] +
97782 */ +
97783 function iteratee(func) { +
97784 return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); +
97785 } +
97786 +
97787 /** +
97788 * Creates a function that performs a partial deep comparison between a given +
97789 * object and `source`, returning `true` if the given object has equivalent +
97790 * property values, else `false`. +
97791 * +
97792 * **Note:** The created function is equivalent to `_.isMatch` with `source` +
97793 * partially applied. +
97794 * +
97795 * Partial comparisons will match empty array and empty object `source` +
97796 * values against any array or object value, respectively. See `_.isEqual` +
97797 * for a list of supported value comparisons. +
97798 * +
97799 * @static +
97800 * @memberOf _ +
97801 * @since 3.0.0 +
97802 * @category Util +
97803 * @param {Object} source The object of property values to match. +
97804 * @returns {Function} Returns the new spec function. +
97805 * @example +
97806 * +
97807 * var objects = [ +
97808 * { 'a': 1, 'b': 2, 'c': 3 }, +
97809 * { 'a': 4, 'b': 5, 'c': 6 } +
97810 * ]; +
97811 * +
97812 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); +
97813 * // => [{ 'a': 4, 'b': 5, 'c': 6 }] +
97814 */ +
97815 function matches(source) { +
97816 return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); +
97817 } +
97818 +
97819 /** +
97820 * Creates a function that performs a partial deep comparison between the +
97821 * value at `path` of a given object to `srcValue`, returning `true` if the +
97822 * object value is equivalent, else `false`. +
97823 * +
97824 * **Note:** Partial comparisons will match empty array and empty object +
97825 * `srcValue` values against any array or object value, respectively. See +
97826 * `_.isEqual` for a list of supported value comparisons. +
97827 * +
97828 * @static +
97829 * @memberOf _ +
97830 * @since 3.2.0 +
97831 * @category Util +
97832 * @param {Array|string} path The path of the property to get. +
97833 * @param {*} srcValue The value to match. +
97834 * @returns {Function} Returns the new spec function. +
97835 * @example +
97836 * +
97837 * var objects = [ +
97838 * { 'a': 1, 'b': 2, 'c': 3 }, +
97839 * { 'a': 4, 'b': 5, 'c': 6 } +
97840 * ]; +
97841 * +
97842 * _.find(objects, _.matchesProperty('a', 4)); +
97843 * // => { 'a': 4, 'b': 5, 'c': 6 } +
97844 */ +
97845 function matchesProperty(path, srcValue) { +
97846 return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); +
97847 } +
97848 +
97849 /** +
97850 * Creates a function that invokes the method at `path` of a given object. +
97851 * Any additional arguments are provided to the invoked method. +
97852 * +
97853 * @static +
97854 * @memberOf _ +
97855 * @since 3.7.0 +
97856 * @category Util +
97857 * @param {Array|string} path The path of the method to invoke. +
97858 * @param {...*} [args] The arguments to invoke the method with. +
97859 * @returns {Function} Returns the new invoker function. +
97860 * @example +
97861 * +
97862 * var objects = [ +
97863 * { 'a': { 'b': _.constant(2) } }, +
97864 * { 'a': { 'b': _.constant(1) } } +
97865 * ]; +
97866 * +
97867 * _.map(objects, _.method('a.b')); +
97868 * // => [2, 1] +
97869 * +
97870 * _.map(objects, _.method(['a', 'b'])); +
97871 * // => [2, 1] +
97872 */ +
97873 var method = baseRest(function(path, args) { +
97874 return function(object) { +
97875 return baseInvoke(object, path, args); +
97876 }; +
97877 }); +
97878 +
97879 /** +
97880 * The opposite of `_.method`; this method creates a function that invokes +
97881 * the method at a given path of `object`. Any additional arguments are +
97882 * provided to the invoked method. +
97883 * +
97884 * @static +
97885 * @memberOf _ +
97886 * @since 3.7.0 +
97887 * @category Util +
97888 * @param {Object} object The object to query. +
97889 * @param {...*} [args] The arguments to invoke the method with. +
97890 * @returns {Function} Returns the new invoker function. +
97891 * @example +
97892 * +
97893 * var array = _.times(3, _.constant), +
97894 * object = { 'a': array, 'b': array, 'c': array }; +
97895 * +
97896 * _.map(['a[2]', 'c[0]'], _.methodOf(object)); +
97897 * // => [2, 0] +
97898 * +
97899 * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); +
97900 * // => [2, 0] +
97901 */ +
97902 var methodOf = baseRest(function(object, args) { +
97903 return function(path) { +
97904 return baseInvoke(object, path, args); +
97905 }; +
97906 }); +
97907 +
97908 /** +
97909 * Adds all own enumerable string keyed function properties of a source +
97910 * object to the destination object. If `object` is a function, then methods +
97911 * are added to its prototype as well. +
97912 * +
97913 * **Note:** Use `_.runInContext` to create a pristine `lodash` function to +
97914 * avoid conflicts caused by modifying the original. +
97915 * +
97916 * @static +
97917 * @since 0.1.0 +
97918 * @memberOf _ +
97919 * @category Util +
97920 * @param {Function|Object} [object=lodash] The destination object. +
97921 * @param {Object} source The object of functions to add. +
97922 * @param {Object} [options={}] The options object. +
97923 * @param {boolean} [options.chain=true] Specify whether mixins are chainable. +
97924 * @returns {Function|Object} Returns `object`. +
97925 * @example +
97926 * +
97927 * function vowels(string) { +
97928 * return _.filter(string, function(v) { +
97929 * return /[aeiou]/i.test(v); +
97930 * }); +
97931 * } +
97932 * +
97933 * _.mixin({ 'vowels': vowels }); +
97934 * _.vowels('fred'); +
97935 * // => ['e'] +
97936 * +
97937 * _('fred').vowels().value(); +
97938 * // => ['e'] +
97939 * +
97940 * _.mixin({ 'vowels': vowels }, { 'chain': false }); +
97941 * _('fred').vowels(); +
97942 * // => ['e'] +
97943 */ +
97944 function mixin(object, source, options) { +
97945 var props = keys(source), +
97946 methodNames = baseFunctions(source, props); +
97947 +
97948 if (options == null && +
97949 !(isObject(source) && (methodNames.length || !props.length))) { +
97950 options = source; +
97951 source = object; +
97952 object = this; +
97953 methodNames = baseFunctions(source, keys(source)); +
97954 } +
97955 var chain = !(isObject(options) && 'chain' in options) || !!options.chain, +
97956 isFunc = isFunction(object); +
97957 +
97958 arrayEach(methodNames, function(methodName) { +
97959 var func = source[methodName]; +
97960 object[methodName] = func; +
97961 if (isFunc) { +
97962 object.prototype[methodName] = function() { +
97963 var chainAll = this.__chain__; +
97964 if (chain || chainAll) { +
97965 var result = object(this.__wrapped__), +
97966 actions = result.__actions__ = copyArray(this.__actions__); +
97967 +
97968 actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); +
97969 result.__chain__ = chainAll; +
97970 return result; +
97971 } +
97972 return func.apply(object, arrayPush([this.value()], arguments)); +
97973 }; +
97974 } +
97975 }); +
97976 +
97977 return object; +
97978 } +
97979 +
97980 /** +
97981 * Reverts the `_` variable to its previous value and returns a reference to +
97982 * the `lodash` function. +
97983 * +
97984 * @static +
97985 * @since 0.1.0 +
97986 * @memberOf _ +
97987 * @category Util +
97988 * @returns {Function} Returns the `lodash` function. +
97989 * @example +
97990 * +
97991 * var lodash = _.noConflict(); +
97992 */ +
97993 function noConflict() { +
97994 if (root._ === this) { +
97995 root._ = oldDash; +
97996 } +
97997 return this; +
97998 } +
97999 +
98000 /** +
98001 * This method returns `undefined`. +
98002 * +
98003 * @static +
98004 * @memberOf _ +
98005 * @since 2.3.0 +
98006 * @category Util +
98007 * @example +
98008 * +
98009 * _.times(2, _.noop); +
98010 * // => [undefined, undefined] +
98011 */ +
98012 function noop() { +
98013 // No operation performed. +
98014 } +
98015 +
98016 /** +
98017 * Creates a function that gets the argument at index `n`. If `n` is negative, +
98018 * the nth argument from the end is returned. +
98019 * +
98020 * @static +
98021 * @memberOf _ +
98022 * @since 4.0.0 +
98023 * @category Util +
98024 * @param {number} [n=0] The index of the argument to return. +
98025 * @returns {Function} Returns the new pass-thru function. +
98026 * @example +
98027 * +
98028 * var func = _.nthArg(1); +
98029 * func('a', 'b', 'c', 'd'); +
98030 * // => 'b' +
98031 * +
98032 * var func = _.nthArg(-2); +
98033 * func('a', 'b', 'c', 'd'); +
98034 * // => 'c' +
98035 */ +
98036 function nthArg(n) { +
98037 n = toInteger(n); +
98038 return baseRest(function(args) { +
98039 return baseNth(args, n); +
98040 }); +
98041 } +
98042 +
98043 /** +
98044 * Creates a function that invokes `iteratees` with the arguments it receives +
98045 * and returns their results. +
98046 * +
98047 * @static +
98048 * @memberOf _ +
98049 * @since 4.0.0 +
98050 * @category Util +
98051 * @param {...(Function|Function[])} [iteratees=[_.identity]] +
98052 * The iteratees to invoke. +
98053 * @returns {Function} Returns the new function. +
98054 * @example +
98055 * +
98056 * var func = _.over([Math.max, Math.min]); +
98057 * +
98058 * func(1, 2, 3, 4); +
98059 * // => [4, 1] +
98060 */ +
98061 var over = createOver(arrayMap); +
98062 +
98063 /** +
98064 * Creates a function that checks if **all** of the `predicates` return +
98065 * truthy when invoked with the arguments it receives. +
98066 * +
98067 * @static +
98068 * @memberOf _ +
98069 * @since 4.0.0 +
98070 * @category Util +
98071 * @param {...(Function|Function[])} [predicates=[_.identity]] +
98072 * The predicates to check. +
98073 * @returns {Function} Returns the new function. +
98074 * @example +
98075 * +
98076 * var func = _.overEvery([Boolean, isFinite]); +
98077 * +
98078 * func('1'); +
98079 * // => true +
98080 * +
98081 * func(null); +
98082 * // => false +
98083 * +
98084 * func(NaN); +
98085 * // => false +
98086 */ +
98087 var overEvery = createOver(arrayEvery); +
98088 +
98089 /** +
98090 * Creates a function that checks if **any** of the `predicates` return +
98091 * truthy when invoked with the arguments it receives. +
98092 * +
98093 * @static +
98094 * @memberOf _ +
98095 * @since 4.0.0 +
98096 * @category Util +
98097 * @param {...(Function|Function[])} [predicates=[_.identity]] +
98098 * The predicates to check. +
98099 * @returns {Function} Returns the new function. +
98100 * @example +
98101 * +
98102 * var func = _.overSome([Boolean, isFinite]); +
98103 * +
98104 * func('1'); +
98105 * // => true +
98106 * +
98107 * func(null); +
98108 * // => true +
98109 * +
98110 * func(NaN); +
98111 * // => false +
98112 */ +
98113 var overSome = createOver(arraySome); +
98114 +
98115 /** +
98116 * Creates a function that returns the value at `path` of a given object. +
98117 * +
98118 * @static +
98119 * @memberOf _ +
98120 * @since 2.4.0 +
98121 * @category Util +
98122 * @param {Array|string} path The path of the property to get. +
98123 * @returns {Function} Returns the new accessor function. +
98124 * @example +
98125 * +
98126 * var objects = [ +
98127 * { 'a': { 'b': 2 } }, +
98128 * { 'a': { 'b': 1 } } +
98129 * ]; +
98130 * +
98131 * _.map(objects, _.property('a.b')); +
98132 * // => [2, 1] +
98133 * +
98134 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); +
98135 * // => [1, 2] +
98136 */ +
98137 function property(path) { +
98138 return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +
98139 } +
98140 +
98141 /** +
98142 * The opposite of `_.property`; this method creates a function that returns +
98143 * the value at a given path of `object`. +
98144 * +
98145 * @static +
98146 * @memberOf _ +
98147 * @since 3.0.0 +
98148 * @category Util +
98149 * @param {Object} object The object to query. +
98150 * @returns {Function} Returns the new accessor function. +
98151 * @example +
98152 * +
98153 * var array = [0, 1, 2], +
98154 * object = { 'a': array, 'b': array, 'c': array }; +
98155 * +
98156 * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); +
98157 * // => [2, 0] +
98158 * +
98159 * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); +
98160 * // => [2, 0] +
98161 */ +
98162 function propertyOf(object) { +
98163 return function(path) { +
98164 return object == null ? undefined : baseGet(object, path); +
98165 }; +
98166 } +
98167 +
98168 /** +
98169 * Creates an array of numbers (positive and/or negative) progressing from +
98170 * `start` up to, but not including, `end`. A step of `-1` is used if a negative +
98171 * `start` is specified without an `end` or `step`. If `end` is not specified, +
98172 * it's set to `start` with `start` then set to `0`. +
98173 * +
98174 * **Note:** JavaScript follows the IEEE-754 standard for resolving +
98175 * floating-point values which can produce unexpected results. +
98176 * +
98177 * @static +
98178 * @since 0.1.0 +
98179 * @memberOf _ +
98180 * @category Util +
98181 * @param {number} [start=0] The start of the range. +
98182 * @param {number} end The end of the range. +
98183 * @param {number} [step=1] The value to increment or decrement by. +
98184 * @returns {Array} Returns the range of numbers. +
98185 * @see _.inRange, _.rangeRight +
98186 * @example +
98187 * +
98188 * _.range(4); +
98189 * // => [0, 1, 2, 3] +
98190 * +
98191 * _.range(-4); +
98192 * // => [0, -1, -2, -3] +
98193 * +
98194 * _.range(1, 5); +
98195 * // => [1, 2, 3, 4] +
98196 * +
98197 * _.range(0, 20, 5); +
98198 * // => [0, 5, 10, 15] +
98199 * +
98200 * _.range(0, -4, -1); +
98201 * // => [0, -1, -2, -3] +
98202 * +
98203 * _.range(1, 4, 0); +
98204 * // => [1, 1, 1] +
98205 * +
98206 * _.range(0); +
98207 * // => [] +
98208 */ +
98209 var range = createRange(); +
98210 +
98211 /** +
98212 * This method is like `_.range` except that it populates values in +
98213 * descending order. +
98214 * +
98215 * @static +
98216 * @memberOf _ +
98217 * @since 4.0.0 +
98218 * @category Util +
98219 * @param {number} [start=0] The start of the range. +
98220 * @param {number} end The end of the range. +
98221 * @param {number} [step=1] The value to increment or decrement by. +
98222 * @returns {Array} Returns the range of numbers. +
98223 * @see _.inRange, _.range +
98224 * @example +
98225 * +
98226 * _.rangeRight(4); +
98227 * // => [3, 2, 1, 0] +
98228 * +
98229 * _.rangeRight(-4); +
98230 * // => [-3, -2, -1, 0] +
98231 * +
98232 * _.rangeRight(1, 5); +
98233 * // => [4, 3, 2, 1] +
98234 * +
98235 * _.rangeRight(0, 20, 5); +
98236 * // => [15, 10, 5, 0] +
98237 * +
98238 * _.rangeRight(0, -4, -1); +
98239 * // => [-3, -2, -1, 0] +
98240 * +
98241 * _.rangeRight(1, 4, 0); +
98242 * // => [1, 1, 1] +
98243 * +
98244 * _.rangeRight(0); +
98245 * // => [] +
98246 */ +
98247 var rangeRight = createRange(true); +
98248 +
98249 /** +
98250 * This method returns a new empty array. +
98251 * +
98252 * @static +
98253 * @memberOf _ +
98254 * @since 4.13.0 +
98255 * @category Util +
98256 * @returns {Array} Returns the new empty array. +
98257 * @example +
98258 * +
98259 * var arrays = _.times(2, _.stubArray); +
98260 * +
98261 * console.log(arrays); +
98262 * // => [[], []] +
98263 * +
98264 * console.log(arrays[0] === arrays[1]); +
98265 * // => false +
98266 */ +
98267 function stubArray() { +
98268 return []; +
98269 } +
98270 +
98271 /** +
98272 * This method returns `false`. +
98273 * +
98274 * @static +
98275 * @memberOf _ +
98276 * @since 4.13.0 +
98277 * @category Util +
98278 * @returns {boolean} Returns `false`. +
98279 * @example +
98280 * +
98281 * _.times(2, _.stubFalse); +
98282 * // => [false, false] +
98283 */ +
98284 function stubFalse() { +
98285 return false; +
98286 } +
98287 +
98288 /** +
98289 * This method returns a new empty object. +
98290 * +
98291 * @static +
98292 * @memberOf _ +
98293 * @since 4.13.0 +
98294 * @category Util +
98295 * @returns {Object} Returns the new empty object. +
98296 * @example +
98297 * +
98298 * var objects = _.times(2, _.stubObject); +
98299 * +
98300 * console.log(objects); +
98301 * // => [{}, {}] +
98302 * +
98303 * console.log(objects[0] === objects[1]); +
98304 * // => false +
98305 */ +
98306 function stubObject() { +
98307 return {}; +
98308 } +
98309 +
98310 /** +
98311 * This method returns an empty string. +
98312 * +
98313 * @static +
98314 * @memberOf _ +
98315 * @since 4.13.0 +
98316 * @category Util +
98317 * @returns {string} Returns the empty string. +
98318 * @example +
98319 * +
98320 * _.times(2, _.stubString); +
98321 * // => ['', ''] +
98322 */ +
98323 function stubString() { +
98324 return ''; +
98325 } +
98326 +
98327 /** +
98328 * This method returns `true`. +
98329 * +
98330 * @static +
98331 * @memberOf _ +
98332 * @since 4.13.0 +
98333 * @category Util +
98334 * @returns {boolean} Returns `true`. +
98335 * @example +
98336 * +
98337 * _.times(2, _.stubTrue); +
98338 * // => [true, true] +
98339 */ +
98340 function stubTrue() { +
98341 return true; +
98342 } +
98343 +
98344 /** +
98345 * Invokes the iteratee `n` times, returning an array of the results of +
98346 * each invocation. The iteratee is invoked with one argument; (index). +
98347 * +
98348 * @static +
98349 * @since 0.1.0 +
98350 * @memberOf _ +
98351 * @category Util +
98352 * @param {number} n The number of times to invoke `iteratee`. +
98353 * @param {Function} [iteratee=_.identity] The function invoked per iteration. +
98354 * @returns {Array} Returns the array of results. +
98355 * @example +
98356 * +
98357 * _.times(3, String); +
98358 * // => ['0', '1', '2'] +
98359 * +
98360 * _.times(4, _.constant(0)); +
98361 * // => [0, 0, 0, 0] +
98362 */ +
98363 function times(n, iteratee) { +
98364 n = toInteger(n); +
98365 if (n < 1 || n > MAX_SAFE_INTEGER) { +
98366 return []; +
98367 } +
98368 var index = MAX_ARRAY_LENGTH, +
98369 length = nativeMin(n, MAX_ARRAY_LENGTH); +
98370 +
98371 iteratee = getIteratee(iteratee); +
98372 n -= MAX_ARRAY_LENGTH; +
98373 +
98374 var result = baseTimes(length, iteratee); +
98375 while (++index < n) { +
98376 iteratee(index); +
98377 } +
98378 return result; +
98379 } +
98380 +
98381 /** +
98382 * Converts `value` to a property path array. +
98383 * +
98384 * @static +
98385 * @memberOf _ +
98386 * @since 4.0.0 +
98387 * @category Util +
98388 * @param {*} value The value to convert. +
98389 * @returns {Array} Returns the new property path array. +
98390 * @example +
98391 * +
98392 * _.toPath('a.b.c'); +
98393 * // => ['a', 'b', 'c'] +
98394 * +
98395 * _.toPath('a[0].b.c'); +
98396 * // => ['a', '0', 'b', 'c'] +
98397 */ +
98398 function toPath(value) { +
98399 if (isArray(value)) { +
98400 return arrayMap(value, toKey); +
98401 } +
98402 return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); +
98403 } +
98404 +
98405 /** +
98406 * Generates a unique ID. If `prefix` is given, the ID is appended to it. +
98407 * +
98408 * @static +
98409 * @since 0.1.0 +
98410 * @memberOf _ +
98411 * @category Util +
98412 * @param {string} [prefix=''] The value to prefix the ID with. +
98413 * @returns {string} Returns the unique ID. +
98414 * @example +
98415 * +
98416 * _.uniqueId('contact_'); +
98417 * // => 'contact_104' +
98418 * +
98419 * _.uniqueId(); +
98420 * // => '105' +
98421 */ +
98422 function uniqueId(prefix) { +
98423 var id = ++idCounter; +
98424 return toString(prefix) + id; +
98425 } +
98426 +
98427 /*------------------------------------------------------------------------*/ +
98428 +
98429 /** +
98430 * Adds two numbers. +
98431 * +
98432 * @static +
98433 * @memberOf _ +
98434 * @since 3.4.0 +
98435 * @category Math +
98436 * @param {number} augend The first number in an addition. +
98437 * @param {number} addend The second number in an addition. +
98438 * @returns {number} Returns the total. +
98439 * @example +
98440 * +
98441 * _.add(6, 4); +
98442 * // => 10 +
98443 */ +
98444 var add = createMathOperation(function(augend, addend) { +
98445 return augend + addend; +
98446 }, 0); +
98447 +
98448 /** +
98449 * Computes `number` rounded up to `precision`. +
98450 * +
98451 * @static +
98452 * @memberOf _ +
98453 * @since 3.10.0 +
98454 * @category Math +
98455 * @param {number} number The number to round up. +
98456 * @param {number} [precision=0] The precision to round up to. +
98457 * @returns {number} Returns the rounded up number. +
98458 * @example +
98459 * +
98460 * _.ceil(4.006); +
98461 * // => 5 +
98462 * +
98463 * _.ceil(6.004, 2); +
98464 * // => 6.01 +
98465 * +
98466 * _.ceil(6040, -2); +
98467 * // => 6100 +
98468 */ +
98469 var ceil = createRound('ceil'); +
98470 +
98471 /** +
98472 * Divide two numbers. +
98473 * +
98474 * @static +
98475 * @memberOf _ +
98476 * @since 4.7.0 +
98477 * @category Math +
98478 * @param {number} dividend The first number in a division. +
98479 * @param {number} divisor The second number in a division. +
98480 * @returns {number} Returns the quotient. +
98481 * @example +
98482 * +
98483 * _.divide(6, 4); +
98484 * // => 1.5 +
98485 */ +
98486 var divide = createMathOperation(function(dividend, divisor) { +
98487 return dividend / divisor; +
98488 }, 1); +
98489 +
98490 /** +
98491 * Computes `number` rounded down to `precision`. +
98492 * +
98493 * @static +
98494 * @memberOf _ +
98495 * @since 3.10.0 +
98496 * @category Math +
98497 * @param {number} number The number to round down. +
98498 * @param {number} [precision=0] The precision to round down to. +
98499 * @returns {number} Returns the rounded down number. +
98500 * @example +
98501 * +
98502 * _.floor(4.006); +
98503 * // => 4 +
98504 * +
98505 * _.floor(0.046, 2); +
98506 * // => 0.04 +
98507 * +
98508 * _.floor(4060, -2); +
98509 * // => 4000 +
98510 */ +
98511 var floor = createRound('floor'); +
98512 +
98513 /** +
98514 * Computes the maximum value of `array`. If `array` is empty or falsey, +
98515 * `undefined` is returned. +
98516 * +
98517 * @static +
98518 * @since 0.1.0 +
98519 * @memberOf _ +
98520 * @category Math +
98521 * @param {Array} array The array to iterate over. +
98522 * @returns {*} Returns the maximum value. +
98523 * @example +
98524 * +
98525 * _.max([4, 2, 8, 6]); +
98526 * // => 8 +
98527 * +
98528 * _.max([]); +
98529 * // => undefined +
98530 */ +
98531 function max(array) { +
98532 return (array && array.length) +
98533 ? baseExtremum(array, identity, baseGt) +
98534 : undefined; +
98535 } +
98536 +
98537 /** +
98538 * This method is like `_.max` except that it accepts `iteratee` which is +
98539 * invoked for each element in `array` to generate the criterion by which +
98540 * the value is ranked. The iteratee is invoked with one argument: (value). +
98541 * +
98542 * @static +
98543 * @memberOf _ +
98544 * @since 4.0.0 +
98545 * @category Math +
98546 * @param {Array} array The array to iterate over. +
98547 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
98548 * @returns {*} Returns the maximum value. +
98549 * @example +
98550 * +
98551 * var objects = [{ 'n': 1 }, { 'n': 2 }]; +
98552 * +
98553 * _.maxBy(objects, function(o) { return o.n; }); +
98554 * // => { 'n': 2 } +
98555 * +
98556 * // The `_.property` iteratee shorthand. +
98557 * _.maxBy(objects, 'n'); +
98558 * // => { 'n': 2 } +
98559 */ +
98560 function maxBy(array, iteratee) { +
98561 return (array && array.length) +
98562 ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) +
98563 : undefined; +
98564 } +
98565 +
98566 /** +
98567 * Computes the mean of the values in `array`. +
98568 * +
98569 * @static +
98570 * @memberOf _ +
98571 * @since 4.0.0 +
98572 * @category Math +
98573 * @param {Array} array The array to iterate over. +
98574 * @returns {number} Returns the mean. +
98575 * @example +
98576 * +
98577 * _.mean([4, 2, 8, 6]); +
98578 * // => 5 +
98579 */ +
98580 function mean(array) { +
98581 return baseMean(array, identity); +
98582 } +
98583 +
98584 /** +
98585 * This method is like `_.mean` except that it accepts `iteratee` which is +
98586 * invoked for each element in `array` to generate the value to be averaged. +
98587 * The iteratee is invoked with one argument: (value). +
98588 * +
98589 * @static +
98590 * @memberOf _ +
98591 * @since 4.7.0 +
98592 * @category Math +
98593 * @param {Array} array The array to iterate over. +
98594 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
98595 * @returns {number} Returns the mean. +
98596 * @example +
98597 * +
98598 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +
98599 * +
98600 * _.meanBy(objects, function(o) { return o.n; }); +
98601 * // => 5 +
98602 * +
98603 * // The `_.property` iteratee shorthand. +
98604 * _.meanBy(objects, 'n'); +
98605 * // => 5 +
98606 */ +
98607 function meanBy(array, iteratee) { +
98608 return baseMean(array, getIteratee(iteratee, 2)); +
98609 } +
98610 +
98611 /** +
98612 * Computes the minimum value of `array`. If `array` is empty or falsey, +
98613 * `undefined` is returned. +
98614 * +
98615 * @static +
98616 * @since 0.1.0 +
98617 * @memberOf _ +
98618 * @category Math +
98619 * @param {Array} array The array to iterate over. +
98620 * @returns {*} Returns the minimum value. +
98621 * @example +
98622 * +
98623 * _.min([4, 2, 8, 6]); +
98624 * // => 2 +
98625 * +
98626 * _.min([]); +
98627 * // => undefined +
98628 */ +
98629 function min(array) { +
98630 return (array && array.length) +
98631 ? baseExtremum(array, identity, baseLt) +
98632 : undefined; +
98633 } +
98634 +
98635 /** +
98636 * This method is like `_.min` except that it accepts `iteratee` which is +
98637 * invoked for each element in `array` to generate the criterion by which +
98638 * the value is ranked. The iteratee is invoked with one argument: (value). +
98639 * +
98640 * @static +
98641 * @memberOf _ +
98642 * @since 4.0.0 +
98643 * @category Math +
98644 * @param {Array} array The array to iterate over. +
98645 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
98646 * @returns {*} Returns the minimum value. +
98647 * @example +
98648 * +
98649 * var objects = [{ 'n': 1 }, { 'n': 2 }]; +
98650 * +
98651 * _.minBy(objects, function(o) { return o.n; }); +
98652 * // => { 'n': 1 } +
98653 * +
98654 * // The `_.property` iteratee shorthand. +
98655 * _.minBy(objects, 'n'); +
98656 * // => { 'n': 1 } +
98657 */ +
98658 function minBy(array, iteratee) { +
98659 return (array && array.length) +
98660 ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) +
98661 : undefined; +
98662 } +
98663 +
98664 /** +
98665 * Multiply two numbers. +
98666 * +
98667 * @static +
98668 * @memberOf _ +
98669 * @since 4.7.0 +
98670 * @category Math +
98671 * @param {number} multiplier The first number in a multiplication. +
98672 * @param {number} multiplicand The second number in a multiplication. +
98673 * @returns {number} Returns the product. +
98674 * @example +
98675 * +
98676 * _.multiply(6, 4); +
98677 * // => 24 +
98678 */ +
98679 var multiply = createMathOperation(function(multiplier, multiplicand) { +
98680 return multiplier * multiplicand; +
98681 }, 1); +
98682 +
98683 /** +
98684 * Computes `number` rounded to `precision`. +
98685 * +
98686 * @static +
98687 * @memberOf _ +
98688 * @since 3.10.0 +
98689 * @category Math +
98690 * @param {number} number The number to round. +
98691 * @param {number} [precision=0] The precision to round to. +
98692 * @returns {number} Returns the rounded number. +
98693 * @example +
98694 * +
98695 * _.round(4.006); +
98696 * // => 4 +
98697 * +
98698 * _.round(4.006, 2); +
98699 * // => 4.01 +
98700 * +
98701 * _.round(4060, -2); +
98702 * // => 4100 +
98703 */ +
98704 var round = createRound('round'); +
98705 +
98706 /** +
98707 * Subtract two numbers. +
98708 * +
98709 * @static +
98710 * @memberOf _ +
98711 * @since 4.0.0 +
98712 * @category Math +
98713 * @param {number} minuend The first number in a subtraction. +
98714 * @param {number} subtrahend The second number in a subtraction. +
98715 * @returns {number} Returns the difference. +
98716 * @example +
98717 * +
98718 * _.subtract(6, 4); +
98719 * // => 2 +
98720 */ +
98721 var subtract = createMathOperation(function(minuend, subtrahend) { +
98722 return minuend - subtrahend; +
98723 }, 0); +
98724 +
98725 /** +
98726 * Computes the sum of the values in `array`. +
98727 * +
98728 * @static +
98729 * @memberOf _ +
98730 * @since 3.4.0 +
98731 * @category Math +
98732 * @param {Array} array The array to iterate over. +
98733 * @returns {number} Returns the sum. +
98734 * @example +
98735 * +
98736 * _.sum([4, 2, 8, 6]); +
98737 * // => 20 +
98738 */ +
98739 function sum(array) { +
98740 return (array && array.length) +
98741 ? baseSum(array, identity) +
98742 : 0; +
98743 } +
98744 +
98745 /** +
98746 * This method is like `_.sum` except that it accepts `iteratee` which is +
98747 * invoked for each element in `array` to generate the value to be summed. +
98748 * The iteratee is invoked with one argument: (value). +
98749 * +
98750 * @static +
98751 * @memberOf _ +
98752 * @since 4.0.0 +
98753 * @category Math +
98754 * @param {Array} array The array to iterate over. +
98755 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. +
98756 * @returns {number} Returns the sum. +
98757 * @example +
98758 * +
98759 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; +
98760 * +
98761 * _.sumBy(objects, function(o) { return o.n; }); +
98762 * // => 20 +
98763 * +
98764 * // The `_.property` iteratee shorthand. +
98765 * _.sumBy(objects, 'n'); +
98766 * // => 20 +
98767 */ +
98768 function sumBy(array, iteratee) { +
98769 return (array && array.length) +
98770 ? baseSum(array, getIteratee(iteratee, 2)) +
98771 : 0; +
98772 } +
98773 +
98774 /*------------------------------------------------------------------------*/ +
98775 +
98776 // Add methods that return wrapped values in chain sequences. +
98777 lodash.after = after; +
98778 lodash.ary = ary; +
98779 lodash.assign = assign; +
98780 lodash.assignIn = assignIn; +
98781 lodash.assignInWith = assignInWith; +
98782 lodash.assignWith = assignWith; +
98783 lodash.at = at; +
98784 lodash.before = before; +
98785 lodash.bind = bind; +
98786 lodash.bindAll = bindAll; +
98787 lodash.bindKey = bindKey; +
98788 lodash.castArray = castArray; +
98789 lodash.chain = chain; +
98790 lodash.chunk = chunk; +
98791 lodash.compact = compact; +
98792 lodash.concat = concat; +
98793 lodash.cond = cond; +
98794 lodash.conforms = conforms; +
98795 lodash.constant = constant; +
98796 lodash.countBy = countBy; +
98797 lodash.create = create; +
98798 lodash.curry = curry; +
98799 lodash.curryRight = curryRight; +
98800 lodash.debounce = debounce; +
98801 lodash.defaults = defaults; +
98802 lodash.defaultsDeep = defaultsDeep; +
98803 lodash.defer = defer; +
98804 lodash.delay = delay; +
98805 lodash.difference = difference; +
98806 lodash.differenceBy = differenceBy; +
98807 lodash.differenceWith = differenceWith; +
98808 lodash.drop = drop; +
98809 lodash.dropRight = dropRight; +
98810 lodash.dropRightWhile = dropRightWhile; +
98811 lodash.dropWhile = dropWhile; +
98812 lodash.fill = fill; +
98813 lodash.filter = filter; +
98814 lodash.flatMap = flatMap; +
98815 lodash.flatMapDeep = flatMapDeep; +
98816 lodash.flatMapDepth = flatMapDepth; +
98817 lodash.flatten = flatten; +
98818 lodash.flattenDeep = flattenDeep; +
98819 lodash.flattenDepth = flattenDepth; +
98820 lodash.flip = flip; +
98821 lodash.flow = flow; +
98822 lodash.flowRight = flowRight; +
98823 lodash.fromPairs = fromPairs; +
98824 lodash.functions = functions; +
98825 lodash.functionsIn = functionsIn; +
98826 lodash.groupBy = groupBy; +
98827 lodash.initial = initial; +
98828 lodash.intersection = intersection; +
98829 lodash.intersectionBy = intersectionBy; +
98830 lodash.intersectionWith = intersectionWith; +
98831 lodash.invert = invert; +
98832 lodash.invertBy = invertBy; +
98833 lodash.invokeMap = invokeMap; +
98834 lodash.iteratee = iteratee; +
98835 lodash.keyBy = keyBy; +
98836 lodash.keys = keys; +
98837 lodash.keysIn = keysIn; +
98838 lodash.map = map; +
98839 lodash.mapKeys = mapKeys; +
98840 lodash.mapValues = mapValues; +
98841 lodash.matches = matches; +
98842 lodash.matchesProperty = matchesProperty; +
98843 lodash.memoize = memoize; +
98844 lodash.merge = merge; +
98845 lodash.mergeWith = mergeWith; +
98846 lodash.method = method; +
98847 lodash.methodOf = methodOf; +
98848 lodash.mixin = mixin; +
98849 lodash.negate = negate; +
98850 lodash.nthArg = nthArg; +
98851 lodash.omit = omit; +
98852 lodash.omitBy = omitBy; +
98853 lodash.once = once; +
98854 lodash.orderBy = orderBy; +
98855 lodash.over = over; +
98856 lodash.overArgs = overArgs; +
98857 lodash.overEvery = overEvery; +
98858 lodash.overSome = overSome; +
98859 lodash.partial = partial; +
98860 lodash.partialRight = partialRight; +
98861 lodash.partition = partition; +
98862 lodash.pick = pick; +
98863 lodash.pickBy = pickBy; +
98864 lodash.property = property; +
98865 lodash.propertyOf = propertyOf; +
98866 lodash.pull = pull; +
98867 lodash.pullAll = pullAll; +
98868 lodash.pullAllBy = pullAllBy; +
98869 lodash.pullAllWith = pullAllWith; +
98870 lodash.pullAt = pullAt; +
98871 lodash.range = range; +
98872 lodash.rangeRight = rangeRight; +
98873 lodash.rearg = rearg; +
98874 lodash.reject = reject; +
98875 lodash.remove = remove; +
98876 lodash.rest = rest; +
98877 lodash.reverse = reverse; +
98878 lodash.sampleSize = sampleSize; +
98879 lodash.set = set; +
98880 lodash.setWith = setWith; +
98881 lodash.shuffle = shuffle; +
98882 lodash.slice = slice; +
98883 lodash.sortBy = sortBy; +
98884 lodash.sortedUniq = sortedUniq; +
98885 lodash.sortedUniqBy = sortedUniqBy; +
98886 lodash.split = split; +
98887 lodash.spread = spread; +
98888 lodash.tail = tail; +
98889 lodash.take = take; +
98890 lodash.takeRight = takeRight; +
98891 lodash.takeRightWhile = takeRightWhile; +
98892 lodash.takeWhile = takeWhile; +
98893 lodash.tap = tap; +
98894 lodash.throttle = throttle; +
98895 lodash.thru = thru; +
98896 lodash.toArray = toArray; +
98897 lodash.toPairs = toPairs; +
98898 lodash.toPairsIn = toPairsIn; +
98899 lodash.toPath = toPath; +
98900 lodash.toPlainObject = toPlainObject; +
98901 lodash.transform = transform; +
98902 lodash.unary = unary; +
98903 lodash.union = union; +
98904 lodash.unionBy = unionBy; +
98905 lodash.unionWith = unionWith; +
98906 lodash.uniq = uniq; +
98907 lodash.uniqBy = uniqBy; +
98908 lodash.uniqWith = uniqWith; +
98909 lodash.unset = unset; +
98910 lodash.unzip = unzip; +
98911 lodash.unzipWith = unzipWith; +
98912 lodash.update = update; +
98913 lodash.updateWith = updateWith; +
98914 lodash.values = values; +
98915 lodash.valuesIn = valuesIn; +
98916 lodash.without = without; +
98917 lodash.words = words; +
98918 lodash.wrap = wrap; +
98919 lodash.xor = xor; +
98920 lodash.xorBy = xorBy; +
98921 lodash.xorWith = xorWith; +
98922 lodash.zip = zip; +
98923 lodash.zipObject = zipObject; +
98924 lodash.zipObjectDeep = zipObjectDeep; +
98925 lodash.zipWith = zipWith; +
98926 +
98927 // Add aliases. +
98928 lodash.entries = toPairs; +
98929 lodash.entriesIn = toPairsIn; +
98930 lodash.extend = assignIn; +
98931 lodash.extendWith = assignInWith; +
98932 +
98933 // Add methods to `lodash.prototype`. +
98934 mixin(lodash, lodash); +
98935 +
98936 /*------------------------------------------------------------------------*/ +
98937 +
98938 // Add methods that return unwrapped values in chain sequences. +
98939 lodash.add = add; +
98940 lodash.attempt = attempt; +
98941 lodash.camelCase = camelCase; +
98942 lodash.capitalize = capitalize; +
98943 lodash.ceil = ceil; +
98944 lodash.clamp = clamp; +
98945 lodash.clone = clone; +
98946 lodash.cloneDeep = cloneDeep; +
98947 lodash.cloneDeepWith = cloneDeepWith; +
98948 lodash.cloneWith = cloneWith; +
98949 lodash.conformsTo = conformsTo; +
98950 lodash.deburr = deburr; +
98951 lodash.defaultTo = defaultTo; +
98952 lodash.divide = divide; +
98953 lodash.endsWith = endsWith; +
98954 lodash.eq = eq; +
98955 lodash.escape = escape; +
98956 lodash.escapeRegExp = escapeRegExp; +
98957 lodash.every = every; +
98958 lodash.find = find; +
98959 lodash.findIndex = findIndex; +
98960 lodash.findKey = findKey; +
98961 lodash.findLast = findLast; +
98962 lodash.findLastIndex = findLastIndex; +
98963 lodash.findLastKey = findLastKey; +
98964 lodash.floor = floor; +
98965 lodash.forEach = forEach; +
98966 lodash.forEachRight = forEachRight; +
98967 lodash.forIn = forIn; +
98968 lodash.forInRight = forInRight; +
98969 lodash.forOwn = forOwn; +
98970 lodash.forOwnRight = forOwnRight; +
98971 lodash.get = get; +
98972 lodash.gt = gt; +
98973 lodash.gte = gte; +
98974 lodash.has = has; +
98975 lodash.hasIn = hasIn; +
98976 lodash.head = head; +
98977 lodash.identity = identity; +
98978 lodash.includes = includes; +
98979 lodash.indexOf = indexOf; +
98980 lodash.inRange = inRange; +
98981 lodash.invoke = invoke; +
98982 lodash.isArguments = isArguments; +
98983 lodash.isArray = isArray; +
98984 lodash.isArrayBuffer = isArrayBuffer; +
98985 lodash.isArrayLike = isArrayLike; +
98986 lodash.isArrayLikeObject = isArrayLikeObject; +
98987 lodash.isBoolean = isBoolean; +
98988 lodash.isBuffer = isBuffer; +
98989 lodash.isDate = isDate; +
98990 lodash.isElement = isElement; +
98991 lodash.isEmpty = isEmpty; +
98992 lodash.isEqual = isEqual; +
98993 lodash.isEqualWith = isEqualWith; +
98994 lodash.isError = isError; +
98995 lodash.isFinite = isFinite; +
98996 lodash.isFunction = isFunction; +
98997 lodash.isInteger = isInteger; +
98998 lodash.isLength = isLength; +
98999 lodash.isMap = isMap; +
99000 lodash.isMatch = isMatch; +
99001 lodash.isMatchWith = isMatchWith; +
99002 lodash.isNaN = isNaN; +
99003 lodash.isNative = isNative; +
99004 lodash.isNil = isNil; +
99005 lodash.isNull = isNull; +
99006 lodash.isNumber = isNumber; +
99007 lodash.isObject = isObject; +
99008 lodash.isObjectLike = isObjectLike; +
99009 lodash.isPlainObject = isPlainObject; +
99010 lodash.isRegExp = isRegExp; +
99011 lodash.isSafeInteger = isSafeInteger; +
99012 lodash.isSet = isSet; +
99013 lodash.isString = isString; +
99014 lodash.isSymbol = isSymbol; +
99015 lodash.isTypedArray = isTypedArray; +
99016 lodash.isUndefined = isUndefined; +
99017 lodash.isWeakMap = isWeakMap; +
99018 lodash.isWeakSet = isWeakSet; +
99019 lodash.join = join; +
99020 lodash.kebabCase = kebabCase; +
99021 lodash.last = last; +
99022 lodash.lastIndexOf = lastIndexOf; +
99023 lodash.lowerCase = lowerCase; +
99024 lodash.lowerFirst = lowerFirst; +
99025 lodash.lt = lt; +
99026 lodash.lte = lte; +
99027 lodash.max = max; +
99028 lodash.maxBy = maxBy; +
99029 lodash.mean = mean; +
99030 lodash.meanBy = meanBy; +
99031 lodash.min = min; +
99032 lodash.minBy = minBy; +
99033 lodash.stubArray = stubArray; +
99034 lodash.stubFalse = stubFalse; +
99035 lodash.stubObject = stubObject; +
99036 lodash.stubString = stubString; +
99037 lodash.stubTrue = stubTrue; +
99038 lodash.multiply = multiply; +
99039 lodash.nth = nth; +
99040 lodash.noConflict = noConflict; +
99041 lodash.noop = noop; +
99042 lodash.now = now; +
99043 lodash.pad = pad; +
99044 lodash.padEnd = padEnd; +
99045 lodash.padStart = padStart; +
99046 lodash.parseInt = parseInt; +
99047 lodash.random = random; +
99048 lodash.reduce = reduce; +
99049 lodash.reduceRight = reduceRight; +
99050 lodash.repeat = repeat; +
99051 lodash.replace = replace; +
99052 lodash.result = result; +
99053 lodash.round = round; +
99054 lodash.runInContext = runInContext; +
99055 lodash.sample = sample; +
99056 lodash.size = size; +
99057 lodash.snakeCase = snakeCase; +
99058 lodash.some = some; +
99059 lodash.sortedIndex = sortedIndex; +
99060 lodash.sortedIndexBy = sortedIndexBy; +
99061 lodash.sortedIndexOf = sortedIndexOf; +
99062 lodash.sortedLastIndex = sortedLastIndex; +
99063 lodash.sortedLastIndexBy = sortedLastIndexBy; +
99064 lodash.sortedLastIndexOf = sortedLastIndexOf; +
99065 lodash.startCase = startCase; +
99066 lodash.startsWith = startsWith; +
99067 lodash.subtract = subtract; +
99068 lodash.sum = sum; +
99069 lodash.sumBy = sumBy; +
99070 lodash.template = template; +
99071 lodash.times = times; +
99072 lodash.toFinite = toFinite; +
99073 lodash.toInteger = toInteger; +
99074 lodash.toLength = toLength; +
99075 lodash.toLower = toLower; +
99076 lodash.toNumber = toNumber; +
99077 lodash.toSafeInteger = toSafeInteger; +
99078 lodash.toString = toString; +
99079 lodash.toUpper = toUpper; +
99080 lodash.trim = trim; +
99081 lodash.trimEnd = trimEnd; +
99082 lodash.trimStart = trimStart; +
99083 lodash.truncate = truncate; +
99084 lodash.unescape = unescape; +
99085 lodash.uniqueId = uniqueId; +
99086 lodash.upperCase = upperCase; +
99087 lodash.upperFirst = upperFirst; +
99088 +
99089 // Add aliases. +
99090 lodash.each = forEach; +
99091 lodash.eachRight = forEachRight; +
99092 lodash.first = head; +
99093 +
99094 mixin(lodash, (function() { +
99095 var source = {}; +
99096 baseForOwn(lodash, function(func, methodName) { +
99097 if (!hasOwnProperty.call(lodash.prototype, methodName)) { +
99098 source[methodName] = func; +
99099 } +
99100 }); +
99101 return source; +
99102 }()), { 'chain': false }); +
99103 +
99104 /*------------------------------------------------------------------------*/ +
99105 +
99106 /** +
99107 * The semantic version number. +
99108 * +
99109 * @static +
99110 * @memberOf _ +
99111 * @type {string} +
99112 */ +
99113 lodash.VERSION = VERSION; +
99114 +
99115 // Assign default placeholders. +
99116 arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { +
99117 lodash[methodName].placeholder = lodash; +
99118 }); +
99119 +
99120 // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. +
99121 arrayEach(['drop', 'take'], function(methodName, index) { +
99122 LazyWrapper.prototype[methodName] = function(n) { +
99123 n = n === undefined ? 1 : nativeMax(toInteger(n), 0); +
99124 +
99125 var result = (this.__filtered__ && !index) +
99126 ? new LazyWrapper(this) +
99127 : this.clone(); +
99128 +
99129 if (result.__filtered__) { +
99130 result.__takeCount__ = nativeMin(n, result.__takeCount__); +
99131 } else { +
99132 result.__views__.push({ +
99133 'size': nativeMin(n, MAX_ARRAY_LENGTH), +
99134 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') +
99135 }); +
99136 } +
99137 return result; +
99138 }; +
99139 +
99140 LazyWrapper.prototype[methodName + 'Right'] = function(n) { +
99141 return this.reverse()[methodName](n).reverse(); +
99142 }; +
99143 }); +
99144 +
99145 // Add `LazyWrapper` methods that accept an `iteratee` value. +
99146 arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { +
99147 var type = index + 1, +
99148 isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; +
99149 +
99150 LazyWrapper.prototype[methodName] = function(iteratee) { +
99151 var result = this.clone(); +
99152 result.__iteratees__.push({ +
99153 'iteratee': getIteratee(iteratee, 3), +
99154 'type': type +
99155 }); +
99156 result.__filtered__ = result.__filtered__ || isFilter; +
99157 return result; +
99158 }; +
99159 }); +
99160 +
99161 // Add `LazyWrapper` methods for `_.head` and `_.last`. +
99162 arrayEach(['head', 'last'], function(methodName, index) { +
99163 var takeName = 'take' + (index ? 'Right' : ''); +
99164 +
99165 LazyWrapper.prototype[methodName] = function() { +
99166 return this[takeName](1).value()[0]; +
99167 }; +
99168 }); +
99169 +
99170 // Add `LazyWrapper` methods for `_.initial` and `_.tail`. +
99171 arrayEach(['initial', 'tail'], function(methodName, index) { +
99172 var dropName = 'drop' + (index ? '' : 'Right'); +
99173 +
99174 LazyWrapper.prototype[methodName] = function() { +
99175 return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); +
99176 }; +
99177 }); +
99178 +
99179 LazyWrapper.prototype.compact = function() { +
99180 return this.filter(identity); +
99181 }; +
99182 +
99183 LazyWrapper.prototype.find = function(predicate) { +
99184 return this.filter(predicate).head(); +
99185 }; +
99186 +
99187 LazyWrapper.prototype.findLast = function(predicate) { +
99188 return this.reverse().find(predicate); +
99189 }; +
99190 +
99191 LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { +
99192 if (typeof path == 'function') { +
99193 return new LazyWrapper(this); +
99194 } +
99195 return this.map(function(value) { +
99196 return baseInvoke(value, path, args); +
99197 }); +
99198 }); +
99199 +
99200 LazyWrapper.prototype.reject = function(predicate) { +
99201 return this.filter(negate(getIteratee(predicate))); +
99202 }; +
99203 +
99204 LazyWrapper.prototype.slice = function(start, end) { +
99205 start = toInteger(start); +
99206 +
99207 var result = this; +
99208 if (result.__filtered__ && (start > 0 || end < 0)) { +
99209 return new LazyWrapper(result); +
99210 } +
99211 if (start < 0) { +
99212 result = result.takeRight(-start); +
99213 } else if (start) { +
99214 result = result.drop(start); +
99215 } +
99216 if (end !== undefined) { +
99217 end = toInteger(end); +
99218 result = end < 0 ? result.dropRight(-end) : result.take(end - start); +
99219 } +
99220 return result; +
99221 }; +
99222 +
99223 LazyWrapper.prototype.takeRightWhile = function(predicate) { +
99224 return this.reverse().takeWhile(predicate).reverse(); +
99225 }; +
99226 +
99227 LazyWrapper.prototype.toArray = function() { +
99228 return this.take(MAX_ARRAY_LENGTH); +
99229 }; +
99230 +
99231 // Add `LazyWrapper` methods to `lodash.prototype`. +
99232 baseForOwn(LazyWrapper.prototype, function(func, methodName) { +
99233 var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), +
99234 isTaker = /^(?:head|last)$/.test(methodName), +
99235 lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], +
99236 retUnwrapped = isTaker || /^find/.test(methodName); +
99237 +
99238 if (!lodashFunc) { +
99239 return; +
99240 } +
99241 lodash.prototype[methodName] = function() { +
99242 var value = this.__wrapped__, +
99243 args = isTaker ? [1] : arguments, +
99244 isLazy = value instanceof LazyWrapper, +
99245 iteratee = args[0], +
99246 useLazy = isLazy || isArray(value); +
99247 +
99248 var interceptor = function(value) { +
99249 var result = lodashFunc.apply(lodash, arrayPush([value], args)); +
99250 return (isTaker && chainAll) ? result[0] : result; +
99251 }; +
99252 +
99253 if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { +
99254 // Avoid lazy use if the iteratee has a "length" value other than `1`. +
99255 isLazy = useLazy = false; +
99256 } +
99257 var chainAll = this.__chain__, +
99258 isHybrid = !!this.__actions__.length, +
99259 isUnwrapped = retUnwrapped && !chainAll, +
99260 onlyLazy = isLazy && !isHybrid; +
99261 +
99262 if (!retUnwrapped && useLazy) { +
99263 value = onlyLazy ? value : new LazyWrapper(this); +
99264 var result = func.apply(value, args); +
99265 result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); +
99266 return new LodashWrapper(result, chainAll); +
99267 } +
99268 if (isUnwrapped && onlyLazy) { +
99269 return func.apply(this, args); +
99270 } +
99271 result = this.thru(interceptor); +
99272 return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; +
99273 }; +
99274 }); +
99275 +
99276 // Add `Array` methods to `lodash.prototype`. +
99277 arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { +
99278 var func = arrayProto[methodName], +
99279 chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', +
99280 retUnwrapped = /^(?:pop|shift)$/.test(methodName); +
99281 +
99282 lodash.prototype[methodName] = function() { +
99283 var args = arguments; +
99284 if (retUnwrapped && !this.__chain__) { +
99285 var value = this.value(); +
99286 return func.apply(isArray(value) ? value : [], args); +
99287 } +
99288 return this[chainName](function(value) { +
99289 return func.apply(isArray(value) ? value : [], args); +
99290 }); +
99291 }; +
99292 }); +
99293 +
99294 // Map minified method names to their real names. +
99295 baseForOwn(LazyWrapper.prototype, function(func, methodName) { +
99296 var lodashFunc = lodash[methodName]; +
99297 if (lodashFunc) { +
99298 var key = (lodashFunc.name + ''), +
99299 names = realNames[key] || (realNames[key] = []); +
99300 +
99301 names.push({ 'name': methodName, 'func': lodashFunc }); +
99302 } +
99303 }); +
99304 +
99305 realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ +
99306 'name': 'wrapper', +
99307 'func': undefined +
99308 }]; +
99309 +
99310 // Add methods to `LazyWrapper`. +
99311 LazyWrapper.prototype.clone = lazyClone; +
99312 LazyWrapper.prototype.reverse = lazyReverse; +
99313 LazyWrapper.prototype.value = lazyValue; +
99314 +
99315 // Add chain sequence methods to the `lodash` wrapper. +
99316 lodash.prototype.at = wrapperAt; +
99317 lodash.prototype.chain = wrapperChain; +
99318 lodash.prototype.commit = wrapperCommit; +
99319 lodash.prototype.next = wrapperNext; +
99320 lodash.prototype.plant = wrapperPlant; +
99321 lodash.prototype.reverse = wrapperReverse; +
99322 lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; +
99323 +
99324 // Add lazy aliases. +
99325 lodash.prototype.first = lodash.prototype.head; +
99326 +
99327 if (symIterator) { +
99328 lodash.prototype[symIterator] = wrapperToIterator; +
99329 } +
99330 return lodash; +
99331 }); +
99332 +
99333 /*--------------------------------------------------------------------------*/ +
99334 +
99335 // Export lodash. +
99336 var _ = runInContext(); +
99337 +
99338 // Some AMD build optimizers, like r.js, check for condition patterns like: +
99339 if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { +
99340 // Expose Lodash on the global object to prevent errors when Lodash is +
99341 // loaded by a script tag in the presence of an AMD loader. +
99342 // See http://requirejs.org/docs/errors.html#mismatch for more details. +
99343 // Use `_.noConflict` to remove Lodash from the global object. +
99344 root._ = _; +
99345 +
99346 // Define as an anonymous module so, through path mapping, it can be +
99347 // referenced as the "underscore" module. +
99348 define(function() { +
99349 return _; +
99350 }); +
99351 } +
99352 // Check for `exports` after `define` in case a build optimizer adds it. +
99353 else if (freeModule) { +
99354 // Export for Node.js. +
99355 (freeModule.exports = _)._ = _; +
99356 // Export for CommonJS support. +
99357 freeExports._ = _; +
99358 } +
99359 else { +
99360 // Export to the global object. +
99361 root._ = _; +
99362 } +
99363}.call(this)); +
99364 +
99365/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
99366 +
99367/***/ }), +
99368 +
99369/***/ "./node_modules/moment-mini/locale sync recursive ^\\.\\/.*$": +
99370/*!*******************************************************!*\ +
99371 !*** ./node_modules/moment-mini/locale sync ^\.\/.*$ ***! +
99372 \*******************************************************/ +
99373/*! no static exports found */ +
99374/***/ (function(module, exports, __webpack_require__) { +
99375 +
99376var map = { +
99377 "./locale": "./node_modules/moment-mini/locale/locale.js", +
99378 "./locale.js": "./node_modules/moment-mini/locale/locale.js" +
99379}; +
99380 +
99381 +
99382function webpackContext(req) { +
99383 var id = webpackContextResolve(req); +
99384 return __webpack_require__(id); +
99385} +
99386function webpackContextResolve(req) { +
99387 var id = map[req]; +
99388 if(!(id + 1)) { // check for number or string +
99389 var e = new Error("Cannot find module '" + req + "'"); +
99390 e.code = 'MODULE_NOT_FOUND'; +
99391 throw e; +
99392 } +
99393 return id; +
99394} +
99395webpackContext.keys = function webpackContextKeys() { +
99396 return Object.keys(map); +
99397}; +
99398webpackContext.resolve = webpackContextResolve; +
99399module.exports = webpackContext; +
99400webpackContext.id = "./node_modules/moment-mini/locale sync recursive ^\\.\\/.*$"; +
99401 +
99402/***/ }), +
99403 +
99404/***/ "./node_modules/moment-mini/locale/locale.js": +
99405/*!***************************************************!*\ +
99406 !*** ./node_modules/moment-mini/locale/locale.js ***! +
99407 \***************************************************/ +
99408/*! no static exports found */ +
99409/***/ (function(module, exports) { +
99410 +
99411 +
99412 +
99413/***/ }), +
99414 +
99415/***/ "./node_modules/moment-mini/moment.min.js": +
99416/*!************************************************!*\ +
99417 !*** ./node_modules/moment-mini/moment.min.js ***! +
99418 \************************************************/ +
99419/*! no static exports found */ +
99420/***/ (function(module, exports, __webpack_require__) { +
99421 +
99422/* WEBPACK VAR INJECTION */(function(module) {!function(e,t){ true?module.exports=t():undefined}(this,function(){"use strict";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function d(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n<e.length;++n)s.push(t(e[n],n));return s}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function _(e,t){for(var n in t)m(t,n)&&(e[n]=t[n]);return m(t,"toString")&&(e.toString=t.toString),m(t,"valueOf")&&(e.valueOf=t.valueOf),e}function y(e,t,n,s){return Ot(e,t,n,s,!0).utc()}function g(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function p(e){if(null==e._isValid){var t=g(e),n=i.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function v(e){var t=y(NaN);return null!=e?_(g(t),e):g(t).userInvalidated=!0,t}i=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};var r=c.momentProperties=[];function w(e,t){var n,s,i;if(l(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),l(t._i)||(e._i=t._i),l(t._f)||(e._f=t._f),l(t._l)||(e._l=t._l),l(t._strict)||(e._strict=t._strict),l(t._tzm)||(e._tzm=t._tzm),l(t._isUTC)||(e._isUTC=t._isUTC),l(t._offset)||(e._offset=t._offset),l(t._pf)||(e._pf=g(t)),l(t._locale)||(e._locale=t._locale),0<r.length)for(n=0;n<r.length;n++)l(i=t[s=r[n]])||(e[s]=i);return e}var t=!1;function M(e){w(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,c.updateOffset(this),t=!1)}function S(e){return e instanceof M||null!=e&&null!=e._isAMomentObject}function D(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function k(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=D(t)),n}function a(e,t,n){var s,i=Math.min(e.length,t.length),r=Math.abs(e.length-t.length),a=0;for(s=0;s<i;s++)(n&&e[s]!==t[s]||!n&&k(e[s])!==k(t[s]))&&a++;return a+r}function Y(e){!1===c.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function n(i,r){var a=!0;return _(function(){if(null!=c.deprecationHandler&&c.deprecationHandler(null,i),a){for(var e,t=[],n=0;n<arguments.length;n++){if(e="","object"==typeof arguments[n]){for(var s in e+="\n["+n+"] ",arguments[0])e+=s+": "+arguments[0][s]+", ";e=e.slice(0,-2)}else e=arguments[n];t.push(e)}Y(i+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),a=!1}return r.apply(this,arguments)},r)}var s,O={};function T(e,t){null!=c.deprecationHandler&&c.deprecationHandler(e,t),O[e]||(Y(t),O[e]=!0)}function x(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function b(e,t){var n,s=_({},e);for(n in t)m(t,n)&&(u(e[n])&&u(t[n])?(s[n]={},_(s[n],e[n]),_(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)m(e,n)&&!m(t,n)&&u(e[n])&&(s[n]=_({},s[n]));return s}function P(e){null!=e&&this.set(e)}c.suppressDeprecationWarnings=!1,c.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)m(e,t)&&n.push(t);return n};var W={};function H(e,t){var n=e.toLowerCase();W[n]=W[n+"s"]=W[t]=e}function R(e){return"string"==typeof e?W[e]||W[e.toLowerCase()]:void 0}function C(e){var t,n,s={};for(n in e)m(e,n)&&(t=R(n))&&(s[t]=e[n]);return s}var F={};function L(e,t){F[e]=t}function U(e,t,n){var s=""+Math.abs(e),i=t-s.length;return(0<=e?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}var N=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,G=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,V={},E={};function I(e,t,n,s){var i=s;"string"==typeof s&&(i=function(){return this[s]()}),e&&(E[e]=i),t&&(E[t[0]]=function(){return U(i.apply(this,arguments),t[1],t[2])}),n&&(E[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function A(e,t){return e.isValid()?(t=j(t,e.localeData()),V[t]=V[t]||function(s){var e,i,t,r=s.match(N);for(e=0,i=r.length;e<i;e++)E[r[e]]?r[e]=E[r[e]]:r[e]=(t=r[e]).match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"");return function(e){var t,n="";for(t=0;t<i;t++)n+=x(r[t])?r[t].call(e,s):r[t];return n}}(t),V[t](e)):e.localeData().invalidDate()}function j(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(G.lastIndex=0;0<=n&&G.test(e);)e=e.replace(G,s),G.lastIndex=0,n-=1;return e}var Z=/\d/,z=/\d\d/,$=/\d{3}/,q=/\d{4}/,J=/[+-]?\d{6}/,B=/\d\d?/,Q=/\d\d\d\d?/,X=/\d\d\d\d\d\d?/,K=/\d{1,3}/,ee=/\d{1,4}/,te=/[+-]?\d{1,6}/,ne=/\d+/,se=/[+-]?\d+/,ie=/Z|[+-]\d\d:?\d\d/gi,re=/Z|[+-]\d\d(?::?\d\d)?/gi,ae=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,oe={};function ue(e,n,s){oe[e]=x(n)?n:function(e,t){return e&&s?s:n}}function le(e,t){return m(oe,e)?oe[e](t._strict,t._locale):new RegExp(de(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function de(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var he={};function ce(e,n){var t,s=n;for("string"==typeof e&&(e=[e]),d(n)&&(s=function(e,t){t[n]=k(e)}),t=0;t<e.length;t++)he[e[t]]=s}function fe(e,i){ce(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}var me=0,_e=1,ye=2,ge=3,pe=4,ve=5,we=6,Me=7,Se=8;function De(e){return ke(e)?366:365}function ke(e){return e%4==0&&e%100!=0||e%400==0}I("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),I(0,["YY",2],0,function(){return this.year()%100}),I(0,["YYYY",4],0,"year"),I(0,["YYYYY",5],0,"year"),I(0,["YYYYYY",6,!0],0,"year"),H("year","y"),L("year",1),ue("Y",se),ue("YY",B,z),ue("YYYY",ee,q),ue("YYYYY",te,J),ue("YYYYYY",te,J),ce(["YYYYY","YYYYYY"],me),ce("YYYY",function(e,t){t[me]=2===e.length?c.parseTwoDigitYear(e):k(e)}),ce("YY",function(e,t){t[me]=c.parseTwoDigitYear(e)}),ce("Y",function(e,t){t[me]=parseInt(e,10)}),c.parseTwoDigitYear=function(e){return k(e)+(68<k(e)?1900:2e3)};var Ye,Oe=Te("FullYear",!0);function Te(t,n){return function(e){return null!=e?(be(this,t,e),c.updateOffset(this,n),this):xe(this,t)}}function xe(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function be(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&ke(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Pe(n,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function Pe(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,s=(t%(n=12)+n)%n;return e+=(t-s)/12,1===s?ke(e)?29:28:31-s%7%2}Ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},I("M",["MM",2],"Mo",function(){return this.month()+1}),I("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),I("MMMM",0,0,function(e){return this.localeData().months(this,e)}),H("month","M"),L("month",8),ue("M",B),ue("MM",B,z),ue("MMM",function(e,t){return t.monthsShortRegex(e)}),ue("MMMM",function(e,t){return t.monthsRegex(e)}),ce(["M","MM"],function(e,t){t[_e]=k(e)-1}),ce(["MMM","MMMM"],function(e,t,n,s){var i=n._locale.monthsParse(e,s,n._strict);null!=i?t[_e]=i:g(n).invalidMonth=e});var We=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,He="January_February_March_April_May_June_July_August_September_October_November_December".split("_");var Re="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Ce(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=k(t);else if(!d(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),Pe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function Fe(e){return null!=e?(Ce(this,e),c.updateOffset(this,!0),this):xe(this,"Month")}var Le=ae;var Ue=ae;function Ne(){function e(e,t){return t.length-e.length}var t,n,s=[],i=[],r=[];for(t=0;t<12;t++)n=y([2e3,t]),s.push(this.monthsShort(n,"")),i.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(s.sort(e),i.sort(e),r.sort(e),t=0;t<12;t++)s[t]=de(s[t]),i[t]=de(i[t]);for(t=0;t<24;t++)r[t]=de(r[t]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Ge(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&0<=e&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function Ve(e,t,n){var s=7+t-n;return-((7+Ge(e,0,s).getUTCDay()-t)%7)+s-1}function Ee(e,t,n,s,i){var r,a,o=1+7*(t-1)+(7+n-s)%7+Ve(e,s,i);return o<=0?a=De(r=e-1)+o:o>De(e)?(r=e+1,a=o-De(e)):(r=e,a=o),{year:r,dayOfYear:a}}function Ie(e,t,n){var s,i,r=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Ae(i=e.year()-1,t,n):a>Ae(e.year(),t,n)?(s=a-Ae(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Ae(e,t,n){var s=Ve(e,t,n),i=Ve(e+1,t,n);return(De(e)-s+i)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),H("week","w"),H("isoWeek","W"),L("week",5),L("isoWeek",5),ue("w",B),ue("ww",B,z),ue("W",B),ue("WW",B,z),fe(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=k(e)});I("d",0,"do","day"),I("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),I("e",0,0,"weekday"),I("E",0,0,"isoWeekday"),H("day","d"),H("weekday","e"),H("isoWeekday","E"),L("day",11),L("weekday",11),L("isoWeekday",11),ue("d",B),ue("e",B),ue("E",B),ue("dd",function(e,t){return t.weekdaysMinRegex(e)}),ue("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ue("dddd",function(e,t){return t.weekdaysRegex(e)}),fe(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:g(n).invalidWeekday=e}),fe(["d","e","E"],function(e,t,n,s){t[s]=k(e)});var je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var $e=ae;var qe=ae;var Je=ae;function Be(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),s=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),r=this.weekdays(n,""),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);for(a.sort(e),o.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)o[t]=de(o[t]),u[t]=de(u[t]),l[t]=de(l[t]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ke(e,t){return t._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,Qe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)}),I("hmmss",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+U(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),H("hour","h"),L("hour",13),ue("a",Ke),ue("A",Ke),ue("H",B),ue("h",B),ue("k",B),ue("HH",B,z),ue("hh",B,z),ue("kk",B,z),ue("hmm",Q),ue("hmmss",X),ue("Hmm",Q),ue("Hmmss",X),ce(["H","HH"],ge),ce(["k","kk"],function(e,t,n){var s=k(e);t[ge]=24===s?0:s}),ce(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ce(["h","hh"],function(e,t,n){t[ge]=k(e),g(n).bigHour=!0}),ce("hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s)),g(n).bigHour=!0}),ce("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i)),g(n).bigHour=!0}),ce("Hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s))}),ce("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i))});var et,tt=Te("Hours",!0),nt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:He,monthsShort:Re,week:{dow:0,doy:6},weekdays:je,weekdaysMin:ze,weekdaysShort:Ze,meridiemParse:/[ap]\.?m?\.?/i},st={},it={};function rt(e){return e?e.toLowerCase().replace("_","-"):e}function at(e){var t=null;if(!st[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=et._abbr,__webpack_require__("./node_modules/moment-mini/locale sync recursive ^\\.\\/.*$")("./"+e),ot(t)}catch(e){}return st[e]}function ot(e,t){var n;return e&&((n=l(t)?lt(e):ut(e,t))?et=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),et._abbr}function ut(e,t){if(null!==t){var n,s=nt;if(t.abbr=e,null!=st[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])s=st[t.parentLocale]._config;else{if(null==(n=at(t.parentLocale)))return it[t.parentLocale]||(it[t.parentLocale]=[]),it[t.parentLocale].push({name:e,config:t}),null;s=n._config}return st[e]=new P(b(s,t)),it[e]&&it[e].forEach(function(e){ut(e.name,e.config)}),ot(e),st[e]}return delete st[e],null}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return et;if(!o(e)){if(t=at(e))return t;e=[e]}return function(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=rt(e[r]).split("-")).length,n=(n=rt(e[r+1]))?n.split("-"):null;0<t;){if(s=at(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&a(i,n,!0)>=t-1)break;t--}r++}return et}(e)}function dt(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[_e]<0||11<n[_e]?_e:n[ye]<1||n[ye]>Pe(n[me],n[_e])?ye:n[ge]<0||24<n[ge]||24===n[ge]&&(0!==n[pe]||0!==n[ve]||0!==n[we])?ge:n[pe]<0||59<n[pe]?pe:n[ve]<0||59<n[ve]?ve:n[we]<0||999<n[we]?we:-1,g(e)._overflowDayOfYear&&(t<me||ye<t)&&(t=ye),g(e)._overflowWeeks&&-1===t&&(t=Me),g(e)._overflowWeekday&&-1===t&&(t=Se),g(e).overflow=t),e}function ht(e,t,n){return null!=e?e:null!=t?t:n}function ct(e){var t,n,s,i,r,a=[];if(!e._d){var o,u;for(o=e,u=new Date(c.now()),s=o._useUTC?[u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()]:[u.getFullYear(),u.getMonth(),u.getDate()],e._w&&null==e._a[ye]&&null==e._a[_e]&&function(e){var t,n,s,i,r,a,o,u;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)r=1,a=4,n=ht(t.GG,e._a[me],Ie(Tt(),1,4).year),s=ht(t.W,1),((i=ht(t.E,1))<1||7<i)&&(u=!0);else{r=e._locale._week.dow,a=e._locale._week.doy;var l=Ie(Tt(),r,a);n=ht(t.gg,e._a[me],l.year),s=ht(t.w,l.week),null!=t.d?((i=t.d)<0||6<i)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||6<t.e)&&(u=!0)):i=r}s<1||s>Ae(n,r,a)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[me]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=ht(e._a[me],s[me]),(e._dayOfYear>De(r)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=Ge(r,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[pe]&&0===e._a[ve]&&0===e._a[we]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&0<=e&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(g(e).weekdayMismatch=!0)}}var ft=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_t=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],gt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],pt=/^\/?Date\((\-?\d+)/i;function vt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(g(e).iso=!0,t=0,n=yt.length;t<n;t++)if(yt[t][1].exec(u[1])){i=yt[t][0],s=!1!==yt[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=gt.length;t<n;t++)if(gt[t][1].exec(u[3])){r=(u[2]||" ")+gt[t][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(u[4]){if(!_t.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(r||"")+(a||""),kt(e)}else e._isValid=!1}var wt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function Mt(e,t,n,s,i,r){var a=[function(e){var t=parseInt(e,10);{if(t<=49)return 2e3+t;if(t<=999)return 1900+t}return t}(e),Re.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&a.push(parseInt(r,10)),a}var St={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Dt(e){var t,n,s,i=wt.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim());if(i){var r=Mt(i[4],i[3],i[2],i[5],i[6],i[7]);if(t=i[1],n=r,s=e,t&&Ze.indexOf(t)!==new Date(n[0],n[1],n[2]).getDay()&&(g(s).weekdayMismatch=!0,!(s._isValid=!1)))return;e._a=r,e._tzm=function(e,t,n){if(e)return St[e];if(t)return 0;var s=parseInt(n,10),i=s%100;return(s-i)/100*60+i}(i[8],i[9],i[10]),e._d=Ge.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),g(e).rfc2822=!0}else e._isValid=!1}function kt(e){if(e._f!==c.ISO_8601)if(e._f!==c.RFC_2822){e._a=[],g(e).empty=!0;var t,n,s,i,r,a,o,u,l=""+e._i,d=l.length,h=0;for(s=j(e._f,e._locale).match(N)||[],t=0;t<s.length;t++)i=s[t],(n=(l.match(le(i,e))||[])[0])&&(0<(r=l.substr(0,l.indexOf(n))).length&&g(e).unusedInput.push(r),l=l.slice(l.indexOf(n)+n.length),h+=n.length),E[i]?(n?g(e).empty=!1:g(e).unusedTokens.push(i),a=i,u=e,null!=(o=n)&&m(he,a)&&he[a](o,u._a,u,a)):e._strict&&!n&&g(e).unusedTokens.push(i);g(e).charsLeftOver=d-h,0<l.length&&g(e).unusedInput.push(l),e._a[ge]<=12&&!0===g(e).bigHour&&0<e._a[ge]&&(g(e).bigHour=void 0),g(e).parsedDateParts=e._a.slice(0),g(e).meridiem=e._meridiem,e._a[ge]=function(e,t,n){var s;if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):(null!=e.isPM&&((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0)),t)}(e._locale,e._a[ge],e._meridiem),ct(e),dt(e)}else Dt(e);else vt(e)}function Yt(e){var t,n,s,i,r=e._i,a=e._f;return e._locale=e._locale||lt(e._l),null===r||void 0===a&&""===r?v({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),S(r)?new M(dt(r)):(h(r)?e._d=r:o(a)?function(e){var t,n,s,i,r;if(0===e._f.length)return g(e).invalidFormat=!0,e._d=new Date(NaN);for(i=0;i<e._f.length;i++)r=0,t=w({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],kt(t),p(t)&&(r+=g(t).charsLeftOver,r+=10*g(t).unusedTokens.length,g(t).score=r,(null==s||r<s)&&(s=r,n=t));_(e,n||t)}(e):a?kt(e):l(n=(t=e)._i)?t._d=new Date(c.now()):h(n)?t._d=new Date(n.valueOf()):"string"==typeof n?(s=t,null===(i=pt.exec(s._i))?(vt(s),!1===s._isValid&&(delete s._isValid,Dt(s),!1===s._isValid&&(delete s._isValid,c.createFromInputFallback(s)))):s._d=new Date(+i[1])):o(n)?(t._a=f(n.slice(0),function(e){return parseInt(e,10)}),ct(t)):u(n)?function(e){if(!e._d){var t=C(e._i);e._a=f([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),ct(e)}}(t):d(n)?t._d=new Date(n):c.createFromInputFallback(t),p(e)||(e._d=null),e))}function Ot(e,t,n,s,i){var r,a={};return!0!==n&&!1!==n||(s=n,n=void 0),(u(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||o(e)&&0===e.length)&&(e=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=i,a._l=n,a._i=e,a._f=t,a._strict=s,(r=new M(dt(Yt(a))))._nextDay&&(r.add(1,"d"),r._nextDay=void 0),r}function Tt(e,t,n,s){return Ot(e,t,n,s,!1)}c.createFromInputFallback=n("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),c.ISO_8601=function(){},c.RFC_2822=function(){};var xt=n("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:v()}),bt=n("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:v()});function Pt(e,t){var n,s;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Tt();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Wt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ht(e){var t=C(e),n=t.year||0,s=t.quarter||0,i=t.month||0,r=t.week||0,a=t.day||0,o=t.hour||0,u=t.minute||0,l=t.second||0,d=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Ye.call(Wt,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var n=!1,s=0;s<Wt.length;++s)if(e[Wt[s]]){if(n)return!1;parseFloat(e[Wt[s]])!==k(e[Wt[s]])&&(n=!0)}return!0}(t),this._milliseconds=+d+1e3*l+6e4*u+1e3*o*60*60,this._days=+a+7*r,this._months=+i+3*s+12*n,this._data={},this._locale=lt(),this._bubble()}function Rt(e){return e instanceof Ht}function Ct(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){I(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+U(~~(e/60),2)+n+U(~~e%60,2)})}Ft("Z",":"),Ft("ZZ",""),ue("Z",re),ue("ZZ",re),ce(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Ut(re,e)});var Lt=/([\+\-]|\d\d)/gi;function Ut(e,t){var n=(t||"").match(e);if(null===n)return null;var s=((n[n.length-1]||[])+"").match(Lt)||["-",0,0],i=60*s[1]+k(s[2]);return 0===i?0:"+"===s[0]?i:-i}function Nt(e,t){var n,s;return t._isUTC?(n=t.clone(),s=(S(e)||h(e)?e.valueOf():Tt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+s),c.updateOffset(n,!1),n):Tt(e).local()}function Gt(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Vt(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}c.updateOffset=function(){};var Et=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,It=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function At(e,t){var n,s,i,r=e,a=null;return Rt(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:d(e)?(r={},t?r[t]=e:r.milliseconds=e):(a=Et.exec(e))?(n="-"===a[1]?-1:1,r={y:0,d:k(a[ye])*n,h:k(a[ge])*n,m:k(a[pe])*n,s:k(a[ve])*n,ms:k(Ct(1e3*a[we]))*n}):(a=It.exec(e))?(n="-"===a[1]?-1:(a[1],1),r={y:jt(a[2],n),M:jt(a[3],n),w:jt(a[4],n),d:jt(a[5],n),h:jt(a[6],n),m:jt(a[7],n),s:jt(a[8],n)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(i=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Nt(t,e),e.isBefore(t)?n=Zt(e,t):((n=Zt(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(Tt(r.from),Tt(r.to)),(r={}).ms=i.milliseconds,r.M=i.months),s=new Ht(r),Rt(e)&&m(e,"_locale")&&(s._locale=e._locale),s}function jt(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Zt(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function zt(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(T(i,"moment()."+i+"(period, number) is deprecated. Please use moment()."+i+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=e,e=t,t=n),$t(this,At(e="string"==typeof e?+e:e,t),s),this}}function $t(e,t,n,s){var i=t._milliseconds,r=Ct(t._days),a=Ct(t._months);e.isValid()&&(s=null==s||s,a&&Ce(e,xe(e,"Month")+a*n),r&&be(e,"Date",xe(e,"Date")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s&&c.updateOffset(e,r||a))}At.fn=Ht.prototype,At.invalid=function(){return At(NaN)};var qt=zt(1,"add"),Jt=zt(-1,"subtract");function Bt(e,t){var n=12*(t.year()-e.year())+(t.month()-e.month()),s=e.clone().add(n,"months");return-(n+(t-s<0?(t-s)/(s-e.clone().add(n-1,"months")):(t-s)/(e.clone().add(n+1,"months")-s)))||0}function Qt(e){var t;return void 0===e?this._locale._abbr:(null!=(t=lt(e))&&(this._locale=t),this)}c.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",c.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Xt=n("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function Kt(){return this._locale}function en(e,t){I(0,[e,e.length],0,t)}function tn(e,t,n,s,i){var r;return null==e?Ie(this,s,i).year:((r=Ae(e,s,i))<t&&(t=r),function(e,t,n,s,i){var r=Ee(e,t,n,s,i),a=Ge(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,s,i))}I(0,["gg",2],0,function(){return this.weekYear()%100}),I(0,["GG",2],0,function(){return this.isoWeekYear()%100}),en("gggg","weekYear"),en("ggggg","weekYear"),en("GGGG","isoWeekYear"),en("GGGGG","isoWeekYear"),H("weekYear","gg"),H("isoWeekYear","GG"),L("weekYear",1),L("isoWeekYear",1),ue("G",se),ue("g",se),ue("GG",B,z),ue("gg",B,z),ue("GGGG",ee,q),ue("gggg",ee,q),ue("GGGGG",te,J),ue("ggggg",te,J),fe(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=k(e)}),fe(["gg","GG"],function(e,t,n,s){t[s]=c.parseTwoDigitYear(e)}),I("Q",0,"Qo","quarter"),H("quarter","Q"),L("quarter",7),ue("Q",Z),ce("Q",function(e,t){t[_e]=3*(k(e)-1)}),I("D",["DD",2],"Do","date"),H("date","D"),L("date",9),ue("D",B),ue("DD",B,z),ue("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),ce(["D","DD"],ye),ce("Do",function(e,t){t[ye]=k(e.match(B)[0])});var nn=Te("Date",!0);I("DDD",["DDDD",3],"DDDo","dayOfYear"),H("dayOfYear","DDD"),L("dayOfYear",4),ue("DDD",K),ue("DDDD",$),ce(["DDD","DDDD"],function(e,t,n){n._dayOfYear=k(e)}),I("m",["mm",2],0,"minute"),H("minute","m"),L("minute",14),ue("m",B),ue("mm",B,z),ce(["m","mm"],pe);var sn=Te("Minutes",!1);I("s",["ss",2],0,"second"),H("second","s"),L("second",15),ue("s",B),ue("ss",B,z),ce(["s","ss"],ve);var rn,an=Te("Seconds",!1);for(I("S",0,0,function(){return~~(this.millisecond()/100)}),I(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),I(0,["SSS",3],0,"millisecond"),I(0,["SSSS",4],0,function(){return 10*this.millisecond()}),I(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),I(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),I(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),I(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),I(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),H("millisecond","ms"),L("millisecond",16),ue("S",K,Z),ue("SS",K,z),ue("SSS",K,$),rn="SSSS";rn.length<=9;rn+="S")ue(rn,ne);function on(e,t){t[we]=k(1e3*("0."+e))}for(rn="S";rn.length<=9;rn+="S")ce(rn,on);var un=Te("Milliseconds",!1);I("z",0,0,"zoneAbbr"),I("zz",0,0,"zoneName");var ln=M.prototype;function dn(e){return e}ln.add=qt,ln.calendar=function(e,t){var n=e||Tt(),s=Nt(n,this).startOf("day"),i=c.calendarFormat(this,s)||"sameElse",r=t&&(x(t[i])?t[i].call(this,n):t[i]);return this.format(r||this.localeData().calendar(i,this,Tt(n)))},ln.clone=function(){return new M(this)},ln.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Nt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=R(t)){case"year":r=Bt(this,s)/12;break;case"month":r=Bt(this,s);break;case"quarter":r=Bt(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:D(r)},ln.endOf=function(e){return void 0===(e=R(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))},ln.format=function(e){e||(e=this.isUtc()?c.defaultFormatUtc:c.defaultFormat);var t=A(this,e);return this.localeData().postformat(t)},ln.from=function(e,t){return this.isValid()&&(S(e)&&e.isValid()||Tt(e).isValid())?At({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ln.fromNow=function(e){return this.from(Tt(),e)},ln.to=function(e,t){return this.isValid()&&(S(e)&&e.isValid()||Tt(e).isValid())?At({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ln.toNow=function(e){return this.to(Tt(),e)},ln.get=function(e){return x(this[e=R(e)])?this[e]():this},ln.invalidAt=function(){return g(this).overflow},ln.isAfter=function(e,t){var n=S(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=R(l(t)?"millisecond":t))?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},ln.isBefore=function(e,t){var n=S(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=R(l(t)?"millisecond":t))?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},ln.isBetween=function(e,t,n,s){return("("===(s=s||"()")[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(")"===s[1]?this.isBefore(t,n):!this.isAfter(t,n))},ln.isSame=function(e,t){var n,s=S(e)?e:Tt(e);return!(!this.isValid()||!s.isValid())&&("millisecond"===(t=R(t||"millisecond"))?this.valueOf()===s.valueOf():(n=s.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},ln.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},ln.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},ln.isValid=function(){return p(this)},ln.lang=Xt,ln.locale=Qt,ln.localeData=Kt,ln.max=bt,ln.min=xt,ln.parsingFlags=function(){return _({},g(this))},ln.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t=[];for(var n in e)t.push({unit:n,priority:F[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}(e=C(e)),s=0;s<n.length;s++)this[n[s].unit](e[n[s].unit]);else if(x(this[e=R(e)]))return this[e](t);return this},ln.startOf=function(e){switch(e=R(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this},ln.subtract=Jt,ln.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},ln.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},ln.toDate=function(){return new Date(this.valueOf())},ln.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||9999<n.year()?A(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):x(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",A(n,"Z")):A(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},ln.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',s=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i=t+'[")]';return this.format(n+s+"-MM-DD[T]HH:mm:ss.SSS"+i)},ln.toJSON=function(){return this.isValid()?this.toISOString():null},ln.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},ln.unix=function(){return Math.floor(this.valueOf()/1e3)},ln.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},ln.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},ln.year=Oe,ln.isLeapYear=function(){return ke(this.year())},ln.weekYear=function(e){return tn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},ln.isoWeekYear=function(e){return tn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},ln.quarter=ln.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},ln.month=Fe,ln.daysInMonth=function(){return Pe(this.year(),this.month())},ln.week=ln.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},ln.isoWeek=ln.isoWeeks=function(e){var t=Ie(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},ln.weeksInYear=function(){var e=this.localeData()._week;return Ae(this.year(),e.dow,e.doy)},ln.isoWeeksInYear=function(){return Ae(this.year(),1,4)},ln.date=nn,ln.day=ln.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,n,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,n=this.localeData(),e="string"!=typeof t?t:isNaN(t)?"number"==typeof(t=n.weekdaysParse(t))?t:null:parseInt(t,10),this.add(e-s,"d")):s},ln.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},ln.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=(n=e,s=this.localeData(),"string"==typeof n?s.weekdaysParse(n)%7||7:isNaN(n)?null:n);return this.day(this.day()%7?t:t-7)}return this.day()||7;var n,s},ln.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},ln.hour=ln.hours=tt,ln.minute=ln.minutes=sn,ln.second=ln.seconds=an,ln.millisecond=ln.milliseconds=un,ln.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=Ut(re,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Gt(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),i!==e&&(!t||this._changeInProgress?$t(this,At(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,c.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:Gt(this)},ln.utc=function(e){return this.utcOffset(0,e)},ln.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Gt(this),"m")),this},ln.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=Ut(ie,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},ln.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Tt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},ln.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ln.isLocal=function(){return!!this.isValid()&&!this._isUTC},ln.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ln.isUtc=Vt,ln.isUTC=Vt,ln.zoneAbbr=function(){return this._isUTC?"UTC":""},ln.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},ln.dates=n("dates accessor is deprecated. Use date instead.",nn),ln.months=n("months accessor is deprecated. Use month instead",Fe),ln.years=n("years accessor is deprecated. Use year instead",Oe),ln.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),ln.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(w(e,this),(e=Yt(e))._a){var t=e._isUTC?y(e._a):Tt(e._a);this._isDSTShifted=this.isValid()&&0<a(e._a,t.toArray())}else this._isDSTShifted=!1;return this._isDSTShifted});var hn=P.prototype;function cn(e,t,n,s){var i=lt(),r=y().set(s,t);return i[n](r,e)}function fn(e,t,n){if(d(e)&&(t=e,e=void 0),e=e||"",null!=t)return cn(e,t,n,"month");var s,i=[];for(s=0;s<12;s++)i[s]=cn(e,s,n,"month");return i}function mn(e,t,n,s){"boolean"==typeof e?d(t)&&(n=t,t=void 0):(t=e,e=!1,d(n=t)&&(n=t,t=void 0)),t=t||"";var i,r=lt(),a=e?r._week.dow:0;if(null!=n)return cn(t,(n+a)%7,s,"day");var o=[];for(i=0;i<7;i++)o[i]=cn(t,(i+a)%7,s,"day");return o}hn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return x(s)?s.call(t,n):s},hn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},hn.invalidDate=function(){return this._invalidDate},hn.ordinal=function(e){return this._ordinal.replace("%d",e)},hn.preparse=dn,hn.postformat=dn,hn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return x(i)?i(e,t,n,s):i.replace(/%d/i,e)},hn.pastFuture=function(e,t){var n=this._relativeTime[0<e?"future":"past"];return x(n)?n(t):n.replace(/%s/i,t)},hn.set=function(e){var t,n;for(n in e)x(t=e[n])?this[n]=t:this["_"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},hn.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||We).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone},hn.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[We.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},hn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=y([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=Ye.call(this._shortMonthsParse,a))?i:null:-1!==(i=Ye.call(this._longMonthsParse,a))?i:null:"MMM"===t?-1!==(i=Ye.call(this._shortMonthsParse,a))?i:-1!==(i=Ye.call(this._longMonthsParse,a))?i:null:-1!==(i=Ye.call(this._longMonthsParse,a))?i:-1!==(i=Ye.call(this._shortMonthsParse,a))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=y([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(r="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},hn.monthsRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||Ne.call(this),e?this._monthsStrictRegex:this._monthsRegex):(m(this,"_monthsRegex")||(this._monthsRegex=Ue),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},hn.monthsShortRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||Ne.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(m(this,"_monthsShortRegex")||(this._monthsShortRegex=Le),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},hn.week=function(e){return Ie(e,this._week.dow,this._week.doy).week},hn.firstDayOfYear=function(){return this._week.doy},hn.firstDayOfWeek=function(){return this._week.dow},hn.weekdays=function(e,t){return e?o(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?"format":"standalone"][e.day()]:o(this._weekdays)?this._weekdays:this._weekdays.standalone},hn.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},hn.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},hn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=y([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=Ye.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=y([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[s]||(r="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},hn.weekdaysRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(m(this,"_weekdaysRegex")||(this._weekdaysRegex=$e),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},hn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(m(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=qe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},hn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(m(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Je),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},hn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},hn.meridiem=function(e,t,n){return 11<e?n?"pm":"PM":n?"am":"AM"},ot("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===k(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),c.lang=n("moment.lang is deprecated. Use moment.locale instead.",ot),c.langData=n("moment.langData is deprecated. Use moment.localeData instead.",lt);var _n=Math.abs;function yn(e,t,n,s){var i=At(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function gn(e){return e<0?Math.floor(e):Math.ceil(e)}function pn(e){return 4800*e/146097}function vn(e){return 146097*e/4800}function wn(e){return function(){return this.as(e)}}var Mn=wn("ms"),Sn=wn("s"),Dn=wn("m"),kn=wn("h"),Yn=wn("d"),On=wn("w"),Tn=wn("M"),xn=wn("y");function bn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Pn=bn("milliseconds"),Wn=bn("seconds"),Hn=bn("minutes"),Rn=bn("hours"),Cn=bn("days"),Fn=bn("months"),Ln=bn("years");var Un=Math.round,Nn={ss:44,s:45,m:45,h:22,d:26,M:11};var Gn=Math.abs;function Vn(e){return(0<e)-(e<0)||+e}function En(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=Gn(this._milliseconds)/1e3,s=Gn(this._days),i=Gn(this._months);t=D((e=D(n/60))/60),n%=60,e%=60;var r=D(i/12),a=i%=12,o=s,u=t,l=e,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var c=h<0?"-":"",f=Vn(this._months)!==Vn(h)?"-":"",m=Vn(this._days)!==Vn(h)?"-":"",_=Vn(this._milliseconds)!==Vn(h)?"-":"";return c+"P"+(r?f+r+"Y":"")+(a?f+a+"M":"")+(o?m+o+"D":"")+(u||l||d?"T":"")+(u?_+u+"H":"")+(l?_+l+"M":"")+(d?_+d+"S":"")}var In=Ht.prototype;return In.isValid=function(){return this._isValid},In.abs=function(){var e=this._data;return this._milliseconds=_n(this._milliseconds),this._days=_n(this._days),this._months=_n(this._months),e.milliseconds=_n(e.milliseconds),e.seconds=_n(e.seconds),e.minutes=_n(e.minutes),e.hours=_n(e.hours),e.months=_n(e.months),e.years=_n(e.years),this},In.add=function(e,t){return yn(this,e,t,1)},In.subtract=function(e,t){return yn(this,e,t,-1)},In.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=R(e))||"year"===e)return t=this._days+s/864e5,n=this._months+pn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(vn(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},In.asMilliseconds=Mn,In.asSeconds=Sn,In.asMinutes=Dn,In.asHours=kn,In.asDays=Yn,In.asWeeks=On,In.asMonths=Tn,In.asYears=xn,In.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12):NaN},In._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return 0<=r&&0<=a&&0<=o||r<=0&&a<=0&&o<=0||(r+=864e5*gn(vn(o)+a),o=a=0),u.milliseconds=r%1e3,e=D(r/1e3),u.seconds=e%60,t=D(e/60),u.minutes=t%60,n=D(t/60),u.hours=n%24,o+=i=D(pn(a+=D(n/24))),a-=gn(vn(i)),s=D(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},In.clone=function(){return At(this)},In.get=function(e){return e=R(e),this.isValid()?this[e+"s"]():NaN},In.milliseconds=Pn,In.seconds=Wn,In.minutes=Hn,In.hours=Rn,In.days=Cn,In.weeks=function(){return D(this.days()/7)},In.months=Fn,In.years=Ln,In.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t,n,s,i,r,a,o,u,l,d,h,c=this.localeData(),f=(n=!e,s=c,i=At(t=this).abs(),r=Un(i.as("s")),a=Un(i.as("m")),o=Un(i.as("h")),u=Un(i.as("d")),l=Un(i.as("M")),d=Un(i.as("y")),(h=r<=Nn.ss&&["s",r]||r<Nn.s&&["ss",r]||a<=1&&["m"]||a<Nn.m&&["mm",a]||o<=1&&["h"]||o<Nn.h&&["hh",o]||u<=1&&["d"]||u<Nn.d&&["dd",u]||l<=1&&["M"]||l<Nn.M&&["MM",l]||d<=1&&["y"]||["yy",d])[2]=n,h[3]=0<+t,h[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,h));return e&&(f=c.pastFuture(+this,f)),c.postformat(f)},In.toISOString=En,In.toString=En,In.toJSON=En,In.locale=Qt,In.localeData=Kt,In.toIsoString=n("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",En),In.lang=Xt,I("X",0,0,"unix"),I("x",0,0,"valueOf"),ue("x",se),ue("X",/[+-]?\d+(\.\d{1,3})?/),ce("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),ce("x",function(e,t,n){n._d=new Date(k(e))}),c.version="2.22.1",e=Tt,c.fn=ln,c.min=function(){return Pt("isBefore",[].slice.call(arguments,0))},c.max=function(){return Pt("isAfter",[].slice.call(arguments,0))},c.now=function(){return Date.now?Date.now():+new Date},c.utc=y,c.unix=function(e){return Tt(1e3*e)},c.months=function(e,t){return fn(e,t,"months")},c.isDate=h,c.locale=ot,c.invalid=v,c.duration=At,c.isMoment=S,c.weekdays=function(e,t,n){return mn(e,t,n,"weekdays")},c.parseZone=function(){return Tt.apply(null,arguments).parseZone()},c.localeData=lt,c.isDuration=Rt,c.monthsShort=function(e,t){return fn(e,t,"monthsShort")},c.weekdaysMin=function(e,t,n){return mn(e,t,n,"weekdaysMin")},c.defineLocale=ut,c.updateLocale=function(e,t){if(null!=t){var n,s,i=nt;null!=(s=at(e))&&(i=s._config),(n=new P(t=b(i,t))).parentLocale=st[e],st[e]=n,ot(e)}else null!=st[e]&&(null!=st[e].parentLocale?st[e]=st[e].parentLocale:null!=st[e]&&delete st[e]);return st[e]},c.locales=function(){return s(st)},c.weekdaysShort=function(e,t,n){return mn(e,t,n,"weekdaysShort")},c.normalizeUnits=R,c.relativeTimeRounding=function(e){return void 0===e?Un:"function"==typeof e&&(Un=e,!0)},c.relativeTimeThreshold=function(e,t){return void 0!==Nn[e]&&(void 0===t?Nn[e]:(Nn[e]=t,"s"===e&&(Nn.ss=t-1),!0))},c.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},c.prototype=ln,c.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"YYYY-[W]WW",MONTH:"YYYY-MM"},c}); +
99423/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
99424 +
99425/***/ }), +
99426 +
99427/***/ "./node_modules/node-libs-browser/mock/empty.js": +
99428/*!******************************************************!*\ +
99429 !*** ./node_modules/node-libs-browser/mock/empty.js ***! +
99430 \******************************************************/ +
99431/*! no static exports found */ +
99432/***/ (function(module, exports) { +
99433 +
99434 +
99435 +
99436/***/ }), +
99437 +
99438/***/ "./node_modules/path-browserify/index.js": +
99439/*!***********************************************!*\ +
99440 !*** ./node_modules/path-browserify/index.js ***! +
99441 \***********************************************/ +
99442/*! no static exports found */ +
99443/***/ (function(module, exports, __webpack_require__) { +
99444 +
99445/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors. +
99446// +
99447// Permission is hereby granted, free of charge, to any person obtaining a +
99448// copy of this software and associated documentation files (the +
99449// "Software"), to deal in the Software without restriction, including +
99450// without limitation the rights to use, copy, modify, merge, publish, +
99451// distribute, sublicense, and/or sell copies of the Software, and to permit +
99452// persons to whom the Software is furnished to do so, subject to the +
99453// following conditions: +
99454// +
99455// The above copyright notice and this permission notice shall be included +
99456// in all copies or substantial portions of the Software. +
99457// +
99458// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +
99459// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +
99460// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +
99461// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +
99462// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +
99463// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +
99464// USE OR OTHER DEALINGS IN THE SOFTWARE. +
99465 +
99466// resolves . and .. elements in a path array with directory names there +
99467// must be no slashes, empty elements, or device names (c:\) in the array +
99468// (so also no leading and trailing slashes - it does not distinguish +
99469// relative and absolute paths) +
99470function normalizeArray(parts, allowAboveRoot) { +
99471 // if the path tries to go above the root, `up` ends up > 0 +
99472 var up = 0; +
99473 for (var i = parts.length - 1; i >= 0; i--) { +
99474 var last = parts[i]; +
99475 if (last === '.') { +
99476 parts.splice(i, 1); +
99477 } else if (last === '..') { +
99478 parts.splice(i, 1); +
99479 up++; +
99480 } else if (up) { +
99481 parts.splice(i, 1); +
99482 up--; +
99483 } +
99484 } +
99485 +
99486 // if the path is allowed to go above the root, restore leading ..s +
99487 if (allowAboveRoot) { +
99488 for (; up--; up) { +
99489 parts.unshift('..'); +
99490 } +
99491 } +
99492 +
99493 return parts; +
99494} +
99495 +
99496// Split a filename into [root, dir, basename, ext], unix version +
99497// 'root' is just a slash, or nothing. +
99498var splitPathRe = +
99499 /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +
99500var splitPath = function(filename) { +
99501 return splitPathRe.exec(filename).slice(1); +
99502}; +
99503 +
99504// path.resolve([from ...], to) +
99505// posix version +
99506exports.resolve = function() { +
99507 var resolvedPath = '', +
99508 resolvedAbsolute = false; +
99509 +
99510 for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { +
99511 var path = (i >= 0) ? arguments[i] : process.cwd(); +
99512 +
99513 // Skip empty and invalid entries +
99514 if (typeof path !== 'string') { +
99515 throw new TypeError('Arguments to path.resolve must be strings'); +
99516 } else if (!path) { +
99517 continue; +
99518 } +
99519 +
99520 resolvedPath = path + '/' + resolvedPath; +
99521 resolvedAbsolute = path.charAt(0) === '/'; +
99522 } +
99523 +
99524 // At this point the path should be resolved to a full absolute path, but +
99525 // handle relative paths to be safe (might happen when process.cwd() fails) +
99526 +
99527 // Normalize the path +
99528 resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { +
99529 return !!p; +
99530 }), !resolvedAbsolute).join('/'); +
99531 +
99532 return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +
99533}; +
99534 +
99535// path.normalize(path) +
99536// posix version +
99537exports.normalize = function(path) { +
99538 var isAbsolute = exports.isAbsolute(path), +
99539 trailingSlash = substr(path, -1) === '/'; +
99540 +
99541 // Normalize the path +
99542 path = normalizeArray(filter(path.split('/'), function(p) { +
99543 return !!p; +
99544 }), !isAbsolute).join('/'); +
99545 +
99546 if (!path && !isAbsolute) { +
99547 path = '.'; +
99548 } +
99549 if (path && trailingSlash) { +
99550 path += '/'; +
99551 } +
99552 +
99553 return (isAbsolute ? '/' : '') + path; +
99554}; +
99555 +
99556// posix version +
99557exports.isAbsolute = function(path) { +
99558 return path.charAt(0) === '/'; +
99559}; +
99560 +
99561// posix version +
99562exports.join = function() { +
99563 var paths = Array.prototype.slice.call(arguments, 0); +
99564 return exports.normalize(filter(paths, function(p, index) { +
99565 if (typeof p !== 'string') { +
99566 throw new TypeError('Arguments to path.join must be strings'); +
99567 } +
99568 return p; +
99569 }).join('/')); +
99570}; +
99571 +
99572 +
99573// path.relative(from, to) +
99574// posix version +
99575exports.relative = function(from, to) { +
99576 from = exports.resolve(from).substr(1); +
99577 to = exports.resolve(to).substr(1); +
99578 +
99579 function trim(arr) { +
99580 var start = 0; +
99581 for (; start < arr.length; start++) { +
99582 if (arr[start] !== '') break; +
99583 } +
99584 +
99585 var end = arr.length - 1; +
99586 for (; end >= 0; end--) { +
99587 if (arr[end] !== '') break; +
99588 } +
99589 +
99590 if (start > end) return []; +
99591 return arr.slice(start, end - start + 1); +
99592 } +
99593 +
99594 var fromParts = trim(from.split('/')); +
99595 var toParts = trim(to.split('/')); +
99596 +
99597 var length = Math.min(fromParts.length, toParts.length); +
99598 var samePartsLength = length; +
99599 for (var i = 0; i < length; i++) { +
99600 if (fromParts[i] !== toParts[i]) { +
99601 samePartsLength = i; +
99602 break; +
99603 } +
99604 } +
99605 +
99606 var outputParts = []; +
99607 for (var i = samePartsLength; i < fromParts.length; i++) { +
99608 outputParts.push('..'); +
99609 } +
99610 +
99611 outputParts = outputParts.concat(toParts.slice(samePartsLength)); +
99612 +
99613 return outputParts.join('/'); +
99614}; +
99615 +
99616exports.sep = '/'; +
99617exports.delimiter = ':'; +
99618 +
99619exports.dirname = function(path) { +
99620 var result = splitPath(path), +
99621 root = result[0], +
99622 dir = result[1]; +
99623 +
99624 if (!root && !dir) { +
99625 // No dirname whatsoever +
99626 return '.'; +
99627 } +
99628 +
99629 if (dir) { +
99630 // It has a dirname, strip trailing slash +
99631 dir = dir.substr(0, dir.length - 1); +
99632 } +
99633 +
99634 return root + dir; +
99635}; +
99636 +
99637 +
99638exports.basename = function(path, ext) { +
99639 var f = splitPath(path)[2]; +
99640 // TODO: make this comparison case-insensitive on windows? +
99641 if (ext && f.substr(-1 * ext.length) === ext) { +
99642 f = f.substr(0, f.length - ext.length); +
99643 } +
99644 return f; +
99645}; +
99646 +
99647 +
99648exports.extname = function(path) { +
99649 return splitPath(path)[3]; +
99650}; +
99651 +
99652function filter (xs, f) { +
99653 if (xs.filter) return xs.filter(f); +
99654 var res = []; +
99655 for (var i = 0; i < xs.length; i++) { +
99656 if (f(xs[i], i, xs)) res.push(xs[i]); +
99657 } +
99658 return res; +
99659} +
99660 +
99661// String.prototype.substr - negative index don't work in IE8 +
99662var substr = 'ab'.substr(-1) === 'b' +
99663 ? function (str, start, len) { return str.substr(start, len) } +
99664 : function (str, start, len) { +
99665 if (start < 0) start = str.length + start; +
99666 return str.substr(start, len); +
99667 } +
99668; +
99669 +
99670/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ "./node_modules/process/browser.js"))) +
99671 +
99672/***/ }), +
99673 +
99674/***/ "./node_modules/process/browser.js": +
99675/*!*****************************************!*\ +
99676 !*** ./node_modules/process/browser.js ***! +
99677 \*****************************************/ +
99678/*! no static exports found */ +
99679/***/ (function(module, exports) { +
99680 +
99681// shim for using process in browser +
99682var process = module.exports = {}; +
99683 +
99684// cached from whatever global is present so that test runners that stub it +
99685// don't break things. But we need to wrap it in a try catch in case it is +
99686// wrapped in strict mode code which doesn't define any globals. It's inside a +
99687// function because try/catches deoptimize in certain engines. +
99688 +
99689var cachedSetTimeout; +
99690var cachedClearTimeout; +
99691 +
99692function defaultSetTimout() { +
99693 throw new Error('setTimeout has not been defined'); +
99694} +
99695function defaultClearTimeout () { +
99696 throw new Error('clearTimeout has not been defined'); +
99697} +
99698(function () { +
99699 try { +
99700 if (typeof setTimeout === 'function') { +
99701 cachedSetTimeout = setTimeout; +
99702 } else { +
99703 cachedSetTimeout = defaultSetTimout; +
99704 } +
99705 } catch (e) { +
99706 cachedSetTimeout = defaultSetTimout; +
99707 } +
99708 try { +
99709 if (typeof clearTimeout === 'function') { +
99710 cachedClearTimeout = clearTimeout; +
99711 } else { +
99712 cachedClearTimeout = defaultClearTimeout; +
99713 } +
99714 } catch (e) { +
99715 cachedClearTimeout = defaultClearTimeout; +
99716 } +
99717} ()) +
99718function runTimeout(fun) { +
99719 if (cachedSetTimeout === setTimeout) { +
99720 //normal enviroments in sane situations +
99721 return setTimeout(fun, 0); +
99722 } +
99723 // if setTimeout wasn't available but was latter defined +
99724 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { +
99725 cachedSetTimeout = setTimeout; +
99726 return setTimeout(fun, 0); +
99727 } +
99728 try { +
99729 // when when somebody has screwed with setTimeout but no I.E. maddness +
99730 return cachedSetTimeout(fun, 0); +
99731 } catch(e){ +
99732 try { +
99733 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally +
99734 return cachedSetTimeout.call(null, fun, 0); +
99735 } catch(e){ +
99736 // 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 +
99737 return cachedSetTimeout.call(this, fun, 0); +
99738 } +
99739 } +
99740 +
99741 +
99742} +
99743function runClearTimeout(marker) { +
99744 if (cachedClearTimeout === clearTimeout) { +
99745 //normal enviroments in sane situations +
99746 return clearTimeout(marker); +
99747 } +
99748 // if clearTimeout wasn't available but was latter defined +
99749 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { +
99750 cachedClearTimeout = clearTimeout; +
99751 return clearTimeout(marker); +
99752 } +
99753 try { +
99754 // when when somebody has screwed with setTimeout but no I.E. maddness +
99755 return cachedClearTimeout(marker); +
99756 } catch (e){ +
99757 try { +
99758 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally +
99759 return cachedClearTimeout.call(null, marker); +
99760 } catch (e){ +
99761 // 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. +
99762 // Some versions of I.E. have different rules for clearTimeout vs setTimeout +
99763 return cachedClearTimeout.call(this, marker); +
99764 } +
99765 } +
99766 +
99767 +
99768 +
99769} +
99770var queue = []; +
99771var draining = false; +
99772var currentQueue; +
99773var queueIndex = -1; +
99774 +
99775function cleanUpNextTick() { +
99776 if (!draining || !currentQueue) { +
99777 return; +
99778 } +
99779 draining = false; +
99780 if (currentQueue.length) { +
99781 queue = currentQueue.concat(queue); +
99782 } else { +
99783 queueIndex = -1; +
99784 } +
99785 if (queue.length) { +
99786 drainQueue(); +
99787 } +
99788} +
99789 +
99790function drainQueue() { +
99791 if (draining) { +
99792 return; +
99793 } +
99794 var timeout = runTimeout(cleanUpNextTick); +
99795 draining = true; +
99796 +
99797 var len = queue.length; +
99798 while(len) { +
99799 currentQueue = queue; +
99800 queue = []; +
99801 while (++queueIndex < len) { +
99802 if (currentQueue) { +
99803 currentQueue[queueIndex].run(); +
99804 } +
99805 } +
99806 queueIndex = -1; +
99807 len = queue.length; +
99808 } +
99809 currentQueue = null; +
99810 draining = false; +
99811 runClearTimeout(timeout); +
99812} +
99813 +
99814process.nextTick = function (fun) { +
99815 var args = new Array(arguments.length - 1); +
99816 if (arguments.length > 1) { +
99817 for (var i = 1; i < arguments.length; i++) { +
99818 args[i - 1] = arguments[i]; +
99819 } +
99820 } +
99821 queue.push(new Item(fun, args)); +
99822 if (queue.length === 1 && !draining) { +
99823 runTimeout(drainQueue); +
99824 } +
99825}; +
99826 +
99827// v8 likes predictible objects +
99828function Item(fun, array) { +
99829 this.fun = fun; +
99830 this.array = array; +
99831} +
99832Item.prototype.run = function () { +
99833 this.fun.apply(null, this.array); +
99834}; +
99835process.title = 'browser'; +
99836process.browser = true; +
99837process.env = {}; +
99838process.argv = []; +
99839process.version = ''; // empty string to avoid regexp issues +
99840process.versions = {}; +
99841 +
99842function noop() {} +
99843 +
99844process.on = noop; +
99845process.addListener = noop; +
99846process.once = noop; +
99847process.off = noop; +
99848process.removeListener = noop; +
99849process.removeAllListeners = noop; +
99850process.emit = noop; +
99851process.prependListener = noop; +
99852process.prependOnceListener = noop; +
99853 +
99854process.listeners = function (name) { return [] } +
99855 +
99856process.binding = function (name) { +
99857 throw new Error('process.binding is not supported'); +
99858}; +
99859 +
99860process.cwd = function () { return '/' }; +
99861process.chdir = function (dir) { +
99862 throw new Error('process.chdir is not supported'); +
99863}; +
99864process.umask = function() { return 0; }; +
99865 +
99866 +
99867/***/ }), +
99868 +
99869/***/ "./node_modules/scope-css/index.js": +
99870/*!*****************************************!*\ +
99871 !*** ./node_modules/scope-css/index.js ***! +
99872 \*****************************************/ +
99873/*! no static exports found */ +
99874/***/ (function(module, exports, __webpack_require__) { +
99875 +
99876"use strict"; +
99877 +
99878 +
99879var slugify = __webpack_require__(/*! slugify */ "./node_modules/slugify/index.js") +
99880var escaper = __webpack_require__(/*! escaper */ "./node_modules/escaper/dist/escaper.js") +
99881var stripComments = __webpack_require__(/*! strip-css-comments */ "./node_modules/strip-css-comments/index.js") +
99882 +
99883module.exports = scope +
99884scope.replace = replace +
99885 +
99886function scope (css, parent, o) { +
99887 if (!css) return css +
99888 +
99889 if (!parent) return css +
99890 +
99891 if (typeof o === 'string') o = {keyframes: o} +
99892 if (!o) o = {keyframes: false} +
99893 +
99894 css = replace(css, parent + ' $1$2') +
99895 +
99896 //regexp.escape +
99897 var parentRe = parent.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') +
99898 +
99899 //replace self-selectors +
99900 css = css.replace(new RegExp('(' + parentRe + ')\\s*\\1(?=[\\s\\r\\n,{])', 'g'), '$1') +
99901 +
99902 //replace `:host` with parent +
99903 css = css.replace(new RegExp('(' + parentRe + ')\\s*:host', 'g'), '$1') +
99904 +
99905 //revoke wrongly replaced @ statements, like @supports, @import, @media etc. +
99906 css = css.replace(new RegExp('(' + parentRe + ')\\s*@', 'g'), '@') +
99907 +
99908 //revoke wrongly replaced :root blocks +
99909 css = css.replace(new RegExp('(' + parentRe + ')\\s*:root', 'g'), ':root') +
99910 +
99911 //animations: prefix animation anmes +
99912 var animations = [], +
99913 animationNameRe = /@keyframes\s+([a-zA-Z0-9_-]+)\s*{/g, +
99914 match +
99915 while ((match = animationNameRe.exec(css)) !== null) { +
99916 if (animations.indexOf(match[1]) < 0) +
99917 animations.push(match[1]) +
99918 } +
99919 +
99920 var slug = slugify(parent) +
99921 +
99922 animations.forEach(function (name) { +
99923 var newName = (o.keyframes === true ? slug + '-' : typeof o.keyframes === 'string' ? o.keyframes : '') + name +
99924 css = css.replace(new RegExp('(@keyframes\\s+)' + name + '(\\s*{)', 'g'), +
99925 '$1' + newName + '$2') +
99926 css = css.replace(new RegExp('(animation(?:-name)?\\s*:[^;]*\\s*)' + name + '([\\s;}])', 'g'), +
99927 '$1' + newName + '$2') +
99928 }) +
99929 //animation: revoke wrongly replaced keyframes +
99930 css = css.replace(new RegExp('(' + parentRe + ' )(\\s*(?:to|from|[+-]?(?:(?:\\.\\d+)|(?:\\d+(?:\\.\\d*)?))%))(?=[\\s\\r\\n,{])', 'g'), '$2') +
99931 +
99932 return css +
99933} +
99934 +
99935function replace (css, replacer) { +
99936 var arr = [] +
99937 +
99938 css = stripComments(css) +
99939 +
99940 // escape strings etc. +
99941 css = escaper.replace(css, true, arr) +
99942 +
99943 css = css.replace(/([^\r\n,{}]+)(,(?=[^}]*{)|\s*{)/g, replacer) +
99944 +
99945 // insert comments, strings etc. back +
99946 css = escaper.paste(css, arr) +
99947 +
99948 return css +
99949} +
99950 +
99951 +
99952 +
99953/***/ }), +
99954 +
99955/***/ "./node_modules/slugify/index.js": +
99956/*!***************************************!*\ +
99957 !*** ./node_modules/slugify/index.js ***! +
99958 \***************************************/ +
99959/*! no static exports found */ +
99960/***/ (function(module, exports, __webpack_require__) { +
99961 +
99962 +
99963;(function (name, root, factory) { +
99964 if (true) { +
99965 module.exports = factory() +
99966 module.exports['default'] = factory() +
99967 } +
99968 /* istanbul ignore next */ +
99969 else {} +
99970}('slugify', this, function () { +
99971 /* eslint-disable */ +
99972 var charMap = JSON.parse('{"$":"dollar","%":"percent","&":"and","<":"less",">":"greater","|":"or","¢":"cent","£":"pound","¤":"currency","¥":"yen","©":"(c)","ª":"a","®":"(r)","º":"o","À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","Æ":"AE","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Ì":"I","Í":"I","Î":"I","Ï":"I","Ð":"D","Ñ":"N","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","Ù":"U","Ú":"U","Û":"U","Ü":"U","Ý":"Y","Þ":"TH","ß":"ss","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","ì":"i","í":"i","î":"i","ï":"i","ð":"d","ñ":"n","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","ù":"u","ú":"u","û":"u","ü":"u","ý":"y","þ":"th","ÿ":"y","Ā":"A","ā":"a","Ă":"A","ă":"a","Ą":"A","ą":"a","Ć":"C","ć":"c","Č":"C","č":"c","Ď":"D","ď":"d","Đ":"DJ","đ":"dj","Ē":"E","ē":"e","Ė":"E","ė":"e","Ę":"e","ę":"e","Ě":"E","ě":"e","Ğ":"G","ğ":"g","Ģ":"G","ģ":"g","Ĩ":"I","ĩ":"i","Ī":"i","ī":"i","Į":"I","į":"i","İ":"I","ı":"i","Ķ":"k","ķ":"k","Ļ":"L","ļ":"l","Ľ":"L","ľ":"l","Ł":"L","ł":"l","Ń":"N","ń":"n","Ņ":"N","ņ":"n","Ň":"N","ň":"n","Ő":"O","ő":"o","Œ":"OE","œ":"oe","Ŕ":"R","ŕ":"r","Ř":"R","ř":"r","Ś":"S","ś":"s","Ş":"S","ş":"s","Š":"S","š":"s","Ţ":"T","ţ":"t","Ť":"T","ť":"t","Ũ":"U","ũ":"u","Ū":"u","ū":"u","Ů":"U","ů":"u","Ű":"U","ű":"u","Ų":"U","ų":"u","Ź":"Z","ź":"z","Ż":"Z","ż":"z","Ž":"Z","ž":"z","ƒ":"f","Ơ":"O","ơ":"o","Ư":"U","ư":"u","Lj":"LJ","lj":"lj","Nj":"NJ","nj":"nj","Ș":"S","ș":"s","Ț":"T","ț":"t","˚":"o","Ά":"A","Έ":"E","Ή":"H","Ί":"I","Ό":"O","Ύ":"Y","Ώ":"W","ΐ":"i","Α":"A","Β":"B","Γ":"G","Δ":"D","Ε":"E","Ζ":"Z","Η":"H","Θ":"8","Ι":"I","Κ":"K","Λ":"L","Μ":"M","Ν":"N","Ξ":"3","Ο":"O","Π":"P","Ρ":"R","Σ":"S","Τ":"T","Υ":"Y","Φ":"F","Χ":"X","Ψ":"PS","Ω":"W","Ϊ":"I","Ϋ":"Y","ά":"a","έ":"e","ή":"h","ί":"i","ΰ":"y","α":"a","β":"b","γ":"g","δ":"d","ε":"e","ζ":"z","η":"h","θ":"8","ι":"i","κ":"k","λ":"l","μ":"m","ν":"n","ξ":"3","ο":"o","π":"p","ρ":"r","ς":"s","σ":"s","τ":"t","υ":"y","φ":"f","χ":"x","ψ":"ps","ω":"w","ϊ":"i","ϋ":"y","ό":"o","ύ":"y","ώ":"w","Ё":"Yo","Ђ":"DJ","Є":"Ye","І":"I","Ї":"Yi","Ј":"J","Љ":"LJ","Њ":"NJ","Ћ":"C","Џ":"DZ","А":"A","Б":"B","В":"V","Г":"G","Д":"D","Е":"E","Ж":"Zh","З":"Z","И":"I","Й":"J","К":"K","Л":"L","М":"M","Н":"N","О":"O","П":"P","Р":"R","С":"S","Т":"T","У":"U","Ф":"F","Х":"H","Ц":"C","Ч":"Ch","Ш":"Sh","Щ":"Sh","Ъ":"U","Ы":"Y","Ь":"","Э":"E","Ю":"Yu","Я":"Ya","а":"a","б":"b","в":"v","г":"g","д":"d","е":"e","ж":"zh","з":"z","и":"i","й":"j","к":"k","л":"l","м":"m","н":"n","о":"o","п":"p","р":"r","с":"s","т":"t","у":"u","ф":"f","х":"h","ц":"c","ч":"ch","ш":"sh","щ":"sh","ъ":"u","ы":"y","ь":"","э":"e","ю":"yu","я":"ya","ё":"yo","ђ":"dj","є":"ye","і":"i","ї":"yi","ј":"j","љ":"lj","њ":"nj","ћ":"c","џ":"dz","Ґ":"G","ґ":"g","฿":"baht","ა":"a","ბ":"b","გ":"g","დ":"d","ე":"e","ვ":"v","ზ":"z","თ":"t","ი":"i","კ":"k","ლ":"l","მ":"m","ნ":"n","ო":"o","პ":"p","ჟ":"zh","რ":"r","ს":"s","ტ":"t","უ":"u","ფ":"f","ქ":"k","ღ":"gh","ყ":"q","შ":"sh","ჩ":"ch","ც":"ts","ძ":"dz","წ":"ts","ჭ":"ch","ხ":"kh","ჯ":"j","ჰ":"h","ẞ":"SS","Ạ":"A","ạ":"a","Ả":"A","ả":"a","Ấ":"A","ấ":"a","Ầ":"A","ầ":"a","Ẩ":"A","ẩ":"a","Ẫ":"A","ẫ":"a","Ậ":"A","ậ":"a","Ắ":"A","ắ":"a","Ằ":"A","ằ":"a","Ẳ":"A","ẳ":"a","Ẵ":"A","ẵ":"a","Ặ":"A","ặ":"a","Ẹ":"E","ẹ":"e","Ẻ":"E","ẻ":"e","Ẽ":"E","ẽ":"e","Ế":"E","ế":"e","Ề":"E","ề":"e","Ể":"E","ể":"e","Ễ":"E","ễ":"e","Ệ":"E","ệ":"e","Ỉ":"I","ỉ":"i","Ị":"I","ị":"i","Ọ":"O","ọ":"o","Ỏ":"O","ỏ":"o","Ố":"O","ố":"o","Ồ":"O","ồ":"o","Ổ":"O","ổ":"o","Ỗ":"O","ỗ":"o","Ộ":"O","ộ":"o","Ớ":"O","ớ":"o","Ờ":"O","ờ":"o","Ở":"O","ở":"o","Ỡ":"O","ỡ":"o","Ợ":"O","ợ":"o","Ụ":"U","ụ":"u","Ủ":"U","ủ":"u","Ứ":"U","ứ":"u","Ừ":"U","ừ":"u","Ử":"U","ử":"u","Ữ":"U","ữ":"u","Ự":"U","ự":"u","Ỳ":"Y","ỳ":"y","Ỵ":"Y","ỵ":"y","Ỷ":"Y","ỷ":"y","Ỹ":"Y","ỹ":"y","‘":"\'","’":"\'","“":"\\\"","”":"\\\"","†":"+","•":"*","…":"...","₠":"ecu","₢":"cruzeiro","₣":"french franc","₤":"lira","₥":"mill","₦":"naira","₧":"peseta","₨":"rupee","₩":"won","₪":"new shequel","₫":"dong","€":"euro","₭":"kip","₮":"tugrik","₯":"drachma","₰":"penny","₱":"peso","₲":"guarani","₳":"austral","₴":"hryvnia","₵":"cedi","₹":"indian rupee","₽":"russian ruble","₿":"bitcoin","℠":"sm","™":"tm","∂":"d","∆":"delta","∑":"sum","∞":"infinity","♥":"love","元":"yuan","円":"yen","﷼":"rial"}') +
99973 /* eslint-enable */ +
99974 +
99975 function replace (string, options) { +
99976 if (typeof string !== 'string') { +
99977 throw new Error('slugify: string argument expected') +
99978 } +
99979 +
99980 options = (typeof options === 'string') +
99981 ? {replacement: options} +
99982 : options || {} +
99983 +
99984 var slug = string.split('') +
99985 .reduce(function (result, ch) { +
99986 return result + (charMap[ch] || ch) +
99987 // allowed +
99988 .replace(options.remove || /[^\w\s$*_+~.()'"!\-:@]/g, '') +
99989 }, '') +
99990 // trim leading/trailing spaces +
99991 .trim() +
99992 // convert spaces +
99993 .replace(/[-\s]+/g, options.replacement || '-') +
99994 +
99995 return options.lower ? slug.toLowerCase() : slug +
99996 } +
99997 +
99998 replace.extend = function (customMap) { +
99999 for (var key in customMap) { +
100000 charMap[key] = customMap[key] +
100001 } +
100002 } +
100003 +
100004 return replace +
100005})) +
100006 +
100007 +
100008/***/ }), +
100009 +
100010/***/ "./node_modules/strip-css-comments/index.js": +
100011/*!**************************************************!*\ +
100012 !*** ./node_modules/strip-css-comments/index.js ***! +
100013 \**************************************************/ +
100014/*! no static exports found */ +
100015/***/ (function(module, exports, __webpack_require__) { +
100016 +
100017"use strict"; +
100018 +
100019var isRegExp = __webpack_require__(/*! is-regexp */ "./node_modules/is-regexp/index.js"); +
100020 +
100021module.exports = function (str, opts) { +
100022 str = str.toString(); +
100023 opts = opts || {}; +
100024 +
100025 var preserveFilter; +
100026 var comment = ''; +
100027 var currentChar = ''; +
100028 var insideString = false; +
100029 var preserveImportant = !(opts.preserve === false || opts.all === true); +
100030 var ret = ''; +
100031 +
100032 if (typeof opts.preserve === 'function') { +
100033 preserveImportant = false; +
100034 preserveFilter = opts.preserve; +
100035 } else if (isRegExp(opts.preserve)) { +
100036 preserveImportant = false; +
100037 preserveFilter = function (comment) { +
100038 return opts.preserve.test(comment); +
100039 }; +
100040 } +
100041 +
100042 for (var i = 0; i < str.length; i++) { +
100043 currentChar = str[i]; +
100044 +
100045 if (str[i - 1] !== '\\') { +
100046 if (currentChar === '"' || currentChar === '\'') { +
100047 if (insideString === currentChar) { +
100048 insideString = false; +
100049 } else if (!insideString) { +
100050 insideString = currentChar; +
100051 } +
100052 } +
100053 } +
100054 +
100055 // find beginning of /* type comment +
100056 if (!insideString && currentChar === '/' && str[i + 1] === '*') { +
100057 // ignore important comment when configured to preserve comments using important syntax: /*! +
100058 if (!(preserveImportant && str[i + 2] === '!')) { +
100059 var j = i + 2; +
100060 +
100061 // iterate over comment +
100062 for (; j < str.length; j++) { +
100063 // find end of comment +
100064 if (str[j] === '*' && str[j + 1] === '/') { +
100065 if (preserveFilter) { +
100066 // evaluate comment text +
100067 ret = preserveFilter(comment) ? ret + ('/*' + comment + '*/') : ret; +
100068 comment = ''; +
100069 } +
100070 +
100071 break; +
100072 } +
100073 +
100074 // store comment text to be evaluated by the filter when the end of the comment is reached +
100075 if (preserveFilter) { +
100076 comment += str[j]; +
100077 } +
100078 } +
100079 +
100080 // resume iteration over CSS string from the end of the comment +
100081 i = j + 1; +
100082 +
100083 continue; +
100084 } +
100085 } +
100086 +
100087 ret += currentChar; +
100088 } +
100089 +
100090 return ret; +
100091}; +
100092 +
100093 +
100094/***/ }), +
100095 +
100096/***/ "./node_modules/webpack/buildin/global.js": +
100097/*!***********************************!*\ +
100098 !*** (webpack)/buildin/global.js ***! +
100099 \***********************************/ +
100100/*! no static exports found */ +
100101/***/ (function(module, exports) { +
100102 +
100103var g; +
100104 +
100105// This works in non-strict mode +
100106g = (function() { +
100107 return this; +
100108})(); +
100109 +
100110try { +
100111 // This works if eval is allowed (see CSP) +
100112 g = g || new Function("return this")(); +
100113} catch (e) { +
100114 // This works if the window reference is available +
100115 if (typeof window === "object") g = window; +
100116} +
100117 +
100118// g can still be undefined, but nothing to do about it... +
100119// We return undefined, instead of nothing here, so it's +
100120// easier to handle this case. if(!global) { ...} +
100121 +
100122module.exports = g; +
100123 +
100124 +
100125/***/ }), +
100126 +
100127/***/ "./node_modules/webpack/buildin/module.js": +
100128/*!***********************************!*\ +
100129 !*** (webpack)/buildin/module.js ***! +
100130 \***********************************/ +
100131/*! no static exports found */ +
100132/***/ (function(module, exports) { +
100133 +
100134module.exports = function(module) { +
100135 if (!module.webpackPolyfill) { +
100136 module.deprecate = function() {}; +
100137 module.paths = []; +
100138 // module.parent = undefined by default +
100139 if (!module.children) module.children = []; +
100140 Object.defineProperty(module, "loaded", { +
100141 enumerable: true, +
100142 get: function() { +
100143 return module.l; +
100144 } +
100145 }); +
100146 Object.defineProperty(module, "id", { +
100147 enumerable: true, +
100148 get: function() { +
100149 return module.i; +
100150 } +
100151 }); +
100152 module.webpackPolyfill = 1; +
100153 } +
100154 return module; +
100155}; +
100156 +
100157 +
100158/***/ }), +
100159 +
100160/***/ "./package.json": +
100161/*!**********************!*\ +
100162 !*** ./package.json ***! +
100163 \**********************/ +
100164/*! exports provided: name, version, description, main, keywords, scripts, repository, author, license, standard, dependencies, devDependencies, files, yarn-upgrade-all, default */ +
100165/***/ (function(module) { +
100166 +
100167module.exports = {"name":"mermaid","version":"8.1.0","description":"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.","main":"dist/mermaid.core.js","keywords":["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],"scripts":{"build":"webpack --progress --colors","build:watch":"yarn build --watch","minify":"minify ./dist/mermaid.js > ./dist/mermaid.min.js","release":"yarn build -p --config webpack.config.prod.babel.js","lint":"standard","e2e":"yarn lint && jest e2e --config e2e/jest.config.js","dev":"yarn lint && webpack-dev-server --config webpack.config.e2e.js","test":"yarn lint && jest src","test:watch":"jest --watch src","jison":"node -r @babel/register node_modules/.bin/gulp jison","prepublishOnly":"yarn build && yarn release && yarn test","prepush":"yarn test"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js"],"globals":["page"]},"dependencies":{"d3":"^5.7.0","dagre-d3-renderer":"^0.5.8","dagre-layout":"^0.8.8","graphlibrary":"^2.2.0","he":"^1.2.0","moment-mini":"^2.22.1","lodash":"^4.17.11","minify":"^4.1.1","scope-css":"^1.2.1"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.2.0","@babel/register":"^7.0.0","babel-core":"7.0.0-bridge.0","babel-jest":"^23.6.0","babel-loader":"^8.0.4","coveralls":"^3.0.2","css-loader":"^2.0.1","css-to-string-loader":"^0.1.3","gulp":"^4.0.0","gulp-filelog":"^0.4.1","gulp-jison":"^1.2.0","husky":"^1.2.1","identity-obj-proxy":"^3.0.0","jest":"^23.6.0","jest-environment-puppeteer":"^4.2.0","jest-image-snapshot":"^2.8.2","jest-puppeteer":"^4.2.0","jison":"^0.4.18","moment":"^2.23.0","node-sass":"^4.11.0","puppeteer":"^1.17.0","sass-loader":"^7.1.0","standard":"^12.0.1","webpack":"^4.27.1","webpack-cli":"^3.1.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^1.7.2","yarn-upgrade-all":"^0.5.0"},"files":["dist"],"yarn-upgrade-all":{"ignore":["babel-core"]}}; +
100168 +
100169/***/ }), +
100170 +
100171/***/ "./src/diagrams/class/classDb.js": +
100172/*!***************************************!*\ +
100173 !*** ./src/diagrams/class/classDb.js ***! +
100174 \***************************************/ +
100175/*! exports provided: addClass, clear, getClass, getClasses, getRelations, addRelation, addMember, addMembers, cleanupLabel, lineType, relationType, default */ +
100176/***/ (function(module, __webpack_exports__, __webpack_require__) { +
100177 +
100178"use strict"; +
100179__webpack_require__.r(__webpack_exports__); +
100180/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addClass", function() { return addClass; }); +
100181/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
100182/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClass", function() { return getClass; }); +
100183/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClasses", function() { return getClasses; }); +
100184/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRelations", function() { return getRelations; }); +
100185/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addRelation", function() { return addRelation; }); +
100186/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMember", function() { return addMember; }); +
100187/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMembers", function() { return addMembers; }); +
100188/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cleanupLabel", function() { return cleanupLabel; }); +
100189/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lineType", function() { return lineType; }); +
100190/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "relationType", function() { return relationType; }); +
100191/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
100192 +
100193let relations = []; +
100194let classes = {}; +
100195/** +
100196 * Function called by parser when a node definition has been found. +
100197 * @param id +
100198 * @param text +
100199 * @param type +
100200 * @param style +
100201 */ +
100202 +
100203const addClass = function (id) { +
100204 if (typeof classes[id] === 'undefined') { +
100205 classes[id] = { +
100206 id: id, +
100207 methods: [], +
100208 members: [] +
100209 }; +
100210 } +
100211}; +
100212const clear = function () { +
100213 relations = []; +
100214 classes = {}; +
100215}; +
100216const getClass = function (id) { +
100217 return classes[id]; +
100218}; +
100219const getClasses = function () { +
100220 return classes; +
100221}; +
100222const getRelations = function () { +
100223 return relations; +
100224}; +
100225const addRelation = function (relation) { +
100226 _logger__WEBPACK_IMPORTED_MODULE_0__["logger"].debug('Adding relation: ' + JSON.stringify(relation)); +
100227 addClass(relation.id1); +
100228 addClass(relation.id2); +
100229 relations.push(relation); +
100230}; +
100231const addMember = function (className, member) { +
100232 const theClass = classes[className]; +
100233 +
100234 if (typeof member === 'string') { +
100235 if (member.substr(-1) === ')') { +
100236 theClass.methods.push(member); +
100237 } else { +
100238 theClass.members.push(member); +
100239 } +
100240 } +
100241}; +
100242const addMembers = function (className, MembersArr) { +
100243 if (Array.isArray(MembersArr)) { +
100244 MembersArr.forEach(member => addMember(className, member)); +
100245 } +
100246}; +
100247const cleanupLabel = function (label) { +
100248 if (label.substring(0, 1) === ':') { +
100249 return label.substr(2).trim(); +
100250 } else { +
100251 return label.trim(); +
100252 } +
100253}; +
100254const lineType = { +
100255 LINE: 0, +
100256 DOTTED_LINE: 1 +
100257}; +
100258const relationType = { +
100259 AGGREGATION: 0, +
100260 EXTENSION: 1, +
100261 COMPOSITION: 2, +
100262 DEPENDENCY: 3 +
100263}; +
100264/* harmony default export */ __webpack_exports__["default"] = ({ +
100265 addClass, +
100266 clear, +
100267 getClass, +
100268 getClasses, +
100269 getRelations, +
100270 addRelation, +
100271 addMember, +
100272 addMembers, +
100273 cleanupLabel, +
100274 lineType, +
100275 relationType +
100276}); +
100277 +
100278/***/ }), +
100279 +
100280/***/ "./src/diagrams/class/classRenderer.js": +
100281/*!*********************************************!*\ +
100282 !*** ./src/diagrams/class/classRenderer.js ***! +
100283 \*********************************************/ +
100284/*! exports provided: setConf, draw, default */ +
100285/***/ (function(module, __webpack_exports__, __webpack_require__) { +
100286 +
100287"use strict"; +
100288__webpack_require__.r(__webpack_exports__); +
100289/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
100290/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
100291/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
100292/* harmony import */ var dagre_layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dagre-layout */ "./node_modules/dagre-layout/dist/dagre-layout.core.js"); +
100293/* harmony import */ var dagre_layout__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dagre_layout__WEBPACK_IMPORTED_MODULE_1__); +
100294/* harmony import */ var graphlibrary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! graphlibrary */ "./node_modules/graphlibrary/index.js"); +
100295/* harmony import */ var graphlibrary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(graphlibrary__WEBPACK_IMPORTED_MODULE_2__); +
100296/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
100297/* harmony import */ var _classDb__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./classDb */ "./src/diagrams/class/classDb.js"); +
100298/* harmony import */ var _parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./parser/classDiagram */ "./src/diagrams/class/parser/classDiagram.js"); +
100299/* harmony import */ var _parser_classDiagram__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__); +
100300 +
100301 +
100302 +
100303 +
100304 +
100305 +
100306_parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__["parser"].yy = _classDb__WEBPACK_IMPORTED_MODULE_4__["default"]; +
100307const idCache = {}; +
100308let classCnt = 0; +
100309const conf = { +
100310 dividerMargin: 10, +
100311 padding: 5, +
100312 textHeight: 10 // Todo optimize +
100313 +
100314}; +
100315 +
100316const getGraphId = function (label) { +
100317 const keys = Object.keys(idCache); +
100318 +
100319 for (let i = 0; i < keys.length; i++) { +
100320 if (idCache[keys[i]].label === label) { +
100321 return keys[i]; +
100322 } +
100323 } +
100324 +
100325 return undefined; +
100326}; +
100327/** +
100328 * Setup arrow head and define the marker. The result is appended to the svg. +
100329 */ +
100330 +
100331 +
100332const insertMarkers = function (elem) { +
100333 elem.append('defs').append('marker').attr('id', 'extensionStart').attr('class', 'extension').attr('refX', 0).attr('refY', 7).attr('markerWidth', 190).attr('markerHeight', 240).attr('orient', 'auto').append('path').attr('d', 'M 1,7 L18,13 V 1 Z'); +
100334 elem.append('defs').append('marker').attr('id', 'extensionEnd').attr('refX', 19).attr('refY', 7).attr('markerWidth', 20).attr('markerHeight', 28).attr('orient', 'auto').append('path').attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead +
100335 +
100336 elem.append('defs').append('marker').attr('id', 'compositionStart').attr('class', 'extension').attr('refX', 0).attr('refY', 7).attr('markerWidth', 190).attr('markerHeight', 240).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); +
100337 elem.append('defs').append('marker').attr('id', 'compositionEnd').attr('refX', 19).attr('refY', 7).attr('markerWidth', 20).attr('markerHeight', 28).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); +
100338 elem.append('defs').append('marker').attr('id', 'aggregationStart').attr('class', 'extension').attr('refX', 0).attr('refY', 7).attr('markerWidth', 190).attr('markerHeight', 240).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); +
100339 elem.append('defs').append('marker').attr('id', 'aggregationEnd').attr('refX', 19).attr('refY', 7).attr('markerWidth', 20).attr('markerHeight', 28).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z'); +
100340 elem.append('defs').append('marker').attr('id', 'dependencyStart').attr('class', 'extension').attr('refX', 0).attr('refY', 7).attr('markerWidth', 190).attr('markerHeight', 240).attr('orient', 'auto').append('path').attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z'); +
100341 elem.append('defs').append('marker').attr('id', 'dependencyEnd').attr('refX', 19).attr('refY', 7).attr('markerWidth', 20).attr('markerHeight', 28).attr('orient', 'auto').append('path').attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z'); +
100342}; +
100343 +
100344let edgeCount = 0; +
100345let total = 0; +
100346 +
100347const drawEdge = function (elem, path, relation) { +
100348 const getRelationType = function (type) { +
100349 switch (type) { +
100350 case _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].relationType.AGGREGATION: +
100351 return 'aggregation'; +
100352 +
100353 case _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].relationType.EXTENSION: +
100354 return 'extension'; +
100355 +
100356 case _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].relationType.COMPOSITION: +
100357 return 'composition'; +
100358 +
100359 case _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].relationType.DEPENDENCY: +
100360 return 'dependency'; +
100361 } +
100362 }; +
100363 +
100364 path.points = path.points.filter(p => !Number.isNaN(p.y)); // The data for our line +
100365 +
100366 const lineData = path.points; // This is the accessor function we talked about above +
100367 +
100368 const lineFunction = d3__WEBPACK_IMPORTED_MODULE_0__["line"]().x(function (d) { +
100369 return d.x; +
100370 }).y(function (d) { +
100371 return d.y; +
100372 }).curve(d3__WEBPACK_IMPORTED_MODULE_0__["curveBasis"]); +
100373 const svgPath = elem.append('path').attr('d', lineFunction(lineData)).attr('id', 'edge' + edgeCount).attr('class', 'relation'); +
100374 let url = ''; +
100375 +
100376 if (conf.arrowMarkerAbsolute) { +
100377 url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; +
100378 url = url.replace(/\(/g, '\\('); +
100379 url = url.replace(/\)/g, '\\)'); +
100380 } +
100381 +
100382 if (relation.relation.type1 !== 'none') { +
100383 svgPath.attr('marker-start', 'url(' + url + '#' + getRelationType(relation.relation.type1) + 'Start' + ')'); +
100384 } +
100385 +
100386 if (relation.relation.type2 !== 'none') { +
100387 svgPath.attr('marker-end', 'url(' + url + '#' + getRelationType(relation.relation.type2) + 'End' + ')'); +
100388 } +
100389 +
100390 let x, y; +
100391 const l = path.points.length; +
100392 +
100393 if (l % 2 !== 0 && l > 1) { +
100394 const p1 = path.points[Math.floor(l / 2)]; +
100395 const p2 = path.points[Math.ceil(l / 2)]; +
100396 x = (p1.x + p2.x) / 2; +
100397 y = (p1.y + p2.y) / 2; +
100398 } else { +
100399 const p = path.points[Math.floor(l / 2)]; +
100400 x = p.x; +
100401 y = p.y; +
100402 } +
100403 +
100404 if (typeof relation.title !== 'undefined') { +
100405 const g = elem.append('g').attr('class', 'classLabel'); +
100406 const label = g.append('text').attr('class', 'label').attr('x', x).attr('y', y).attr('fill', 'red').attr('text-anchor', 'middle').text(relation.title); +
100407 window.label = label; +
100408 const bounds = label.node().getBBox(); +
100409 g.insert('rect', ':first-child').attr('class', 'box').attr('x', bounds.x - conf.padding / 2).attr('y', bounds.y - conf.padding / 2).attr('width', bounds.width + conf.padding).attr('height', bounds.height + conf.padding); +
100410 } +
100411 +
100412 edgeCount++; +
100413}; +
100414 +
100415const drawClass = function (elem, classDef) { +
100416 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].info('Rendering class ' + classDef); +
100417 +
100418 const addTspan = function (textEl, txt, isFirst) { +
100419 const tSpan = textEl.append('tspan').attr('x', conf.padding).text(txt); +
100420 +
100421 if (!isFirst) { +
100422 tSpan.attr('dy', conf.textHeight); +
100423 } +
100424 }; +
100425 +
100426 const id = 'classId' + classCnt % total; +
100427 const classInfo = { +
100428 id: id, +
100429 label: classDef.id, +
100430 width: 0, +
100431 height: 0 +
100432 }; +
100433 const g = elem.append('g').attr('id', id).attr('class', 'classGroup'); +
100434 const title = g.append('text').attr('x', conf.padding).attr('y', conf.textHeight + conf.padding).text(classDef.id); +
100435 const titleHeight = title.node().getBBox().height; +
100436 const membersLine = g.append('line') // text label for the x axis +
100437 .attr('x1', 0).attr('y1', conf.padding + titleHeight + conf.dividerMargin / 2).attr('y2', conf.padding + titleHeight + conf.dividerMargin / 2); +
100438 const members = g.append('text') // text label for the x axis +
100439 .attr('x', conf.padding).attr('y', titleHeight + conf.dividerMargin + conf.textHeight).attr('fill', 'white').attr('class', 'classText'); +
100440 let isFirst = true; +
100441 classDef.members.forEach(function (member) { +
100442 addTspan(members, member, isFirst); +
100443 isFirst = false; +
100444 }); +
100445 const membersBox = members.node().getBBox(); +
100446 const methodsLine = g.append('line') // text label for the x axis +
100447 .attr('x1', 0).attr('y1', conf.padding + titleHeight + conf.dividerMargin + membersBox.height).attr('y2', conf.padding + titleHeight + conf.dividerMargin + membersBox.height); +
100448 const methods = g.append('text') // text label for the x axis +
100449 .attr('x', conf.padding).attr('y', titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight).attr('fill', 'white').attr('class', 'classText'); +
100450 isFirst = true; +
100451 classDef.methods.forEach(function (method) { +
100452 addTspan(methods, method, isFirst); +
100453 isFirst = false; +
100454 }); +
100455 const classBox = g.node().getBBox(); +
100456 g.insert('rect', ':first-child').attr('x', 0).attr('y', 0).attr('width', classBox.width + 2 * conf.padding).attr('height', classBox.height + conf.padding + 0.5 * conf.dividerMargin); +
100457 membersLine.attr('x2', classBox.width + 2 * conf.padding); +
100458 methodsLine.attr('x2', classBox.width + 2 * conf.padding); +
100459 classInfo.width = classBox.width + 2 * conf.padding; +
100460 classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin; +
100461 idCache[id] = classInfo; +
100462 classCnt++; +
100463 return classInfo; +
100464}; +
100465 +
100466const setConf = function (cnf) { +
100467 const keys = Object.keys(cnf); +
100468 keys.forEach(function (key) { +
100469 conf[key] = cnf[key]; +
100470 }); +
100471}; +
100472/** +
100473 * Draws a flowchart in the tag with id: id based on the graph definition in text. +
100474 * @param text +
100475 * @param id +
100476 */ +
100477 +
100478const draw = function (text, id) { +
100479 _parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__["parser"].yy.clear(); +
100480 _parser_classDiagram__WEBPACK_IMPORTED_MODULE_5__["parser"].parse(text); +
100481 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].info('Rendering diagram ' + text); /// / Fetch the default direction, use TD if none was found +
100482 +
100483 const diagram = d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id='${id}']`); +
100484 insertMarkers(diagram); // Layout graph, Create a new directed graph +
100485 +
100486 const g = new graphlibrary__WEBPACK_IMPORTED_MODULE_2___default.a.Graph({ +
100487 multigraph: true +
100488 }); // Set an object for the graph label +
100489 +
100490 g.setGraph({ +
100491 isMultiGraph: true +
100492 }); // Default to assigning a new object as a label for each new edge. +
100493 +
100494 g.setDefaultEdgeLabel(function () { +
100495 return {}; +
100496 }); +
100497 const classes = _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].getClasses(); +
100498 const keys = Object.keys(classes); +
100499 total = keys.length; +
100500 +
100501 for (let i = 0; i < keys.length; i++) { +
100502 const classDef = classes[keys[i]]; +
100503 const node = drawClass(diagram, classDef); // Add nodes to the graph. The first argument is the node id. The second is +
100504 // metadata about the node. In this case we're going to add labels to each of +
100505 // our nodes. +
100506 +
100507 g.setNode(node.id, node); +
100508 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].info('Org height: ' + node.height); +
100509 } +
100510 +
100511 const relations = _classDb__WEBPACK_IMPORTED_MODULE_4__["default"].getRelations(); +
100512 relations.forEach(function (relation) { +
100513 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].info('tjoho' + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation)); +
100514 g.setEdge(getGraphId(relation.id1), getGraphId(relation.id2), { +
100515 relation: relation +
100516 }); +
100517 }); +
100518 dagre_layout__WEBPACK_IMPORTED_MODULE_1___default.a.layout(g); +
100519 g.nodes().forEach(function (v) { +
100520 if (typeof v !== 'undefined' && typeof g.node(v) !== 'undefined') { +
100521 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Node ' + v + ': ' + JSON.stringify(g.node(v))); +
100522 d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#' + v).attr('transform', 'translate(' + (g.node(v).x - g.node(v).width / 2) + ',' + (g.node(v).y - g.node(v).height / 2) + ' )'); +
100523 } +
100524 }); +
100525 g.edges().forEach(function (e) { +
100526 if (typeof e !== 'undefined' && typeof g.edge(e) !== 'undefined') { +
100527 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(g.edge(e))); +
100528 drawEdge(diagram, g.edge(e), g.edge(e).relation); +
100529 } +
100530 }); +
100531 diagram.attr('height', '100%'); +
100532 diagram.attr('width', '100%'); +
100533 diagram.attr('viewBox', '0 0 ' + (g.graph().width + 20) + ' ' + (g.graph().height + 20)); +
100534}; +
100535/* harmony default export */ __webpack_exports__["default"] = ({ +
100536 setConf, +
100537 draw +
100538}); +
100539 +
100540/***/ }), +
100541 +
100542/***/ "./src/diagrams/class/parser/classDiagram.js": +
100543/*!***************************************************!*\ +
100544 !*** ./src/diagrams/class/parser/classDiagram.js ***! +
100545 \***************************************************/ +
100546/*! no static exports found */ +
100547/***/ (function(module, exports, __webpack_require__) { +
100548 +
100549/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
100550 +
100551/* +
100552 Returns a Parser object of the following structure: +
100553 +
100554 Parser: { +
100555 yy: {} +
100556 } +
100557 +
100558 Parser.prototype: { +
100559 yy: {}, +
100560 trace: function(), +
100561 symbols_: {associative list: name ==> number}, +
100562 terminals_: {associative list: number ==> name}, +
100563 productions_: [...], +
100564 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
100565 table: [...], +
100566 defaultActions: {...}, +
100567 parseError: function(str, hash), +
100568 parse: function(input), +
100569 +
100570 lexer: { +
100571 EOF: 1, +
100572 parseError: function(str, hash), +
100573 setInput: function(input), +
100574 input: function(), +
100575 unput: function(str), +
100576 more: function(), +
100577 less: function(n), +
100578 pastInput: function(), +
100579 upcomingInput: function(), +
100580 showPosition: function(), +
100581 test_match: function(regex_match_array, rule_index), +
100582 next: function(), +
100583 lex: function(), +
100584 begin: function(condition), +
100585 popState: function(), +
100586 _currentRules: function(), +
100587 topState: function(), +
100588 pushState: function(condition), +
100589 +
100590 options: { +
100591 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
100592 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
100593 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
100594 }, +
100595 +
100596 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
100597 rules: [...], +
100598 conditions: {associative list: name ==> set}, +
100599 } +
100600 } +
100601 +
100602 +
100603 token location info (@$, _$, etc.): { +
100604 first_line: n, +
100605 last_line: n, +
100606 first_column: n, +
100607 last_column: n, +
100608 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
100609 } +
100610 +
100611 +
100612 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
100613 text: (matched text) +
100614 token: (the produced terminal token, if any) +
100615 line: (yylineno) +
100616 } +
100617 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
100618 loc: (yylloc) +
100619 expected: (string describing the set of expected tokens) +
100620 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
100621 } +
100622*/ +
100623var parser = function () { +
100624 var o = function (k, v, o, l) { +
100625 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
100626 +
100627 return o; +
100628 }, +
100629 $V0 = [1, 11], +
100630 $V1 = [1, 12], +
100631 $V2 = [1, 13], +
100632 $V3 = [1, 15], +
100633 $V4 = [1, 16], +
100634 $V5 = [1, 17], +
100635 $V6 = [6, 8], +
100636 $V7 = [1, 26], +
100637 $V8 = [1, 27], +
100638 $V9 = [1, 28], +
100639 $Va = [1, 29], +
100640 $Vb = [1, 30], +
100641 $Vc = [1, 31], +
100642 $Vd = [6, 8, 13, 17, 23, 26, 27, 28, 29, 30, 31], +
100643 $Ve = [6, 8, 13, 17, 23, 26, 27, 28, 29, 30, 31, 45, 46, 47], +
100644 $Vf = [23, 45, 46, 47], +
100645 $Vg = [23, 30, 31, 45, 46, 47], +
100646 $Vh = [23, 26, 27, 28, 29, 45, 46, 47], +
100647 $Vi = [6, 8, 13], +
100648 $Vj = [1, 46]; +
100649 +
100650 var parser = { +
100651 trace: function trace() {}, +
100652 yy: {}, +
100653 symbols_: { +
100654 "error": 2, +
100655 "mermaidDoc": 3, +
100656 "graphConfig": 4, +
100657 "CLASS_DIAGRAM": 5, +
100658 "NEWLINE": 6, +
100659 "statements": 7, +
100660 "EOF": 8, +
100661 "statement": 9, +
100662 "className": 10, +
100663 "alphaNumToken": 11, +
100664 "relationStatement": 12, +
100665 "LABEL": 13, +
100666 "classStatement": 14, +
100667 "methodStatement": 15, +
100668 "CLASS": 16, +
100669 "STRUCT_START": 17, +
100670 "members": 18, +
100671 "STRUCT_STOP": 19, +
100672 "MEMBER": 20, +
100673 "SEPARATOR": 21, +
100674 "relation": 22, +
100675 "STR": 23, +
100676 "relationType": 24, +
100677 "lineType": 25, +
100678 "AGGREGATION": 26, +
100679 "EXTENSION": 27, +
100680 "COMPOSITION": 28, +
100681 "DEPENDENCY": 29, +
100682 "LINE": 30, +
100683 "DOTTED_LINE": 31, +
100684 "commentToken": 32, +
100685 "textToken": 33, +
100686 "graphCodeTokens": 34, +
100687 "textNoTagsToken": 35, +
100688 "TAGSTART": 36, +
100689 "TAGEND": 37, +
100690 "==": 38, +
100691 "--": 39, +
100692 "PCT": 40, +
100693 "DEFAULT": 41, +
100694 "SPACE": 42, +
100695 "MINUS": 43, +
100696 "keywords": 44, +
100697 "UNICODE_TEXT": 45, +
100698 "NUM": 46, +
100699 "ALPHA": 47, +
100700 "$accept": 0, +
100701 "$end": 1 +
100702 }, +
100703 terminals_: { +
100704 2: "error", +
100705 5: "CLASS_DIAGRAM", +
100706 6: "NEWLINE", +
100707 8: "EOF", +
100708 13: "LABEL", +
100709 16: "CLASS", +
100710 17: "STRUCT_START", +
100711 19: "STRUCT_STOP", +
100712 20: "MEMBER", +
100713 21: "SEPARATOR", +
100714 23: "STR", +
100715 26: "AGGREGATION", +
100716 27: "EXTENSION", +
100717 28: "COMPOSITION", +
100718 29: "DEPENDENCY", +
100719 30: "LINE", +
100720 31: "DOTTED_LINE", +
100721 34: "graphCodeTokens", +
100722 36: "TAGSTART", +
100723 37: "TAGEND", +
100724 38: "==", +
100725 39: "--", +
100726 40: "PCT", +
100727 41: "DEFAULT", +
100728 42: "SPACE", +
100729 43: "MINUS", +
100730 44: "keywords", +
100731 45: "UNICODE_TEXT", +
100732 46: "NUM", +
100733 47: "ALPHA" +
100734 }, +
100735 productions_: [0, [3, 1], [4, 4], [7, 1], [7, 2], [7, 3], [10, 2], [10, 1], [9, 1], [9, 2], [9, 1], [9, 1], [14, 2], [14, 5], [18, 1], [18, 2], [15, 1], [15, 2], [15, 1], [15, 1], [12, 3], [12, 4], [12, 4], [12, 5], [22, 3], [22, 2], [22, 2], [22, 1], [24, 1], [24, 1], [24, 1], [24, 1], [25, 1], [25, 1], [32, 1], [32, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1], [35, 1], [35, 1], [35, 1], [35, 1], [11, 1], [11, 1], [11, 1]], +
100736 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
100737 /* action[1] */ +
100738 , $$ +
100739 /* vstack */ +
100740 , _$ +
100741 /* lstack */ +
100742 ) { +
100743 /* this == yyval */ +
100744 var $0 = $$.length - 1; +
100745 +
100746 switch (yystate) { +
100747 case 6: +
100748 this.$ = $$[$0 - 1] + $$[$0]; +
100749 break; +
100750 +
100751 case 7: +
100752 this.$ = $$[$0]; +
100753 break; +
100754 +
100755 case 8: +
100756 yy.addRelation($$[$0]); +
100757 break; +
100758 +
100759 case 9: +
100760 $$[$0 - 1].title = yy.cleanupLabel($$[$0]); +
100761 yy.addRelation($$[$0 - 1]); +
100762 break; +
100763 +
100764 case 12: +
100765 yy.addClass($$[$0]); +
100766 break; +
100767 +
100768 case 13: +
100769 /*console.log($$[$0-3],JSON.stringify($$[$0-1]));*/ +
100770 yy.addClass($$[$0 - 3]); +
100771 yy.addMembers($$[$0 - 3], $$[$0 - 1]); +
100772 break; +
100773 +
100774 case 14: +
100775 this.$ = [$$[$0]]; +
100776 break; +
100777 +
100778 case 15: +
100779 $$[$0].push($$[$0 - 1]); +
100780 this.$ = $$[$0]; +
100781 break; +
100782 +
100783 case 16: +
100784 /*console.log('Rel found',$$[$0]);*/ +
100785 break; +
100786 +
100787 case 17: +
100788 yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0])); +
100789 break; +
100790 +
100791 case 18: +
100792 console.warn('Member', $$[$0]); +
100793 break; +
100794 +
100795 case 19: +
100796 /*console.log('sep found',$$[$0]);*/ +
100797 break; +
100798 +
100799 case 20: +
100800 this.$ = { +
100801 'id1': $$[$0 - 2], +
100802 'id2': $$[$0], +
100803 relation: $$[$0 - 1], +
100804 relationTitle1: 'none', +
100805 relationTitle2: 'none' +
100806 }; +
100807 break; +
100808 +
100809 case 21: +
100810 this.$ = { +
100811 id1: $$[$0 - 3], +
100812 id2: $$[$0], +
100813 relation: $$[$0 - 1], +
100814 relationTitle1: $$[$0 - 2], +
100815 relationTitle2: 'none' +
100816 }; +
100817 break; +
100818 +
100819 case 22: +
100820 this.$ = { +
100821 id1: $$[$0 - 3], +
100822 id2: $$[$0], +
100823 relation: $$[$0 - 2], +
100824 relationTitle1: 'none', +
100825 relationTitle2: $$[$0 - 1] +
100826 }; +
100827 break; +
100828 +
100829 case 23: +
100830 this.$ = { +
100831 id1: $$[$0 - 4], +
100832 id2: $$[$0], +
100833 relation: $$[$0 - 2], +
100834 relationTitle1: $$[$0 - 3], +
100835 relationTitle2: $$[$0 - 1] +
100836 }; +
100837 break; +
100838 +
100839 case 24: +
100840 this.$ = { +
100841 type1: $$[$0 - 2], +
100842 type2: $$[$0], +
100843 lineType: $$[$0 - 1] +
100844 }; +
100845 break; +
100846 +
100847 case 25: +
100848 this.$ = { +
100849 type1: 'none', +
100850 type2: $$[$0], +
100851 lineType: $$[$0 - 1] +
100852 }; +
100853 break; +
100854 +
100855 case 26: +
100856 this.$ = { +
100857 type1: $$[$0 - 1], +
100858 type2: 'none', +
100859 lineType: $$[$0] +
100860 }; +
100861 break; +
100862 +
100863 case 27: +
100864 this.$ = { +
100865 type1: 'none', +
100866 type2: 'none', +
100867 lineType: $$[$0] +
100868 }; +
100869 break; +
100870 +
100871 case 28: +
100872 this.$ = yy.relationType.AGGREGATION; +
100873 break; +
100874 +
100875 case 29: +
100876 this.$ = yy.relationType.EXTENSION; +
100877 break; +
100878 +
100879 case 30: +
100880 this.$ = yy.relationType.COMPOSITION; +
100881 break; +
100882 +
100883 case 31: +
100884 this.$ = yy.relationType.DEPENDENCY; +
100885 break; +
100886 +
100887 case 32: +
100888 this.$ = yy.lineType.LINE; +
100889 break; +
100890 +
100891 case 33: +
100892 this.$ = yy.lineType.DOTTED_LINE; +
100893 break; +
100894 } +
100895 }, +
100896 table: [{ +
100897 3: 1, +
100898 4: 2, +
100899 5: [1, 3] +
100900 }, { +
100901 1: [3] +
100902 }, { +
100903 1: [2, 1] +
100904 }, { +
100905 6: [1, 4] +
100906 }, { +
100907 7: 5, +
100908 9: 6, +
100909 10: 10, +
100910 11: 14, +
100911 12: 7, +
100912 14: 8, +
100913 15: 9, +
100914 16: $V0, +
100915 20: $V1, +
100916 21: $V2, +
100917 45: $V3, +
100918 46: $V4, +
100919 47: $V5 +
100920 }, { +
100921 8: [1, 18] +
100922 }, { +
100923 6: [1, 19], +
100924 8: [2, 3] +
100925 }, o($V6, [2, 8], { +
100926 13: [1, 20] +
100927 }), o($V6, [2, 10]), o($V6, [2, 11]), o($V6, [2, 16], { +
100928 22: 21, +
100929 24: 24, +
100930 25: 25, +
100931 13: [1, 23], +
100932 23: [1, 22], +
100933 26: $V7, +
100934 27: $V8, +
100935 28: $V9, +
100936 29: $Va, +
100937 30: $Vb, +
100938 31: $Vc +
100939 }), { +
100940 10: 32, +
100941 11: 14, +
100942 45: $V3, +
100943 46: $V4, +
100944 47: $V5 +
100945 }, o($V6, [2, 18]), o($V6, [2, 19]), o($Vd, [2, 7], { +
100946 11: 14, +
100947 10: 33, +
100948 45: $V3, +
100949 46: $V4, +
100950 47: $V5 +
100951 }), o($Ve, [2, 47]), o($Ve, [2, 48]), o($Ve, [2, 49]), { +
100952 1: [2, 2] +
100953 }, { +
100954 7: 34, +
100955 8: [2, 4], +
100956 9: 6, +
100957 10: 10, +
100958 11: 14, +
100959 12: 7, +
100960 14: 8, +
100961 15: 9, +
100962 16: $V0, +
100963 20: $V1, +
100964 21: $V2, +
100965 45: $V3, +
100966 46: $V4, +
100967 47: $V5 +
100968 }, o($V6, [2, 9]), { +
100969 10: 35, +
100970 11: 14, +
100971 23: [1, 36], +
100972 45: $V3, +
100973 46: $V4, +
100974 47: $V5 +
100975 }, { +
100976 22: 37, +
100977 24: 24, +
100978 25: 25, +
100979 26: $V7, +
100980 27: $V8, +
100981 28: $V9, +
100982 29: $Va, +
100983 30: $Vb, +
100984 31: $Vc +
100985 }, o($V6, [2, 17]), { +
100986 25: 38, +
100987 30: $Vb, +
100988 31: $Vc +
100989 }, o($Vf, [2, 27], { +
100990 24: 39, +
100991 26: $V7, +
100992 27: $V8, +
100993 28: $V9, +
100994 29: $Va +
100995 }), o($Vg, [2, 28]), o($Vg, [2, 29]), o($Vg, [2, 30]), o($Vg, [2, 31]), o($Vh, [2, 32]), o($Vh, [2, 33]), o($V6, [2, 12], { +
100996 17: [1, 40] +
100997 }), o($Vd, [2, 6]), { +
100998 8: [2, 5] +
100999 }, o($Vi, [2, 20]), { +
101000 10: 41, +
101001 11: 14, +
101002 45: $V3, +
101003 46: $V4, +
101004 47: $V5 +
101005 }, { +
101006 10: 42, +
101007 11: 14, +
101008 23: [1, 43], +
101009 45: $V3, +
101010 46: $V4, +
101011 47: $V5 +
101012 }, o($Vf, [2, 26], { +
101013 24: 44, +
101014 26: $V7, +
101015 27: $V8, +
101016 28: $V9, +
101017 29: $Va +
101018 }), o($Vf, [2, 25]), { +
101019 18: 45, +
101020 20: $Vj +
101021 }, o($Vi, [2, 22]), o($Vi, [2, 21]), { +
101022 10: 47, +
101023 11: 14, +
101024 45: $V3, +
101025 46: $V4, +
101026 47: $V5 +
101027 }, o($Vf, [2, 24]), { +
101028 19: [1, 48] +
101029 }, { +
101030 18: 49, +
101031 19: [2, 14], +
101032 20: $Vj +
101033 }, o($Vi, [2, 23]), o($V6, [2, 13]), { +
101034 19: [2, 15] +
101035 }], +
101036 defaultActions: { +
101037 2: [2, 1], +
101038 18: [2, 2], +
101039 34: [2, 5], +
101040 49: [2, 15] +
101041 }, +
101042 parseError: function parseError(str, hash) { +
101043 if (hash.recoverable) { +
101044 this.trace(str); +
101045 } else { +
101046 var error = new Error(str); +
101047 error.hash = hash; +
101048 throw error; +
101049 } +
101050 }, +
101051 parse: function parse(input) { +
101052 var self = this, +
101053 stack = [0], +
101054 tstack = [], +
101055 vstack = [null], +
101056 lstack = [], +
101057 table = this.table, +
101058 yytext = '', +
101059 yylineno = 0, +
101060 yyleng = 0, +
101061 recovering = 0, +
101062 TERROR = 2, +
101063 EOF = 1; +
101064 var args = lstack.slice.call(arguments, 1); +
101065 var lexer = Object.create(this.lexer); +
101066 var sharedState = { +
101067 yy: {} +
101068 }; +
101069 +
101070 for (var k in this.yy) { +
101071 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
101072 sharedState.yy[k] = this.yy[k]; +
101073 } +
101074 } +
101075 +
101076 lexer.setInput(input, sharedState.yy); +
101077 sharedState.yy.lexer = lexer; +
101078 sharedState.yy.parser = this; +
101079 +
101080 if (typeof lexer.yylloc == 'undefined') { +
101081 lexer.yylloc = {}; +
101082 } +
101083 +
101084 var yyloc = lexer.yylloc; +
101085 lstack.push(yyloc); +
101086 var ranges = lexer.options && lexer.options.ranges; +
101087 +
101088 if (typeof sharedState.yy.parseError === 'function') { +
101089 this.parseError = sharedState.yy.parseError; +
101090 } else { +
101091 this.parseError = Object.getPrototypeOf(this).parseError; +
101092 } +
101093 +
101094 function popStack(n) { +
101095 stack.length = stack.length - 2 * n; +
101096 vstack.length = vstack.length - n; +
101097 lstack.length = lstack.length - n; +
101098 } +
101099 +
101100 function lex() { +
101101 var token; +
101102 token = tstack.pop() || lexer.lex() || EOF; +
101103 +
101104 if (typeof token !== 'number') { +
101105 if (token instanceof Array) { +
101106 tstack = token; +
101107 token = tstack.pop(); +
101108 } +
101109 +
101110 token = self.symbols_[token] || token; +
101111 } +
101112 +
101113 return token; +
101114 } +
101115 +
101116 var symbol, +
101117 preErrorSymbol, +
101118 state, +
101119 action, +
101120 a, +
101121 r, +
101122 yyval = {}, +
101123 p, +
101124 len, +
101125 newState, +
101126 expected; +
101127 +
101128 while (true) { +
101129 state = stack[stack.length - 1]; +
101130 +
101131 if (this.defaultActions[state]) { +
101132 action = this.defaultActions[state]; +
101133 } else { +
101134 if (symbol === null || typeof symbol == 'undefined') { +
101135 symbol = lex(); +
101136 } +
101137 +
101138 action = table[state] && table[state][symbol]; +
101139 } +
101140 +
101141 if (typeof action === 'undefined' || !action.length || !action[0]) { +
101142 var errStr = ''; +
101143 expected = []; +
101144 +
101145 for (p in table[state]) { +
101146 if (this.terminals_[p] && p > TERROR) { +
101147 expected.push('\'' + this.terminals_[p] + '\''); +
101148 } +
101149 } +
101150 +
101151 if (lexer.showPosition) { +
101152 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
101153 } else { +
101154 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
101155 } +
101156 +
101157 this.parseError(errStr, { +
101158 text: lexer.match, +
101159 token: this.terminals_[symbol] || symbol, +
101160 line: lexer.yylineno, +
101161 loc: yyloc, +
101162 expected: expected +
101163 }); +
101164 } +
101165 +
101166 if (action[0] instanceof Array && action.length > 1) { +
101167 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
101168 } +
101169 +
101170 switch (action[0]) { +
101171 case 1: +
101172 stack.push(symbol); +
101173 vstack.push(lexer.yytext); +
101174 lstack.push(lexer.yylloc); +
101175 stack.push(action[1]); +
101176 symbol = null; +
101177 +
101178 if (!preErrorSymbol) { +
101179 yyleng = lexer.yyleng; +
101180 yytext = lexer.yytext; +
101181 yylineno = lexer.yylineno; +
101182 yyloc = lexer.yylloc; +
101183 +
101184 if (recovering > 0) { +
101185 recovering--; +
101186 } +
101187 } else { +
101188 symbol = preErrorSymbol; +
101189 preErrorSymbol = null; +
101190 } +
101191 +
101192 break; +
101193 +
101194 case 2: +
101195 len = this.productions_[action[1]][1]; +
101196 yyval.$ = vstack[vstack.length - len]; +
101197 yyval._$ = { +
101198 first_line: lstack[lstack.length - (len || 1)].first_line, +
101199 last_line: lstack[lstack.length - 1].last_line, +
101200 first_column: lstack[lstack.length - (len || 1)].first_column, +
101201 last_column: lstack[lstack.length - 1].last_column +
101202 }; +
101203 +
101204 if (ranges) { +
101205 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
101206 } +
101207 +
101208 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
101209 +
101210 if (typeof r !== 'undefined') { +
101211 return r; +
101212 } +
101213 +
101214 if (len) { +
101215 stack = stack.slice(0, -1 * len * 2); +
101216 vstack = vstack.slice(0, -1 * len); +
101217 lstack = lstack.slice(0, -1 * len); +
101218 } +
101219 +
101220 stack.push(this.productions_[action[1]][0]); +
101221 vstack.push(yyval.$); +
101222 lstack.push(yyval._$); +
101223 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
101224 stack.push(newState); +
101225 break; +
101226 +
101227 case 3: +
101228 return true; +
101229 } +
101230 } +
101231 +
101232 return true; +
101233 } +
101234 }; +
101235 /* generated by jison-lex 0.3.4 */ +
101236 +
101237 var lexer = function () { +
101238 var lexer = { +
101239 EOF: 1, +
101240 parseError: function parseError(str, hash) { +
101241 if (this.yy.parser) { +
101242 this.yy.parser.parseError(str, hash); +
101243 } else { +
101244 throw new Error(str); +
101245 } +
101246 }, +
101247 // resets the lexer, sets new input +
101248 setInput: function (input, yy) { +
101249 this.yy = yy || this.yy || {}; +
101250 this._input = input; +
101251 this._more = this._backtrack = this.done = false; +
101252 this.yylineno = this.yyleng = 0; +
101253 this.yytext = this.matched = this.match = ''; +
101254 this.conditionStack = ['INITIAL']; +
101255 this.yylloc = { +
101256 first_line: 1, +
101257 first_column: 0, +
101258 last_line: 1, +
101259 last_column: 0 +
101260 }; +
101261 +
101262 if (this.options.ranges) { +
101263 this.yylloc.range = [0, 0]; +
101264 } +
101265 +
101266 this.offset = 0; +
101267 return this; +
101268 }, +
101269 // consumes and returns one char from the input +
101270 input: function () { +
101271 var ch = this._input[0]; +
101272 this.yytext += ch; +
101273 this.yyleng++; +
101274 this.offset++; +
101275 this.match += ch; +
101276 this.matched += ch; +
101277 var lines = ch.match(/(?:\r\n?|\n).*/g); +
101278 +
101279 if (lines) { +
101280 this.yylineno++; +
101281 this.yylloc.last_line++; +
101282 } else { +
101283 this.yylloc.last_column++; +
101284 } +
101285 +
101286 if (this.options.ranges) { +
101287 this.yylloc.range[1]++; +
101288 } +
101289 +
101290 this._input = this._input.slice(1); +
101291 return ch; +
101292 }, +
101293 // unshifts one char (or a string) into the input +
101294 unput: function (ch) { +
101295 var len = ch.length; +
101296 var lines = ch.split(/(?:\r\n?|\n)/g); +
101297 this._input = ch + this._input; +
101298 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
101299 +
101300 this.offset -= len; +
101301 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
101302 this.match = this.match.substr(0, this.match.length - 1); +
101303 this.matched = this.matched.substr(0, this.matched.length - 1); +
101304 +
101305 if (lines.length - 1) { +
101306 this.yylineno -= lines.length - 1; +
101307 } +
101308 +
101309 var r = this.yylloc.range; +
101310 this.yylloc = { +
101311 first_line: this.yylloc.first_line, +
101312 last_line: this.yylineno + 1, +
101313 first_column: this.yylloc.first_column, +
101314 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
101315 }; +
101316 +
101317 if (this.options.ranges) { +
101318 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
101319 } +
101320 +
101321 this.yyleng = this.yytext.length; +
101322 return this; +
101323 }, +
101324 // When called from action, caches matched text and appends it on next action +
101325 more: function () { +
101326 this._more = true; +
101327 return this; +
101328 }, +
101329 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
101330 reject: function () { +
101331 if (this.options.backtrack_lexer) { +
101332 this._backtrack = true; +
101333 } else { +
101334 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
101335 text: "", +
101336 token: null, +
101337 line: this.yylineno +
101338 }); +
101339 } +
101340 +
101341 return this; +
101342 }, +
101343 // retain first n characters of the match +
101344 less: function (n) { +
101345 this.unput(this.match.slice(n)); +
101346 }, +
101347 // displays already matched input, i.e. for error messages +
101348 pastInput: function () { +
101349 var past = this.matched.substr(0, this.matched.length - this.match.length); +
101350 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
101351 }, +
101352 // displays upcoming input, i.e. for error messages +
101353 upcomingInput: function () { +
101354 var next = this.match; +
101355 +
101356 if (next.length < 20) { +
101357 next += this._input.substr(0, 20 - next.length); +
101358 } +
101359 +
101360 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
101361 }, +
101362 // displays the character position where the lexing error occurred, i.e. for error messages +
101363 showPosition: function () { +
101364 var pre = this.pastInput(); +
101365 var c = new Array(pre.length + 1).join("-"); +
101366 return pre + this.upcomingInput() + "\n" + c + "^"; +
101367 }, +
101368 // test the lexed token: return FALSE when not a match, otherwise return token +
101369 test_match: function (match, indexed_rule) { +
101370 var token, lines, backup; +
101371 +
101372 if (this.options.backtrack_lexer) { +
101373 // save context +
101374 backup = { +
101375 yylineno: this.yylineno, +
101376 yylloc: { +
101377 first_line: this.yylloc.first_line, +
101378 last_line: this.last_line, +
101379 first_column: this.yylloc.first_column, +
101380 last_column: this.yylloc.last_column +
101381 }, +
101382 yytext: this.yytext, +
101383 match: this.match, +
101384 matches: this.matches, +
101385 matched: this.matched, +
101386 yyleng: this.yyleng, +
101387 offset: this.offset, +
101388 _more: this._more, +
101389 _input: this._input, +
101390 yy: this.yy, +
101391 conditionStack: this.conditionStack.slice(0), +
101392 done: this.done +
101393 }; +
101394 +
101395 if (this.options.ranges) { +
101396 backup.yylloc.range = this.yylloc.range.slice(0); +
101397 } +
101398 } +
101399 +
101400 lines = match[0].match(/(?:\r\n?|\n).*/g); +
101401 +
101402 if (lines) { +
101403 this.yylineno += lines.length; +
101404 } +
101405 +
101406 this.yylloc = { +
101407 first_line: this.yylloc.last_line, +
101408 last_line: this.yylineno + 1, +
101409 first_column: this.yylloc.last_column, +
101410 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
101411 }; +
101412 this.yytext += match[0]; +
101413 this.match += match[0]; +
101414 this.matches = match; +
101415 this.yyleng = this.yytext.length; +
101416 +
101417 if (this.options.ranges) { +
101418 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
101419 } +
101420 +
101421 this._more = false; +
101422 this._backtrack = false; +
101423 this._input = this._input.slice(match[0].length); +
101424 this.matched += match[0]; +
101425 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
101426 +
101427 if (this.done && this._input) { +
101428 this.done = false; +
101429 } +
101430 +
101431 if (token) { +
101432 return token; +
101433 } else if (this._backtrack) { +
101434 // recover context +
101435 for (var k in backup) { +
101436 this[k] = backup[k]; +
101437 } +
101438 +
101439 return false; // rule action called reject() implying the next rule should be tested instead. +
101440 } +
101441 +
101442 return false; +
101443 }, +
101444 // return next match in input +
101445 next: function () { +
101446 if (this.done) { +
101447 return this.EOF; +
101448 } +
101449 +
101450 if (!this._input) { +
101451 this.done = true; +
101452 } +
101453 +
101454 var token, match, tempMatch, index; +
101455 +
101456 if (!this._more) { +
101457 this.yytext = ''; +
101458 this.match = ''; +
101459 } +
101460 +
101461 var rules = this._currentRules(); +
101462 +
101463 for (var i = 0; i < rules.length; i++) { +
101464 tempMatch = this._input.match(this.rules[rules[i]]); +
101465 +
101466 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
101467 match = tempMatch; +
101468 index = i; +
101469 +
101470 if (this.options.backtrack_lexer) { +
101471 token = this.test_match(tempMatch, rules[i]); +
101472 +
101473 if (token !== false) { +
101474 return token; +
101475 } else if (this._backtrack) { +
101476 match = false; +
101477 continue; // rule action called reject() implying a rule MISmatch. +
101478 } else { +
101479 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
101480 return false; +
101481 } +
101482 } else if (!this.options.flex) { +
101483 break; +
101484 } +
101485 } +
101486 } +
101487 +
101488 if (match) { +
101489 token = this.test_match(match, rules[index]); +
101490 +
101491 if (token !== false) { +
101492 return token; +
101493 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
101494 +
101495 +
101496 return false; +
101497 } +
101498 +
101499 if (this._input === "") { +
101500 return this.EOF; +
101501 } else { +
101502 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
101503 text: "", +
101504 token: null, +
101505 line: this.yylineno +
101506 }); +
101507 } +
101508 }, +
101509 // return next match that has a token +
101510 lex: function lex() { +
101511 var r = this.next(); +
101512 +
101513 if (r) { +
101514 return r; +
101515 } else { +
101516 return this.lex(); +
101517 } +
101518 }, +
101519 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
101520 begin: function begin(condition) { +
101521 this.conditionStack.push(condition); +
101522 }, +
101523 // pop the previously active lexer condition state off the condition stack +
101524 popState: function popState() { +
101525 var n = this.conditionStack.length - 1; +
101526 +
101527 if (n > 0) { +
101528 return this.conditionStack.pop(); +
101529 } else { +
101530 return this.conditionStack[0]; +
101531 } +
101532 }, +
101533 // produce the lexer rule set which is active for the currently active lexer condition state +
101534 _currentRules: function _currentRules() { +
101535 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
101536 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
101537 } else { +
101538 return this.conditions["INITIAL"].rules; +
101539 } +
101540 }, +
101541 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
101542 topState: function topState(n) { +
101543 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
101544 +
101545 if (n >= 0) { +
101546 return this.conditionStack[n]; +
101547 } else { +
101548 return "INITIAL"; +
101549 } +
101550 }, +
101551 // alias for begin(condition) +
101552 pushState: function pushState(condition) { +
101553 this.begin(condition); +
101554 }, +
101555 // return the number of states currently on the stack +
101556 stateStackSize: function stateStackSize() { +
101557 return this.conditionStack.length; +
101558 }, +
101559 options: {}, +
101560 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
101561 var YYSTATE = YY_START; +
101562 +
101563 switch ($avoiding_name_collisions) { +
101564 case 0: +
101565 /* do nothing */ +
101566 break; +
101567 +
101568 case 1: +
101569 return 6; +
101570 break; +
101571 +
101572 case 2: +
101573 /* skip whitespace */ +
101574 break; +
101575 +
101576 case 3: +
101577 return 5; +
101578 break; +
101579 +
101580 case 4: +
101581 this.begin("struct"); +
101582 /*console.log('Starting struct');*/ +
101583 +
101584 return 17; +
101585 break; +
101586 +
101587 case 5: +
101588 /*console.log('Ending struct');*/ +
101589 this.popState(); +
101590 return 19; +
101591 break; +
101592 +
101593 case 6: +
101594 /* nothing */ +
101595 break; +
101596 +
101597 case 7: +
101598 /*console.log('lex-member: ' + yy_.yytext);*/ +
101599 return "MEMBER"; +
101600 break; +
101601 +
101602 case 8: +
101603 return 16; +
101604 break; +
101605 +
101606 case 9: +
101607 this.begin("string"); +
101608 break; +
101609 +
101610 case 10: +
101611 this.popState(); +
101612 break; +
101613 +
101614 case 11: +
101615 return "STR"; +
101616 break; +
101617 +
101618 case 12: +
101619 return 27; +
101620 break; +
101621 +
101622 case 13: +
101623 return 27; +
101624 break; +
101625 +
101626 case 14: +
101627 return 29; +
101628 break; +
101629 +
101630 case 15: +
101631 return 29; +
101632 break; +
101633 +
101634 case 16: +
101635 return 28; +
101636 break; +
101637 +
101638 case 17: +
101639 return 26; +
101640 break; +
101641 +
101642 case 18: +
101643 return 30; +
101644 break; +
101645 +
101646 case 19: +
101647 return 31; +
101648 break; +
101649 +
101650 case 20: +
101651 return 13; +
101652 break; +
101653 +
101654 case 21: +
101655 return 43; +
101656 break; +
101657 +
101658 case 22: +
101659 return 'DOT'; +
101660 break; +
101661 +
101662 case 23: +
101663 return 'PLUS'; +
101664 break; +
101665 +
101666 case 24: +
101667 return 40; +
101668 break; +
101669 +
101670 case 25: +
101671 return 'EQUALS'; +
101672 break; +
101673 +
101674 case 26: +
101675 return 'EQUALS'; +
101676 break; +
101677 +
101678 case 27: +
101679 return 47; +
101680 break; +
101681 +
101682 case 28: +
101683 return 'PUNCTUATION'; +
101684 break; +
101685 +
101686 case 29: +
101687 return 46; +
101688 break; +
101689 +
101690 case 30: +
101691 return 45; +
101692 break; +
101693 +
101694 case 31: +
101695 return 42; +
101696 break; +
101697 +
101698 case 32: +
101699 return 8; +
101700 break; +
101701 } +
101702 }, +
101703 rules: [/^(?:%%[^\n]*)/, /^(?:\n+)/, /^(?:\s+)/, /^(?:classDiagram\b)/, /^(?:[\{])/, /^(?:\})/, /^(?:[\n])/, /^(?:[^\{\}\n]*)/, /^(?:class\b)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:--)/, /^(?:\.\.)/, /^(?::[^#\n;]+)/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:[A-Za-z]+)/, /^(?:[!"#$%&'*+,-.`?\\_\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:$)/], +
101704 conditions: { +
101705 "string": { +
101706 "rules": [10, 11], +
101707 "inclusive": false +
101708 }, +
101709 "struct": { +
101710 "rules": [5, 6, 7], +
101711 "inclusive": false +
101712 }, +
101713 "INITIAL": { +
101714 "rules": [0, 1, 2, 3, 4, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], +
101715 "inclusive": true +
101716 } +
101717 } +
101718 }; +
101719 return lexer; +
101720 }(); +
101721 +
101722 parser.lexer = lexer; +
101723 +
101724 function Parser() { +
101725 this.yy = {}; +
101726 } +
101727 +
101728 Parser.prototype = parser; +
101729 parser.Parser = Parser; +
101730 return new Parser(); +
101731}(); +
101732 +
101733if (true) { +
101734 exports.parser = parser; +
101735 exports.Parser = parser.Parser; +
101736 +
101737 exports.parse = function () { +
101738 return parser.parse.apply(parser, arguments); +
101739 }; +
101740 +
101741 exports.main = function commonjsMain(args) { +
101742 if (!args[1]) { +
101743 console.log('Usage: ' + args[0] + ' FILE'); +
101744 process.exit(1); +
101745 } +
101746 +
101747 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
101748 +
101749 return exports.parser.parse(source); +
101750 }; +
101751 +
101752 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
101753 exports.main(process.argv.slice(1)); +
101754 } +
101755} +
101756/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
101757 +
101758/***/ }), +
101759 +
101760/***/ "./src/diagrams/flowchart/flowDb.js": +
101761/*!******************************************!*\ +
101762 !*** ./src/diagrams/flowchart/flowDb.js ***! +
101763 \******************************************/ +
101764/*! exports provided: addVertex, addLink, updateLinkInterpolate, updateLink, addClass, setDirection, setClass, setLink, getTooltip, setClickEvent, bindFunctions, getDirection, getVertices, getEdges, getClasses, clear, defaultStyle, addSubGraph, getDepthFirstPos, indexNodes, getSubGraphs, default */ +
101765/***/ (function(module, __webpack_exports__, __webpack_require__) { +
101766 +
101767"use strict"; +
101768__webpack_require__.r(__webpack_exports__); +
101769/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addVertex", function() { return addVertex; }); +
101770/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addLink", function() { return addLink; }); +
101771/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateLinkInterpolate", function() { return updateLinkInterpolate; }); +
101772/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateLink", function() { return updateLink; }); +
101773/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addClass", function() { return addClass; }); +
101774/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDirection", function() { return setDirection; }); +
101775/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setClass", function() { return setClass; }); +
101776/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLink", function() { return setLink; }); +
101777/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTooltip", function() { return getTooltip; }); +
101778/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setClickEvent", function() { return setClickEvent; }); +
101779/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindFunctions", function() { return bindFunctions; }); +
101780/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDirection", function() { return getDirection; }); +
101781/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVertices", function() { return getVertices; }); +
101782/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEdges", function() { return getEdges; }); +
101783/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClasses", function() { return getClasses; }); +
101784/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
101785/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultStyle", function() { return defaultStyle; }); +
101786/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSubGraph", function() { return addSubGraph; }); +
101787/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDepthFirstPos", function() { return getDepthFirstPos; }); +
101788/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "indexNodes", function() { return indexNodes; }); +
101789/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSubGraphs", function() { return getSubGraphs; }); +
101790/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
101791/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
101792/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils */ "./src/utils.js"); +
101793 +
101794 +
101795 +
101796let vertices = {}; +
101797let edges = []; +
101798let classes = []; +
101799let subGraphs = []; +
101800let subGraphLookup = {}; +
101801let tooltips = {}; +
101802let subCount = 0; +
101803let direction; // Functions to be run after graph rendering +
101804 +
101805let funs = []; +
101806/** +
101807 * Function called by parser when a node definition has been found +
101808 * @param id +
101809 * @param text +
101810 * @param type +
101811 * @param style +
101812 * @param classes +
101813 */ +
101814 +
101815const addVertex = function (id, text, type, style, classes) { +
101816 let txt; +
101817 +
101818 if (typeof id === 'undefined') { +
101819 return; +
101820 } +
101821 +
101822 if (id.trim().length === 0) { +
101823 return; +
101824 } +
101825 +
101826 if (typeof vertices[id] === 'undefined') { +
101827 vertices[id] = { +
101828 id: id, +
101829 styles: [], +
101830 classes: [] +
101831 }; +
101832 } +
101833 +
101834 if (typeof text !== 'undefined') { +
101835 txt = text.trim(); // strip quotes if string starts and exnds with a quote +
101836 +
101837 if (txt[0] === '"' && txt[txt.length - 1] === '"') { +
101838 txt = txt.substring(1, txt.length - 1); +
101839 } +
101840 +
101841 vertices[id].text = txt; +
101842 } +
101843 +
101844 if (typeof type !== 'undefined') { +
101845 vertices[id].type = type; +
101846 } +
101847 +
101848 if (typeof style !== 'undefined') { +
101849 if (style !== null) { +
101850 style.forEach(function (s) { +
101851 vertices[id].styles.push(s); +
101852 }); +
101853 } +
101854 } +
101855 +
101856 if (typeof classes !== 'undefined') { +
101857 if (classes !== null) { +
101858 classes.forEach(function (s) { +
101859 vertices[id].classes.push(s); +
101860 }); +
101861 } +
101862 } +
101863}; +
101864/** +
101865 * Function called by parser when a link/edge definition has been found +
101866 * @param start +
101867 * @param end +
101868 * @param type +
101869 * @param linktext +
101870 */ +
101871 +
101872const addLink = function (start, end, type, linktext) { +
101873 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].info('Got edge...', start, end); +
101874 const edge = { +
101875 start: start, +
101876 end: end, +
101877 type: undefined, +
101878 text: '' +
101879 }; +
101880 linktext = type.text; +
101881 +
101882 if (typeof linktext !== 'undefined') { +
101883 edge.text = linktext.trim(); // strip quotes if string starts and exnds with a quote +
101884 +
101885 if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { +
101886 edge.text = edge.text.substring(1, edge.text.length - 1); +
101887 } +
101888 } +
101889 +
101890 if (typeof type !== 'undefined') { +
101891 edge.type = type.type; +
101892 edge.stroke = type.stroke; +
101893 } +
101894 +
101895 edges.push(edge); +
101896}; +
101897/** +
101898 * Updates a link's line interpolation algorithm +
101899 * @param pos +
101900 * @param interpolate +
101901 */ +
101902 +
101903const updateLinkInterpolate = function (positions, interp) { +
101904 positions.forEach(function (pos) { +
101905 if (pos === 'default') { +
101906 edges.defaultInterpolate = interp; +
101907 } else { +
101908 edges[pos].interpolate = interp; +
101909 } +
101910 }); +
101911}; +
101912/** +
101913 * Updates a link with a style +
101914 * @param pos +
101915 * @param style +
101916 */ +
101917 +
101918const updateLink = function (positions, style) { +
101919 positions.forEach(function (pos) { +
101920 if (pos === 'default') { +
101921 edges.defaultStyle = style; +
101922 } else { +
101923 if (_utils__WEBPACK_IMPORTED_MODULE_2__["default"].isSubstringInArray('fill', style) === -1) { +
101924 style.push('fill:none'); +
101925 } +
101926 +
101927 edges[pos].style = style; +
101928 } +
101929 }); +
101930}; +
101931const addClass = function (id, style) { +
101932 if (typeof classes[id] === 'undefined') { +
101933 classes[id] = { +
101934 id: id, +
101935 styles: [] +
101936 }; +
101937 } +
101938 +
101939 if (typeof style !== 'undefined') { +
101940 if (style !== null) { +
101941 style.forEach(function (s) { +
101942 classes[id].styles.push(s); +
101943 }); +
101944 } +
101945 } +
101946}; +
101947/** +
101948 * Called by parser when a graph definition is found, stores the direction of the chart. +
101949 * @param dir +
101950 */ +
101951 +
101952const setDirection = function (dir) { +
101953 direction = dir; +
101954}; +
101955/** +
101956 * Called by parser when a special node is found, e.g. a clickable element. +
101957 * @param ids Comma separated list of ids +
101958 * @param className Class to add +
101959 */ +
101960 +
101961const setClass = function (ids, className) { +
101962 ids.split(',').forEach(function (id) { +
101963 if (typeof vertices[id] !== 'undefined') { +
101964 vertices[id].classes.push(className); +
101965 } +
101966 +
101967 if (typeof subGraphLookup[id] !== 'undefined') { +
101968 subGraphLookup[id].classes.push(className); +
101969 } +
101970 }); +
101971}; +
101972 +
101973const setTooltip = function (ids, tooltip) { +
101974 ids.split(',').forEach(function (id) { +
101975 if (typeof tooltip !== 'undefined') { +
101976 tooltips[id] = tooltip; +
101977 } +
101978 }); +
101979}; +
101980 +
101981const setClickFun = function (id, functionName) { +
101982 if (typeof functionName === 'undefined') { +
101983 return; +
101984 } +
101985 +
101986 if (typeof vertices[id] !== 'undefined') { +
101987 funs.push(function (element) { +
101988 const elem = d3__WEBPACK_IMPORTED_MODULE_0__["select"](element).select(`[id="${id}"]`); +
101989 +
101990 if (elem !== null) { +
101991 elem.on('click', function () { +
101992 window[functionName](id); +
101993 }); +
101994 } +
101995 }); +
101996 } +
101997}; +
101998/** +
101999 * Called by parser when a link is found. Adds the URL to the vertex data. +
102000 * @param ids Comma separated list of ids +
102001 * @param linkStr URL to create a link for +
102002 * @param tooltip Tooltip for the clickable element +
102003 */ +
102004 +
102005 +
102006const setLink = function (ids, linkStr, tooltip) { +
102007 ids.split(',').forEach(function (id) { +
102008 if (typeof vertices[id] !== 'undefined') { +
102009 vertices[id].link = linkStr; +
102010 } +
102011 }); +
102012 setTooltip(ids, tooltip); +
102013 setClass(ids, 'clickable'); +
102014}; +
102015const getTooltip = function (id) { +
102016 return tooltips[id]; +
102017}; +
102018/** +
102019 * Called by parser when a click definition is found. Registers an event handler. +
102020 * @param ids Comma separated list of ids +
102021 * @param functionName Function to be called on click +
102022 * @param tooltip Tooltip for the clickable element +
102023 */ +
102024 +
102025const setClickEvent = function (ids, functionName, tooltip) { +
102026 ids.split(',').forEach(function (id) { +
102027 setClickFun(id, functionName); +
102028 }); +
102029 setTooltip(ids, tooltip); +
102030 setClass(ids, 'clickable'); +
102031}; +
102032const bindFunctions = function (element) { +
102033 funs.forEach(function (fun) { +
102034 fun(element); +
102035 }); +
102036}; +
102037const getDirection = function () { +
102038 return direction; +
102039}; +
102040/** +
102041 * Retrieval function for fetching the found nodes after parsing has completed. +
102042 * @returns {{}|*|vertices} +
102043 */ +
102044 +
102045const getVertices = function () { +
102046 return vertices; +
102047}; +
102048/** +
102049 * Retrieval function for fetching the found links after parsing has completed. +
102050 * @returns {{}|*|edges} +
102051 */ +
102052 +
102053const getEdges = function () { +
102054 return edges; +
102055}; +
102056/** +
102057 * Retrieval function for fetching the found class definitions after parsing has completed. +
102058 * @returns {{}|*|classes} +
102059 */ +
102060 +
102061const getClasses = function () { +
102062 return classes; +
102063}; +
102064 +
102065const setupToolTips = function (element) { +
102066 let tooltipElem = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('.mermaidTooltip'); +
102067 +
102068 if ((tooltipElem._groups || tooltipElem)[0][0] === null) { +
102069 tooltipElem = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('body').append('div').attr('class', 'mermaidTooltip').style('opacity', 0); +
102070 } +
102071 +
102072 const svg = d3__WEBPACK_IMPORTED_MODULE_0__["select"](element).select('svg'); +
102073 const nodes = svg.selectAll('g.node'); +
102074 nodes.on('mouseover', function () { +
102075 const el = d3__WEBPACK_IMPORTED_MODULE_0__["select"](this); +
102076 const title = el.attr('title'); // Dont try to draw a tooltip if no data is provided +
102077 +
102078 if (title === null) { +
102079 return; +
102080 } +
102081 +
102082 const rect = this.getBoundingClientRect(); +
102083 tooltipElem.transition().duration(200).style('opacity', '.9'); +
102084 tooltipElem.html(el.attr('title')).style('left', rect.left + (rect.right - rect.left) / 2 + 'px').style('top', rect.top - 14 + document.body.scrollTop + 'px'); +
102085 el.classed('hover', true); +
102086 }).on('mouseout', function () { +
102087 tooltipElem.transition().duration(500).style('opacity', 0); +
102088 const el = d3__WEBPACK_IMPORTED_MODULE_0__["select"](this); +
102089 el.classed('hover', false); +
102090 }); +
102091}; +
102092 +
102093funs.push(setupToolTips); +
102094/** +
102095 * Clears the internal graph db so that a new graph can be parsed. +
102096 */ +
102097 +
102098const clear = function () { +
102099 vertices = {}; +
102100 classes = {}; +
102101 edges = []; +
102102 funs = []; +
102103 funs.push(setupToolTips); +
102104 subGraphs = []; +
102105 subGraphLookup = {}; +
102106 subCount = 0; +
102107 tooltips = []; +
102108}; +
102109/** +
102110 * +
102111 * @returns {string} +
102112 */ +
102113 +
102114const defaultStyle = function () { +
102115 return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'; +
102116}; +
102117/** +
102118 * Clears the internal graph db so that a new graph can be parsed. +
102119 */ +
102120 +
102121const addSubGraph = function (id, list, title) { +
102122 function uniq(a) { +
102123 const prims = { +
102124 'boolean': {}, +
102125 'number': {}, +
102126 'string': {} +
102127 }; +
102128 const objs = []; +
102129 return a.filter(function (item) { +
102130 const type = typeof item; +
102131 +
102132 if (item.trim() === '') { +
102133 return false; +
102134 } +
102135 +
102136 if (type in prims) { +
102137 return prims[type].hasOwnProperty(item) ? false : prims[type][item] = true; +
102138 } else { +
102139 return objs.indexOf(item) >= 0 ? false : objs.push(item); +
102140 } +
102141 }); +
102142 } +
102143 +
102144 let nodeList = []; +
102145 nodeList = uniq(nodeList.concat.apply(nodeList, list)); +
102146 id = id || 'subGraph' + subCount; +
102147 title = title || ''; +
102148 subCount = subCount + 1; +
102149 const subGraph = { +
102150 id: id, +
102151 nodes: nodeList, +
102152 title: title.trim(), +
102153 classes: [] +
102154 }; +
102155 subGraphs.push(subGraph); +
102156 subGraphLookup[id] = subGraph; +
102157 return id; +
102158}; +
102159 +
102160const getPosForId = function (id) { +
102161 for (let i = 0; i < subGraphs.length; i++) { +
102162 if (subGraphs[i].id === id) { +
102163 return i; +
102164 } +
102165 } +
102166 +
102167 return -1; +
102168}; +
102169 +
102170let secCount = -1; +
102171const posCrossRef = []; +
102172 +
102173const indexNodes2 = function (id, pos) { +
102174 const nodes = subGraphs[pos].nodes; +
102175 secCount = secCount + 1; +
102176 +
102177 if (secCount > 2000) { +
102178 return; +
102179 } +
102180 +
102181 posCrossRef[secCount] = pos; // Check if match +
102182 +
102183 if (subGraphs[pos].id === id) { +
102184 return { +
102185 result: true, +
102186 count: 0 +
102187 }; +
102188 } +
102189 +
102190 let count = 0; +
102191 let posCount = 1; +
102192 +
102193 while (count < nodes.length) { +
102194 const childPos = getPosForId(nodes[count]); // Ignore regular nodes (pos will be -1) +
102195 +
102196 if (childPos >= 0) { +
102197 const res = indexNodes2(id, childPos); +
102198 +
102199 if (res.result) { +
102200 return { +
102201 result: true, +
102202 count: posCount + res.count +
102203 }; +
102204 } else { +
102205 posCount = posCount + res.count; +
102206 } +
102207 } +
102208 +
102209 count = count + 1; +
102210 } +
102211 +
102212 return { +
102213 result: false, +
102214 count: posCount +
102215 }; +
102216}; +
102217 +
102218const getDepthFirstPos = function (pos) { +
102219 return posCrossRef[pos]; +
102220}; +
102221const indexNodes = function () { +
102222 secCount = -1; +
102223 +
102224 if (subGraphs.length > 0) { +
102225 indexNodes2('none', subGraphs.length - 1, 0); +
102226 } +
102227}; +
102228const getSubGraphs = function () { +
102229 return subGraphs; +
102230}; +
102231/* harmony default export */ __webpack_exports__["default"] = ({ +
102232 addVertex, +
102233 addLink, +
102234 updateLinkInterpolate, +
102235 updateLink, +
102236 addClass, +
102237 setDirection, +
102238 setClass, +
102239 getTooltip, +
102240 setClickEvent, +
102241 setLink, +
102242 bindFunctions, +
102243 getDirection, +
102244 getVertices, +
102245 getEdges, +
102246 getClasses, +
102247 clear, +
102248 defaultStyle, +
102249 addSubGraph, +
102250 getDepthFirstPos, +
102251 indexNodes, +
102252 getSubGraphs +
102253}); +
102254 +
102255/***/ }), +
102256 +
102257/***/ "./src/diagrams/flowchart/flowRenderer.js": +
102258/*!************************************************!*\ +
102259 !*** ./src/diagrams/flowchart/flowRenderer.js ***! +
102260 \************************************************/ +
102261/*! exports provided: setConf, addVertices, addEdges, getClasses, draw, default */ +
102262/***/ (function(module, __webpack_exports__, __webpack_require__) { +
102263 +
102264"use strict"; +
102265__webpack_require__.r(__webpack_exports__); +
102266/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
102267/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addVertices", function() { return addVertices; }); +
102268/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addEdges", function() { return addEdges; }); +
102269/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClasses", function() { return getClasses; }); +
102270/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
102271/* harmony import */ var graphlibrary__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! graphlibrary */ "./node_modules/graphlibrary/index.js"); +
102272/* harmony import */ var graphlibrary__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(graphlibrary__WEBPACK_IMPORTED_MODULE_0__); +
102273/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
102274/* harmony import */ var _flowDb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./flowDb */ "./src/diagrams/flowchart/flowDb.js"); +
102275/* harmony import */ var _parser_flow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parser/flow */ "./src/diagrams/flowchart/parser/flow.js"); +
102276/* harmony import */ var _parser_flow__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_parser_flow__WEBPACK_IMPORTED_MODULE_3__); +
102277/* harmony import */ var dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dagre-d3-renderer */ "./node_modules/dagre-d3-renderer/dist/dagre-d3.core.js"); +
102278/* harmony import */ var dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4__); +
102279/* harmony import */ var dagre_d3_renderer_lib_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! dagre-d3-renderer/lib/label/add-html-label.js */ "./node_modules/dagre-d3-renderer/lib/label/add-html-label.js"); +
102280/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
102281/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils */ "./src/utils.js"); +
102282 +
102283 +
102284 +
102285 +
102286 +
102287 +
102288 +
102289 +
102290const conf = {}; +
102291const setConf = function (cnf) { +
102292 const keys = Object.keys(cnf); +
102293 +
102294 for (let i = 0; i < keys.length; i++) { +
102295 conf[keys[i]] = cnf[keys[i]]; +
102296 } +
102297}; +
102298/** +
102299 * Function that adds the vertices found in the graph definition to the graph to be rendered. +
102300 * @param vert Object containing the vertices. +
102301 * @param g The graph that is to be drawn. +
102302 */ +
102303 +
102304const addVertices = function (vert, g, svgId) { +
102305 const svg = d3__WEBPACK_IMPORTED_MODULE_1__["select"](`[id="${svgId}"]`); +
102306 const keys = Object.keys(vert); +
102307 +
102308 const styleFromStyleArr = function (styleStr, arr) { +
102309 // Create a compound style definition from the style definitions found for the node in the graph definition +
102310 for (let i = 0; i < arr.length; i++) { +
102311 if (typeof arr[i] !== 'undefined') { +
102312 styleStr = styleStr + arr[i] + ';'; +
102313 } +
102314 } +
102315 +
102316 return styleStr; +
102317 }; // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition +
102318 +
102319 +
102320 keys.forEach(function (id) { +
102321 const vertex = vert[id]; +
102322 /** +
102323 * Variable for storing the classes for the vertex +
102324 * @type {string} +
102325 */ +
102326 +
102327 let classStr = ''; +
102328 +
102329 if (vertex.classes.length > 0) { +
102330 classStr = vertex.classes.join(' '); +
102331 } +
102332 /** +
102333 * Variable for storing the extracted style for the vertex +
102334 * @type {string} +
102335 */ +
102336 +
102337 +
102338 let style = ''; // Create a compound style definition from the style definitions found for the node in the graph definition +
102339 +
102340 style = styleFromStyleArr(style, vertex.styles); // Use vertex id as text in the box if no text is provided by the graph definition +
102341 +
102342 let vertexText = vertex.text !== undefined ? vertex.text : vertex.id; // We create a SVG label, either by delegating to addHtmlLabel or manually +
102343 +
102344 let vertexNode; +
102345 +
102346 if (conf.htmlLabels) { +
102347 // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that? +
102348 const node = { +
102349 label: vertexText.replace(/fa[lrsb]?:fa-[\w-]+/g, s => `<i class='${s.replace(':', ' ')}'></i>`) +
102350 }; +
102351 vertexNode = Object(dagre_d3_renderer_lib_label_add_html_label_js__WEBPACK_IMPORTED_MODULE_5__["default"])(svg, node).node(); +
102352 vertexNode.parentNode.removeChild(vertexNode); +
102353 } else { +
102354 const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); +
102355 const rows = vertexText.split(/<br[/]{0,1}>/); +
102356 +
102357 for (let j = 0; j < rows.length; j++) { +
102358 const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan'); +
102359 tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve'); +
102360 tspan.setAttribute('dy', '1em'); +
102361 tspan.setAttribute('x', '1'); +
102362 tspan.textContent = rows[j]; +
102363 svgLabel.appendChild(tspan); +
102364 } +
102365 +
102366 vertexNode = svgLabel; +
102367 } // If the node has a link, we wrap it in a SVG link +
102368 +
102369 +
102370 if (vertex.link) { +
102371 const link = document.createElementNS('http://www.w3.org/2000/svg', 'a'); +
102372 link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link); +
102373 link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener'); +
102374 link.appendChild(vertexNode); +
102375 vertexNode = link; +
102376 } +
102377 +
102378 let radious = 0; +
102379 let _shape = ''; // Set the shape based parameters +
102380 +
102381 switch (vertex.type) { +
102382 case 'round': +
102383 radious = 5; +
102384 _shape = 'rect'; +
102385 break; +
102386 +
102387 case 'square': +
102388 _shape = 'rect'; +
102389 break; +
102390 +
102391 case 'diamond': +
102392 _shape = 'question'; +
102393 break; +
102394 +
102395 case 'odd': +
102396 _shape = 'rect_left_inv_arrow'; +
102397 break; +
102398 +
102399 case 'odd_right': +
102400 _shape = 'rect_left_inv_arrow'; +
102401 break; +
102402 +
102403 case 'circle': +
102404 _shape = 'circle'; +
102405 break; +
102406 +
102407 case 'ellipse': +
102408 _shape = 'ellipse'; +
102409 break; +
102410 +
102411 case 'group': +
102412 _shape = 'rect'; +
102413 break; +
102414 +
102415 default: +
102416 _shape = 'rect'; +
102417 } // Add the node +
102418 +
102419 +
102420 g.setNode(vertex.id, { +
102421 labelType: 'svg', +
102422 shape: _shape, +
102423 label: vertexNode, +
102424 rx: radious, +
102425 ry: radious, +
102426 'class': classStr, +
102427 style: style, +
102428 id: vertex.id +
102429 }); +
102430 }); +
102431}; +
102432/** +
102433 * Add edges to graph based on parsed graph defninition +
102434 * @param {Object} edges The edges to add to the graph +
102435 * @param {Object} g The graph object +
102436 */ +
102437 +
102438const addEdges = function (edges, g) { +
102439 let cnt = 0; +
102440 let defaultStyle; +
102441 +
102442 if (typeof edges.defaultStyle !== 'undefined') { +
102443 defaultStyle = edges.defaultStyle.toString().replace(/,/g, ';'); +
102444 } +
102445 +
102446 edges.forEach(function (edge) { +
102447 cnt++; +
102448 const edgeData = {}; // Set link type for rendering +
102449 +
102450 if (edge.type === 'arrow_open') { +
102451 edgeData.arrowhead = 'none'; +
102452 } else { +
102453 edgeData.arrowhead = 'normal'; +
102454 } +
102455 +
102456 let style = ''; +
102457 +
102458 if (typeof edge.style !== 'undefined') { +
102459 edge.style.forEach(function (s) { +
102460 style = style + s + ';'; +
102461 }); +
102462 } else { +
102463 switch (edge.stroke) { +
102464 case 'normal': +
102465 style = 'fill:none'; +
102466 +
102467 if (typeof defaultStyle !== 'undefined') { +
102468 style = defaultStyle; +
102469 } +
102470 +
102471 break; +
102472 +
102473 case 'dotted': +
102474 style = 'stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;'; +
102475 break; +
102476 +
102477 case 'thick': +
102478 style = 'stroke: #333; stroke-width: 3.5px;fill:none'; +
102479 break; +
102480 } +
102481 } +
102482 +
102483 edgeData.style = style; +
102484 +
102485 if (typeof edge.interpolate !== 'undefined') { +
102486 edgeData.curve = Object(_utils__WEBPACK_IMPORTED_MODULE_7__["interpolateToCurve"])(edge.interpolate, d3__WEBPACK_IMPORTED_MODULE_1__["curveLinear"]); +
102487 } else if (typeof edges.defaultInterpolate !== 'undefined') { +
102488 edgeData.curve = Object(_utils__WEBPACK_IMPORTED_MODULE_7__["interpolateToCurve"])(edges.defaultInterpolate, d3__WEBPACK_IMPORTED_MODULE_1__["curveLinear"]); +
102489 } else { +
102490 edgeData.curve = Object(_utils__WEBPACK_IMPORTED_MODULE_7__["interpolateToCurve"])(conf.curve, d3__WEBPACK_IMPORTED_MODULE_1__["curveLinear"]); +
102491 } +
102492 +
102493 if (typeof edge.text === 'undefined') { +
102494 if (typeof edge.style !== 'undefined') { +
102495 edgeData.arrowheadStyle = 'fill: #333'; +
102496 } +
102497 } else { +
102498 edgeData.arrowheadStyle = 'fill: #333'; +
102499 +
102500 if (typeof edge.style === 'undefined') { +
102501 edgeData.labelpos = 'c'; +
102502 +
102503 if (conf.htmlLabels) { +
102504 edgeData.labelType = 'html'; +
102505 edgeData.label = '<span class="edgeLabel">' + edge.text + '</span>'; +
102506 } else { +
102507 edgeData.labelType = 'text'; +
102508 edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none'; +
102509 edgeData.label = edge.text.replace(/<br>/g, '\n'); +
102510 } +
102511 } else { +
102512 edgeData.label = edge.text.replace(/<br>/g, '\n'); +
102513 } +
102514 } // Add the edge to the graph +
102515 +
102516 +
102517 g.setEdge(edge.start, edge.end, edgeData, cnt); +
102518 }); +
102519}; +
102520/** +
102521 * Returns the all the styles from classDef statements in the graph definition. +
102522 * @returns {object} classDef styles +
102523 */ +
102524 +
102525const getClasses = function (text) { +
102526 _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].clear(); +
102527 const parser = _parser_flow__WEBPACK_IMPORTED_MODULE_3___default.a.parser; +
102528 parser.yy = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"]; // Parse the graph definition +
102529 +
102530 parser.parse(text); +
102531 return _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getClasses(); +
102532}; +
102533/** +
102534 * Draws a flowchart in the tag with id: id based on the graph definition in text. +
102535 * @param text +
102536 * @param id +
102537 */ +
102538 +
102539const draw = function (text, id) { +
102540 _logger__WEBPACK_IMPORTED_MODULE_6__["logger"].debug('Drawing flowchart'); +
102541 _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].clear(); +
102542 const parser = _parser_flow__WEBPACK_IMPORTED_MODULE_3___default.a.parser; +
102543 parser.yy = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"]; // Parse the graph definition +
102544 +
102545 try { +
102546 parser.parse(text); +
102547 } catch (err) { +
102548 _logger__WEBPACK_IMPORTED_MODULE_6__["logger"].debug('Parsing failed'); +
102549 } // Fetch the default direction, use TD if none was found +
102550 +
102551 +
102552 let dir = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getDirection(); +
102553 +
102554 if (typeof dir === 'undefined') { +
102555 dir = 'TD'; +
102556 } // Create the input mermaid.graph +
102557 +
102558 +
102559 const g = new graphlibrary__WEBPACK_IMPORTED_MODULE_0___default.a.Graph({ +
102560 multigraph: true, +
102561 compound: true +
102562 }).setGraph({ +
102563 rankdir: dir, +
102564 marginx: 20, +
102565 marginy: 20 +
102566 }).setDefaultEdgeLabel(function () { +
102567 return {}; +
102568 }); +
102569 let subG; +
102570 const subGraphs = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getSubGraphs(); +
102571 +
102572 for (let i = subGraphs.length - 1; i >= 0; i--) { +
102573 subG = subGraphs[i]; +
102574 _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].addVertex(subG.id, subG.title, 'group', undefined, subG.classes); +
102575 } // Fetch the verices/nodes and edges/links from the parsed graph definition +
102576 +
102577 +
102578 const vert = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getVertices(); +
102579 const edges = _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getEdges(); +
102580 let i = 0; +
102581 +
102582 for (i = subGraphs.length - 1; i >= 0; i--) { +
102583 subG = subGraphs[i]; +
102584 d3__WEBPACK_IMPORTED_MODULE_1__["selectAll"]('cluster').append('text'); +
102585 +
102586 for (let j = 0; j < subG.nodes.length; j++) { +
102587 g.setParent(subG.nodes[j], subG.id); +
102588 } +
102589 } +
102590 +
102591 addVertices(vert, g, id); +
102592 addEdges(edges, g); // Create the renderer +
102593 +
102594 const Render = dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.render; +
102595 const render = new Render(); // Add custom shape for rhombus type of boc (decision) +
102596 +
102597 render.shapes().question = function (parent, bbox, node) { +
102598 const w = bbox.width; +
102599 const h = bbox.height; +
102600 const s = (w + h) * 0.9; +
102601 const points = [{ +
102602 x: s / 2, +
102603 y: 0 +
102604 }, { +
102605 x: s, +
102606 y: -s / 2 +
102607 }, { +
102608 x: s / 2, +
102609 y: -s +
102610 }, { +
102611 x: 0, +
102612 y: -s / 2 +
102613 }]; +
102614 const shapeSvg = parent.insert('polygon', ':first-child').attr('points', points.map(function (d) { +
102615 return d.x + ',' + d.y; +
102616 }).join(' ')).attr('rx', 5).attr('ry', 5).attr('transform', 'translate(' + -s / 2 + ',' + s * 2 / 4 + ')'); +
102617 +
102618 node.intersect = function (point) { +
102619 return dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.intersect.polygon(node, points, point); +
102620 }; +
102621 +
102622 return shapeSvg; +
102623 }; // Add custom shape for box with inverted arrow on left side +
102624 +
102625 +
102626 render.shapes().rect_left_inv_arrow = function (parent, bbox, node) { +
102627 const w = bbox.width; +
102628 const h = bbox.height; +
102629 const points = [{ +
102630 x: -h / 2, +
102631 y: 0 +
102632 }, { +
102633 x: w, +
102634 y: 0 +
102635 }, { +
102636 x: w, +
102637 y: -h +
102638 }, { +
102639 x: -h / 2, +
102640 y: -h +
102641 }, { +
102642 x: 0, +
102643 y: -h / 2 +
102644 }]; +
102645 const shapeSvg = parent.insert('polygon', ':first-child').attr('points', points.map(function (d) { +
102646 return d.x + ',' + d.y; +
102647 }).join(' ')).attr('transform', 'translate(' + -w / 2 + ',' + h * 2 / 4 + ')'); +
102648 +
102649 node.intersect = function (point) { +
102650 return dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.intersect.polygon(node, points, point); +
102651 }; +
102652 +
102653 return shapeSvg; +
102654 }; // Add custom shape for box with inverted arrow on right side +
102655 +
102656 +
102657 render.shapes().rect_right_inv_arrow = function (parent, bbox, node) { +
102658 const w = bbox.width; +
102659 const h = bbox.height; +
102660 const points = [{ +
102661 x: 0, +
102662 y: 0 +
102663 }, { +
102664 x: w + h / 2, +
102665 y: 0 +
102666 }, { +
102667 x: w, +
102668 y: -h / 2 +
102669 }, { +
102670 x: w + h / 2, +
102671 y: -h +
102672 }, { +
102673 x: 0, +
102674 y: -h +
102675 }]; +
102676 const shapeSvg = parent.insert('polygon', ':first-child').attr('points', points.map(function (d) { +
102677 return d.x + ',' + d.y; +
102678 }).join(' ')).attr('transform', 'translate(' + -w / 2 + ',' + h * 2 / 4 + ')'); +
102679 +
102680 node.intersect = function (point) { +
102681 return dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.intersect.polygon(node, points, point); +
102682 }; +
102683 +
102684 return shapeSvg; +
102685 }; // Add our custom arrow - an empty arrowhead +
102686 +
102687 +
102688 render.arrows().none = function normal(parent, id, edge, type) { +
102689 const marker = parent.append('marker').attr('id', id).attr('viewBox', '0 0 10 10').attr('refX', 9).attr('refY', 5).attr('markerUnits', 'strokeWidth').attr('markerWidth', 8).attr('markerHeight', 6).attr('orient', 'auto'); +
102690 const path = marker.append('path').attr('d', 'M 0 0 L 0 0 L 0 0 z'); +
102691 dagre_d3_renderer__WEBPACK_IMPORTED_MODULE_4___default.a.util.applyStyle(path, edge[type + 'Style']); +
102692 }; // Override normal arrowhead defined in d3. Remove style & add class to allow css styling. +
102693 +
102694 +
102695 render.arrows().normal = function normal(parent, id, edge, type) { +
102696 const marker = parent.append('marker').attr('id', id).attr('viewBox', '0 0 10 10').attr('refX', 9).attr('refY', 5).attr('markerUnits', 'strokeWidth').attr('markerWidth', 8).attr('markerHeight', 6).attr('orient', 'auto'); +
102697 marker.append('path').attr('d', 'M 0 0 L 10 5 L 0 10 z').attr('class', 'arrowheadPath').style('stroke-width', 1).style('stroke-dasharray', '1,0'); +
102698 }; // Set up an SVG group so that we can translate the final graph. +
102699 +
102700 +
102701 const svg = d3__WEBPACK_IMPORTED_MODULE_1__["select"](`[id="${id}"]`); // Run the renderer. This is what draws the final graph. +
102702 +
102703 const element = d3__WEBPACK_IMPORTED_MODULE_1__["select"]('#' + id + ' g'); +
102704 render(element, g); +
102705 element.selectAll('g.node').attr('title', function () { +
102706 return _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].getTooltip(this.id); +
102707 }); +
102708 const padding = 8; +
102709 const width = g.maxX - g.minX + padding * 2; +
102710 const height = g.maxY - g.minY + padding * 2; +
102711 svg.attr('width', '100%'); +
102712 svg.attr('style', `max-width: ${width}px;`); +
102713 svg.attr('viewBox', `0 0 ${width} ${height}`); +
102714 svg.select('g').attr('transform', `translate(${padding - g.minX}, ${padding - g.minY})`); // Index nodes +
102715 +
102716 _flowDb__WEBPACK_IMPORTED_MODULE_2__["default"].indexNodes('subGraph' + i); // reposition labels +
102717 +
102718 for (i = 0; i < subGraphs.length; i++) { +
102719 subG = subGraphs[i]; +
102720 +
102721 if (subG.title !== 'undefined') { +
102722 const clusterRects = document.querySelectorAll('#' + id + ' #' + subG.id + ' rect'); +
102723 const clusterEl = document.querySelectorAll('#' + id + ' #' + subG.id); +
102724 const xPos = clusterRects[0].x.baseVal.value; +
102725 const yPos = clusterRects[0].y.baseVal.value; +
102726 const width = clusterRects[0].width.baseVal.value; +
102727 const cluster = d3__WEBPACK_IMPORTED_MODULE_1__["select"](clusterEl[0]); +
102728 const te = cluster.select('.label'); +
102729 te.attr('transform', `translate(${xPos + width / 2}, ${yPos + 14})`); +
102730 te.attr('id', id + 'Text'); +
102731 } +
102732 } // Add label rects for non html labels +
102733 +
102734 +
102735 if (!conf.htmlLabels) { +
102736 const labels = document.querySelectorAll('#' + id + ' .edgeLabel .label'); +
102737 +
102738 for (let k = 0; k < labels.length; k++) { +
102739 const label = labels[k]; // Get dimensions of label +
102740 +
102741 const dim = label.getBBox(); +
102742 const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); +
102743 rect.setAttribute('rx', 0); +
102744 rect.setAttribute('ry', 0); +
102745 rect.setAttribute('width', dim.width); +
102746 rect.setAttribute('height', dim.height); +
102747 rect.setAttribute('style', 'fill:#e8e8e8;'); +
102748 label.insertBefore(rect, label.firstChild); +
102749 } +
102750 } +
102751}; +
102752/* harmony default export */ __webpack_exports__["default"] = ({ +
102753 setConf, +
102754 addVertices, +
102755 addEdges, +
102756 getClasses, +
102757 draw +
102758}); +
102759 +
102760/***/ }), +
102761 +
102762/***/ "./src/diagrams/flowchart/parser/flow.js": +
102763/*!***********************************************!*\ +
102764 !*** ./src/diagrams/flowchart/parser/flow.js ***! +
102765 \***********************************************/ +
102766/*! no static exports found */ +
102767/***/ (function(module, exports, __webpack_require__) { +
102768 +
102769/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
102770 +
102771/* +
102772 Returns a Parser object of the following structure: +
102773 +
102774 Parser: { +
102775 yy: {} +
102776 } +
102777 +
102778 Parser.prototype: { +
102779 yy: {}, +
102780 trace: function(), +
102781 symbols_: {associative list: name ==> number}, +
102782 terminals_: {associative list: number ==> name}, +
102783 productions_: [...], +
102784 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
102785 table: [...], +
102786 defaultActions: {...}, +
102787 parseError: function(str, hash), +
102788 parse: function(input), +
102789 +
102790 lexer: { +
102791 EOF: 1, +
102792 parseError: function(str, hash), +
102793 setInput: function(input), +
102794 input: function(), +
102795 unput: function(str), +
102796 more: function(), +
102797 less: function(n), +
102798 pastInput: function(), +
102799 upcomingInput: function(), +
102800 showPosition: function(), +
102801 test_match: function(regex_match_array, rule_index), +
102802 next: function(), +
102803 lex: function(), +
102804 begin: function(condition), +
102805 popState: function(), +
102806 _currentRules: function(), +
102807 topState: function(), +
102808 pushState: function(condition), +
102809 +
102810 options: { +
102811 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
102812 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
102813 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
102814 }, +
102815 +
102816 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
102817 rules: [...], +
102818 conditions: {associative list: name ==> set}, +
102819 } +
102820 } +
102821 +
102822 +
102823 token location info (@$, _$, etc.): { +
102824 first_line: n, +
102825 last_line: n, +
102826 first_column: n, +
102827 last_column: n, +
102828 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
102829 } +
102830 +
102831 +
102832 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
102833 text: (matched text) +
102834 token: (the produced terminal token, if any) +
102835 line: (yylineno) +
102836 } +
102837 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
102838 loc: (yylloc) +
102839 expected: (string describing the set of expected tokens) +
102840 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
102841 } +
102842*/ +
102843var parser = function () { +
102844 var o = function (k, v, o, l) { +
102845 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
102846 +
102847 return o; +
102848 }, +
102849 $V0 = [1, 4], +
102850 $V1 = [1, 3], +
102851 $V2 = [1, 5], +
102852 $V3 = [1, 8, 9, 10, 11, 13, 18, 30, 47, 71, 72, 73, 74, 75, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
102853 $V4 = [2, 2], +
102854 $V5 = [1, 12], +
102855 $V6 = [1, 13], +
102856 $V7 = [1, 14], +
102857 $V8 = [1, 15], +
102858 $V9 = [1, 31], +
102859 $Va = [1, 33], +
102860 $Vb = [1, 22], +
102861 $Vc = [1, 34], +
102862 $Vd = [1, 24], +
102863 $Ve = [1, 25], +
102864 $Vf = [1, 26], +
102865 $Vg = [1, 27], +
102866 $Vh = [1, 28], +
102867 $Vi = [1, 38], +
102868 $Vj = [1, 40], +
102869 $Vk = [1, 35], +
102870 $Vl = [1, 39], +
102871 $Vm = [1, 45], +
102872 $Vn = [1, 44], +
102873 $Vo = [1, 36], +
102874 $Vp = [1, 37], +
102875 $Vq = [1, 41], +
102876 $Vr = [1, 42], +
102877 $Vs = [1, 43], +
102878 $Vt = [1, 8, 9, 10, 11, 13, 18, 30, 35, 47, 71, 72, 73, 74, 75, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
102879 $Vu = [1, 53], +
102880 $Vv = [1, 52], +
102881 $Vw = [1, 54], +
102882 $Vx = [8, 9, 11], +
102883 $Vy = [8, 9, 11, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65], +
102884 $Vz = [1, 91], +
102885 $VA = [8, 9, 10, 11, 13, 15, 18, 32, 39, 41, 43, 47, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
102886 $VB = [8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 30, 32, 34, 35, 39, 40, 41, 42, 43, 44, 47, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 71, 72, 73, 74, 75, 78, 84, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
102887 $VC = [1, 93], +
102888 $VD = [1, 94], +
102889 $VE = [8, 9, 10, 11, 13, 18, 30, 35, 47, 71, 72, 73, 74, 75, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
102890 $VF = [13, 18, 47, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
102891 $VG = [1, 118], +
102892 $VH = [1, 126], +
102893 $VI = [1, 127], +
102894 $VJ = [1, 112], +
102895 $VK = [1, 111], +
102896 $VL = [1, 131], +
102897 $VM = [1, 130], +
102898 $VN = [1, 128], +
102899 $VO = [1, 129], +
102900 $VP = [1, 109], +
102901 $VQ = [1, 119], +
102902 $VR = [1, 114], +
102903 $VS = [1, 113], +
102904 $VT = [1, 121], +
102905 $VU = [1, 122], +
102906 $VV = [1, 123], +
102907 $VW = [1, 124], +
102908 $VX = [1, 125], +
102909 $VY = [1, 116], +
102910 $VZ = [1, 115], +
102911 $V_ = [13, 18, 47, 50, 66, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
102912 $V$ = [10, 12, 13, 15, 16, 17, 18, 30, 34, 35, 40, 42, 44, 47, 51, 52, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 71, 72, 73, 74, 75, 78, 84, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], +
102913 $V01 = [10, 86], +
102914 $V11 = [1, 198], +
102915 $V21 = [1, 195], +
102916 $V31 = [1, 202], +
102917 $V41 = [1, 199], +
102918 $V51 = [1, 203], +
102919 $V61 = [1, 196], +
102920 $V71 = [1, 193], +
102921 $V81 = [1, 194], +
102922 $V91 = [1, 197], +
102923 $Va1 = [1, 200], +
102924 $Vb1 = [1, 201], +
102925 $Vc1 = [1, 224], +
102926 $Vd1 = [8, 9, 11, 86], +
102927 $Ve1 = [8, 9, 10, 11, 47, 71, 80, 84, 85, 86, 89, 90, 91, 92, 93]; +
102928 +
102929 var parser = { +
102930 trace: function trace() {}, +
102931 yy: {}, +
102932 symbols_: { +
102933 "error": 2, +
102934 "mermaidDoc": 3, +
102935 "graphConfig": 4, +
102936 "document": 5, +
102937 "line": 6, +
102938 "statement": 7, +
102939 "SEMI": 8, +
102940 "NEWLINE": 9, +
102941 "SPACE": 10, +
102942 "EOF": 11, +
102943 "GRAPH": 12, +
102944 "DIR": 13, +
102945 "FirstStmtSeperator": 14, +
102946 "TAGEND": 15, +
102947 "TAGSTART": 16, +
102948 "UP": 17, +
102949 "DOWN": 18, +
102950 "ending": 19, +
102951 "endToken": 20, +
102952 "spaceList": 21, +
102953 "spaceListNewline": 22, +
102954 "verticeStatement": 23, +
102955 "separator": 24, +
102956 "styleStatement": 25, +
102957 "linkStyleStatement": 26, +
102958 "classDefStatement": 27, +
102959 "classStatement": 28, +
102960 "clickStatement": 29, +
102961 "subgraph": 30, +
102962 "alphaNum": 31, +
102963 "SQS": 32, +
102964 "text": 33, +
102965 "SQE": 34, +
102966 "end": 35, +
102967 "STR": 36, +
102968 "vertex": 37, +
102969 "link": 38, +
102970 "PS": 39, +
102971 "PE": 40, +
102972 "(-": 41, +
102973 "-)": 42, +
102974 "DIAMOND_START": 43, +
102975 "DIAMOND_STOP": 44, +
102976 "alphaNumStatement": 45, +
102977 "alphaNumToken": 46, +
102978 "MINUS": 47, +
102979 "linkStatement": 48, +
102980 "arrowText": 49, +
102981 "TESTSTR": 50, +
102982 "--": 51, +
102983 "ARROW_POINT": 52, +
102984 "ARROW_CIRCLE": 53, +
102985 "ARROW_CROSS": 54, +
102986 "ARROW_OPEN": 55, +
102987 "-.": 56, +
102988 "DOTTED_ARROW_POINT": 57, +
102989 "DOTTED_ARROW_CIRCLE": 58, +
102990 "DOTTED_ARROW_CROSS": 59, +
102991 "DOTTED_ARROW_OPEN": 60, +
102992 "==": 61, +
102993 "THICK_ARROW_POINT": 62, +
102994 "THICK_ARROW_CIRCLE": 63, +
102995 "THICK_ARROW_CROSS": 64, +
102996 "THICK_ARROW_OPEN": 65, +
102997 "PIPE": 66, +
102998 "textToken": 67, +
102999 "commentText": 68, +
103000 "commentToken": 69, +
103001 "keywords": 70, +
103002 "STYLE": 71, +
103003 "LINKSTYLE": 72, +
103004 "CLASSDEF": 73, +
103005 "CLASS": 74, +
103006 "CLICK": 75, +
103007 "textNoTags": 76, +
103008 "textNoTagsToken": 77, +
103009 "DEFAULT": 78, +
103010 "stylesOpt": 79, +
103011 "HEX": 80, +
103012 "numList": 81, +
103013 "INTERPOLATE": 82, +
103014 "commentStatement": 83, +
103015 "PCT": 84, +
103016 "NUM": 85, +
103017 "COMMA": 86, +
103018 "style": 87, +
103019 "styleComponent": 88, +
103020 "ALPHA": 89, +
103021 "COLON": 90, +
103022 "UNIT": 91, +
103023 "BRKT": 92, +
103024 "DOT": 93, +
103025 "graphCodeTokens": 94, +
103026 "PUNCTUATION": 95, +
103027 "UNICODE_TEXT": 96, +
103028 "PLUS": 97, +
103029 "EQUALS": 98, +
103030 "MULT": 99, +
103031 "TAG_START": 100, +
103032 "TAG_END": 101, +
103033 "QUOTE": 102, +
103034 "$accept": 0, +
103035 "$end": 1 +
103036 }, +
103037 terminals_: { +
103038 2: "error", +
103039 8: "SEMI", +
103040 9: "NEWLINE", +
103041 10: "SPACE", +
103042 11: "EOF", +
103043 12: "GRAPH", +
103044 13: "DIR", +
103045 15: "TAGEND", +
103046 16: "TAGSTART", +
103047 17: "UP", +
103048 18: "DOWN", +
103049 30: "subgraph", +
103050 32: "SQS", +
103051 34: "SQE", +
103052 35: "end", +
103053 36: "STR", +
103054 39: "PS", +
103055 40: "PE", +
103056 41: "(-", +
103057 42: "-)", +
103058 43: "DIAMOND_START", +
103059 44: "DIAMOND_STOP", +
103060 47: "MINUS", +
103061 50: "TESTSTR", +
103062 51: "--", +
103063 52: "ARROW_POINT", +
103064 53: "ARROW_CIRCLE", +
103065 54: "ARROW_CROSS", +
103066 55: "ARROW_OPEN", +
103067 56: "-.", +
103068 57: "DOTTED_ARROW_POINT", +
103069 58: "DOTTED_ARROW_CIRCLE", +
103070 59: "DOTTED_ARROW_CROSS", +
103071 60: "DOTTED_ARROW_OPEN", +
103072 61: "==", +
103073 62: "THICK_ARROW_POINT", +
103074 63: "THICK_ARROW_CIRCLE", +
103075 64: "THICK_ARROW_CROSS", +
103076 65: "THICK_ARROW_OPEN", +
103077 66: "PIPE", +
103078 71: "STYLE", +
103079 72: "LINKSTYLE", +
103080 73: "CLASSDEF", +
103081 74: "CLASS", +
103082 75: "CLICK", +
103083 78: "DEFAULT", +
103084 80: "HEX", +
103085 82: "INTERPOLATE", +
103086 84: "PCT", +
103087 85: "NUM", +
103088 86: "COMMA", +
103089 89: "ALPHA", +
103090 90: "COLON", +
103091 91: "UNIT", +
103092 92: "BRKT", +
103093 93: "DOT", +
103094 95: "PUNCTUATION", +
103095 96: "UNICODE_TEXT", +
103096 97: "PLUS", +
103097 98: "EQUALS", +
103098 99: "MULT", +
103099 100: "TAG_START", +
103100 101: "TAG_END", +
103101 102: "QUOTE" +
103102 }, +
103103 productions_: [0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [19, 2], [19, 1], [20, 1], [20, 1], [20, 1], [14, 1], [14, 1], [14, 2], [22, 2], [22, 2], [22, 1], [22, 1], [21, 2], [21, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 6], [7, 4], [24, 1], [24, 1], [24, 1], [23, 3], [23, 1], [37, 4], [37, 5], [37, 6], [37, 7], [37, 4], [37, 5], [37, 4], [37, 5], [37, 4], [37, 5], [37, 4], [37, 5], [37, 1], [37, 2], [31, 1], [31, 2], [45, 1], [45, 1], [45, 1], [45, 1], [38, 2], [38, 3], [38, 3], [38, 1], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [38, 3], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [48, 1], [49, 3], [33, 1], [33, 2], [33, 1], [68, 1], [68, 2], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [76, 1], [76, 2], [27, 5], [27, 5], [28, 5], [29, 5], [29, 7], [29, 5], [29, 7], [25, 5], [25, 5], [26, 5], [26, 5], [26, 9], [26, 9], [26, 7], [26, 7], [83, 3], [81, 1], [81, 3], [79, 1], [79, 3], [87, 1], [87, 2], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [88, 1], [69, 1], [69, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [67, 1], [77, 1], [77, 1], [77, 1], [77, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [46, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1], [94, 1]], +
103104 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
103105 /* action[1] */ +
103106 , $$ +
103107 /* vstack */ +
103108 , _$ +
103109 /* lstack */ +
103110 ) { +
103111 /* this == yyval */ +
103112 var $0 = $$.length - 1; +
103113 +
103114 switch (yystate) { +
103115 case 2: +
103116 this.$ = []; +
103117 break; +
103118 +
103119 case 3: +
103120 if ($$[$0] !== []) { +
103121 $$[$0 - 1].push($$[$0]); +
103122 } +
103123 +
103124 this.$ = $$[$0 - 1]; +
103125 break; +
103126 +
103127 case 4: +
103128 case 59: +
103129 case 61: +
103130 case 62: +
103131 case 94: +
103132 case 96: +
103133 case 97: +
103134 case 110: +
103135 this.$ = $$[$0]; +
103136 break; +
103137 +
103138 case 11: +
103139 yy.setDirection($$[$0 - 1]); +
103140 this.$ = $$[$0 - 1]; +
103141 break; +
103142 +
103143 case 12: +
103144 yy.setDirection("LR"); +
103145 this.$ = $$[$0 - 1]; +
103146 break; +
103147 +
103148 case 13: +
103149 yy.setDirection("RL"); +
103150 this.$ = $$[$0 - 1]; +
103151 break; +
103152 +
103153 case 14: +
103154 yy.setDirection("BT"); +
103155 this.$ = $$[$0 - 1]; +
103156 break; +
103157 +
103158 case 15: +
103159 yy.setDirection("TB"); +
103160 this.$ = $$[$0 - 1]; +
103161 break; +
103162 +
103163 case 30: +
103164 this.$ = $$[$0 - 1]; +
103165 break; +
103166 +
103167 case 31: +
103168 case 32: +
103169 case 33: +
103170 case 34: +
103171 case 35: +
103172 this.$ = []; +
103173 break; +
103174 +
103175 case 36: +
103176 this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]); +
103177 break; +
103178 +
103179 case 37: +
103180 this.$ = yy.addSubGraph(undefined, $$[$0 - 1], $$[$0 - 3]); +
103181 break; +
103182 +
103183 case 38: +
103184 this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]); +
103185 break; +
103186 +
103187 case 39: +
103188 this.$ = yy.addSubGraph(undefined, $$[$0 - 1], undefined); +
103189 break; +
103190 +
103191 case 43: +
103192 yy.addLink($$[$0 - 2], $$[$0], $$[$0 - 1]); +
103193 this.$ = [$$[$0 - 2], $$[$0]]; +
103194 break; +
103195 +
103196 case 44: +
103197 this.$ = [$$[$0]]; +
103198 break; +
103199 +
103200 case 45: +
103201 this.$ = $$[$0 - 3]; +
103202 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'square'); +
103203 break; +
103204 +
103205 case 46: +
103206 this.$ = $$[$0 - 4]; +
103207 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'square'); +
103208 break; +
103209 +
103210 case 47: +
103211 this.$ = $$[$0 - 5]; +
103212 yy.addVertex($$[$0 - 5], $$[$0 - 2], 'circle'); +
103213 break; +
103214 +
103215 case 48: +
103216 this.$ = $$[$0 - 6]; +
103217 yy.addVertex($$[$0 - 6], $$[$0 - 3], 'circle'); +
103218 break; +
103219 +
103220 case 49: +
103221 this.$ = $$[$0 - 3]; +
103222 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'ellipse'); +
103223 break; +
103224 +
103225 case 50: +
103226 this.$ = $$[$0 - 4]; +
103227 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'ellipse'); +
103228 break; +
103229 +
103230 case 51: +
103231 this.$ = $$[$0 - 3]; +
103232 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'round'); +
103233 break; +
103234 +
103235 case 52: +
103236 this.$ = $$[$0 - 4]; +
103237 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'round'); +
103238 break; +
103239 +
103240 case 53: +
103241 this.$ = $$[$0 - 3]; +
103242 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'diamond'); +
103243 break; +
103244 +
103245 case 54: +
103246 this.$ = $$[$0 - 4]; +
103247 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'diamond'); +
103248 break; +
103249 +
103250 case 55: +
103251 this.$ = $$[$0 - 3]; +
103252 yy.addVertex($$[$0 - 3], $$[$0 - 1], 'odd'); +
103253 break; +
103254 +
103255 case 56: +
103256 this.$ = $$[$0 - 4]; +
103257 yy.addVertex($$[$0 - 4], $$[$0 - 2], 'odd'); +
103258 break; +
103259 +
103260 case 57: +
103261 this.$ = $$[$0]; +
103262 yy.addVertex($$[$0]); +
103263 break; +
103264 +
103265 case 58: +
103266 this.$ = $$[$0 - 1]; +
103267 yy.addVertex($$[$0 - 1]); +
103268 break; +
103269 +
103270 case 60: +
103271 case 95: +
103272 case 98: +
103273 case 111: +
103274 this.$ = $$[$0 - 1] + '' + $$[$0]; +
103275 break; +
103276 +
103277 case 63: +
103278 this.$ = 'v'; +
103279 break; +
103280 +
103281 case 64: +
103282 this.$ = '-'; +
103283 break; +
103284 +
103285 case 65: +
103286 $$[$0 - 1].text = $$[$0]; +
103287 this.$ = $$[$0 - 1]; +
103288 break; +
103289 +
103290 case 66: +
103291 case 67: +
103292 $$[$0 - 2].text = $$[$0 - 1]; +
103293 this.$ = $$[$0 - 2]; +
103294 break; +
103295 +
103296 case 68: +
103297 this.$ = $$[$0]; +
103298 break; +
103299 +
103300 case 69: +
103301 this.$ = { +
103302 "type": "arrow", +
103303 "stroke": "normal", +
103304 "text": $$[$0 - 1] +
103305 }; +
103306 break; +
103307 +
103308 case 70: +
103309 this.$ = { +
103310 "type": "arrow_circle", +
103311 "stroke": "normal", +
103312 "text": $$[$0 - 1] +
103313 }; +
103314 break; +
103315 +
103316 case 71: +
103317 this.$ = { +
103318 "type": "arrow_cross", +
103319 "stroke": "normal", +
103320 "text": $$[$0 - 1] +
103321 }; +
103322 break; +
103323 +
103324 case 72: +
103325 this.$ = { +
103326 "type": "arrow_open", +
103327 "stroke": "normal", +
103328 "text": $$[$0 - 1] +
103329 }; +
103330 break; +
103331 +
103332 case 73: +
103333 this.$ = { +
103334 "type": "arrow", +
103335 "stroke": "dotted", +
103336 "text": $$[$0 - 1] +
103337 }; +
103338 break; +
103339 +
103340 case 74: +
103341 this.$ = { +
103342 "type": "arrow_circle", +
103343 "stroke": "dotted", +
103344 "text": $$[$0 - 1] +
103345 }; +
103346 break; +
103347 +
103348 case 75: +
103349 this.$ = { +
103350 "type": "arrow_cross", +
103351 "stroke": "dotted", +
103352 "text": $$[$0 - 1] +
103353 }; +
103354 break; +
103355 +
103356 case 76: +
103357 this.$ = { +
103358 "type": "arrow_open", +
103359 "stroke": "dotted", +
103360 "text": $$[$0 - 1] +
103361 }; +
103362 break; +
103363 +
103364 case 77: +
103365 this.$ = { +
103366 "type": "arrow", +
103367 "stroke": "thick", +
103368 "text": $$[$0 - 1] +
103369 }; +
103370 break; +
103371 +
103372 case 78: +
103373 this.$ = { +
103374 "type": "arrow_circle", +
103375 "stroke": "thick", +
103376 "text": $$[$0 - 1] +
103377 }; +
103378 break; +
103379 +
103380 case 79: +
103381 this.$ = { +
103382 "type": "arrow_cross", +
103383 "stroke": "thick", +
103384 "text": $$[$0 - 1] +
103385 }; +
103386 break; +
103387 +
103388 case 80: +
103389 this.$ = { +
103390 "type": "arrow_open", +
103391 "stroke": "thick", +
103392 "text": $$[$0 - 1] +
103393 }; +
103394 break; +
103395 +
103396 case 81: +
103397 this.$ = { +
103398 "type": "arrow", +
103399 "stroke": "normal" +
103400 }; +
103401 break; +
103402 +
103403 case 82: +
103404 this.$ = { +
103405 "type": "arrow_circle", +
103406 "stroke": "normal" +
103407 }; +
103408 break; +
103409 +
103410 case 83: +
103411 this.$ = { +
103412 "type": "arrow_cross", +
103413 "stroke": "normal" +
103414 }; +
103415 break; +
103416 +
103417 case 84: +
103418 this.$ = { +
103419 "type": "arrow_open", +
103420 "stroke": "normal" +
103421 }; +
103422 break; +
103423 +
103424 case 85: +
103425 this.$ = { +
103426 "type": "arrow", +
103427 "stroke": "dotted" +
103428 }; +
103429 break; +
103430 +
103431 case 86: +
103432 this.$ = { +
103433 "type": "arrow_circle", +
103434 "stroke": "dotted" +
103435 }; +
103436 break; +
103437 +
103438 case 87: +
103439 this.$ = { +
103440 "type": "arrow_cross", +
103441 "stroke": "dotted" +
103442 }; +
103443 break; +
103444 +
103445 case 88: +
103446 this.$ = { +
103447 "type": "arrow_open", +
103448 "stroke": "dotted" +
103449 }; +
103450 break; +
103451 +
103452 case 89: +
103453 this.$ = { +
103454 "type": "arrow", +
103455 "stroke": "thick" +
103456 }; +
103457 break; +
103458 +
103459 case 90: +
103460 this.$ = { +
103461 "type": "arrow_circle", +
103462 "stroke": "thick" +
103463 }; +
103464 break; +
103465 +
103466 case 91: +
103467 this.$ = { +
103468 "type": "arrow_cross", +
103469 "stroke": "thick" +
103470 }; +
103471 break; +
103472 +
103473 case 92: +
103474 this.$ = { +
103475 "type": "arrow_open", +
103476 "stroke": "thick" +
103477 }; +
103478 break; +
103479 +
103480 case 93: +
103481 this.$ = $$[$0 - 1]; +
103482 break; +
103483 +
103484 case 112: +
103485 case 113: +
103486 this.$ = $$[$0 - 4]; +
103487 yy.addClass($$[$0 - 2], $$[$0]); +
103488 break; +
103489 +
103490 case 114: +
103491 this.$ = $$[$0 - 4]; +
103492 yy.setClass($$[$0 - 2], $$[$0]); +
103493 break; +
103494 +
103495 case 115: +
103496 this.$ = $$[$0 - 4]; +
103497 yy.setClickEvent($$[$0 - 2], $$[$0], undefined); +
103498 break; +
103499 +
103500 case 116: +
103501 this.$ = $$[$0 - 6]; +
103502 yy.setClickEvent($$[$0 - 4], $$[$0 - 2], $$[$0]); +
103503 break; +
103504 +
103505 case 117: +
103506 this.$ = $$[$0 - 4]; +
103507 yy.setLink($$[$0 - 2], $$[$0], undefined); +
103508 break; +
103509 +
103510 case 118: +
103511 this.$ = $$[$0 - 6]; +
103512 yy.setLink($$[$0 - 4], $$[$0 - 2], $$[$0]); +
103513 break; +
103514 +
103515 case 119: +
103516 this.$ = $$[$0 - 4]; +
103517 yy.addVertex($$[$0 - 2], undefined, undefined, $$[$0]); +
103518 break; +
103519 +
103520 case 120: +
103521 case 122: +
103522 this.$ = $$[$0 - 4]; +
103523 yy.updateLink($$[$0 - 2], $$[$0]); +
103524 break; +
103525 +
103526 case 121: +
103527 this.$ = $$[$0 - 4]; +
103528 yy.updateLink([$$[$0 - 2]], $$[$0]); +
103529 break; +
103530 +
103531 case 123: +
103532 this.$ = $$[$0 - 8]; +
103533 yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]); +
103534 yy.updateLink([$$[$0 - 6]], $$[$0]); +
103535 break; +
103536 +
103537 case 124: +
103538 this.$ = $$[$0 - 8]; +
103539 yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]); +
103540 yy.updateLink($$[$0 - 6], $$[$0]); +
103541 break; +
103542 +
103543 case 125: +
103544 this.$ = $$[$0 - 6]; +
103545 yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]); +
103546 break; +
103547 +
103548 case 126: +
103549 this.$ = $$[$0 - 6]; +
103550 yy.updateLinkInterpolate($$[$0 - 4], $$[$0]); +
103551 break; +
103552 +
103553 case 128: +
103554 case 130: +
103555 this.$ = [$$[$0]]; +
103556 break; +
103557 +
103558 case 129: +
103559 case 131: +
103560 $$[$0 - 2].push($$[$0]); +
103561 this.$ = $$[$0 - 2]; +
103562 break; +
103563 +
103564 case 133: +
103565 this.$ = $$[$0 - 1] + $$[$0]; +
103566 break; +
103567 } +
103568 }, +
103569 table: [{ +
103570 3: 1, +
103571 4: 2, +
103572 9: $V0, +
103573 10: $V1, +
103574 12: $V2 +
103575 }, { +
103576 1: [3] +
103577 }, o($V3, $V4, { +
103578 5: 6 +
103579 }), { +
103580 4: 7, +
103581 9: $V0, +
103582 10: $V1, +
103583 12: $V2 +
103584 }, { +
103585 4: 8, +
103586 9: $V0, +
103587 10: $V1, +
103588 12: $V2 +
103589 }, { +
103590 10: [1, 9] +
103591 }, { +
103592 1: [2, 1], +
103593 6: 10, +
103594 7: 11, +
103595 8: $V5, +
103596 9: $V6, +
103597 10: $V7, +
103598 11: $V8, +
103599 13: $V9, +
103600 18: $Va, +
103601 23: 16, +
103602 25: 17, +
103603 26: 18, +
103604 27: 19, +
103605 28: 20, +
103606 29: 21, +
103607 30: $Vb, +
103608 31: 29, +
103609 37: 23, +
103610 45: 30, +
103611 46: 32, +
103612 47: $Vc, +
103613 71: $Vd, +
103614 72: $Ve, +
103615 73: $Vf, +
103616 74: $Vg, +
103617 75: $Vh, +
103618 85: $Vi, +
103619 86: $Vj, +
103620 89: $Vk, +
103621 90: $Vl, +
103622 92: $Vm, +
103623 93: $Vn, +
103624 95: $Vo, +
103625 96: $Vp, +
103626 97: $Vq, +
103627 98: $Vr, +
103628 99: $Vs +
103629 }, o($V3, [2, 9]), o($V3, [2, 10]), { +
103630 13: [1, 46], +
103631 15: [1, 47], +
103632 16: [1, 48], +
103633 17: [1, 49], +
103634 18: [1, 50] +
103635 }, o($Vt, [2, 3]), o($Vt, [2, 4]), o($Vt, [2, 5]), o($Vt, [2, 6]), o($Vt, [2, 7]), o($Vt, [2, 8]), { +
103636 8: $Vu, +
103637 9: $Vv, +
103638 11: $Vw, +
103639 24: 51 +
103640 }, { +
103641 8: $Vu, +
103642 9: $Vv, +
103643 11: $Vw, +
103644 24: 55 +
103645 }, { +
103646 8: $Vu, +
103647 9: $Vv, +
103648 11: $Vw, +
103649 24: 56 +
103650 }, { +
103651 8: $Vu, +
103652 9: $Vv, +
103653 11: $Vw, +
103654 24: 57 +
103655 }, { +
103656 8: $Vu, +
103657 9: $Vv, +
103658 11: $Vw, +
103659 24: 58 +
103660 }, { +
103661 8: $Vu, +
103662 9: $Vv, +
103663 11: $Vw, +
103664 24: 59 +
103665 }, { +
103666 8: $Vu, +
103667 9: $Vv, +
103668 10: [1, 60], +
103669 11: $Vw, +
103670 24: 61 +
103671 }, o($Vx, [2, 44], { +
103672 38: 62, +
103673 48: 63, +
103674 51: [1, 64], +
103675 52: [1, 67], +
103676 53: [1, 68], +
103677 54: [1, 69], +
103678 55: [1, 70], +
103679 56: [1, 65], +
103680 57: [1, 71], +
103681 58: [1, 72], +
103682 59: [1, 73], +
103683 60: [1, 74], +
103684 61: [1, 66], +
103685 62: [1, 75], +
103686 63: [1, 76], +
103687 64: [1, 77], +
103688 65: [1, 78] +
103689 }), { +
103690 10: [1, 79] +
103691 }, { +
103692 10: [1, 80] +
103693 }, { +
103694 10: [1, 81] +
103695 }, { +
103696 10: [1, 82] +
103697 }, { +
103698 10: [1, 83] +
103699 }, o($Vy, [2, 57], { +
103700 46: 32, +
103701 21: 89, +
103702 45: 90, +
103703 10: $Vz, +
103704 13: $V9, +
103705 15: [1, 88], +
103706 18: $Va, +
103707 32: [1, 84], +
103708 39: [1, 85], +
103709 41: [1, 86], +
103710 43: [1, 87], +
103711 47: $Vc, +
103712 85: $Vi, +
103713 86: $Vj, +
103714 89: $Vk, +
103715 90: $Vl, +
103716 92: $Vm, +
103717 93: $Vn, +
103718 95: $Vo, +
103719 96: $Vp, +
103720 97: $Vq, +
103721 98: $Vr, +
103722 99: $Vs +
103723 }), o($VA, [2, 59]), o($VA, [2, 61]), o($VA, [2, 62]), o($VA, [2, 63]), o($VA, [2, 64]), o($VB, [2, 158]), o($VB, [2, 159]), o($VB, [2, 160]), o($VB, [2, 161]), o($VB, [2, 162]), o($VB, [2, 163]), o($VB, [2, 164]), o($VB, [2, 165]), o($VB, [2, 166]), o($VB, [2, 167]), o($VB, [2, 168]), { +
103724 8: $VC, +
103725 9: $VD, +
103726 10: $Vz, +
103727 14: 92, +
103728 21: 95 +
103729 }, { +
103730 8: $VC, +
103731 9: $VD, +
103732 10: $Vz, +
103733 14: 96, +
103734 21: 95 +
103735 }, { +
103736 8: $VC, +
103737 9: $VD, +
103738 10: $Vz, +
103739 14: 97, +
103740 21: 95 +
103741 }, { +
103742 8: $VC, +
103743 9: $VD, +
103744 10: $Vz, +
103745 14: 98, +
103746 21: 95 +
103747 }, { +
103748 8: $VC, +
103749 9: $VD, +
103750 10: $Vz, +
103751 14: 99, +
103752 21: 95 +
103753 }, o($Vt, [2, 30]), o($Vt, [2, 40]), o($Vt, [2, 41]), o($Vt, [2, 42]), o($Vt, [2, 31]), o($Vt, [2, 32]), o($Vt, [2, 33]), o($Vt, [2, 34]), o($Vt, [2, 35]), { +
103754 13: $V9, +
103755 18: $Va, +
103756 31: 100, +
103757 36: [1, 101], +
103758 45: 30, +
103759 46: 32, +
103760 47: $Vc, +
103761 85: $Vi, +
103762 86: $Vj, +
103763 89: $Vk, +
103764 90: $Vl, +
103765 92: $Vm, +
103766 93: $Vn, +
103767 95: $Vo, +
103768 96: $Vp, +
103769 97: $Vq, +
103770 98: $Vr, +
103771 99: $Vs +
103772 }, o($VE, $V4, { +
103773 5: 102 +
103774 }), { +
103775 13: $V9, +
103776 18: $Va, +
103777 31: 29, +
103778 37: 103, +
103779 45: 30, +
103780 46: 32, +
103781 47: $Vc, +
103782 85: $Vi, +
103783 86: $Vj, +
103784 89: $Vk, +
103785 90: $Vl, +
103786 92: $Vm, +
103787 93: $Vn, +
103788 95: $Vo, +
103789 96: $Vp, +
103790 97: $Vq, +
103791 98: $Vr, +
103792 99: $Vs +
103793 }, o($VF, [2, 68], { +
103794 49: 104, +
103795 50: [1, 105], +
103796 66: [1, 106] +
103797 }), { +
103798 10: $VG, +
103799 12: $VH, +
103800 13: $VI, +
103801 15: $VJ, +
103802 16: $VK, +
103803 17: $VL, +
103804 18: $VM, +
103805 30: $VN, +
103806 33: 107, +
103807 35: $VO, +
103808 36: $VP, +
103809 46: 117, +
103810 47: $VQ, +
103811 51: $VR, +
103812 61: $VS, +
103813 67: 108, +
103814 70: 120, +
103815 71: $VT, +
103816 72: $VU, +
103817 73: $VV, +
103818 74: $VW, +
103819 75: $VX, +
103820 77: 110, +
103821 78: $VY, +
103822 84: $VZ, +
103823 85: $Vi, +
103824 86: $Vj, +
103825 89: $Vk, +
103826 90: $Vl, +
103827 92: $Vm, +
103828 93: $Vn, +
103829 95: $Vo, +
103830 96: $Vp, +
103831 97: $Vq, +
103832 98: $Vr, +
103833 99: $Vs +
103834 }, { +
103835 10: $VG, +
103836 12: $VH, +
103837 13: $VI, +
103838 15: $VJ, +
103839 16: $VK, +
103840 17: $VL, +
103841 18: $VM, +
103842 30: $VN, +
103843 33: 132, +
103844 35: $VO, +
103845 36: $VP, +
103846 46: 117, +
103847 47: $VQ, +
103848 51: $VR, +
103849 61: $VS, +
103850 67: 108, +
103851 70: 120, +
103852 71: $VT, +
103853 72: $VU, +
103854 73: $VV, +
103855 74: $VW, +
103856 75: $VX, +
103857 77: 110, +
103858 78: $VY, +
103859 84: $VZ, +
103860 85: $Vi, +
103861 86: $Vj, +
103862 89: $Vk, +
103863 90: $Vl, +
103864 92: $Vm, +
103865 93: $Vn, +
103866 95: $Vo, +
103867 96: $Vp, +
103868 97: $Vq, +
103869 98: $Vr, +
103870 99: $Vs +
103871 }, { +
103872 10: $VG, +
103873 12: $VH, +
103874 13: $VI, +
103875 15: $VJ, +
103876 16: $VK, +
103877 17: $VL, +
103878 18: $VM, +
103879 30: $VN, +
103880 33: 133, +
103881 35: $VO, +
103882 36: $VP, +
103883 46: 117, +
103884 47: $VQ, +
103885 51: $VR, +
103886 61: $VS, +
103887 67: 108, +
103888 70: 120, +
103889 71: $VT, +
103890 72: $VU, +
103891 73: $VV, +
103892 74: $VW, +
103893 75: $VX, +
103894 77: 110, +
103895 78: $VY, +
103896 84: $VZ, +
103897 85: $Vi, +
103898 86: $Vj, +
103899 89: $Vk, +
103900 90: $Vl, +
103901 92: $Vm, +
103902 93: $Vn, +
103903 95: $Vo, +
103904 96: $Vp, +
103905 97: $Vq, +
103906 98: $Vr, +
103907 99: $Vs +
103908 }, o($V_, [2, 81]), o($V_, [2, 82]), o($V_, [2, 83]), o($V_, [2, 84]), o($V_, [2, 85]), o($V_, [2, 86]), o($V_, [2, 87]), o($V_, [2, 88]), o($V_, [2, 89]), o($V_, [2, 90]), o($V_, [2, 91]), o($V_, [2, 92]), { +
103909 13: $V9, +
103910 18: $Va, +
103911 31: 134, +
103912 45: 30, +
103913 46: 32, +
103914 47: $Vc, +
103915 80: [1, 135], +
103916 85: $Vi, +
103917 86: $Vj, +
103918 89: $Vk, +
103919 90: $Vl, +
103920 92: $Vm, +
103921 93: $Vn, +
103922 95: $Vo, +
103923 96: $Vp, +
103924 97: $Vq, +
103925 98: $Vr, +
103926 99: $Vs +
103927 }, { +
103928 78: [1, 136], +
103929 81: 137, +
103930 85: [1, 138] +
103931 }, { +
103932 13: $V9, +
103933 18: $Va, +
103934 31: 140, +
103935 45: 30, +
103936 46: 32, +
103937 47: $Vc, +
103938 78: [1, 139], +
103939 85: $Vi, +
103940 86: $Vj, +
103941 89: $Vk, +
103942 90: $Vl, +
103943 92: $Vm, +
103944 93: $Vn, +
103945 95: $Vo, +
103946 96: $Vp, +
103947 97: $Vq, +
103948 98: $Vr, +
103949 99: $Vs +
103950 }, { +
103951 13: $V9, +
103952 18: $Va, +
103953 31: 141, +
103954 45: 30, +
103955 46: 32, +
103956 47: $Vc, +
103957 85: $Vi, +
103958 86: $Vj, +
103959 89: $Vk, +
103960 90: $Vl, +
103961 92: $Vm, +
103962 93: $Vn, +
103963 95: $Vo, +
103964 96: $Vp, +
103965 97: $Vq, +
103966 98: $Vr, +
103967 99: $Vs +
103968 }, { +
103969 13: $V9, +
103970 18: $Va, +
103971 31: 142, +
103972 45: 30, +
103973 46: 32, +
103974 47: $Vc, +
103975 85: $Vi, +
103976 86: $Vj, +
103977 89: $Vk, +
103978 90: $Vl, +
103979 92: $Vm, +
103980 93: $Vn, +
103981 95: $Vo, +
103982 96: $Vp, +
103983 97: $Vq, +
103984 98: $Vr, +
103985 99: $Vs +
103986 }, { +
103987 10: $VG, +
103988 12: $VH, +
103989 13: $VI, +
103990 15: $VJ, +
103991 16: $VK, +
103992 17: $VL, +
103993 18: $VM, +
103994 30: $VN, +
103995 33: 143, +
103996 35: $VO, +
103997 36: $VP, +
103998 46: 117, +
103999 47: $VQ, +
104000 51: $VR, +
104001 61: $VS, +
104002 67: 108, +
104003 70: 120, +
104004 71: $VT, +
104005 72: $VU, +
104006 73: $VV, +
104007 74: $VW, +
104008 75: $VX, +
104009 77: 110, +
104010 78: $VY, +
104011 84: $VZ, +
104012 85: $Vi, +
104013 86: $Vj, +
104014 89: $Vk, +
104015 90: $Vl, +
104016 92: $Vm, +
104017 93: $Vn, +
104018 95: $Vo, +
104019 96: $Vp, +
104020 97: $Vq, +
104021 98: $Vr, +
104022 99: $Vs +
104023 }, { +
104024 10: $VG, +
104025 12: $VH, +
104026 13: $VI, +
104027 15: $VJ, +
104028 16: $VK, +
104029 17: $VL, +
104030 18: $VM, +
104031 30: $VN, +
104032 33: 145, +
104033 35: $VO, +
104034 36: $VP, +
104035 39: [1, 144], +
104036 46: 117, +
104037 47: $VQ, +
104038 51: $VR, +
104039 61: $VS, +
104040 67: 108, +
104041 70: 120, +
104042 71: $VT, +
104043 72: $VU, +
104044 73: $VV, +
104045 74: $VW, +
104046 75: $VX, +
104047 77: 110, +
104048 78: $VY, +
104049 84: $VZ, +
104050 85: $Vi, +
104051 86: $Vj, +
104052 89: $Vk, +
104053 90: $Vl, +
104054 92: $Vm, +
104055 93: $Vn, +
104056 95: $Vo, +
104057 96: $Vp, +
104058 97: $Vq, +
104059 98: $Vr, +
104060 99: $Vs +
104061 }, { +
104062 10: $VG, +
104063 12: $VH, +
104064 13: $VI, +
104065 15: $VJ, +
104066 16: $VK, +
104067 17: $VL, +
104068 18: $VM, +
104069 30: $VN, +
104070 33: 146, +
104071 35: $VO, +
104072 36: $VP, +
104073 46: 117, +
104074 47: $VQ, +
104075 51: $VR, +
104076 61: $VS, +
104077 67: 108, +
104078 70: 120, +
104079 71: $VT, +
104080 72: $VU, +
104081 73: $VV, +
104082 74: $VW, +
104083 75: $VX, +
104084 77: 110, +
104085 78: $VY, +
104086 84: $VZ, +
104087 85: $Vi, +
104088 86: $Vj, +
104089 89: $Vk, +
104090 90: $Vl, +
104091 92: $Vm, +
104092 93: $Vn, +
104093 95: $Vo, +
104094 96: $Vp, +
104095 97: $Vq, +
104096 98: $Vr, +
104097 99: $Vs +
104098 }, { +
104099 10: $VG, +
104100 12: $VH, +
104101 13: $VI, +
104102 15: $VJ, +
104103 16: $VK, +
104104 17: $VL, +
104105 18: $VM, +
104106 30: $VN, +
104107 33: 147, +
104108 35: $VO, +
104109 36: $VP, +
104110 46: 117, +
104111 47: $VQ, +
104112 51: $VR, +
104113 61: $VS, +
104114 67: 108, +
104115 70: 120, +
104116 71: $VT, +
104117 72: $VU, +
104118 73: $VV, +
104119 74: $VW, +
104120 75: $VX, +
104121 77: 110, +
104122 78: $VY, +
104123 84: $VZ, +
104124 85: $Vi, +
104125 86: $Vj, +
104126 89: $Vk, +
104127 90: $Vl, +
104128 92: $Vm, +
104129 93: $Vn, +
104130 95: $Vo, +
104131 96: $Vp, +
104132 97: $Vq, +
104133 98: $Vr, +
104134 99: $Vs +
104135 }, { +
104136 10: $VG, +
104137 12: $VH, +
104138 13: $VI, +
104139 15: $VJ, +
104140 16: $VK, +
104141 17: $VL, +
104142 18: $VM, +
104143 30: $VN, +
104144 33: 148, +
104145 35: $VO, +
104146 36: $VP, +
104147 46: 117, +
104148 47: $VQ, +
104149 51: $VR, +
104150 61: $VS, +
104151 67: 108, +
104152 70: 120, +
104153 71: $VT, +
104154 72: $VU, +
104155 73: $VV, +
104156 74: $VW, +
104157 75: $VX, +
104158 77: 110, +
104159 78: $VY, +
104160 84: $VZ, +
104161 85: $Vi, +
104162 86: $Vj, +
104163 89: $Vk, +
104164 90: $Vl, +
104165 92: $Vm, +
104166 93: $Vn, +
104167 95: $Vo, +
104168 96: $Vp, +
104169 97: $Vq, +
104170 98: $Vr, +
104171 99: $Vs +
104172 }, o($Vy, [2, 58]), o($VA, [2, 60]), o($Vy, [2, 29], { +
104173 21: 149, +
104174 10: $Vz +
104175 }), o($V3, [2, 11]), o($V3, [2, 21]), o($V3, [2, 22]), { +
104176 9: [1, 150] +
104177 }, o($V3, [2, 12]), o($V3, [2, 13]), o($V3, [2, 14]), o($V3, [2, 15]), { +
104178 8: $Vu, +
104179 9: $Vv, +
104180 11: $Vw, +
104181 13: $V9, +
104182 18: $Va, +
104183 24: 152, +
104184 32: [1, 151], +
104185 45: 90, +
104186 46: 32, +
104187 47: $Vc, +
104188 85: $Vi, +
104189 86: $Vj, +
104190 89: $Vk, +
104191 90: $Vl, +
104192 92: $Vm, +
104193 93: $Vn, +
104194 95: $Vo, +
104195 96: $Vp, +
104196 97: $Vq, +
104197 98: $Vr, +
104198 99: $Vs +
104199 }, { +
104200 8: $Vu, +
104201 9: $Vv, +
104202 11: $Vw, +
104203 24: 153 +
104204 }, { +
104205 6: 10, +
104206 7: 11, +
104207 8: $V5, +
104208 9: $V6, +
104209 10: $V7, +
104210 11: $V8, +
104211 13: $V9, +
104212 18: $Va, +
104213 23: 16, +
104214 25: 17, +
104215 26: 18, +
104216 27: 19, +
104217 28: 20, +
104218 29: 21, +
104219 30: $Vb, +
104220 31: 29, +
104221 35: [1, 154], +
104222 37: 23, +
104223 45: 30, +
104224 46: 32, +
104225 47: $Vc, +
104226 71: $Vd, +
104227 72: $Ve, +
104228 73: $Vf, +
104229 74: $Vg, +
104230 75: $Vh, +
104231 85: $Vi, +
104232 86: $Vj, +
104233 89: $Vk, +
104234 90: $Vl, +
104235 92: $Vm, +
104236 93: $Vn, +
104237 95: $Vo, +
104238 96: $Vp, +
104239 97: $Vq, +
104240 98: $Vr, +
104241 99: $Vs +
104242 }, o($Vx, [2, 43]), o($VF, [2, 65], { +
104243 10: [1, 155] +
104244 }), { +
104245 10: [1, 156] +
104246 }, { +
104247 10: $VG, +
104248 12: $VH, +
104249 13: $VI, +
104250 15: $VJ, +
104251 16: $VK, +
104252 17: $VL, +
104253 18: $VM, +
104254 30: $VN, +
104255 33: 157, +
104256 35: $VO, +
104257 36: $VP, +
104258 46: 117, +
104259 47: $VQ, +
104260 51: $VR, +
104261 61: $VS, +
104262 67: 108, +
104263 70: 120, +
104264 71: $VT, +
104265 72: $VU, +
104266 73: $VV, +
104267 74: $VW, +
104268 75: $VX, +
104269 77: 110, +
104270 78: $VY, +
104271 84: $VZ, +
104272 85: $Vi, +
104273 86: $Vj, +
104274 89: $Vk, +
104275 90: $Vl, +
104276 92: $Vm, +
104277 93: $Vn, +
104278 95: $Vo, +
104279 96: $Vp, +
104280 97: $Vq, +
104281 98: $Vr, +
104282 99: $Vs +
104283 }, { +
104284 10: $VG, +
104285 12: $VH, +
104286 13: $VI, +
104287 15: $VJ, +
104288 16: $VK, +
104289 17: $VL, +
104290 18: $VM, +
104291 30: $VN, +
104292 35: $VO, +
104293 46: 117, +
104294 47: $VQ, +
104295 51: $VR, +
104296 52: [1, 158], +
104297 53: [1, 159], +
104298 54: [1, 160], +
104299 55: [1, 161], +
104300 61: $VS, +
104301 67: 162, +
104302 70: 120, +
104303 71: $VT, +
104304 72: $VU, +
104305 73: $VV, +
104306 74: $VW, +
104307 75: $VX, +
104308 77: 110, +
104309 78: $VY, +
104310 84: $VZ, +
104311 85: $Vi, +
104312 86: $Vj, +
104313 89: $Vk, +
104314 90: $Vl, +
104315 92: $Vm, +
104316 93: $Vn, +
104317 95: $Vo, +
104318 96: $Vp, +
104319 97: $Vq, +
104320 98: $Vr, +
104321 99: $Vs +
104322 }, o($V$, [2, 94]), o($V$, [2, 96]), o($V$, [2, 147]), o($V$, [2, 148]), o($V$, [2, 149]), o($V$, [2, 150]), o($V$, [2, 151]), o($V$, [2, 152]), o($V$, [2, 153]), o($V$, [2, 154]), o($V$, [2, 155]), o($V$, [2, 156]), o($V$, [2, 157]), o($V$, [2, 99]), o($V$, [2, 100]), o($V$, [2, 101]), o($V$, [2, 102]), o($V$, [2, 103]), o($V$, [2, 104]), o($V$, [2, 105]), o($V$, [2, 106]), o($V$, [2, 107]), o($V$, [2, 108]), o($V$, [2, 109]), { +
104323 10: $VG, +
104324 12: $VH, +
104325 13: $VI, +
104326 15: $VJ, +
104327 16: $VK, +
104328 17: $VL, +
104329 18: $VM, +
104330 30: $VN, +
104331 35: $VO, +
104332 46: 117, +
104333 47: $VQ, +
104334 51: $VR, +
104335 57: [1, 163], +
104336 58: [1, 164], +
104337 59: [1, 165], +
104338 60: [1, 166], +
104339 61: $VS, +
104340 67: 162, +
104341 70: 120, +
104342 71: $VT, +
104343 72: $VU, +
104344 73: $VV, +
104345 74: $VW, +
104346 75: $VX, +
104347 77: 110, +
104348 78: $VY, +
104349 84: $VZ, +
104350 85: $Vi, +
104351 86: $Vj, +
104352 89: $Vk, +
104353 90: $Vl, +
104354 92: $Vm, +
104355 93: $Vn, +
104356 95: $Vo, +
104357 96: $Vp, +
104358 97: $Vq, +
104359 98: $Vr, +
104360 99: $Vs +
104361 }, { +
104362 10: $VG, +
104363 12: $VH, +
104364 13: $VI, +
104365 15: $VJ, +
104366 16: $VK, +
104367 17: $VL, +
104368 18: $VM, +
104369 30: $VN, +
104370 35: $VO, +
104371 46: 117, +
104372 47: $VQ, +
104373 51: $VR, +
104374 61: $VS, +
104375 62: [1, 167], +
104376 63: [1, 168], +
104377 64: [1, 169], +
104378 65: [1, 170], +
104379 67: 162, +
104380 70: 120, +
104381 71: $VT, +
104382 72: $VU, +
104383 73: $VV, +
104384 74: $VW, +
104385 75: $VX, +
104386 77: 110, +
104387 78: $VY, +
104388 84: $VZ, +
104389 85: $Vi, +
104390 86: $Vj, +
104391 89: $Vk, +
104392 90: $Vl, +
104393 92: $Vm, +
104394 93: $Vn, +
104395 95: $Vo, +
104396 96: $Vp, +
104397 97: $Vq, +
104398 98: $Vr, +
104399 99: $Vs +
104400 }, { +
104401 10: [1, 171], +
104402 13: $V9, +
104403 18: $Va, +
104404 45: 90, +
104405 46: 32, +
104406 47: $Vc, +
104407 85: $Vi, +
104408 86: $Vj, +
104409 89: $Vk, +
104410 90: $Vl, +
104411 92: $Vm, +
104412 93: $Vn, +
104413 95: $Vo, +
104414 96: $Vp, +
104415 97: $Vq, +
104416 98: $Vr, +
104417 99: $Vs +
104418 }, { +
104419 10: [1, 172] +
104420 }, { +
104421 10: [1, 173] +
104422 }, { +
104423 10: [1, 174], +
104424 86: [1, 175] +
104425 }, o($V01, [2, 128]), { +
104426 10: [1, 176] +
104427 }, { +
104428 10: [1, 177], +
104429 13: $V9, +
104430 18: $Va, +
104431 45: 90, +
104432 46: 32, +
104433 47: $Vc, +
104434 85: $Vi, +
104435 86: $Vj, +
104436 89: $Vk, +
104437 90: $Vl, +
104438 92: $Vm, +
104439 93: $Vn, +
104440 95: $Vo, +
104441 96: $Vp, +
104442 97: $Vq, +
104443 98: $Vr, +
104444 99: $Vs +
104445 }, { +
104446 10: [1, 178], +
104447 13: $V9, +
104448 18: $Va, +
104449 45: 90, +
104450 46: 32, +
104451 47: $Vc, +
104452 85: $Vi, +
104453 86: $Vj, +
104454 89: $Vk, +
104455 90: $Vl, +
104456 92: $Vm, +
104457 93: $Vn, +
104458 95: $Vo, +
104459 96: $Vp, +
104460 97: $Vq, +
104461 98: $Vr, +
104462 99: $Vs +
104463 }, { +
104464 10: [1, 179], +
104465 13: $V9, +
104466 18: $Va, +
104467 45: 90, +
104468 46: 32, +
104469 47: $Vc, +
104470 85: $Vi, +
104471 86: $Vj, +
104472 89: $Vk, +
104473 90: $Vl, +
104474 92: $Vm, +
104475 93: $Vn, +
104476 95: $Vo, +
104477 96: $Vp, +
104478 97: $Vq, +
104479 98: $Vr, +
104480 99: $Vs +
104481 }, { +
104482 10: $VG, +
104483 12: $VH, +
104484 13: $VI, +
104485 15: $VJ, +
104486 16: $VK, +
104487 17: $VL, +
104488 18: $VM, +
104489 30: $VN, +
104490 34: [1, 180], +
104491 35: $VO, +
104492 46: 117, +
104493 47: $VQ, +
104494 51: $VR, +
104495 61: $VS, +
104496 67: 162, +
104497 70: 120, +
104498 71: $VT, +
104499 72: $VU, +
104500 73: $VV, +
104501 74: $VW, +
104502 75: $VX, +
104503 77: 110, +
104504 78: $VY, +
104505 84: $VZ, +
104506 85: $Vi, +
104507 86: $Vj, +
104508 89: $Vk, +
104509 90: $Vl, +
104510 92: $Vm, +
104511 93: $Vn, +
104512 95: $Vo, +
104513 96: $Vp, +
104514 97: $Vq, +
104515 98: $Vr, +
104516 99: $Vs +
104517 }, { +
104518 10: $VG, +
104519 12: $VH, +
104520 13: $VI, +
104521 15: $VJ, +
104522 16: $VK, +
104523 17: $VL, +
104524 18: $VM, +
104525 30: $VN, +
104526 33: 181, +
104527 35: $VO, +
104528 36: $VP, +
104529 46: 117, +
104530 47: $VQ, +
104531 51: $VR, +
104532 61: $VS, +
104533 67: 108, +
104534 70: 120, +
104535 71: $VT, +
104536 72: $VU, +
104537 73: $VV, +
104538 74: $VW, +
104539 75: $VX, +
104540 77: 110, +
104541 78: $VY, +
104542 84: $VZ, +
104543 85: $Vi, +
104544 86: $Vj, +
104545 89: $Vk, +
104546 90: $Vl, +
104547 92: $Vm, +
104548 93: $Vn, +
104549 95: $Vo, +
104550 96: $Vp, +
104551 97: $Vq, +
104552 98: $Vr, +
104553 99: $Vs +
104554 }, { +
104555 10: $VG, +
104556 12: $VH, +
104557 13: $VI, +
104558 15: $VJ, +
104559 16: $VK, +
104560 17: $VL, +
104561 18: $VM, +
104562 30: $VN, +
104563 35: $VO, +
104564 40: [1, 182], +
104565 46: 117, +
104566 47: $VQ, +
104567 51: $VR, +
104568 61: $VS, +
104569 67: 162, +
104570 70: 120, +
104571 71: $VT, +
104572 72: $VU, +
104573 73: $VV, +
104574 74: $VW, +
104575 75: $VX, +
104576 77: 110, +
104577 78: $VY, +
104578 84: $VZ, +
104579 85: $Vi, +
104580 86: $Vj, +
104581 89: $Vk, +
104582 90: $Vl, +
104583 92: $Vm, +
104584 93: $Vn, +
104585 95: $Vo, +
104586 96: $Vp, +
104587 97: $Vq, +
104588 98: $Vr, +
104589 99: $Vs +
104590 }, { +
104591 10: $VG, +
104592 12: $VH, +
104593 13: $VI, +
104594 15: $VJ, +
104595 16: $VK, +
104596 17: $VL, +
104597 18: $VM, +
104598 30: $VN, +
104599 35: $VO, +
104600 42: [1, 183], +
104601 46: 117, +
104602 47: $VQ, +
104603 51: $VR, +
104604 61: $VS, +
104605 67: 162, +
104606 70: 120, +
104607 71: $VT, +
104608 72: $VU, +
104609 73: $VV, +
104610 74: $VW, +
104611 75: $VX, +
104612 77: 110, +
104613 78: $VY, +
104614 84: $VZ, +
104615 85: $Vi, +
104616 86: $Vj, +
104617 89: $Vk, +
104618 90: $Vl, +
104619 92: $Vm, +
104620 93: $Vn, +
104621 95: $Vo, +
104622 96: $Vp, +
104623 97: $Vq, +
104624 98: $Vr, +
104625 99: $Vs +
104626 }, { +
104627 10: $VG, +
104628 12: $VH, +
104629 13: $VI, +
104630 15: $VJ, +
104631 16: $VK, +
104632 17: $VL, +
104633 18: $VM, +
104634 30: $VN, +
104635 35: $VO, +
104636 44: [1, 184], +
104637 46: 117, +
104638 47: $VQ, +
104639 51: $VR, +
104640 61: $VS, +
104641 67: 162, +
104642 70: 120, +
104643 71: $VT, +
104644 72: $VU, +
104645 73: $VV, +
104646 74: $VW, +
104647 75: $VX, +
104648 77: 110, +
104649 78: $VY, +
104650 84: $VZ, +
104651 85: $Vi, +
104652 86: $Vj, +
104653 89: $Vk, +
104654 90: $Vl, +
104655 92: $Vm, +
104656 93: $Vn, +
104657 95: $Vo, +
104658 96: $Vp, +
104659 97: $Vq, +
104660 98: $Vr, +
104661 99: $Vs +
104662 }, { +
104663 10: $VG, +
104664 12: $VH, +
104665 13: $VI, +
104666 15: $VJ, +
104667 16: $VK, +
104668 17: $VL, +
104669 18: $VM, +
104670 30: $VN, +
104671 34: [1, 185], +
104672 35: $VO, +
104673 46: 117, +
104674 47: $VQ, +
104675 51: $VR, +
104676 61: $VS, +
104677 67: 162, +
104678 70: 120, +
104679 71: $VT, +
104680 72: $VU, +
104681 73: $VV, +
104682 74: $VW, +
104683 75: $VX, +
104684 77: 110, +
104685 78: $VY, +
104686 84: $VZ, +
104687 85: $Vi, +
104688 86: $Vj, +
104689 89: $Vk, +
104690 90: $Vl, +
104691 92: $Vm, +
104692 93: $Vn, +
104693 95: $Vo, +
104694 96: $Vp, +
104695 97: $Vq, +
104696 98: $Vr, +
104697 99: $Vs +
104698 }, o($Vy, [2, 28]), o($V3, [2, 23]), { +
104699 10: $VG, +
104700 12: $VH, +
104701 13: $VI, +
104702 15: $VJ, +
104703 16: $VK, +
104704 17: $VL, +
104705 18: $VM, +
104706 30: $VN, +
104707 33: 186, +
104708 35: $VO, +
104709 36: $VP, +
104710 46: 117, +
104711 47: $VQ, +
104712 51: $VR, +
104713 61: $VS, +
104714 67: 108, +
104715 70: 120, +
104716 71: $VT, +
104717 72: $VU, +
104718 73: $VV, +
104719 74: $VW, +
104720 75: $VX, +
104721 77: 110, +
104722 78: $VY, +
104723 84: $VZ, +
104724 85: $Vi, +
104725 86: $Vj, +
104726 89: $Vk, +
104727 90: $Vl, +
104728 92: $Vm, +
104729 93: $Vn, +
104730 95: $Vo, +
104731 96: $Vp, +
104732 97: $Vq, +
104733 98: $Vr, +
104734 99: $Vs +
104735 }, o($VE, $V4, { +
104736 5: 187 +
104737 }), o($VE, $V4, { +
104738 5: 188 +
104739 }), o($Vt, [2, 39]), o($VF, [2, 67]), o($VF, [2, 66]), { +
104740 10: $VG, +
104741 12: $VH, +
104742 13: $VI, +
104743 15: $VJ, +
104744 16: $VK, +
104745 17: $VL, +
104746 18: $VM, +
104747 30: $VN, +
104748 35: $VO, +
104749 46: 117, +
104750 47: $VQ, +
104751 51: $VR, +
104752 61: $VS, +
104753 66: [1, 189], +
104754 67: 162, +
104755 70: 120, +
104756 71: $VT, +
104757 72: $VU, +
104758 73: $VV, +
104759 74: $VW, +
104760 75: $VX, +
104761 77: 110, +
104762 78: $VY, +
104763 84: $VZ, +
104764 85: $Vi, +
104765 86: $Vj, +
104766 89: $Vk, +
104767 90: $Vl, +
104768 92: $Vm, +
104769 93: $Vn, +
104770 95: $Vo, +
104771 96: $Vp, +
104772 97: $Vq, +
104773 98: $Vr, +
104774 99: $Vs +
104775 }, o($VF, [2, 69]), o($VF, [2, 70]), o($VF, [2, 71]), o($VF, [2, 72]), o($V$, [2, 95]), o($VF, [2, 73]), o($VF, [2, 74]), o($VF, [2, 75]), o($VF, [2, 76]), o($VF, [2, 77]), o($VF, [2, 78]), o($VF, [2, 79]), o($VF, [2, 80]), { +
104776 10: $V11, +
104777 47: $V21, +
104778 71: $V31, +
104779 79: 190, +
104780 80: $V41, +
104781 84: $V51, +
104782 85: $V61, +
104783 87: 191, +
104784 88: 192, +
104785 89: $V71, +
104786 90: $V81, +
104787 91: $V91, +
104788 92: $Va1, +
104789 93: $Vb1 +
104790 }, { +
104791 10: $V11, +
104792 47: $V21, +
104793 71: $V31, +
104794 79: 204, +
104795 80: $V41, +
104796 84: $V51, +
104797 85: $V61, +
104798 87: 191, +
104799 88: 192, +
104800 89: $V71, +
104801 90: $V81, +
104802 91: $V91, +
104803 92: $Va1, +
104804 93: $Vb1 +
104805 }, { +
104806 10: $V11, +
104807 47: $V21, +
104808 71: $V31, +
104809 79: 205, +
104810 80: $V41, +
104811 82: [1, 206], +
104812 84: $V51, +
104813 85: $V61, +
104814 87: 191, +
104815 88: 192, +
104816 89: $V71, +
104817 90: $V81, +
104818 91: $V91, +
104819 92: $Va1, +
104820 93: $Vb1 +
104821 }, { +
104822 10: $V11, +
104823 47: $V21, +
104824 71: $V31, +
104825 79: 207, +
104826 80: $V41, +
104827 82: [1, 208], +
104828 84: $V51, +
104829 85: $V61, +
104830 87: 191, +
104831 88: 192, +
104832 89: $V71, +
104833 90: $V81, +
104834 91: $V91, +
104835 92: $Va1, +
104836 93: $Vb1 +
104837 }, { +
104838 85: [1, 209] +
104839 }, { +
104840 10: $V11, +
104841 47: $V21, +
104842 71: $V31, +
104843 79: 210, +
104844 80: $V41, +
104845 84: $V51, +
104846 85: $V61, +
104847 87: 191, +
104848 88: 192, +
104849 89: $V71, +
104850 90: $V81, +
104851 91: $V91, +
104852 92: $Va1, +
104853 93: $Vb1 +
104854 }, { +
104855 10: $V11, +
104856 47: $V21, +
104857 71: $V31, +
104858 79: 211, +
104859 80: $V41, +
104860 84: $V51, +
104861 85: $V61, +
104862 87: 191, +
104863 88: 192, +
104864 89: $V71, +
104865 90: $V81, +
104866 91: $V91, +
104867 92: $Va1, +
104868 93: $Vb1 +
104869 }, { +
104870 13: $V9, +
104871 18: $Va, +
104872 31: 212, +
104873 45: 30, +
104874 46: 32, +
104875 47: $Vc, +
104876 85: $Vi, +
104877 86: $Vj, +
104878 89: $Vk, +
104879 90: $Vl, +
104880 92: $Vm, +
104881 93: $Vn, +
104882 95: $Vo, +
104883 96: $Vp, +
104884 97: $Vq, +
104885 98: $Vr, +
104886 99: $Vs +
104887 }, { +
104888 13: $V9, +
104889 18: $Va, +
104890 31: 213, +
104891 36: [1, 214], +
104892 45: 30, +
104893 46: 32, +
104894 47: $Vc, +
104895 85: $Vi, +
104896 86: $Vj, +
104897 89: $Vk, +
104898 90: $Vl, +
104899 92: $Vm, +
104900 93: $Vn, +
104901 95: $Vo, +
104902 96: $Vp, +
104903 97: $Vq, +
104904 98: $Vr, +
104905 99: $Vs +
104906 }, o($Vy, [2, 45], { +
104907 21: 215, +
104908 10: $Vz +
104909 }), { +
104910 10: $VG, +
104911 12: $VH, +
104912 13: $VI, +
104913 15: $VJ, +
104914 16: $VK, +
104915 17: $VL, +
104916 18: $VM, +
104917 30: $VN, +
104918 35: $VO, +
104919 40: [1, 216], +
104920 46: 117, +
104921 47: $VQ, +
104922 51: $VR, +
104923 61: $VS, +
104924 67: 162, +
104925 70: 120, +
104926 71: $VT, +
104927 72: $VU, +
104928 73: $VV, +
104929 74: $VW, +
104930 75: $VX, +
104931 77: 110, +
104932 78: $VY, +
104933 84: $VZ, +
104934 85: $Vi, +
104935 86: $Vj, +
104936 89: $Vk, +
104937 90: $Vl, +
104938 92: $Vm, +
104939 93: $Vn, +
104940 95: $Vo, +
104941 96: $Vp, +
104942 97: $Vq, +
104943 98: $Vr, +
104944 99: $Vs +
104945 }, o($Vy, [2, 51], { +
104946 21: 217, +
104947 10: $Vz +
104948 }), o($Vy, [2, 49], { +
104949 21: 218, +
104950 10: $Vz +
104951 }), o($Vy, [2, 53], { +
104952 21: 219, +
104953 10: $Vz +
104954 }), o($Vy, [2, 55], { +
104955 21: 220, +
104956 10: $Vz +
104957 }), { +
104958 10: $VG, +
104959 12: $VH, +
104960 13: $VI, +
104961 15: $VJ, +
104962 16: $VK, +
104963 17: $VL, +
104964 18: $VM, +
104965 30: $VN, +
104966 34: [1, 221], +
104967 35: $VO, +
104968 46: 117, +
104969 47: $VQ, +
104970 51: $VR, +
104971 61: $VS, +
104972 67: 162, +
104973 70: 120, +
104974 71: $VT, +
104975 72: $VU, +
104976 73: $VV, +
104977 74: $VW, +
104978 75: $VX, +
104979 77: 110, +
104980 78: $VY, +
104981 84: $VZ, +
104982 85: $Vi, +
104983 86: $Vj, +
104984 89: $Vk, +
104985 90: $Vl, +
104986 92: $Vm, +
104987 93: $Vn, +
104988 95: $Vo, +
104989 96: $Vp, +
104990 97: $Vq, +
104991 98: $Vr, +
104992 99: $Vs +
104993 }, { +
104994 6: 10, +
104995 7: 11, +
104996 8: $V5, +
104997 9: $V6, +
104998 10: $V7, +
104999 11: $V8, +
105000 13: $V9, +
105001 18: $Va, +
105002 23: 16, +
105003 25: 17, +
105004 26: 18, +
105005 27: 19, +
105006 28: 20, +
105007 29: 21, +
105008 30: $Vb, +
105009 31: 29, +
105010 35: [1, 222], +
105011 37: 23, +
105012 45: 30, +
105013 46: 32, +
105014 47: $Vc, +
105015 71: $Vd, +
105016 72: $Ve, +
105017 73: $Vf, +
105018 74: $Vg, +
105019 75: $Vh, +
105020 85: $Vi, +
105021 86: $Vj, +
105022 89: $Vk, +
105023 90: $Vl, +
105024 92: $Vm, +
105025 93: $Vn, +
105026 95: $Vo, +
105027 96: $Vp, +
105028 97: $Vq, +
105029 98: $Vr, +
105030 99: $Vs +
105031 }, { +
105032 6: 10, +
105033 7: 11, +
105034 8: $V5, +
105035 9: $V6, +
105036 10: $V7, +
105037 11: $V8, +
105038 13: $V9, +
105039 18: $Va, +
105040 23: 16, +
105041 25: 17, +
105042 26: 18, +
105043 27: 19, +
105044 28: 20, +
105045 29: 21, +
105046 30: $Vb, +
105047 31: 29, +
105048 35: [1, 223], +
105049 37: 23, +
105050 45: 30, +
105051 46: 32, +
105052 47: $Vc, +
105053 71: $Vd, +
105054 72: $Ve, +
105055 73: $Vf, +
105056 74: $Vg, +
105057 75: $Vh, +
105058 85: $Vi, +
105059 86: $Vj, +
105060 89: $Vk, +
105061 90: $Vl, +
105062 92: $Vm, +
105063 93: $Vn, +
105064 95: $Vo, +
105065 96: $Vp, +
105066 97: $Vq, +
105067 98: $Vr, +
105068 99: $Vs +
105069 }, o([10, 13, 18, 47, 85, 86, 89, 90, 92, 93, 95, 96, 97, 98, 99], [2, 93]), o($Vx, [2, 119], { +
105070 86: $Vc1 +
105071 }), o($Vd1, [2, 130], { +
105072 88: 225, +
105073 10: $V11, +
105074 47: $V21, +
105075 71: $V31, +
105076 80: $V41, +
105077 84: $V51, +
105078 85: $V61, +
105079 89: $V71, +
105080 90: $V81, +
105081 91: $V91, +
105082 92: $Va1, +
105083 93: $Vb1 +
105084 }), o($Ve1, [2, 132]), o($Ve1, [2, 134]), o($Ve1, [2, 135]), o($Ve1, [2, 136]), o($Ve1, [2, 137]), o($Ve1, [2, 138]), o($Ve1, [2, 139]), o($Ve1, [2, 140]), o($Ve1, [2, 141]), o($Ve1, [2, 142]), o($Ve1, [2, 143]), o($Ve1, [2, 144]), o($Vx, [2, 120], { +
105085 86: $Vc1 +
105086 }), o($Vx, [2, 121], { +
105087 86: $Vc1 +
105088 }), { +
105089 10: [1, 226] +
105090 }, o($Vx, [2, 122], { +
105091 86: $Vc1 +
105092 }), { +
105093 10: [1, 227] +
105094 }, o($V01, [2, 129]), o($Vx, [2, 112], { +
105095 86: $Vc1 +
105096 }), o($Vx, [2, 113], { +
105097 86: $Vc1 +
105098 }), o($Vx, [2, 114], { +
105099 46: 32, +
105100 45: 90, +
105101 13: $V9, +
105102 18: $Va, +
105103 47: $Vc, +
105104 85: $Vi, +
105105 86: $Vj, +
105106 89: $Vk, +
105107 90: $Vl, +
105108 92: $Vm, +
105109 93: $Vn, +
105110 95: $Vo, +
105111 96: $Vp, +
105112 97: $Vq, +
105113 98: $Vr, +
105114 99: $Vs +
105115 }), o($Vx, [2, 115], { +
105116 46: 32, +
105117 45: 90, +
105118 10: [1, 228], +
105119 13: $V9, +
105120 18: $Va, +
105121 47: $Vc, +
105122 85: $Vi, +
105123 86: $Vj, +
105124 89: $Vk, +
105125 90: $Vl, +
105126 92: $Vm, +
105127 93: $Vn, +
105128 95: $Vo, +
105129 96: $Vp, +
105130 97: $Vq, +
105131 98: $Vr, +
105132 99: $Vs +
105133 }), o($Vx, [2, 117], { +
105134 10: [1, 229] +
105135 }), o($Vy, [2, 46]), { +
105136 40: [1, 230] +
105137 }, o($Vy, [2, 52]), o($Vy, [2, 50]), o($Vy, [2, 54]), o($Vy, [2, 56]), { +
105138 8: $Vu, +
105139 9: $Vv, +
105140 11: $Vw, +
105141 24: 231 +
105142 }, o($Vt, [2, 38]), o($Vt, [2, 37]), { +
105143 10: $V11, +
105144 47: $V21, +
105145 71: $V31, +
105146 80: $V41, +
105147 84: $V51, +
105148 85: $V61, +
105149 87: 232, +
105150 88: 192, +
105151 89: $V71, +
105152 90: $V81, +
105153 91: $V91, +
105154 92: $Va1, +
105155 93: $Vb1 +
105156 }, o($Ve1, [2, 133]), { +
105157 13: $V9, +
105158 18: $Va, +
105159 31: 233, +
105160 45: 30, +
105161 46: 32, +
105162 47: $Vc, +
105163 85: $Vi, +
105164 86: $Vj, +
105165 89: $Vk, +
105166 90: $Vl, +
105167 92: $Vm, +
105168 93: $Vn, +
105169 95: $Vo, +
105170 96: $Vp, +
105171 97: $Vq, +
105172 98: $Vr, +
105173 99: $Vs +
105174 }, { +
105175 13: $V9, +
105176 18: $Va, +
105177 31: 234, +
105178 45: 30, +
105179 46: 32, +
105180 47: $Vc, +
105181 85: $Vi, +
105182 86: $Vj, +
105183 89: $Vk, +
105184 90: $Vl, +
105185 92: $Vm, +
105186 93: $Vn, +
105187 95: $Vo, +
105188 96: $Vp, +
105189 97: $Vq, +
105190 98: $Vr, +
105191 99: $Vs +
105192 }, { +
105193 36: [1, 235] +
105194 }, { +
105195 36: [1, 236] +
105196 }, o($Vy, [2, 47], { +
105197 21: 237, +
105198 10: $Vz +
105199 }), o($VE, $V4, { +
105200 5: 238 +
105201 }), o($Vd1, [2, 131], { +
105202 88: 225, +
105203 10: $V11, +
105204 47: $V21, +
105205 71: $V31, +
105206 80: $V41, +
105207 84: $V51, +
105208 85: $V61, +
105209 89: $V71, +
105210 90: $V81, +
105211 91: $V91, +
105212 92: $Va1, +
105213 93: $Vb1 +
105214 }), o($Vx, [2, 125], { +
105215 46: 32, +
105216 45: 90, +
105217 10: [1, 239], +
105218 13: $V9, +
105219 18: $Va, +
105220 47: $Vc, +
105221 85: $Vi, +
105222 86: $Vj, +
105223 89: $Vk, +
105224 90: $Vl, +
105225 92: $Vm, +
105226 93: $Vn, +
105227 95: $Vo, +
105228 96: $Vp, +
105229 97: $Vq, +
105230 98: $Vr, +
105231 99: $Vs +
105232 }), o($Vx, [2, 126], { +
105233 46: 32, +
105234 45: 90, +
105235 10: [1, 240], +
105236 13: $V9, +
105237 18: $Va, +
105238 47: $Vc, +
105239 85: $Vi, +
105240 86: $Vj, +
105241 89: $Vk, +
105242 90: $Vl, +
105243 92: $Vm, +
105244 93: $Vn, +
105245 95: $Vo, +
105246 96: $Vp, +
105247 97: $Vq, +
105248 98: $Vr, +
105249 99: $Vs +
105250 }), o($Vx, [2, 116]), o($Vx, [2, 118]), o($Vy, [2, 48]), { +
105251 6: 10, +
105252 7: 11, +
105253 8: $V5, +
105254 9: $V6, +
105255 10: $V7, +
105256 11: $V8, +
105257 13: $V9, +
105258 18: $Va, +
105259 23: 16, +
105260 25: 17, +
105261 26: 18, +
105262 27: 19, +
105263 28: 20, +
105264 29: 21, +
105265 30: $Vb, +
105266 31: 29, +
105267 35: [1, 241], +
105268 37: 23, +
105269 45: 30, +
105270 46: 32, +
105271 47: $Vc, +
105272 71: $Vd, +
105273 72: $Ve, +
105274 73: $Vf, +
105275 74: $Vg, +
105276 75: $Vh, +
105277 85: $Vi, +
105278 86: $Vj, +
105279 89: $Vk, +
105280 90: $Vl, +
105281 92: $Vm, +
105282 93: $Vn, +
105283 95: $Vo, +
105284 96: $Vp, +
105285 97: $Vq, +
105286 98: $Vr, +
105287 99: $Vs +
105288 }, { +
105289 10: $V11, +
105290 47: $V21, +
105291 71: $V31, +
105292 79: 242, +
105293 80: $V41, +
105294 84: $V51, +
105295 85: $V61, +
105296 87: 191, +
105297 88: 192, +
105298 89: $V71, +
105299 90: $V81, +
105300 91: $V91, +
105301 92: $Va1, +
105302 93: $Vb1 +
105303 }, { +
105304 10: $V11, +
105305 47: $V21, +
105306 71: $V31, +
105307 79: 243, +
105308 80: $V41, +
105309 84: $V51, +
105310 85: $V61, +
105311 87: 191, +
105312 88: 192, +
105313 89: $V71, +
105314 90: $V81, +
105315 91: $V91, +
105316 92: $Va1, +
105317 93: $Vb1 +
105318 }, o($Vt, [2, 36]), o($Vx, [2, 123], { +
105319 86: $Vc1 +
105320 }), o($Vx, [2, 124], { +
105321 86: $Vc1 +
105322 })], +
105323 defaultActions: {}, +
105324 parseError: function parseError(str, hash) { +
105325 if (hash.recoverable) { +
105326 this.trace(str); +
105327 } else { +
105328 var error = new Error(str); +
105329 error.hash = hash; +
105330 throw error; +
105331 } +
105332 }, +
105333 parse: function parse(input) { +
105334 var self = this, +
105335 stack = [0], +
105336 tstack = [], +
105337 vstack = [null], +
105338 lstack = [], +
105339 table = this.table, +
105340 yytext = '', +
105341 yylineno = 0, +
105342 yyleng = 0, +
105343 recovering = 0, +
105344 TERROR = 2, +
105345 EOF = 1; +
105346 var args = lstack.slice.call(arguments, 1); +
105347 var lexer = Object.create(this.lexer); +
105348 var sharedState = { +
105349 yy: {} +
105350 }; +
105351 +
105352 for (var k in this.yy) { +
105353 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
105354 sharedState.yy[k] = this.yy[k]; +
105355 } +
105356 } +
105357 +
105358 lexer.setInput(input, sharedState.yy); +
105359 sharedState.yy.lexer = lexer; +
105360 sharedState.yy.parser = this; +
105361 +
105362 if (typeof lexer.yylloc == 'undefined') { +
105363 lexer.yylloc = {}; +
105364 } +
105365 +
105366 var yyloc = lexer.yylloc; +
105367 lstack.push(yyloc); +
105368 var ranges = lexer.options && lexer.options.ranges; +
105369 +
105370 if (typeof sharedState.yy.parseError === 'function') { +
105371 this.parseError = sharedState.yy.parseError; +
105372 } else { +
105373 this.parseError = Object.getPrototypeOf(this).parseError; +
105374 } +
105375 +
105376 function popStack(n) { +
105377 stack.length = stack.length - 2 * n; +
105378 vstack.length = vstack.length - n; +
105379 lstack.length = lstack.length - n; +
105380 } +
105381 +
105382 function lex() { +
105383 var token; +
105384 token = tstack.pop() || lexer.lex() || EOF; +
105385 +
105386 if (typeof token !== 'number') { +
105387 if (token instanceof Array) { +
105388 tstack = token; +
105389 token = tstack.pop(); +
105390 } +
105391 +
105392 token = self.symbols_[token] || token; +
105393 } +
105394 +
105395 return token; +
105396 } +
105397 +
105398 var symbol, +
105399 preErrorSymbol, +
105400 state, +
105401 action, +
105402 a, +
105403 r, +
105404 yyval = {}, +
105405 p, +
105406 len, +
105407 newState, +
105408 expected; +
105409 +
105410 while (true) { +
105411 state = stack[stack.length - 1]; +
105412 +
105413 if (this.defaultActions[state]) { +
105414 action = this.defaultActions[state]; +
105415 } else { +
105416 if (symbol === null || typeof symbol == 'undefined') { +
105417 symbol = lex(); +
105418 } +
105419 +
105420 action = table[state] && table[state][symbol]; +
105421 } +
105422 +
105423 if (typeof action === 'undefined' || !action.length || !action[0]) { +
105424 var errStr = ''; +
105425 expected = []; +
105426 +
105427 for (p in table[state]) { +
105428 if (this.terminals_[p] && p > TERROR) { +
105429 expected.push('\'' + this.terminals_[p] + '\''); +
105430 } +
105431 } +
105432 +
105433 if (lexer.showPosition) { +
105434 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
105435 } else { +
105436 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
105437 } +
105438 +
105439 this.parseError(errStr, { +
105440 text: lexer.match, +
105441 token: this.terminals_[symbol] || symbol, +
105442 line: lexer.yylineno, +
105443 loc: yyloc, +
105444 expected: expected +
105445 }); +
105446 } +
105447 +
105448 if (action[0] instanceof Array && action.length > 1) { +
105449 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
105450 } +
105451 +
105452 switch (action[0]) { +
105453 case 1: +
105454 stack.push(symbol); +
105455 vstack.push(lexer.yytext); +
105456 lstack.push(lexer.yylloc); +
105457 stack.push(action[1]); +
105458 symbol = null; +
105459 +
105460 if (!preErrorSymbol) { +
105461 yyleng = lexer.yyleng; +
105462 yytext = lexer.yytext; +
105463 yylineno = lexer.yylineno; +
105464 yyloc = lexer.yylloc; +
105465 +
105466 if (recovering > 0) { +
105467 recovering--; +
105468 } +
105469 } else { +
105470 symbol = preErrorSymbol; +
105471 preErrorSymbol = null; +
105472 } +
105473 +
105474 break; +
105475 +
105476 case 2: +
105477 len = this.productions_[action[1]][1]; +
105478 yyval.$ = vstack[vstack.length - len]; +
105479 yyval._$ = { +
105480 first_line: lstack[lstack.length - (len || 1)].first_line, +
105481 last_line: lstack[lstack.length - 1].last_line, +
105482 first_column: lstack[lstack.length - (len || 1)].first_column, +
105483 last_column: lstack[lstack.length - 1].last_column +
105484 }; +
105485 +
105486 if (ranges) { +
105487 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
105488 } +
105489 +
105490 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
105491 +
105492 if (typeof r !== 'undefined') { +
105493 return r; +
105494 } +
105495 +
105496 if (len) { +
105497 stack = stack.slice(0, -1 * len * 2); +
105498 vstack = vstack.slice(0, -1 * len); +
105499 lstack = lstack.slice(0, -1 * len); +
105500 } +
105501 +
105502 stack.push(this.productions_[action[1]][0]); +
105503 vstack.push(yyval.$); +
105504 lstack.push(yyval._$); +
105505 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
105506 stack.push(newState); +
105507 break; +
105508 +
105509 case 3: +
105510 return true; +
105511 } +
105512 } +
105513 +
105514 return true; +
105515 } +
105516 }; +
105517 /* generated by jison-lex 0.3.4 */ +
105518 +
105519 var lexer = function () { +
105520 var lexer = { +
105521 EOF: 1, +
105522 parseError: function parseError(str, hash) { +
105523 if (this.yy.parser) { +
105524 this.yy.parser.parseError(str, hash); +
105525 } else { +
105526 throw new Error(str); +
105527 } +
105528 }, +
105529 // resets the lexer, sets new input +
105530 setInput: function (input, yy) { +
105531 this.yy = yy || this.yy || {}; +
105532 this._input = input; +
105533 this._more = this._backtrack = this.done = false; +
105534 this.yylineno = this.yyleng = 0; +
105535 this.yytext = this.matched = this.match = ''; +
105536 this.conditionStack = ['INITIAL']; +
105537 this.yylloc = { +
105538 first_line: 1, +
105539 first_column: 0, +
105540 last_line: 1, +
105541 last_column: 0 +
105542 }; +
105543 +
105544 if (this.options.ranges) { +
105545 this.yylloc.range = [0, 0]; +
105546 } +
105547 +
105548 this.offset = 0; +
105549 return this; +
105550 }, +
105551 // consumes and returns one char from the input +
105552 input: function () { +
105553 var ch = this._input[0]; +
105554 this.yytext += ch; +
105555 this.yyleng++; +
105556 this.offset++; +
105557 this.match += ch; +
105558 this.matched += ch; +
105559 var lines = ch.match(/(?:\r\n?|\n).*/g); +
105560 +
105561 if (lines) { +
105562 this.yylineno++; +
105563 this.yylloc.last_line++; +
105564 } else { +
105565 this.yylloc.last_column++; +
105566 } +
105567 +
105568 if (this.options.ranges) { +
105569 this.yylloc.range[1]++; +
105570 } +
105571 +
105572 this._input = this._input.slice(1); +
105573 return ch; +
105574 }, +
105575 // unshifts one char (or a string) into the input +
105576 unput: function (ch) { +
105577 var len = ch.length; +
105578 var lines = ch.split(/(?:\r\n?|\n)/g); +
105579 this._input = ch + this._input; +
105580 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
105581 +
105582 this.offset -= len; +
105583 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
105584 this.match = this.match.substr(0, this.match.length - 1); +
105585 this.matched = this.matched.substr(0, this.matched.length - 1); +
105586 +
105587 if (lines.length - 1) { +
105588 this.yylineno -= lines.length - 1; +
105589 } +
105590 +
105591 var r = this.yylloc.range; +
105592 this.yylloc = { +
105593 first_line: this.yylloc.first_line, +
105594 last_line: this.yylineno + 1, +
105595 first_column: this.yylloc.first_column, +
105596 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
105597 }; +
105598 +
105599 if (this.options.ranges) { +
105600 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
105601 } +
105602 +
105603 this.yyleng = this.yytext.length; +
105604 return this; +
105605 }, +
105606 // When called from action, caches matched text and appends it on next action +
105607 more: function () { +
105608 this._more = true; +
105609 return this; +
105610 }, +
105611 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
105612 reject: function () { +
105613 if (this.options.backtrack_lexer) { +
105614 this._backtrack = true; +
105615 } else { +
105616 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
105617 text: "", +
105618 token: null, +
105619 line: this.yylineno +
105620 }); +
105621 } +
105622 +
105623 return this; +
105624 }, +
105625 // retain first n characters of the match +
105626 less: function (n) { +
105627 this.unput(this.match.slice(n)); +
105628 }, +
105629 // displays already matched input, i.e. for error messages +
105630 pastInput: function () { +
105631 var past = this.matched.substr(0, this.matched.length - this.match.length); +
105632 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
105633 }, +
105634 // displays upcoming input, i.e. for error messages +
105635 upcomingInput: function () { +
105636 var next = this.match; +
105637 +
105638 if (next.length < 20) { +
105639 next += this._input.substr(0, 20 - next.length); +
105640 } +
105641 +
105642 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
105643 }, +
105644 // displays the character position where the lexing error occurred, i.e. for error messages +
105645 showPosition: function () { +
105646 var pre = this.pastInput(); +
105647 var c = new Array(pre.length + 1).join("-"); +
105648 return pre + this.upcomingInput() + "\n" + c + "^"; +
105649 }, +
105650 // test the lexed token: return FALSE when not a match, otherwise return token +
105651 test_match: function (match, indexed_rule) { +
105652 var token, lines, backup; +
105653 +
105654 if (this.options.backtrack_lexer) { +
105655 // save context +
105656 backup = { +
105657 yylineno: this.yylineno, +
105658 yylloc: { +
105659 first_line: this.yylloc.first_line, +
105660 last_line: this.last_line, +
105661 first_column: this.yylloc.first_column, +
105662 last_column: this.yylloc.last_column +
105663 }, +
105664 yytext: this.yytext, +
105665 match: this.match, +
105666 matches: this.matches, +
105667 matched: this.matched, +
105668 yyleng: this.yyleng, +
105669 offset: this.offset, +
105670 _more: this._more, +
105671 _input: this._input, +
105672 yy: this.yy, +
105673 conditionStack: this.conditionStack.slice(0), +
105674 done: this.done +
105675 }; +
105676 +
105677 if (this.options.ranges) { +
105678 backup.yylloc.range = this.yylloc.range.slice(0); +
105679 } +
105680 } +
105681 +
105682 lines = match[0].match(/(?:\r\n?|\n).*/g); +
105683 +
105684 if (lines) { +
105685 this.yylineno += lines.length; +
105686 } +
105687 +
105688 this.yylloc = { +
105689 first_line: this.yylloc.last_line, +
105690 last_line: this.yylineno + 1, +
105691 first_column: this.yylloc.last_column, +
105692 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
105693 }; +
105694 this.yytext += match[0]; +
105695 this.match += match[0]; +
105696 this.matches = match; +
105697 this.yyleng = this.yytext.length; +
105698 +
105699 if (this.options.ranges) { +
105700 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
105701 } +
105702 +
105703 this._more = false; +
105704 this._backtrack = false; +
105705 this._input = this._input.slice(match[0].length); +
105706 this.matched += match[0]; +
105707 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
105708 +
105709 if (this.done && this._input) { +
105710 this.done = false; +
105711 } +
105712 +
105713 if (token) { +
105714 return token; +
105715 } else if (this._backtrack) { +
105716 // recover context +
105717 for (var k in backup) { +
105718 this[k] = backup[k]; +
105719 } +
105720 +
105721 return false; // rule action called reject() implying the next rule should be tested instead. +
105722 } +
105723 +
105724 return false; +
105725 }, +
105726 // return next match in input +
105727 next: function () { +
105728 if (this.done) { +
105729 return this.EOF; +
105730 } +
105731 +
105732 if (!this._input) { +
105733 this.done = true; +
105734 } +
105735 +
105736 var token, match, tempMatch, index; +
105737 +
105738 if (!this._more) { +
105739 this.yytext = ''; +
105740 this.match = ''; +
105741 } +
105742 +
105743 var rules = this._currentRules(); +
105744 +
105745 for (var i = 0; i < rules.length; i++) { +
105746 tempMatch = this._input.match(this.rules[rules[i]]); +
105747 +
105748 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
105749 match = tempMatch; +
105750 index = i; +
105751 +
105752 if (this.options.backtrack_lexer) { +
105753 token = this.test_match(tempMatch, rules[i]); +
105754 +
105755 if (token !== false) { +
105756 return token; +
105757 } else if (this._backtrack) { +
105758 match = false; +
105759 continue; // rule action called reject() implying a rule MISmatch. +
105760 } else { +
105761 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
105762 return false; +
105763 } +
105764 } else if (!this.options.flex) { +
105765 break; +
105766 } +
105767 } +
105768 } +
105769 +
105770 if (match) { +
105771 token = this.test_match(match, rules[index]); +
105772 +
105773 if (token !== false) { +
105774 return token; +
105775 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
105776 +
105777 +
105778 return false; +
105779 } +
105780 +
105781 if (this._input === "") { +
105782 return this.EOF; +
105783 } else { +
105784 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
105785 text: "", +
105786 token: null, +
105787 line: this.yylineno +
105788 }); +
105789 } +
105790 }, +
105791 // return next match that has a token +
105792 lex: function lex() { +
105793 var r = this.next(); +
105794 +
105795 if (r) { +
105796 return r; +
105797 } else { +
105798 return this.lex(); +
105799 } +
105800 }, +
105801 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
105802 begin: function begin(condition) { +
105803 this.conditionStack.push(condition); +
105804 }, +
105805 // pop the previously active lexer condition state off the condition stack +
105806 popState: function popState() { +
105807 var n = this.conditionStack.length - 1; +
105808 +
105809 if (n > 0) { +
105810 return this.conditionStack.pop(); +
105811 } else { +
105812 return this.conditionStack[0]; +
105813 } +
105814 }, +
105815 // produce the lexer rule set which is active for the currently active lexer condition state +
105816 _currentRules: function _currentRules() { +
105817 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
105818 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
105819 } else { +
105820 return this.conditions["INITIAL"].rules; +
105821 } +
105822 }, +
105823 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
105824 topState: function topState(n) { +
105825 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
105826 +
105827 if (n >= 0) { +
105828 return this.conditionStack[n]; +
105829 } else { +
105830 return "INITIAL"; +
105831 } +
105832 }, +
105833 // alias for begin(condition) +
105834 pushState: function pushState(condition) { +
105835 this.begin(condition); +
105836 }, +
105837 // return the number of states currently on the stack +
105838 stateStackSize: function stateStackSize() { +
105839 return this.conditionStack.length; +
105840 }, +
105841 options: {}, +
105842 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
105843 var YYSTATE = YY_START; +
105844 +
105845 switch ($avoiding_name_collisions) { +
105846 case 0: +
105847 /* do nothing */ +
105848 break; +
105849 +
105850 case 1: +
105851 this.begin("string"); +
105852 break; +
105853 +
105854 case 2: +
105855 this.popState(); +
105856 break; +
105857 +
105858 case 3: +
105859 return "STR"; +
105860 break; +
105861 +
105862 case 4: +
105863 return 71; +
105864 break; +
105865 +
105866 case 5: +
105867 return 78; +
105868 break; +
105869 +
105870 case 6: +
105871 return 72; +
105872 break; +
105873 +
105874 case 7: +
105875 return 82; +
105876 break; +
105877 +
105878 case 8: +
105879 return 73; +
105880 break; +
105881 +
105882 case 9: +
105883 return 74; +
105884 break; +
105885 +
105886 case 10: +
105887 return 75; +
105888 break; +
105889 +
105890 case 11: +
105891 return 12; +
105892 break; +
105893 +
105894 case 12: +
105895 return 30; +
105896 break; +
105897 +
105898 case 13: +
105899 return 35; +
105900 break; +
105901 +
105902 case 14: +
105903 return 13; +
105904 break; +
105905 +
105906 case 15: +
105907 return 13; +
105908 break; +
105909 +
105910 case 16: +
105911 return 13; +
105912 break; +
105913 +
105914 case 17: +
105915 return 13; +
105916 break; +
105917 +
105918 case 18: +
105919 return 13; +
105920 break; +
105921 +
105922 case 19: +
105923 return 13; +
105924 break; +
105925 +
105926 case 20: +
105927 return 85; +
105928 break; +
105929 +
105930 case 21: +
105931 return 92; +
105932 break; +
105933 +
105934 case 22: +
105935 return 90; +
105936 break; +
105937 +
105938 case 23: +
105939 return 8; +
105940 break; +
105941 +
105942 case 24: +
105943 return 86; +
105944 break; +
105945 +
105946 case 25: +
105947 return 99; +
105948 break; +
105949 +
105950 case 26: +
105951 return 16; +
105952 break; +
105953 +
105954 case 27: +
105955 return 15; +
105956 break; +
105957 +
105958 case 28: +
105959 return 17; +
105960 break; +
105961 +
105962 case 29: +
105963 return 18; +
105964 break; +
105965 +
105966 case 30: +
105967 return 54; +
105968 break; +
105969 +
105970 case 31: +
105971 return 52; +
105972 break; +
105973 +
105974 case 32: +
105975 return 53; +
105976 break; +
105977 +
105978 case 33: +
105979 return 55; +
105980 break; +
105981 +
105982 case 34: +
105983 return 59; +
105984 break; +
105985 +
105986 case 35: +
105987 return 57; +
105988 break; +
105989 +
105990 case 36: +
105991 return 58; +
105992 break; +
105993 +
105994 case 37: +
105995 return 60; +
105996 break; +
105997 +
105998 case 38: +
105999 return 59; +
106000 break; +
106001 +
106002 case 39: +
106003 return 57; +
106004 break; +
106005 +
106006 case 40: +
106007 return 58; +
106008 break; +
106009 +
106010 case 41: +
106011 return 60; +
106012 break; +
106013 +
106014 case 42: +
106015 return 64; +
106016 break; +
106017 +
106018 case 43: +
106019 return 62; +
106020 break; +
106021 +
106022 case 44: +
106023 return 63; +
106024 break; +
106025 +
106026 case 45: +
106027 return 65; +
106028 break; +
106029 +
106030 case 46: +
106031 return 51; +
106032 break; +
106033 +
106034 case 47: +
106035 return 56; +
106036 break; +
106037 +
106038 case 48: +
106039 return 61; +
106040 break; +
106041 +
106042 case 49: +
106043 return 41; +
106044 break; +
106045 +
106046 case 50: +
106047 return 42; +
106048 break; +
106049 +
106050 case 51: +
106051 return 47; +
106052 break; +
106053 +
106054 case 52: +
106055 return 93; +
106056 break; +
106057 +
106058 case 53: +
106059 return 97; +
106060 break; +
106061 +
106062 case 54: +
106063 return 84; +
106064 break; +
106065 +
106066 case 55: +
106067 return 98; +
106068 break; +
106069 +
106070 case 56: +
106071 return 98; +
106072 break; +
106073 +
106074 case 57: +
106075 return 89; +
106076 break; +
106077 +
106078 case 58: +
106079 return 95; +
106080 break; +
106081 +
106082 case 59: +
106083 return 96; +
106084 break; +
106085 +
106086 case 60: +
106087 return 66; +
106088 break; +
106089 +
106090 case 61: +
106091 return 39; +
106092 break; +
106093 +
106094 case 62: +
106095 return 40; +
106096 break; +
106097 +
106098 case 63: +
106099 return 32; +
106100 break; +
106101 +
106102 case 64: +
106103 return 34; +
106104 break; +
106105 +
106106 case 65: +
106107 return 43; +
106108 break; +
106109 +
106110 case 66: +
106111 return 44; +
106112 break; +
106113 +
106114 case 67: +
106115 return 102; +
106116 break; +
106117 +
106118 case 68: +
106119 return 9; +
106120 break; +
106121 +
106122 case 69: +
106123 return 10; +
106124 break; +
106125 +
106126 case 70: +
106127 return 11; +
106128 break; +
106129 } +
106130 }, +
106131 rules: [/^(?:%%[^\n]*)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:click\b)/, /^(?:graph\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:LR\b)/, /^(?:RL\b)/, /^(?:TB\b)/, /^(?:BT\b)/, /^(?:TD\b)/, /^(?:BR\b)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:v\b)/, /^(?:\s*--[x]\s*)/, /^(?:\s*-->\s*)/, /^(?:\s*--[o]\s*)/, /^(?:\s*---\s*)/, /^(?:\s*-\.-[x]\s*)/, /^(?:\s*-\.->\s*)/, /^(?:\s*-\.-[o]\s*)/, /^(?:\s*-\.-\s*)/, /^(?:\s*.-[x]\s*)/, /^(?:\s*\.->\s*)/, /^(?:\s*\.-[o]\s*)/, /^(?:\s*\.-\s*)/, /^(?:\s*==[x]\s*)/, /^(?:\s*==>\s*)/, /^(?:\s*==[o]\s*)/, /^(?:\s*==[\=]\s*)/, /^(?:\s*--\s*)/, /^(?:\s*-\.\s*)/, /^(?:\s*==\s*)/, /^(?:\(-)/, /^(?:-\))/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:[A-Za-z]+)/, /^(?:[!"#$%&'*+,-.`?\\_\/])/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\()/, /^(?:\))/, /^(?:\[)/, /^(?:\])/, /^(?:\{)/, /^(?:\})/, /^(?:")/, /^(?:\n+)/, /^(?:\s)/, /^(?:$)/], +
106132 conditions: { +
106133 "string": { +
106134 "rules": [2, 3], +
106135 "inclusive": false +
106136 }, +
106137 "INITIAL": { +
106138 "rules": [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70], +
106139 "inclusive": true +
106140 } +
106141 } +
106142 }; +
106143 return lexer; +
106144 }(); +
106145 +
106146 parser.lexer = lexer; +
106147 +
106148 function Parser() { +
106149 this.yy = {}; +
106150 } +
106151 +
106152 Parser.prototype = parser; +
106153 parser.Parser = Parser; +
106154 return new Parser(); +
106155}(); +
106156 +
106157if (true) { +
106158 exports.parser = parser; +
106159 exports.Parser = parser.Parser; +
106160 +
106161 exports.parse = function () { +
106162 return parser.parse.apply(parser, arguments); +
106163 }; +
106164 +
106165 exports.main = function commonjsMain(args) { +
106166 if (!args[1]) { +
106167 console.log('Usage: ' + args[0] + ' FILE'); +
106168 process.exit(1); +
106169 } +
106170 +
106171 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
106172 +
106173 return exports.parser.parse(source); +
106174 }; +
106175 +
106176 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
106177 exports.main(process.argv.slice(1)); +
106178 } +
106179} +
106180/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
106181 +
106182/***/ }), +
106183 +
106184/***/ "./src/diagrams/gantt/ganttDb.js": +
106185/*!***************************************!*\ +
106186 !*** ./src/diagrams/gantt/ganttDb.js ***! +
106187 \***************************************/ +
106188/*! exports provided: clear, setAxisFormat, getAxisFormat, setDateFormat, setExcludes, setTitle, getTitle, addSection, getTasks, addTask, findTaskById, addTaskOrg, setLink, setClass, setClickEvent, bindFunctions, default */ +
106189/***/ (function(module, __webpack_exports__, __webpack_require__) { +
106190 +
106191"use strict"; +
106192__webpack_require__.r(__webpack_exports__); +
106193/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
106194/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAxisFormat", function() { return setAxisFormat; }); +
106195/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAxisFormat", function() { return getAxisFormat; }); +
106196/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDateFormat", function() { return setDateFormat; }); +
106197/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setExcludes", function() { return setExcludes; }); +
106198/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTitle", function() { return setTitle; }); +
106199/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTitle", function() { return getTitle; }); +
106200/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSection", function() { return addSection; }); +
106201/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTasks", function() { return getTasks; }); +
106202/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addTask", function() { return addTask; }); +
106203/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findTaskById", function() { return findTaskById; }); +
106204/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addTaskOrg", function() { return addTaskOrg; }); +
106205/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLink", function() { return setLink; }); +
106206/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setClass", function() { return setClass; }); +
106207/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setClickEvent", function() { return setClickEvent; }); +
106208/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindFunctions", function() { return bindFunctions; }); +
106209/* harmony import */ var moment_mini__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment-mini */ "./node_modules/moment-mini/moment.min.js"); +
106210/* harmony import */ var moment_mini__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment_mini__WEBPACK_IMPORTED_MODULE_0__); +
106211/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
106212/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
106213 +
106214 +
106215 +
106216let dateFormat = ''; +
106217let axisFormat = ''; +
106218let excludes = []; +
106219let title = ''; +
106220let sections = []; +
106221let tasks = []; +
106222let currentSection = ''; +
106223const tags = ['active', 'done', 'crit', 'milestone']; +
106224let funs = []; +
106225const clear = function () { +
106226 sections = []; +
106227 tasks = []; +
106228 currentSection = ''; +
106229 funs = []; +
106230 title = ''; +
106231 taskCnt = 0; +
106232 lastTask = undefined; +
106233 lastTaskID = undefined; +
106234 rawTasks = []; +
106235}; +
106236const setAxisFormat = function (txt) { +
106237 axisFormat = txt; +
106238}; +
106239const getAxisFormat = function () { +
106240 return axisFormat; +
106241}; +
106242const setDateFormat = function (txt) { +
106243 dateFormat = txt; +
106244}; +
106245const setExcludes = function (txt) { +
106246 excludes = txt.toLowerCase().split(/[\s,]+/); +
106247}; +
106248const setTitle = function (txt) { +
106249 title = txt; +
106250}; +
106251const getTitle = function () { +
106252 return title; +
106253}; +
106254const addSection = function (txt) { +
106255 currentSection = txt; +
106256 sections.push(txt); +
106257}; +
106258const getTasks = function () { +
106259 let allItemsPricessed = compileTasks(); +
106260 const maxDepth = 10; +
106261 let iterationCount = 0; +
106262 +
106263 while (!allItemsPricessed && iterationCount < maxDepth) { +
106264 allItemsPricessed = compileTasks(); +
106265 iterationCount++; +
106266 } +
106267 +
106268 tasks = rawTasks; +
106269 return tasks; +
106270}; +
106271 +
106272const isInvalidDate = function (date, dateFormat, excludes) { +
106273 if (date.isoWeekday() >= 6 && excludes.indexOf('weekends') >= 0) { +
106274 return true; +
106275 } +
106276 +
106277 if (excludes.indexOf(date.format('dddd').toLowerCase()) >= 0) { +
106278 return true; +
106279 } +
106280 +
106281 return excludes.indexOf(date.format(dateFormat.trim())) >= 0; +
106282}; +
106283 +
106284const checkTaskDates = function (task, dateFormat, excludes) { +
106285 if (!excludes.length || task.manualEndTime) return; +
106286 let startTime = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(task.startTime, dateFormat, true); +
106287 startTime.add(1, 'd'); +
106288 let endTime = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(task.endTime, dateFormat, true); +
106289 let renderEndTime = fixTaskDates(startTime, endTime, dateFormat, excludes); +
106290 task.endTime = endTime.toDate(); +
106291 task.renderEndTime = renderEndTime; +
106292}; +
106293 +
106294const fixTaskDates = function (startTime, endTime, dateFormat, excludes) { +
106295 let invalid = false; +
106296 let renderEndTime = null; +
106297 +
106298 while (startTime.date() <= endTime.date()) { +
106299 if (!invalid) { +
106300 renderEndTime = endTime.toDate(); +
106301 } +
106302 +
106303 invalid = isInvalidDate(startTime, dateFormat, excludes); +
106304 +
106305 if (invalid) { +
106306 endTime.add(1, 'd'); +
106307 } +
106308 +
106309 startTime.add(1, 'd'); +
106310 } +
106311 +
106312 return renderEndTime; +
106313}; +
106314 +
106315const getStartDate = function (prevTime, dateFormat, str) { +
106316 str = str.trim(); // Test for after +
106317 +
106318 const re = /^after\s+([\d\w-]+)/; +
106319 const afterStatement = re.exec(str.trim()); +
106320 +
106321 if (afterStatement !== null) { +
106322 const task = findTaskById(afterStatement[1]); +
106323 +
106324 if (typeof task === 'undefined') { +
106325 const dt = new Date(); +
106326 dt.setHours(0, 0, 0, 0); +
106327 return dt; +
106328 } +
106329 +
106330 return task.endTime; +
106331 } // Check for actual date set +
106332 +
106333 +
106334 let mDate = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(str, dateFormat.trim(), true); +
106335 +
106336 if (mDate.isValid()) { +
106337 return mDate.toDate(); +
106338 } else { +
106339 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('Invalid date:' + str); +
106340 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('With date format:' + dateFormat.trim()); +
106341 } // Default date - now +
106342 +
106343 +
106344 return new Date(); +
106345}; +
106346 +
106347const getEndDate = function (prevTime, dateFormat, str) { +
106348 str = str.trim(); // Check for actual date +
106349 +
106350 let mDate = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(str, dateFormat.trim(), true); +
106351 +
106352 if (mDate.isValid()) { +
106353 return mDate.toDate(); +
106354 } +
106355 +
106356 const d = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(prevTime); // Check for length +
106357 +
106358 const re = /^([\d]+)([wdhms])/; +
106359 const durationStatement = re.exec(str.trim()); +
106360 +
106361 if (durationStatement !== null) { +
106362 switch (durationStatement[2]) { +
106363 case 's': +
106364 d.add(durationStatement[1], 'seconds'); +
106365 break; +
106366 +
106367 case 'm': +
106368 d.add(durationStatement[1], 'minutes'); +
106369 break; +
106370 +
106371 case 'h': +
106372 d.add(durationStatement[1], 'hours'); +
106373 break; +
106374 +
106375 case 'd': +
106376 d.add(durationStatement[1], 'days'); +
106377 break; +
106378 +
106379 case 'w': +
106380 d.add(durationStatement[1], 'weeks'); +
106381 break; +
106382 } +
106383 } // Default date - now +
106384 +
106385 +
106386 return d.toDate(); +
106387}; +
106388 +
106389let taskCnt = 0; +
106390 +
106391const parseId = function (idStr) { +
106392 if (typeof idStr === 'undefined') { +
106393 taskCnt = taskCnt + 1; +
106394 return 'task' + taskCnt; +
106395 } +
106396 +
106397 return idStr; +
106398}; // id, startDate, endDate +
106399// id, startDate, length +
106400// id, after x, endDate +
106401// id, after x, length +
106402// startDate, endDate +
106403// startDate, length +
106404// after x, endDate +
106405// after x, length +
106406// endDate +
106407// length +
106408 +
106409 +
106410const compileData = function (prevTask, dataStr) { +
106411 let ds; +
106412 +
106413 if (dataStr.substr(0, 1) === ':') { +
106414 ds = dataStr.substr(1, dataStr.length); +
106415 } else { +
106416 ds = dataStr; +
106417 } +
106418 +
106419 const data = ds.split(','); +
106420 const task = {}; // Get tags like active, done, crit and milestone +
106421 +
106422 getTaskTags(data, task, tags); +
106423 +
106424 for (let i = 0; i < data.length; i++) { +
106425 data[i] = data[i].trim(); +
106426 } +
106427 +
106428 let endTimeData = ''; +
106429 +
106430 switch (data.length) { +
106431 case 1: +
106432 task.id = parseId(); +
106433 task.startTime = prevTask.endTime; +
106434 endTimeData = data[0]; +
106435 break; +
106436 +
106437 case 2: +
106438 task.id = parseId(); +
106439 task.startTime = getStartDate(undefined, dateFormat, data[0]); +
106440 endTimeData = data[1]; +
106441 break; +
106442 +
106443 case 3: +
106444 task.id = parseId(data[0]); +
106445 task.startTime = getStartDate(undefined, dateFormat, data[1]); +
106446 endTimeData = data[2]; +
106447 break; +
106448 +
106449 default: +
106450 } +
106451 +
106452 if (endTimeData) { +
106453 task.endTime = getEndDate(task.startTime, dateFormat, endTimeData); +
106454 task.manualEndTime = endTimeData === moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(task.endTime).format(dateFormat.trim()); +
106455 checkTaskDates(task, dateFormat, excludes); +
106456 } +
106457 +
106458 return task; +
106459}; +
106460 +
106461const parseData = function (prevTaskId, dataStr) { +
106462 let ds; +
106463 +
106464 if (dataStr.substr(0, 1) === ':') { +
106465 ds = dataStr.substr(1, dataStr.length); +
106466 } else { +
106467 ds = dataStr; +
106468 } +
106469 +
106470 const data = ds.split(','); +
106471 const task = {}; // Get tags like active, done, crit and milestone +
106472 +
106473 getTaskTags(data, task, tags); +
106474 +
106475 for (let i = 0; i < data.length; i++) { +
106476 data[i] = data[i].trim(); +
106477 } +
106478 +
106479 switch (data.length) { +
106480 case 1: +
106481 task.id = parseId(); +
106482 task.startTime = { +
106483 type: 'prevTaskEnd', +
106484 id: prevTaskId +
106485 }; +
106486 task.endTime = { +
106487 data: data[0] +
106488 }; +
106489 break; +
106490 +
106491 case 2: +
106492 task.id = parseId(); +
106493 task.startTime = { +
106494 type: 'getStartDate', +
106495 startData: data[0] +
106496 }; +
106497 task.endTime = { +
106498 data: data[1] +
106499 }; +
106500 break; +
106501 +
106502 case 3: +
106503 task.id = parseId(data[0]); +
106504 task.startTime = { +
106505 type: 'getStartDate', +
106506 startData: data[1] +
106507 }; +
106508 task.endTime = { +
106509 data: data[2] +
106510 }; +
106511 break; +
106512 +
106513 default: +
106514 } +
106515 +
106516 return task; +
106517}; +
106518 +
106519let lastTask; +
106520let lastTaskID; +
106521let rawTasks = []; +
106522const taskDb = {}; +
106523const addTask = function (descr, data) { +
106524 const rawTask = { +
106525 section: currentSection, +
106526 type: currentSection, +
106527 processed: false, +
106528 manualEndTime: false, +
106529 renderEndTime: null, +
106530 raw: { +
106531 data: data +
106532 }, +
106533 task: descr, +
106534 classes: [] +
106535 }; +
106536 const taskInfo = parseData(lastTaskID, data); +
106537 rawTask.raw.startTime = taskInfo.startTime; +
106538 rawTask.raw.endTime = taskInfo.endTime; +
106539 rawTask.id = taskInfo.id; +
106540 rawTask.prevTaskId = lastTaskID; +
106541 rawTask.active = taskInfo.active; +
106542 rawTask.done = taskInfo.done; +
106543 rawTask.crit = taskInfo.crit; +
106544 rawTask.milestone = taskInfo.milestone; +
106545 const pos = rawTasks.push(rawTask); +
106546 lastTaskID = rawTask.id; // Store cross ref +
106547 +
106548 taskDb[rawTask.id] = pos - 1; +
106549}; +
106550const findTaskById = function (id) { +
106551 const pos = taskDb[id]; +
106552 return rawTasks[pos]; +
106553}; +
106554const addTaskOrg = function (descr, data) { +
106555 const newTask = { +
106556 section: currentSection, +
106557 type: currentSection, +
106558 description: descr, +
106559 task: descr, +
106560 classes: [] +
106561 }; +
106562 const taskInfo = compileData(lastTask, data); +
106563 newTask.startTime = taskInfo.startTime; +
106564 newTask.endTime = taskInfo.endTime; +
106565 newTask.id = taskInfo.id; +
106566 newTask.active = taskInfo.active; +
106567 newTask.done = taskInfo.done; +
106568 newTask.crit = taskInfo.crit; +
106569 newTask.milestone = taskInfo.milestone; +
106570 lastTask = newTask; +
106571 tasks.push(newTask); +
106572}; +
106573 +
106574const compileTasks = function () { +
106575 const compileTask = function (pos) { +
106576 const task = rawTasks[pos]; +
106577 let startTime = ''; +
106578 +
106579 switch (rawTasks[pos].raw.startTime.type) { +
106580 case 'prevTaskEnd': +
106581 const prevTask = findTaskById(task.prevTaskId); +
106582 task.startTime = prevTask.endTime; +
106583 break; +
106584 +
106585 case 'getStartDate': +
106586 startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData); +
106587 +
106588 if (startTime) { +
106589 rawTasks[pos].startTime = startTime; +
106590 } +
106591 +
106592 break; +
106593 } +
106594 +
106595 if (rawTasks[pos].startTime) { +
106596 rawTasks[pos].endTime = getEndDate(rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data); +
106597 +
106598 if (rawTasks[pos].endTime) { +
106599 rawTasks[pos].processed = true; +
106600 rawTasks[pos].manualEndTime = rawTasks[pos].raw.endTime.data === moment_mini__WEBPACK_IMPORTED_MODULE_0___default()(rawTasks[pos].endTime).format(dateFormat.trim()); +
106601 checkTaskDates(rawTasks[pos], dateFormat, excludes); +
106602 } +
106603 } +
106604 +
106605 return rawTasks[pos].processed; +
106606 }; +
106607 +
106608 let allProcessed = true; +
106609 +
106610 for (let i = 0; i < rawTasks.length; i++) { +
106611 compileTask(i); +
106612 allProcessed = allProcessed && rawTasks[i].processed; +
106613 } +
106614 +
106615 return allProcessed; +
106616}; +
106617/** +
106618 * Called by parser when a link is found. Adds the URL to the vertex data. +
106619 * @param ids Comma separated list of ids +
106620 * @param linkStr URL to create a link for +
106621 */ +
106622 +
106623 +
106624const setLink = function (ids, linkStr) { +
106625 ids.split(',').forEach(function (id) { +
106626 let rawTask = findTaskById(id); +
106627 +
106628 if (typeof rawTask !== 'undefined') { +
106629 pushFun(id, () => { +
106630 window.open(linkStr, '_self'); +
106631 }); +
106632 } +
106633 }); +
106634 setClass(ids, 'clickable'); +
106635}; +
106636/** +
106637 * Called by parser when a special node is found, e.g. a clickable element. +
106638 * @param ids Comma separated list of ids +
106639 * @param className Class to add +
106640 */ +
106641 +
106642const setClass = function (ids, className) { +
106643 ids.split(',').forEach(function (id) { +
106644 let rawTask = findTaskById(id); +
106645 +
106646 if (typeof rawTask !== 'undefined') { +
106647 rawTask.classes.push(className); +
106648 } +
106649 }); +
106650}; +
106651 +
106652const setClickFun = function (id, functionName, functionArgs) { +
106653 if (typeof functionName === 'undefined') { +
106654 return; +
106655 } +
106656 +
106657 let argList = []; +
106658 +
106659 if (typeof functionArgs === 'string') { +
106660 /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */ +
106661 argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); +
106662 +
106663 for (let i = 0; i < argList.length; i++) { +
106664 let item = argList[i].trim(); +
106665 /* Removes all double quotes at the start and end of an argument */ +
106666 +
106667 /* This preserves all starting and ending whitespace inside */ +
106668 +
106669 if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') { +
106670 item = item.substr(1, item.length - 2); +
106671 } +
106672 +
106673 argList[i] = item; +
106674 } +
106675 } +
106676 +
106677 let rawTask = findTaskById(id); +
106678 +
106679 if (typeof rawTask !== 'undefined') { +
106680 pushFun(id, () => { +
106681 window[functionName](...argList); +
106682 }); +
106683 } +
106684}; +
106685/** +
106686 * The callbackFunction is executed in a click event bound to the task with the specified id or the task's assigned text +
106687 * @param id The task's id +
106688 * @param callbackFunction A function to be executed when clicked on the task or the task's text +
106689 */ +
106690 +
106691 +
106692const pushFun = function (id, callbackFunction) { +
106693 funs.push(function (element) { +
106694 const elem = d3__WEBPACK_IMPORTED_MODULE_2__["select"](element).select(`[id="${id}"]`); +
106695 +
106696 if (elem !== null) { +
106697 elem.on('click', function () { +
106698 callbackFunction(); +
106699 }); +
106700 } +
106701 }); +
106702 funs.push(function (element) { +
106703 const elem = d3__WEBPACK_IMPORTED_MODULE_2__["select"](element).select(`[id="${id}-text"]`); +
106704 +
106705 if (elem !== null) { +
106706 elem.on('click', function () { +
106707 callbackFunction(); +
106708 }); +
106709 } +
106710 }); +
106711}; +
106712/** +
106713 * Called by parser when a click definition is found. Registers an event handler. +
106714 * @param ids Comma separated list of ids +
106715 * @param functionName Function to be called on click +
106716 * @param functionArgs Function args the function should be called with +
106717 */ +
106718 +
106719 +
106720const setClickEvent = function (ids, functionName, functionArgs) { +
106721 ids.split(',').forEach(function (id) { +
106722 setClickFun(id, functionName, functionArgs); +
106723 }); +
106724 setClass(ids, 'clickable'); +
106725}; +
106726/** +
106727 * Binds all functions previously added to fun (specified through click) to the element +
106728 * @param element +
106729 */ +
106730 +
106731const bindFunctions = function (element) { +
106732 funs.forEach(function (fun) { +
106733 fun(element); +
106734 }); +
106735}; +
106736/* harmony default export */ __webpack_exports__["default"] = ({ +
106737 clear, +
106738 setDateFormat, +
106739 setAxisFormat, +
106740 getAxisFormat, +
106741 setTitle, +
106742 getTitle, +
106743 addSection, +
106744 getTasks, +
106745 addTask, +
106746 findTaskById, +
106747 addTaskOrg, +
106748 setExcludes, +
106749 setClickEvent, +
106750 setLink, +
106751 bindFunctions +
106752}); +
106753 +
106754function getTaskTags(data, task, tags) { +
106755 let matchFound = true; +
106756 +
106757 while (matchFound) { +
106758 matchFound = false; +
106759 tags.forEach(function (t) { +
106760 const pattern = '^\\s*' + t + '\\s*$'; +
106761 const regex = new RegExp(pattern); +
106762 +
106763 if (data[0].match(regex)) { +
106764 task[t] = true; +
106765 data.shift(1); +
106766 matchFound = true; +
106767 } +
106768 }); +
106769 } +
106770} +
106771 +
106772/***/ }), +
106773 +
106774/***/ "./src/diagrams/gantt/ganttRenderer.js": +
106775/*!*********************************************!*\ +
106776 !*** ./src/diagrams/gantt/ganttRenderer.js ***! +
106777 \*********************************************/ +
106778/*! exports provided: setConf, draw, default */ +
106779/***/ (function(module, __webpack_exports__, __webpack_require__) { +
106780 +
106781"use strict"; +
106782__webpack_require__.r(__webpack_exports__); +
106783/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
106784/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
106785/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
106786/* harmony import */ var _parser_gantt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parser/gantt */ "./src/diagrams/gantt/parser/gantt.js"); +
106787/* harmony import */ var _parser_gantt__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_parser_gantt__WEBPACK_IMPORTED_MODULE_1__); +
106788/* harmony import */ var _ganttDb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ganttDb */ "./src/diagrams/gantt/ganttDb.js"); +
106789 +
106790 +
106791 +
106792_parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy = _ganttDb__WEBPACK_IMPORTED_MODULE_2__["default"]; +
106793const conf = { +
106794 titleTopMargin: 25, +
106795 barHeight: 20, +
106796 barGap: 4, +
106797 topPadding: 50, +
106798 rightPadding: 75, +
106799 leftPadding: 75, +
106800 gridLineStartPadding: 35, +
106801 fontSize: 11, +
106802 fontFamily: '"Open-Sans", "sans-serif"' +
106803}; +
106804const setConf = function (cnf) { +
106805 const keys = Object.keys(cnf); +
106806 keys.forEach(function (key) { +
106807 conf[key] = cnf[key]; +
106808 }); +
106809}; +
106810let w; +
106811const draw = function (text, id) { +
106812 _parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy.clear(); +
106813 _parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].parse(text); +
106814 const elem = document.getElementById(id); +
106815 w = elem.parentElement.offsetWidth; +
106816 +
106817 if (typeof w === 'undefined') { +
106818 w = 1200; +
106819 } +
106820 +
106821 if (typeof conf.useWidth !== 'undefined') { +
106822 w = conf.useWidth; +
106823 } +
106824 +
106825 const taskArray = _parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy.getTasks(); // Set height based on number of tasks +
106826 +
106827 const h = taskArray.length * (conf.barHeight + conf.barGap) + 2 * conf.topPadding; +
106828 elem.setAttribute('height', '100%'); // Set viewBox +
106829 +
106830 elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h); +
106831 const svg = d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id="${id}"]`); // Set timescale +
106832 +
106833 const timeScale = d3__WEBPACK_IMPORTED_MODULE_0__["scaleTime"]().domain([d3__WEBPACK_IMPORTED_MODULE_0__["min"](taskArray, function (d) { +
106834 return d.startTime; +
106835 }), d3__WEBPACK_IMPORTED_MODULE_0__["max"](taskArray, function (d) { +
106836 return d.endTime; +
106837 })]).rangeRound([0, w - conf.leftPadding - conf.rightPadding]); +
106838 let categories = []; +
106839 +
106840 for (let i = 0; i < taskArray.length; i++) { +
106841 categories.push(taskArray[i].type); +
106842 } +
106843 +
106844 const catsUnfiltered = categories; // for vert labels +
106845 +
106846 categories = checkUnique(categories); +
106847 makeGant(taskArray, w, h); +
106848 +
106849 if (typeof conf.useWidth !== 'undefined') { +
106850 elem.setAttribute('width', w); +
106851 } +
106852 +
106853 svg.append('text').text(_parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy.getTitle()).attr('x', w / 2).attr('y', conf.titleTopMargin).attr('class', 'titleText'); +
106854 +
106855 function makeGant(tasks, pageWidth, pageHeight) { +
106856 const barHeight = conf.barHeight; +
106857 const gap = barHeight + conf.barGap; +
106858 const topPadding = conf.topPadding; +
106859 const leftPadding = conf.leftPadding; +
106860 const colorScale = d3__WEBPACK_IMPORTED_MODULE_0__["scaleLinear"]().domain([0, categories.length]).range(['#00B9FA', '#F95002']).interpolate(d3__WEBPACK_IMPORTED_MODULE_0__["interpolateHcl"]); +
106861 makeGrid(leftPadding, topPadding, pageWidth, pageHeight); +
106862 drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight); +
106863 vertLabels(gap, topPadding, leftPadding, barHeight, colorScale); +
106864 drawToday(leftPadding, topPadding, pageWidth, pageHeight); +
106865 } +
106866 +
106867 function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w, h) { +
106868 // Draw background rects covering the entire width of the graph, these form the section rows. +
106869 svg.append('g').selectAll('rect').data(theArray).enter().append('rect').attr('x', 0).attr('y', function (d, i) { +
106870 return i * theGap + theTopPad - 2; +
106871 }).attr('width', function () { +
106872 return w - conf.rightPadding / 2; +
106873 }).attr('height', theGap).attr('class', function (d) { +
106874 for (let i = 0; i < categories.length; i++) { +
106875 if (d.type === categories[i]) { +
106876 return 'section section' + i % conf.numberSectionStyles; +
106877 } +
106878 } +
106879 +
106880 return 'section section0'; +
106881 }); // Draw the rects representing the tasks +
106882 +
106883 const rectangles = svg.append('g').selectAll('rect').data(theArray).enter(); +
106884 rectangles.append('rect').attr('id', function (d) { +
106885 return d.id; +
106886 }).attr('rx', 3).attr('ry', 3).attr('x', function (d) { +
106887 if (d.milestone) { +
106888 return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; +
106889 } +
106890 +
106891 return timeScale(d.startTime) + theSidePad; +
106892 }).attr('y', function (d, i) { +
106893 return i * theGap + theTopPad; +
106894 }).attr('width', function (d) { +
106895 if (d.milestone) { +
106896 return theBarHeight; +
106897 } +
106898 +
106899 return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime); +
106900 }).attr('height', theBarHeight).attr('transform-origin', function (d, i) { +
106901 return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + 'px ' + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + 'px'; +
106902 }).attr('class', function (d) { +
106903 const res = 'task'; +
106904 let classStr = ''; +
106905 +
106906 if (d.classes.length > 0) { +
106907 classStr = d.classes.join(' '); +
106908 } +
106909 +
106910 let secNum = 0; +
106911 +
106912 for (let i = 0; i < categories.length; i++) { +
106913 if (d.type === categories[i]) { +
106914 secNum = i % conf.numberSectionStyles; +
106915 } +
106916 } +
106917 +
106918 let taskClass = ''; +
106919 +
106920 if (d.active) { +
106921 if (d.crit) { +
106922 taskClass += ' activeCrit'; +
106923 } else { +
106924 taskClass = ' active'; +
106925 } +
106926 } else if (d.done) { +
106927 if (d.crit) { +
106928 taskClass = ' doneCrit'; +
106929 } else { +
106930 taskClass = ' done'; +
106931 } +
106932 } else { +
106933 if (d.crit) { +
106934 taskClass += ' crit'; +
106935 } +
106936 } +
106937 +
106938 if (taskClass.length === 0) { +
106939 taskClass = ' task'; +
106940 } +
106941 +
106942 if (d.milestone) { +
106943 taskClass = ' milestone ' + taskClass; +
106944 } +
106945 +
106946 taskClass += secNum; +
106947 taskClass += ' ' + classStr; +
106948 return res + taskClass; +
106949 }); // Append task labels +
106950 +
106951 rectangles.append('text').text(function (d) { +
106952 return d.task; +
106953 }).attr('font-size', conf.fontSize).attr('x', function (d) { +
106954 let startX = timeScale(d.startTime); +
106955 let endX = timeScale(d.renderEndTime || d.endTime); +
106956 +
106957 if (d.milestone) { +
106958 startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight; +
106959 } +
106960 +
106961 if (d.milestone) { +
106962 endX = startX + theBarHeight; +
106963 } +
106964 +
106965 const textWidth = this.getBBox().width; // Check id text width > width of rectangle +
106966 +
106967 if (textWidth > endX - startX) { +
106968 if (endX + textWidth + 1.5 * conf.leftPadding > w) { +
106969 return startX + theSidePad - 5; +
106970 } else { +
106971 return endX + theSidePad + 5; +
106972 } +
106973 } else { +
106974 return (endX - startX) / 2 + startX + theSidePad; +
106975 } +
106976 }).attr('y', function (d, i) { +
106977 return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad; +
106978 }).attr('text-height', theBarHeight).attr('class', function (d) { +
106979 const startX = timeScale(d.startTime); +
106980 let endX = timeScale(d.endTime); +
106981 +
106982 if (d.milestone) { +
106983 endX = startX + theBarHeight; +
106984 } +
106985 +
106986 const textWidth = this.getBBox().width; +
106987 let classStr = ''; +
106988 +
106989 if (d.classes.length > 0) { +
106990 classStr = d.classes.join(' '); +
106991 } +
106992 +
106993 let secNum = 0; +
106994 +
106995 for (let i = 0; i < categories.length; i++) { +
106996 if (d.type === categories[i]) { +
106997 secNum = i % conf.numberSectionStyles; +
106998 } +
106999 } +
107000 +
107001 let taskType = ''; +
107002 +
107003 if (d.active) { +
107004 if (d.crit) { +
107005 taskType = 'activeCritText' + secNum; +
107006 } else { +
107007 taskType = 'activeText' + secNum; +
107008 } +
107009 } +
107010 +
107011 if (d.done) { +
107012 if (d.crit) { +
107013 taskType = taskType + ' doneCritText' + secNum; +
107014 } else { +
107015 taskType = taskType + ' doneText' + secNum; +
107016 } +
107017 } else { +
107018 if (d.crit) { +
107019 taskType = taskType + ' critText' + secNum; +
107020 } +
107021 } +
107022 +
107023 if (d.milestone) { +
107024 taskType += ' milestoneText'; +
107025 } // Check id text width > width of rectangle +
107026 +
107027 +
107028 if (textWidth > endX - startX) { +
107029 if (endX + textWidth + 1.5 * conf.leftPadding > w) { +
107030 return classStr + ' taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType; +
107031 } else { +
107032 return classStr + ' taskTextOutsideRight taskTextOutside' + secNum + ' ' + taskType; +
107033 } +
107034 } else { +
107035 return classStr + ' taskText taskText' + secNum + ' ' + taskType; +
107036 } +
107037 }); +
107038 } +
107039 +
107040 function makeGrid(theSidePad, theTopPad, w, h) { +
107041 let xAxis = d3__WEBPACK_IMPORTED_MODULE_0__["axisBottom"](timeScale).tickSize(-h + theTopPad + conf.gridLineStartPadding).tickFormat(d3__WEBPACK_IMPORTED_MODULE_0__["timeFormat"](_parser_gantt__WEBPACK_IMPORTED_MODULE_1__["parser"].yy.getAxisFormat() || conf.axisFormat || '%Y-%m-%d')); +
107042 svg.append('g').attr('class', 'grid').attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')').call(xAxis).selectAll('text').style('text-anchor', 'middle').attr('fill', '#000').attr('stroke', 'none').attr('font-size', 10).attr('dy', '1em'); +
107043 } +
107044 +
107045 function vertLabels(theGap, theTopPad) { +
107046 const numOccurances = []; +
107047 let prevGap = 0; +
107048 +
107049 for (let i = 0; i < categories.length; i++) { +
107050 numOccurances[i] = [categories[i], getCount(categories[i], catsUnfiltered)]; +
107051 } +
107052 +
107053 svg.append('g') // without doing this, impossible to put grid lines behind text +
107054 .selectAll('text').data(numOccurances).enter().append('text').text(function (d) { +
107055 return d[0]; +
107056 }).attr('x', 10).attr('y', function (d, i) { +
107057 if (i > 0) { +
107058 for (let j = 0; j < i; j++) { +
107059 prevGap += numOccurances[i - 1][1]; +
107060 return d[1] * theGap / 2 + prevGap * theGap + theTopPad; +
107061 } +
107062 } else { +
107063 return d[1] * theGap / 2 + theTopPad; +
107064 } +
107065 }).attr('class', function (d) { +
107066 for (let i = 0; i < categories.length; i++) { +
107067 if (d[0] === categories[i]) { +
107068 return 'sectionTitle sectionTitle' + i % conf.numberSectionStyles; +
107069 } +
107070 } +
107071 +
107072 return 'sectionTitle'; +
107073 }); +
107074 } +
107075 +
107076 function drawToday(theSidePad, theTopPad, w, h) { +
107077 const todayG = svg.append('g').attr('class', 'today'); +
107078 const today = new Date(); +
107079 todayG.append('line').attr('x1', timeScale(today) + theSidePad).attr('x2', timeScale(today) + theSidePad).attr('y1', conf.titleTopMargin).attr('y2', h - conf.titleTopMargin).attr('class', 'today'); +
107080 } // from this stackexchange question: http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript +
107081 +
107082 +
107083 function checkUnique(arr) { +
107084 const hash = {}; +
107085 const result = []; +
107086 +
107087 for (let i = 0, l = arr.length; i < l; ++i) { +
107088 if (!hash.hasOwnProperty(arr[i])) { +
107089 // it works with objects! in FF, at least +
107090 hash[arr[i]] = true; +
107091 result.push(arr[i]); +
107092 } +
107093 } +
107094 +
107095 return result; +
107096 } // from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array +
107097 +
107098 +
107099 function getCounts(arr) { +
107100 let i = arr.length; // const to loop over +
107101 +
107102 const obj = {}; // obj to store results +
107103 +
107104 while (i) { +
107105 obj[arr[--i]] = (obj[arr[i]] || 0) + 1; // count occurrences +
107106 } +
107107 +
107108 return obj; +
107109 } // get specific from everything +
107110 +
107111 +
107112 function getCount(word, arr) { +
107113 return getCounts(arr)[word] || 0; +
107114 } +
107115}; +
107116/* harmony default export */ __webpack_exports__["default"] = ({ +
107117 setConf, +
107118 draw +
107119}); +
107120 +
107121/***/ }), +
107122 +
107123/***/ "./src/diagrams/gantt/parser/gantt.js": +
107124/*!********************************************!*\ +
107125 !*** ./src/diagrams/gantt/parser/gantt.js ***! +
107126 \********************************************/ +
107127/*! no static exports found */ +
107128/***/ (function(module, exports, __webpack_require__) { +
107129 +
107130/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
107131 +
107132/* +
107133 Returns a Parser object of the following structure: +
107134 +
107135 Parser: { +
107136 yy: {} +
107137 } +
107138 +
107139 Parser.prototype: { +
107140 yy: {}, +
107141 trace: function(), +
107142 symbols_: {associative list: name ==> number}, +
107143 terminals_: {associative list: number ==> name}, +
107144 productions_: [...], +
107145 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
107146 table: [...], +
107147 defaultActions: {...}, +
107148 parseError: function(str, hash), +
107149 parse: function(input), +
107150 +
107151 lexer: { +
107152 EOF: 1, +
107153 parseError: function(str, hash), +
107154 setInput: function(input), +
107155 input: function(), +
107156 unput: function(str), +
107157 more: function(), +
107158 less: function(n), +
107159 pastInput: function(), +
107160 upcomingInput: function(), +
107161 showPosition: function(), +
107162 test_match: function(regex_match_array, rule_index), +
107163 next: function(), +
107164 lex: function(), +
107165 begin: function(condition), +
107166 popState: function(), +
107167 _currentRules: function(), +
107168 topState: function(), +
107169 pushState: function(condition), +
107170 +
107171 options: { +
107172 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
107173 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
107174 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
107175 }, +
107176 +
107177 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
107178 rules: [...], +
107179 conditions: {associative list: name ==> set}, +
107180 } +
107181 } +
107182 +
107183 +
107184 token location info (@$, _$, etc.): { +
107185 first_line: n, +
107186 last_line: n, +
107187 first_column: n, +
107188 last_column: n, +
107189 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
107190 } +
107191 +
107192 +
107193 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
107194 text: (matched text) +
107195 token: (the produced terminal token, if any) +
107196 line: (yylineno) +
107197 } +
107198 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
107199 loc: (yylloc) +
107200 expected: (string describing the set of expected tokens) +
107201 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
107202 } +
107203*/ +
107204var parser = function () { +
107205 var o = function (k, v, o, l) { +
107206 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
107207 +
107208 return o; +
107209 }, +
107210 $V0 = [6, 8, 10, 11, 12, 13, 14, 15, 17, 19], +
107211 $V1 = [1, 9], +
107212 $V2 = [1, 10], +
107213 $V3 = [1, 11], +
107214 $V4 = [1, 12], +
107215 $V5 = [1, 13], +
107216 $V6 = [1, 15], +
107217 $V7 = [1, 16]; +
107218 +
107219 var parser = { +
107220 trace: function trace() {}, +
107221 yy: {}, +
107222 symbols_: { +
107223 "error": 2, +
107224 "start": 3, +
107225 "gantt": 4, +
107226 "document": 5, +
107227 "EOF": 6, +
107228 "line": 7, +
107229 "SPACE": 8, +
107230 "statement": 9, +
107231 "NL": 10, +
107232 "dateFormat": 11, +
107233 "axisFormat": 12, +
107234 "excludes": 13, +
107235 "title": 14, +
107236 "section": 15, +
107237 "clickStatement": 16, +
107238 "taskTxt": 17, +
107239 "taskData": 18, +
107240 "click": 19, +
107241 "callbackname": 20, +
107242 "callbackargs": 21, +
107243 "href": 22, +
107244 "clickStatementDebug": 23, +
107245 "$accept": 0, +
107246 "$end": 1 +
107247 }, +
107248 terminals_: { +
107249 2: "error", +
107250 4: "gantt", +
107251 6: "EOF", +
107252 8: "SPACE", +
107253 10: "NL", +
107254 11: "dateFormat", +
107255 12: "axisFormat", +
107256 13: "excludes", +
107257 14: "title", +
107258 15: "section", +
107259 17: "taskTxt", +
107260 18: "taskData", +
107261 19: "click", +
107262 20: "callbackname", +
107263 21: "callbackargs", +
107264 22: "href" +
107265 }, +
107266 productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 1], [9, 2], [16, 2], [16, 3], [16, 3], [16, 4], [16, 3], [16, 4], [16, 2], [23, 2], [23, 3], [23, 3], [23, 4], [23, 3], [23, 4], [23, 2]], +
107267 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
107268 /* action[1] */ +
107269 , $$ +
107270 /* vstack */ +
107271 , _$ +
107272 /* lstack */ +
107273 ) { +
107274 /* this == yyval */ +
107275 var $0 = $$.length - 1; +
107276 +
107277 switch (yystate) { +
107278 case 1: +
107279 return $$[$0 - 1]; +
107280 break; +
107281 +
107282 case 2: +
107283 this.$ = []; +
107284 break; +
107285 +
107286 case 3: +
107287 $$[$0 - 1].push($$[$0]); +
107288 this.$ = $$[$0 - 1]; +
107289 break; +
107290 +
107291 case 4: +
107292 case 5: +
107293 this.$ = $$[$0]; +
107294 break; +
107295 +
107296 case 6: +
107297 case 7: +
107298 this.$ = []; +
107299 break; +
107300 +
107301 case 8: +
107302 yy.setDateFormat($$[$0].substr(11)); +
107303 this.$ = $$[$0].substr(11); +
107304 break; +
107305 +
107306 case 9: +
107307 yy.setAxisFormat($$[$0].substr(11)); +
107308 this.$ = $$[$0].substr(11); +
107309 break; +
107310 +
107311 case 10: +
107312 yy.setExcludes($$[$0].substr(9)); +
107313 this.$ = $$[$0].substr(9); +
107314 break; +
107315 +
107316 case 11: +
107317 yy.setTitle($$[$0].substr(6)); +
107318 this.$ = $$[$0].substr(6); +
107319 break; +
107320 +
107321 case 12: +
107322 yy.addSection($$[$0].substr(8)); +
107323 this.$ = $$[$0].substr(8); +
107324 break; +
107325 +
107326 case 14: +
107327 yy.addTask($$[$0 - 1], $$[$0]); +
107328 this.$ = 'task'; +
107329 break; +
107330 +
107331 case 15: +
107332 this.$ = $$[$0 - 1]; +
107333 yy.setClickEvent($$[$0 - 1], $$[$0], null); +
107334 break; +
107335 +
107336 case 16: +
107337 this.$ = $$[$0 - 2]; +
107338 yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]); +
107339 break; +
107340 +
107341 case 17: +
107342 this.$ = $$[$0 - 2]; +
107343 yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null); +
107344 yy.setLink($$[$0 - 2], $$[$0]); +
107345 break; +
107346 +
107347 case 18: +
107348 this.$ = $$[$0 - 3]; +
107349 yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]); +
107350 yy.setLink($$[$0 - 3], $$[$0]); +
107351 break; +
107352 +
107353 case 19: +
107354 this.$ = $$[$0 - 2]; +
107355 yy.setClickEvent($$[$0 - 2], $$[$0], null); +
107356 yy.setLink($$[$0 - 2], $$[$0 - 1]); +
107357 break; +
107358 +
107359 case 20: +
107360 this.$ = $$[$0 - 3]; +
107361 yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]); +
107362 yy.setLink($$[$0 - 3], $$[$0 - 2]); +
107363 break; +
107364 +
107365 case 21: +
107366 this.$ = $$[$0 - 1]; +
107367 yy.setLink($$[$0 - 1], $$[$0]); +
107368 break; +
107369 +
107370 case 22: +
107371 case 28: +
107372 this.$ = $$[$0 - 1] + ' ' + $$[$0]; +
107373 break; +
107374 +
107375 case 23: +
107376 case 24: +
107377 case 26: +
107378 this.$ = $$[$0 - 2] + ' ' + $$[$0 - 1] + ' ' + $$[$0]; +
107379 break; +
107380 +
107381 case 25: +
107382 case 27: +
107383 this.$ = $$[$0 - 3] + ' ' + $$[$0 - 2] + ' ' + $$[$0 - 1] + ' ' + $$[$0]; +
107384 break; +
107385 } +
107386 }, +
107387 table: [{ +
107388 3: 1, +
107389 4: [1, 2] +
107390 }, { +
107391 1: [3] +
107392 }, o($V0, [2, 2], { +
107393 5: 3 +
107394 }), { +
107395 6: [1, 4], +
107396 7: 5, +
107397 8: [1, 6], +
107398 9: 7, +
107399 10: [1, 8], +
107400 11: $V1, +
107401 12: $V2, +
107402 13: $V3, +
107403 14: $V4, +
107404 15: $V5, +
107405 16: 14, +
107406 17: $V6, +
107407 19: $V7 +
107408 }, o($V0, [2, 7], { +
107409 1: [2, 1] +
107410 }), o($V0, [2, 3]), { +
107411 9: 17, +
107412 11: $V1, +
107413 12: $V2, +
107414 13: $V3, +
107415 14: $V4, +
107416 15: $V5, +
107417 16: 14, +
107418 17: $V6, +
107419 19: $V7 +
107420 }, o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 8]), o($V0, [2, 9]), o($V0, [2, 10]), o($V0, [2, 11]), o($V0, [2, 12]), o($V0, [2, 13]), { +
107421 18: [1, 18] +
107422 }, { +
107423 20: [1, 19], +
107424 22: [1, 20] +
107425 }, o($V0, [2, 4]), o($V0, [2, 14]), o($V0, [2, 15], { +
107426 21: [1, 21], +
107427 22: [1, 22] +
107428 }), o($V0, [2, 21], { +
107429 20: [1, 23] +
107430 }), o($V0, [2, 16], { +
107431 22: [1, 24] +
107432 }), o($V0, [2, 17]), o($V0, [2, 19], { +
107433 21: [1, 25] +
107434 }), o($V0, [2, 18]), o($V0, [2, 20])], +
107435 defaultActions: {}, +
107436 parseError: function parseError(str, hash) { +
107437 if (hash.recoverable) { +
107438 this.trace(str); +
107439 } else { +
107440 var error = new Error(str); +
107441 error.hash = hash; +
107442 throw error; +
107443 } +
107444 }, +
107445 parse: function parse(input) { +
107446 var self = this, +
107447 stack = [0], +
107448 tstack = [], +
107449 vstack = [null], +
107450 lstack = [], +
107451 table = this.table, +
107452 yytext = '', +
107453 yylineno = 0, +
107454 yyleng = 0, +
107455 recovering = 0, +
107456 TERROR = 2, +
107457 EOF = 1; +
107458 var args = lstack.slice.call(arguments, 1); +
107459 var lexer = Object.create(this.lexer); +
107460 var sharedState = { +
107461 yy: {} +
107462 }; +
107463 +
107464 for (var k in this.yy) { +
107465 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
107466 sharedState.yy[k] = this.yy[k]; +
107467 } +
107468 } +
107469 +
107470 lexer.setInput(input, sharedState.yy); +
107471 sharedState.yy.lexer = lexer; +
107472 sharedState.yy.parser = this; +
107473 +
107474 if (typeof lexer.yylloc == 'undefined') { +
107475 lexer.yylloc = {}; +
107476 } +
107477 +
107478 var yyloc = lexer.yylloc; +
107479 lstack.push(yyloc); +
107480 var ranges = lexer.options && lexer.options.ranges; +
107481 +
107482 if (typeof sharedState.yy.parseError === 'function') { +
107483 this.parseError = sharedState.yy.parseError; +
107484 } else { +
107485 this.parseError = Object.getPrototypeOf(this).parseError; +
107486 } +
107487 +
107488 function popStack(n) { +
107489 stack.length = stack.length - 2 * n; +
107490 vstack.length = vstack.length - n; +
107491 lstack.length = lstack.length - n; +
107492 } +
107493 +
107494 function lex() { +
107495 var token; +
107496 token = tstack.pop() || lexer.lex() || EOF; +
107497 +
107498 if (typeof token !== 'number') { +
107499 if (token instanceof Array) { +
107500 tstack = token; +
107501 token = tstack.pop(); +
107502 } +
107503 +
107504 token = self.symbols_[token] || token; +
107505 } +
107506 +
107507 return token; +
107508 } +
107509 +
107510 var symbol, +
107511 preErrorSymbol, +
107512 state, +
107513 action, +
107514 a, +
107515 r, +
107516 yyval = {}, +
107517 p, +
107518 len, +
107519 newState, +
107520 expected; +
107521 +
107522 while (true) { +
107523 state = stack[stack.length - 1]; +
107524 +
107525 if (this.defaultActions[state]) { +
107526 action = this.defaultActions[state]; +
107527 } else { +
107528 if (symbol === null || typeof symbol == 'undefined') { +
107529 symbol = lex(); +
107530 } +
107531 +
107532 action = table[state] && table[state][symbol]; +
107533 } +
107534 +
107535 if (typeof action === 'undefined' || !action.length || !action[0]) { +
107536 var errStr = ''; +
107537 expected = []; +
107538 +
107539 for (p in table[state]) { +
107540 if (this.terminals_[p] && p > TERROR) { +
107541 expected.push('\'' + this.terminals_[p] + '\''); +
107542 } +
107543 } +
107544 +
107545 if (lexer.showPosition) { +
107546 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
107547 } else { +
107548 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
107549 } +
107550 +
107551 this.parseError(errStr, { +
107552 text: lexer.match, +
107553 token: this.terminals_[symbol] || symbol, +
107554 line: lexer.yylineno, +
107555 loc: yyloc, +
107556 expected: expected +
107557 }); +
107558 } +
107559 +
107560 if (action[0] instanceof Array && action.length > 1) { +
107561 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
107562 } +
107563 +
107564 switch (action[0]) { +
107565 case 1: +
107566 stack.push(symbol); +
107567 vstack.push(lexer.yytext); +
107568 lstack.push(lexer.yylloc); +
107569 stack.push(action[1]); +
107570 symbol = null; +
107571 +
107572 if (!preErrorSymbol) { +
107573 yyleng = lexer.yyleng; +
107574 yytext = lexer.yytext; +
107575 yylineno = lexer.yylineno; +
107576 yyloc = lexer.yylloc; +
107577 +
107578 if (recovering > 0) { +
107579 recovering--; +
107580 } +
107581 } else { +
107582 symbol = preErrorSymbol; +
107583 preErrorSymbol = null; +
107584 } +
107585 +
107586 break; +
107587 +
107588 case 2: +
107589 len = this.productions_[action[1]][1]; +
107590 yyval.$ = vstack[vstack.length - len]; +
107591 yyval._$ = { +
107592 first_line: lstack[lstack.length - (len || 1)].first_line, +
107593 last_line: lstack[lstack.length - 1].last_line, +
107594 first_column: lstack[lstack.length - (len || 1)].first_column, +
107595 last_column: lstack[lstack.length - 1].last_column +
107596 }; +
107597 +
107598 if (ranges) { +
107599 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
107600 } +
107601 +
107602 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
107603 +
107604 if (typeof r !== 'undefined') { +
107605 return r; +
107606 } +
107607 +
107608 if (len) { +
107609 stack = stack.slice(0, -1 * len * 2); +
107610 vstack = vstack.slice(0, -1 * len); +
107611 lstack = lstack.slice(0, -1 * len); +
107612 } +
107613 +
107614 stack.push(this.productions_[action[1]][0]); +
107615 vstack.push(yyval.$); +
107616 lstack.push(yyval._$); +
107617 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
107618 stack.push(newState); +
107619 break; +
107620 +
107621 case 3: +
107622 return true; +
107623 } +
107624 } +
107625 +
107626 return true; +
107627 } +
107628 }; +
107629 /* generated by jison-lex 0.3.4 */ +
107630 +
107631 var lexer = function () { +
107632 var lexer = { +
107633 EOF: 1, +
107634 parseError: function parseError(str, hash) { +
107635 if (this.yy.parser) { +
107636 this.yy.parser.parseError(str, hash); +
107637 } else { +
107638 throw new Error(str); +
107639 } +
107640 }, +
107641 // resets the lexer, sets new input +
107642 setInput: function (input, yy) { +
107643 this.yy = yy || this.yy || {}; +
107644 this._input = input; +
107645 this._more = this._backtrack = this.done = false; +
107646 this.yylineno = this.yyleng = 0; +
107647 this.yytext = this.matched = this.match = ''; +
107648 this.conditionStack = ['INITIAL']; +
107649 this.yylloc = { +
107650 first_line: 1, +
107651 first_column: 0, +
107652 last_line: 1, +
107653 last_column: 0 +
107654 }; +
107655 +
107656 if (this.options.ranges) { +
107657 this.yylloc.range = [0, 0]; +
107658 } +
107659 +
107660 this.offset = 0; +
107661 return this; +
107662 }, +
107663 // consumes and returns one char from the input +
107664 input: function () { +
107665 var ch = this._input[0]; +
107666 this.yytext += ch; +
107667 this.yyleng++; +
107668 this.offset++; +
107669 this.match += ch; +
107670 this.matched += ch; +
107671 var lines = ch.match(/(?:\r\n?|\n).*/g); +
107672 +
107673 if (lines) { +
107674 this.yylineno++; +
107675 this.yylloc.last_line++; +
107676 } else { +
107677 this.yylloc.last_column++; +
107678 } +
107679 +
107680 if (this.options.ranges) { +
107681 this.yylloc.range[1]++; +
107682 } +
107683 +
107684 this._input = this._input.slice(1); +
107685 return ch; +
107686 }, +
107687 // unshifts one char (or a string) into the input +
107688 unput: function (ch) { +
107689 var len = ch.length; +
107690 var lines = ch.split(/(?:\r\n?|\n)/g); +
107691 this._input = ch + this._input; +
107692 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
107693 +
107694 this.offset -= len; +
107695 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
107696 this.match = this.match.substr(0, this.match.length - 1); +
107697 this.matched = this.matched.substr(0, this.matched.length - 1); +
107698 +
107699 if (lines.length - 1) { +
107700 this.yylineno -= lines.length - 1; +
107701 } +
107702 +
107703 var r = this.yylloc.range; +
107704 this.yylloc = { +
107705 first_line: this.yylloc.first_line, +
107706 last_line: this.yylineno + 1, +
107707 first_column: this.yylloc.first_column, +
107708 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
107709 }; +
107710 +
107711 if (this.options.ranges) { +
107712 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
107713 } +
107714 +
107715 this.yyleng = this.yytext.length; +
107716 return this; +
107717 }, +
107718 // When called from action, caches matched text and appends it on next action +
107719 more: function () { +
107720 this._more = true; +
107721 return this; +
107722 }, +
107723 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
107724 reject: function () { +
107725 if (this.options.backtrack_lexer) { +
107726 this._backtrack = true; +
107727 } else { +
107728 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
107729 text: "", +
107730 token: null, +
107731 line: this.yylineno +
107732 }); +
107733 } +
107734 +
107735 return this; +
107736 }, +
107737 // retain first n characters of the match +
107738 less: function (n) { +
107739 this.unput(this.match.slice(n)); +
107740 }, +
107741 // displays already matched input, i.e. for error messages +
107742 pastInput: function () { +
107743 var past = this.matched.substr(0, this.matched.length - this.match.length); +
107744 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
107745 }, +
107746 // displays upcoming input, i.e. for error messages +
107747 upcomingInput: function () { +
107748 var next = this.match; +
107749 +
107750 if (next.length < 20) { +
107751 next += this._input.substr(0, 20 - next.length); +
107752 } +
107753 +
107754 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
107755 }, +
107756 // displays the character position where the lexing error occurred, i.e. for error messages +
107757 showPosition: function () { +
107758 var pre = this.pastInput(); +
107759 var c = new Array(pre.length + 1).join("-"); +
107760 return pre + this.upcomingInput() + "\n" + c + "^"; +
107761 }, +
107762 // test the lexed token: return FALSE when not a match, otherwise return token +
107763 test_match: function (match, indexed_rule) { +
107764 var token, lines, backup; +
107765 +
107766 if (this.options.backtrack_lexer) { +
107767 // save context +
107768 backup = { +
107769 yylineno: this.yylineno, +
107770 yylloc: { +
107771 first_line: this.yylloc.first_line, +
107772 last_line: this.last_line, +
107773 first_column: this.yylloc.first_column, +
107774 last_column: this.yylloc.last_column +
107775 }, +
107776 yytext: this.yytext, +
107777 match: this.match, +
107778 matches: this.matches, +
107779 matched: this.matched, +
107780 yyleng: this.yyleng, +
107781 offset: this.offset, +
107782 _more: this._more, +
107783 _input: this._input, +
107784 yy: this.yy, +
107785 conditionStack: this.conditionStack.slice(0), +
107786 done: this.done +
107787 }; +
107788 +
107789 if (this.options.ranges) { +
107790 backup.yylloc.range = this.yylloc.range.slice(0); +
107791 } +
107792 } +
107793 +
107794 lines = match[0].match(/(?:\r\n?|\n).*/g); +
107795 +
107796 if (lines) { +
107797 this.yylineno += lines.length; +
107798 } +
107799 +
107800 this.yylloc = { +
107801 first_line: this.yylloc.last_line, +
107802 last_line: this.yylineno + 1, +
107803 first_column: this.yylloc.last_column, +
107804 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
107805 }; +
107806 this.yytext += match[0]; +
107807 this.match += match[0]; +
107808 this.matches = match; +
107809 this.yyleng = this.yytext.length; +
107810 +
107811 if (this.options.ranges) { +
107812 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
107813 } +
107814 +
107815 this._more = false; +
107816 this._backtrack = false; +
107817 this._input = this._input.slice(match[0].length); +
107818 this.matched += match[0]; +
107819 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
107820 +
107821 if (this.done && this._input) { +
107822 this.done = false; +
107823 } +
107824 +
107825 if (token) { +
107826 return token; +
107827 } else if (this._backtrack) { +
107828 // recover context +
107829 for (var k in backup) { +
107830 this[k] = backup[k]; +
107831 } +
107832 +
107833 return false; // rule action called reject() implying the next rule should be tested instead. +
107834 } +
107835 +
107836 return false; +
107837 }, +
107838 // return next match in input +
107839 next: function () { +
107840 if (this.done) { +
107841 return this.EOF; +
107842 } +
107843 +
107844 if (!this._input) { +
107845 this.done = true; +
107846 } +
107847 +
107848 var token, match, tempMatch, index; +
107849 +
107850 if (!this._more) { +
107851 this.yytext = ''; +
107852 this.match = ''; +
107853 } +
107854 +
107855 var rules = this._currentRules(); +
107856 +
107857 for (var i = 0; i < rules.length; i++) { +
107858 tempMatch = this._input.match(this.rules[rules[i]]); +
107859 +
107860 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
107861 match = tempMatch; +
107862 index = i; +
107863 +
107864 if (this.options.backtrack_lexer) { +
107865 token = this.test_match(tempMatch, rules[i]); +
107866 +
107867 if (token !== false) { +
107868 return token; +
107869 } else if (this._backtrack) { +
107870 match = false; +
107871 continue; // rule action called reject() implying a rule MISmatch. +
107872 } else { +
107873 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
107874 return false; +
107875 } +
107876 } else if (!this.options.flex) { +
107877 break; +
107878 } +
107879 } +
107880 } +
107881 +
107882 if (match) { +
107883 token = this.test_match(match, rules[index]); +
107884 +
107885 if (token !== false) { +
107886 return token; +
107887 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
107888 +
107889 +
107890 return false; +
107891 } +
107892 +
107893 if (this._input === "") { +
107894 return this.EOF; +
107895 } else { +
107896 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
107897 text: "", +
107898 token: null, +
107899 line: this.yylineno +
107900 }); +
107901 } +
107902 }, +
107903 // return next match that has a token +
107904 lex: function lex() { +
107905 var r = this.next(); +
107906 +
107907 if (r) { +
107908 return r; +
107909 } else { +
107910 return this.lex(); +
107911 } +
107912 }, +
107913 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
107914 begin: function begin(condition) { +
107915 this.conditionStack.push(condition); +
107916 }, +
107917 // pop the previously active lexer condition state off the condition stack +
107918 popState: function popState() { +
107919 var n = this.conditionStack.length - 1; +
107920 +
107921 if (n > 0) { +
107922 return this.conditionStack.pop(); +
107923 } else { +
107924 return this.conditionStack[0]; +
107925 } +
107926 }, +
107927 // produce the lexer rule set which is active for the currently active lexer condition state +
107928 _currentRules: function _currentRules() { +
107929 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
107930 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
107931 } else { +
107932 return this.conditions["INITIAL"].rules; +
107933 } +
107934 }, +
107935 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
107936 topState: function topState(n) { +
107937 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
107938 +
107939 if (n >= 0) { +
107940 return this.conditionStack[n]; +
107941 } else { +
107942 return "INITIAL"; +
107943 } +
107944 }, +
107945 // alias for begin(condition) +
107946 pushState: function pushState(condition) { +
107947 this.begin(condition); +
107948 }, +
107949 // return the number of states currently on the stack +
107950 stateStackSize: function stateStackSize() { +
107951 return this.conditionStack.length; +
107952 }, +
107953 options: { +
107954 "case-insensitive": true +
107955 }, +
107956 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
107957 var YYSTATE = YY_START; +
107958 +
107959 switch ($avoiding_name_collisions) { +
107960 case 0: +
107961 return 10; +
107962 break; +
107963 +
107964 case 1: +
107965 /* skip whitespace */ +
107966 break; +
107967 +
107968 case 2: +
107969 /* skip comments */ +
107970 break; +
107971 +
107972 case 3: +
107973 /* skip comments */ +
107974 break; +
107975 +
107976 case 4: +
107977 this.begin("href"); +
107978 break; +
107979 +
107980 case 5: +
107981 this.popState(); +
107982 break; +
107983 +
107984 case 6: +
107985 return 22; +
107986 break; +
107987 +
107988 case 7: +
107989 this.begin("callbackname"); +
107990 break; +
107991 +
107992 case 8: +
107993 this.popState(); +
107994 break; +
107995 +
107996 case 9: +
107997 this.popState(); +
107998 this.begin("callbackargs"); +
107999 break; +
108000 +
108001 case 10: +
108002 return 20; +
108003 break; +
108004 +
108005 case 11: +
108006 this.popState(); +
108007 break; +
108008 +
108009 case 12: +
108010 return 21; +
108011 break; +
108012 +
108013 case 13: +
108014 this.begin("click"); +
108015 break; +
108016 +
108017 case 14: +
108018 this.popState(); +
108019 break; +
108020 +
108021 case 15: +
108022 return 19; +
108023 break; +
108024 +
108025 case 16: +
108026 return 4; +
108027 break; +
108028 +
108029 case 17: +
108030 return 11; +
108031 break; +
108032 +
108033 case 18: +
108034 return 12; +
108035 break; +
108036 +
108037 case 19: +
108038 return 13; +
108039 break; +
108040 +
108041 case 20: +
108042 return 'date'; +
108043 break; +
108044 +
108045 case 21: +
108046 return 14; +
108047 break; +
108048 +
108049 case 22: +
108050 return 15; +
108051 break; +
108052 +
108053 case 23: +
108054 return 17; +
108055 break; +
108056 +
108057 case 24: +
108058 return 18; +
108059 break; +
108060 +
108061 case 25: +
108062 return ':'; +
108063 break; +
108064 +
108065 case 26: +
108066 return 6; +
108067 break; +
108068 +
108069 case 27: +
108070 return 'INVALID'; +
108071 break; +
108072 } +
108073 }, +
108074 rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i], +
108075 conditions: { +
108076 "callbackargs": { +
108077 "rules": [11, 12], +
108078 "inclusive": false +
108079 }, +
108080 "callbackname": { +
108081 "rules": [8, 9, 10], +
108082 "inclusive": false +
108083 }, +
108084 "href": { +
108085 "rules": [5, 6], +
108086 "inclusive": false +
108087 }, +
108088 "click": { +
108089 "rules": [14, 15], +
108090 "inclusive": false +
108091 }, +
108092 "INITIAL": { +
108093 "rules": [0, 1, 2, 3, 4, 7, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], +
108094 "inclusive": true +
108095 } +
108096 } +
108097 }; +
108098 return lexer; +
108099 }(); +
108100 +
108101 parser.lexer = lexer; +
108102 +
108103 function Parser() { +
108104 this.yy = {}; +
108105 } +
108106 +
108107 Parser.prototype = parser; +
108108 parser.Parser = Parser; +
108109 return new Parser(); +
108110}(); +
108111 +
108112if (true) { +
108113 exports.parser = parser; +
108114 exports.Parser = parser.Parser; +
108115 +
108116 exports.parse = function () { +
108117 return parser.parse.apply(parser, arguments); +
108118 }; +
108119 +
108120 exports.main = function commonjsMain(args) { +
108121 if (!args[1]) { +
108122 console.log('Usage: ' + args[0] + ' FILE'); +
108123 process.exit(1); +
108124 } +
108125 +
108126 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
108127 +
108128 return exports.parser.parse(source); +
108129 }; +
108130 +
108131 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
108132 exports.main(process.argv.slice(1)); +
108133 } +
108134} +
108135/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
108136 +
108137/***/ }), +
108138 +
108139/***/ "./src/diagrams/git/gitGraphAst.js": +
108140/*!*****************************************!*\ +
108141 !*** ./src/diagrams/git/gitGraphAst.js ***! +
108142 \*****************************************/ +
108143/*! exports provided: setDirection, setOptions, getOptions, commit, branch, merge, checkout, reset, prettyPrint, clear, getBranchesAsObjArray, getBranches, getCommits, getCommitsArray, getCurrentBranch, getDirection, getHead, default */ +
108144/***/ (function(module, __webpack_exports__, __webpack_require__) { +
108145 +
108146"use strict"; +
108147__webpack_require__.r(__webpack_exports__); +
108148/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setDirection", function() { return setDirection; }); +
108149/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setOptions", function() { return setOptions; }); +
108150/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOptions", function() { return getOptions; }); +
108151/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "commit", function() { return commit; }); +
108152/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "branch", function() { return branch; }); +
108153/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; }); +
108154/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkout", function() { return checkout; }); +
108155/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return reset; }); +
108156/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prettyPrint", function() { return prettyPrint; }); +
108157/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
108158/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBranchesAsObjArray", function() { return getBranchesAsObjArray; }); +
108159/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBranches", function() { return getBranches; }); +
108160/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCommits", function() { return getCommits; }); +
108161/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCommitsArray", function() { return getCommitsArray; }); +
108162/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentBranch", function() { return getCurrentBranch; }); +
108163/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDirection", function() { return getDirection; }); +
108164/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getHead", function() { return getHead; }); +
108165/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"); +
108166/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_0__); +
108167/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
108168 +
108169 +
108170let commits = {}; +
108171let head = null; +
108172let branches = { +
108173 'master': head +
108174}; +
108175let curBranch = 'master'; +
108176let direction = 'LR'; +
108177let seq = 0; +
108178 +
108179function getRandomInt(min, max) { +
108180 return Math.floor(Math.random() * (max - min)) + min; +
108181} +
108182 +
108183function getId() { +
108184 const pool = '0123456789abcdef'; +
108185 let id = ''; +
108186 +
108187 for (let i = 0; i < 7; i++) { +
108188 id += pool[getRandomInt(0, 16)]; +
108189 } +
108190 +
108191 return id; +
108192} +
108193 +
108194function isfastforwardable(currentCommit, otherCommit) { +
108195 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id); +
108196 +
108197 while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit) { +
108198 // only if other branch has more commits +
108199 if (otherCommit.parent == null) break; +
108200 +
108201 if (Array.isArray(otherCommit.parent)) { +
108202 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('In merge commit:', otherCommit.parent); +
108203 return isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) || isfastforwardable(currentCommit, commits[otherCommit.parent[1]]); +
108204 } else { +
108205 otherCommit = commits[otherCommit.parent]; +
108206 } +
108207 } +
108208 +
108209 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(currentCommit.id, otherCommit.id); +
108210 return currentCommit.id === otherCommit.id; +
108211} +
108212 +
108213function isReachableFrom(currentCommit, otherCommit) { +
108214 const currentSeq = currentCommit.seq; +
108215 const otherSeq = otherCommit.seq; +
108216 if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit); +
108217 return false; +
108218} +
108219 +
108220const setDirection = function (dir) { +
108221 direction = dir; +
108222}; +
108223let options = {}; +
108224const setOptions = function (rawOptString) { +
108225 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('options str', rawOptString); +
108226 rawOptString = rawOptString && rawOptString.trim(); +
108227 rawOptString = rawOptString || '{}'; +
108228 +
108229 try { +
108230 options = JSON.parse(rawOptString); +
108231 } catch (e) { +
108232 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].error('error while parsing gitGraph options', e.message); +
108233 } +
108234}; +
108235const getOptions = function () { +
108236 return options; +
108237}; +
108238const commit = function (msg) { +
108239 const commit = { +
108240 id: getId(), +
108241 message: msg, +
108242 seq: seq++, +
108243 parent: head == null ? null : head.id +
108244 }; +
108245 head = commit; +
108246 commits[commit.id] = commit; +
108247 branches[curBranch] = commit.id; +
108248 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in pushCommit ' + commit.id); +
108249}; +
108250const branch = function (name) { +
108251 branches[name] = head != null ? head.id : null; +
108252 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in createBranch'); +
108253}; +
108254const merge = function (otherBranch) { +
108255 const currentCommit = commits[branches[curBranch]]; +
108256 const otherCommit = commits[branches[otherBranch]]; +
108257 +
108258 if (isReachableFrom(currentCommit, otherCommit)) { +
108259 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('Already merged'); +
108260 return; +
108261 } +
108262 +
108263 if (isfastforwardable(currentCommit, otherCommit)) { +
108264 branches[curBranch] = branches[otherBranch]; +
108265 head = commits[branches[curBranch]]; +
108266 } else { +
108267 // create merge commit +
108268 const commit = { +
108269 id: getId(), +
108270 message: 'merged branch ' + otherBranch + ' into ' + curBranch, +
108271 seq: seq++, +
108272 parent: [head == null ? null : head.id, branches[otherBranch]] +
108273 }; +
108274 head = commit; +
108275 commits[commit.id] = commit; +
108276 branches[curBranch] = commit.id; +
108277 } +
108278 +
108279 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(branches); +
108280 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in mergeBranch'); +
108281}; +
108282const checkout = function (branch) { +
108283 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in checkout'); +
108284 curBranch = branch; +
108285 const id = branches[curBranch]; +
108286 head = commits[id]; +
108287}; +
108288const reset = function (commitRef) { +
108289 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('in reset', commitRef); +
108290 const ref = commitRef.split(':')[0]; +
108291 let parentCount = parseInt(commitRef.split(':')[1]); +
108292 let commit = ref === 'HEAD' ? head : commits[branches[ref]]; +
108293 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(commit, parentCount); +
108294 +
108295 while (parentCount > 0) { +
108296 commit = commits[commit.parent]; +
108297 parentCount--; +
108298 +
108299 if (!commit) { +
108300 const err = 'Critical error - unique parent commit not found during reset'; +
108301 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].error(err); +
108302 throw err; +
108303 } +
108304 } +
108305 +
108306 head = commit; +
108307 branches[curBranch] = commit.id; +
108308}; +
108309 +
108310function upsert(arr, key, newval) { +
108311 const index = arr.indexOf(key); +
108312 +
108313 if (index === -1) { +
108314 arr.push(newval); +
108315 } else { +
108316 arr.splice(index, 1, newval); +
108317 } +
108318} +
108319 +
108320function prettyPrintCommitHistory(commitArr) { +
108321 const commit = lodash__WEBPACK_IMPORTED_MODULE_0___default.a.maxBy(commitArr, 'seq'); +
108322 +
108323 let line = ''; +
108324 commitArr.forEach(function (c) { +
108325 if (c === commit) { +
108326 line += '\t*'; +
108327 } else { +
108328 line += '\t|'; +
108329 } +
108330 }); +
108331 const label = [line, commit.id, commit.seq]; +
108332 +
108333 for (let branch in branches) { +
108334 if (branches[branch] === commit.id) label.push(branch); +
108335 } +
108336 +
108337 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(label.join(' ')); +
108338 +
108339 if (Array.isArray(commit.parent)) { +
108340 const newCommit = commits[commit.parent[0]]; +
108341 upsert(commitArr, commit, newCommit); +
108342 commitArr.push(commits[commit.parent[1]]); +
108343 } else if (commit.parent == null) { +
108344 return; +
108345 } else { +
108346 const nextCommit = commits[commit.parent]; +
108347 upsert(commitArr, commit, nextCommit); +
108348 } +
108349 +
108350 commitArr = lodash__WEBPACK_IMPORTED_MODULE_0___default.a.uniqBy(commitArr, 'id'); +
108351 prettyPrintCommitHistory(commitArr); +
108352} +
108353 +
108354const prettyPrint = function () { +
108355 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(commits); +
108356 const node = getCommitsArray()[0]; +
108357 prettyPrintCommitHistory([node]); +
108358}; +
108359const clear = function () { +
108360 commits = {}; +
108361 head = null; +
108362 branches = { +
108363 'master': head +
108364 }; +
108365 curBranch = 'master'; +
108366 seq = 0; +
108367}; +
108368const getBranchesAsObjArray = function () { +
108369 const branchArr = []; +
108370 +
108371 for (let branch in branches) { +
108372 branchArr.push({ +
108373 name: branch, +
108374 commit: commits[branches[branch]] +
108375 }); +
108376 } +
108377 +
108378 return branchArr; +
108379}; +
108380const getBranches = function () { +
108381 return branches; +
108382}; +
108383const getCommits = function () { +
108384 return commits; +
108385}; +
108386const getCommitsArray = function () { +
108387 const commitArr = Object.keys(commits).map(function (key) { +
108388 return commits[key]; +
108389 }); +
108390 commitArr.forEach(function (o) { +
108391 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug(o.id); +
108392 }); +
108393 return lodash__WEBPACK_IMPORTED_MODULE_0___default.a.orderBy(commitArr, ['seq'], ['desc']); +
108394}; +
108395const getCurrentBranch = function () { +
108396 return curBranch; +
108397}; +
108398const getDirection = function () { +
108399 return direction; +
108400}; +
108401const getHead = function () { +
108402 return head; +
108403}; +
108404/* harmony default export */ __webpack_exports__["default"] = ({ +
108405 setDirection, +
108406 setOptions, +
108407 getOptions, +
108408 commit, +
108409 branch, +
108410 merge, +
108411 checkout, +
108412 reset, +
108413 prettyPrint, +
108414 clear, +
108415 getBranchesAsObjArray, +
108416 getBranches, +
108417 getCommits, +
108418 getCommitsArray, +
108419 getCurrentBranch, +
108420 getDirection, +
108421 getHead +
108422}); +
108423 +
108424/***/ }), +
108425 +
108426/***/ "./src/diagrams/git/gitGraphRenderer.js": +
108427/*!**********************************************!*\ +
108428 !*** ./src/diagrams/git/gitGraphRenderer.js ***! +
108429 \**********************************************/ +
108430/*! exports provided: setConf, draw, default */ +
108431/***/ (function(module, __webpack_exports__, __webpack_require__) { +
108432 +
108433"use strict"; +
108434__webpack_require__.r(__webpack_exports__); +
108435/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
108436/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
108437/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
108438/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"); +
108439/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__); +
108440/* harmony import */ var _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gitGraphAst */ "./src/diagrams/git/gitGraphAst.js"); +
108441/* harmony import */ var _parser_gitGraph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parser/gitGraph */ "./src/diagrams/git/parser/gitGraph.js"); +
108442/* harmony import */ var _parser_gitGraph__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_parser_gitGraph__WEBPACK_IMPORTED_MODULE_3__); +
108443/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
108444/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils */ "./src/utils.js"); +
108445 +
108446 +
108447 +
108448 +
108449 +
108450 +
108451let allCommitsDict = {}; +
108452let branchNum; +
108453let config = { +
108454 nodeSpacing: 150, +
108455 nodeFillColor: 'yellow', +
108456 nodeStrokeWidth: 2, +
108457 nodeStrokeColor: 'grey', +
108458 lineStrokeWidth: 4, +
108459 branchOffset: 50, +
108460 lineColor: 'grey', +
108461 leftMargin: 50, +
108462 branchColors: ['#442f74', '#983351', '#609732', '#AA9A39'], +
108463 nodeRadius: 10, +
108464 nodeLabel: { +
108465 width: 75, +
108466 height: 100, +
108467 x: -25, +
108468 y: 0 +
108469 } +
108470}; +
108471let apiConfig = {}; +
108472const setConf = function (c) { +
108473 apiConfig = c; +
108474}; +
108475 +
108476function svgCreateDefs(svg) { +
108477 svg.append('defs').append('g').attr('id', 'def-commit').append('circle').attr('r', config.nodeRadius).attr('cx', 0).attr('cy', 0); +
108478 svg.select('#def-commit').append('foreignObject').attr('width', config.nodeLabel.width).attr('height', config.nodeLabel.height).attr('x', config.nodeLabel.x).attr('y', config.nodeLabel.y).attr('class', 'node-label').attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility').append('p').html(''); +
108479} +
108480 +
108481function svgDrawLine(svg, points, colorIdx, interpolate) { +
108482 const curve = Object(_utils__WEBPACK_IMPORTED_MODULE_5__["interpolateToCurve"])(interpolate, d3__WEBPACK_IMPORTED_MODULE_0__["curveBasis"]); +
108483 const color = config.branchColors[colorIdx % config.branchColors.length]; +
108484 const lineGen = d3__WEBPACK_IMPORTED_MODULE_0__["line"]().x(function (d) { +
108485 return Math.round(d.x); +
108486 }).y(function (d) { +
108487 return Math.round(d.y); +
108488 }).curve(curve); +
108489 svg.append('svg:path').attr('d', lineGen(points)).style('stroke', color).style('stroke-width', config.lineStrokeWidth).style('fill', 'none'); +
108490} // Pass in the element and its pre-transform coords +
108491 +
108492 +
108493function getElementCoords(element, coords) { +
108494 coords = coords || element.node().getBBox(); +
108495 const ctm = element.node().getCTM(); +
108496 const xn = ctm.e + coords.x * ctm.a; +
108497 const yn = ctm.f + coords.y * ctm.d; +
108498 return { +
108499 left: xn, +
108500 top: yn, +
108501 width: coords.width, +
108502 height: coords.height +
108503 }; +
108504} +
108505 +
108506function svgDrawLineForCommits(svg, fromId, toId, direction, color) { +
108507 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('svgDrawLineForCommits: ', fromId, toId); +
108508 const fromBbox = getElementCoords(svg.select('#node-' + fromId + ' circle')); +
108509 const toBbox = getElementCoords(svg.select('#node-' + toId + ' circle')); +
108510 +
108511 switch (direction) { +
108512 case 'LR': +
108513 // (toBbox) +
108514 // +-------- +
108515 // + (fromBbox) +
108516 if (fromBbox.left - toBbox.left > config.nodeSpacing) { +
108517 const lineStart = { +
108518 x: fromBbox.left - config.nodeSpacing, +
108519 y: toBbox.top + toBbox.height / 2 +
108520 }; +
108521 const lineEnd = { +
108522 x: toBbox.left + toBbox.width, +
108523 y: toBbox.top + toBbox.height / 2 +
108524 }; +
108525 svgDrawLine(svg, [lineStart, lineEnd], color, 'linear'); +
108526 svgDrawLine(svg, [{ +
108527 x: fromBbox.left, +
108528 y: fromBbox.top + fromBbox.height / 2 +
108529 }, { +
108530 x: fromBbox.left - config.nodeSpacing / 2, +
108531 y: fromBbox.top + fromBbox.height / 2 +
108532 }, { +
108533 x: fromBbox.left - config.nodeSpacing / 2, +
108534 y: lineStart.y +
108535 }, lineStart], color); +
108536 } else { +
108537 svgDrawLine(svg, [{ +
108538 'x': fromBbox.left, +
108539 'y': fromBbox.top + fromBbox.height / 2 +
108540 }, { +
108541 'x': fromBbox.left - config.nodeSpacing / 2, +
108542 'y': fromBbox.top + fromBbox.height / 2 +
108543 }, { +
108544 'x': fromBbox.left - config.nodeSpacing / 2, +
108545 'y': toBbox.top + toBbox.height / 2 +
108546 }, { +
108547 'x': toBbox.left + toBbox.width, +
108548 'y': toBbox.top + toBbox.height / 2 +
108549 }], color); +
108550 } +
108551 +
108552 break; +
108553 +
108554 case 'BT': +
108555 // + (fromBbox) +
108556 // | +
108557 // | +
108558 // + (toBbox) +
108559 if (toBbox.top - fromBbox.top > config.nodeSpacing) { +
108560 const lineStart = { +
108561 x: toBbox.left + toBbox.width / 2, +
108562 y: fromBbox.top + fromBbox.height + config.nodeSpacing +
108563 }; +
108564 const lineEnd = { +
108565 x: toBbox.left + toBbox.width / 2, +
108566 y: toBbox.top +
108567 }; +
108568 svgDrawLine(svg, [lineStart, lineEnd], color, 'linear'); +
108569 svgDrawLine(svg, [{ +
108570 x: fromBbox.left + fromBbox.width / 2, +
108571 y: fromBbox.top + fromBbox.height +
108572 }, { +
108573 x: fromBbox.left + fromBbox.width / 2, +
108574 y: fromBbox.top + fromBbox.height + config.nodeSpacing / 2 +
108575 }, { +
108576 x: toBbox.left + toBbox.width / 2, +
108577 y: lineStart.y - config.nodeSpacing / 2 +
108578 }, lineStart], color); +
108579 } else { +
108580 svgDrawLine(svg, [{ +
108581 'x': fromBbox.left + fromBbox.width / 2, +
108582 'y': fromBbox.top + fromBbox.height +
108583 }, { +
108584 'x': fromBbox.left + fromBbox.width / 2, +
108585 'y': fromBbox.top + config.nodeSpacing / 2 +
108586 }, { +
108587 'x': toBbox.left + toBbox.width / 2, +
108588 'y': toBbox.top - config.nodeSpacing / 2 +
108589 }, { +
108590 'x': toBbox.left + toBbox.width / 2, +
108591 'y': toBbox.top +
108592 }], color); +
108593 } +
108594 +
108595 break; +
108596 } +
108597} +
108598 +
108599function cloneNode(svg, selector) { +
108600 return svg.select(selector).node().cloneNode(true); +
108601} +
108602 +
108603function renderCommitHistory(svg, commitid, branches, direction) { +
108604 let commit; +
108605 const numCommits = Object.keys(allCommitsDict).length; +
108606 +
108607 if (typeof commitid === 'string') { +
108608 do { +
108609 commit = allCommitsDict[commitid]; +
108610 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('in renderCommitHistory', commit.id, commit.seq); +
108611 +
108612 if (svg.select('#node-' + commitid).size() > 0) { +
108613 return; +
108614 } +
108615 +
108616 svg.append(function () { +
108617 return cloneNode(svg, '#def-commit'); +
108618 }).attr('class', 'commit').attr('id', function () { +
108619 return 'node-' + commit.id; +
108620 }).attr('transform', function () { +
108621 switch (direction) { +
108622 case 'LR': +
108623 return 'translate(' + (commit.seq * config.nodeSpacing + config.leftMargin) + ', ' + branchNum * config.branchOffset + ')'; +
108624 +
108625 case 'BT': +
108626 return 'translate(' + (branchNum * config.branchOffset + config.leftMargin) + ', ' + (numCommits - commit.seq) * config.nodeSpacing + ')'; +
108627 } +
108628 }).attr('fill', config.nodeFillColor).attr('stroke', config.nodeStrokeColor).attr('stroke-width', config.nodeStrokeWidth); +
108629 let branch; +
108630 +
108631 for (let branchName in branches) { +
108632 if (branches[branchName].commit === commit) { +
108633 branch = branches[branchName]; +
108634 break; +
108635 } +
108636 } +
108637 +
108638 if (branch) { +
108639 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('found branch ', branch.name); +
108640 svg.select('#node-' + commit.id + ' p').append('xhtml:span').attr('class', 'branch-label').text(branch.name + ', '); +
108641 } +
108642 +
108643 svg.select('#node-' + commit.id + ' p').append('xhtml:span').attr('class', 'commit-id').text(commit.id); +
108644 +
108645 if (commit.message !== '' && direction === 'BT') { +
108646 svg.select('#node-' + commit.id + ' p').append('xhtml:span').attr('class', 'commit-msg').text(', ' + commit.message); +
108647 } +
108648 +
108649 commitid = commit.parent; +
108650 } while (commitid && allCommitsDict[commitid]); +
108651 } +
108652 +
108653 if (Array.isArray(commitid)) { +
108654 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('found merge commmit', commitid); +
108655 renderCommitHistory(svg, commitid[0], branches, direction); +
108656 branchNum++; +
108657 renderCommitHistory(svg, commitid[1], branches, direction); +
108658 branchNum--; +
108659 } +
108660} +
108661 +
108662function renderLines(svg, commit, direction, branchColor) { +
108663 branchColor = branchColor || 0; +
108664 +
108665 while (commit.seq > 0 && !commit.lineDrawn) { +
108666 if (typeof commit.parent === 'string') { +
108667 svgDrawLineForCommits(svg, commit.id, commit.parent, direction, branchColor); +
108668 commit.lineDrawn = true; +
108669 commit = allCommitsDict[commit.parent]; +
108670 } else if (Array.isArray(commit.parent)) { +
108671 svgDrawLineForCommits(svg, commit.id, commit.parent[0], direction, branchColor); +
108672 svgDrawLineForCommits(svg, commit.id, commit.parent[1], direction, branchColor + 1); +
108673 renderLines(svg, allCommitsDict[commit.parent[1]], direction, branchColor + 1); +
108674 commit.lineDrawn = true; +
108675 commit = allCommitsDict[commit.parent[0]]; +
108676 } +
108677 } +
108678} +
108679 +
108680const draw = function (txt, id, ver) { +
108681 try { +
108682 const parser = _parser_gitGraph__WEBPACK_IMPORTED_MODULE_3___default.a.parser; +
108683 parser.yy = _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"]; +
108684 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('in gitgraph renderer', txt, id, ver); // Parse the graph definition +
108685 +
108686 parser.parse(txt + '\n'); +
108687 config = lodash__WEBPACK_IMPORTED_MODULE_1___default.a.assign(config, apiConfig, _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"].getOptions()); +
108688 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].debug('effective options', config); +
108689 const direction = _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"].getDirection(); +
108690 allCommitsDict = _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"].getCommits(); +
108691 const branches = _gitGraphAst__WEBPACK_IMPORTED_MODULE_2__["default"].getBranchesAsObjArray(); +
108692 +
108693 if (direction === 'BT') { +
108694 config.nodeLabel.x = branches.length * config.branchOffset; +
108695 config.nodeLabel.width = '100%'; +
108696 config.nodeLabel.y = -1 * 2 * config.nodeRadius; +
108697 } +
108698 +
108699 const svg = d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id="${id}"]`); +
108700 svgCreateDefs(svg); +
108701 branchNum = 1; +
108702 +
108703 for (let branch in branches) { +
108704 const v = branches[branch]; +
108705 renderCommitHistory(svg, v.commit.id, branches, direction); +
108706 renderLines(svg, v.commit, direction); +
108707 branchNum++; +
108708 } +
108709 +
108710 svg.attr('height', function () { +
108711 if (direction === 'BT') return Object.keys(allCommitsDict).length * config.nodeSpacing; +
108712 return (branches.length + 1) * config.branchOffset; +
108713 }); +
108714 } catch (e) { +
108715 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].error('Error while rendering gitgraph'); +
108716 _logger__WEBPACK_IMPORTED_MODULE_4__["logger"].error(e.message); +
108717 } +
108718}; +
108719/* harmony default export */ __webpack_exports__["default"] = ({ +
108720 setConf, +
108721 draw +
108722}); +
108723 +
108724/***/ }), +
108725 +
108726/***/ "./src/diagrams/git/parser/gitGraph.js": +
108727/*!*********************************************!*\ +
108728 !*** ./src/diagrams/git/parser/gitGraph.js ***! +
108729 \*********************************************/ +
108730/*! no static exports found */ +
108731/***/ (function(module, exports, __webpack_require__) { +
108732 +
108733/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
108734 +
108735/* +
108736 Returns a Parser object of the following structure: +
108737 +
108738 Parser: { +
108739 yy: {} +
108740 } +
108741 +
108742 Parser.prototype: { +
108743 yy: {}, +
108744 trace: function(), +
108745 symbols_: {associative list: name ==> number}, +
108746 terminals_: {associative list: number ==> name}, +
108747 productions_: [...], +
108748 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
108749 table: [...], +
108750 defaultActions: {...}, +
108751 parseError: function(str, hash), +
108752 parse: function(input), +
108753 +
108754 lexer: { +
108755 EOF: 1, +
108756 parseError: function(str, hash), +
108757 setInput: function(input), +
108758 input: function(), +
108759 unput: function(str), +
108760 more: function(), +
108761 less: function(n), +
108762 pastInput: function(), +
108763 upcomingInput: function(), +
108764 showPosition: function(), +
108765 test_match: function(regex_match_array, rule_index), +
108766 next: function(), +
108767 lex: function(), +
108768 begin: function(condition), +
108769 popState: function(), +
108770 _currentRules: function(), +
108771 topState: function(), +
108772 pushState: function(condition), +
108773 +
108774 options: { +
108775 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
108776 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
108777 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
108778 }, +
108779 +
108780 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
108781 rules: [...], +
108782 conditions: {associative list: name ==> set}, +
108783 } +
108784 } +
108785 +
108786 +
108787 token location info (@$, _$, etc.): { +
108788 first_line: n, +
108789 last_line: n, +
108790 first_column: n, +
108791 last_column: n, +
108792 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
108793 } +
108794 +
108795 +
108796 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
108797 text: (matched text) +
108798 token: (the produced terminal token, if any) +
108799 line: (yylineno) +
108800 } +
108801 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
108802 loc: (yylloc) +
108803 expected: (string describing the set of expected tokens) +
108804 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
108805 } +
108806*/ +
108807var parser = function () { +
108808 var o = function (k, v, o, l) { +
108809 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
108810 +
108811 return o; +
108812 }, +
108813 $V0 = [2, 3], +
108814 $V1 = [1, 7], +
108815 $V2 = [7, 12, 15, 17, 19, 20, 21], +
108816 $V3 = [7, 11, 12, 15, 17, 19, 20, 21], +
108817 $V4 = [2, 20], +
108818 $V5 = [1, 32]; +
108819 +
108820 var parser = { +
108821 trace: function trace() {}, +
108822 yy: {}, +
108823 symbols_: { +
108824 "error": 2, +
108825 "start": 3, +
108826 "GG": 4, +
108827 ":": 5, +
108828 "document": 6, +
108829 "EOF": 7, +
108830 "DIR": 8, +
108831 "options": 9, +
108832 "body": 10, +
108833 "OPT": 11, +
108834 "NL": 12, +
108835 "line": 13, +
108836 "statement": 14, +
108837 "COMMIT": 15, +
108838 "commit_arg": 16, +
108839 "BRANCH": 17, +
108840 "ID": 18, +
108841 "CHECKOUT": 19, +
108842 "MERGE": 20, +
108843 "RESET": 21, +
108844 "reset_arg": 22, +
108845 "STR": 23, +
108846 "HEAD": 24, +
108847 "reset_parents": 25, +
108848 "CARET": 26, +
108849 "$accept": 0, +
108850 "$end": 1 +
108851 }, +
108852 terminals_: { +
108853 2: "error", +
108854 4: "GG", +
108855 5: ":", +
108856 7: "EOF", +
108857 8: "DIR", +
108858 11: "OPT", +
108859 12: "NL", +
108860 15: "COMMIT", +
108861 17: "BRANCH", +
108862 18: "ID", +
108863 19: "CHECKOUT", +
108864 20: "MERGE", +
108865 21: "RESET", +
108866 23: "STR", +
108867 24: "HEAD", +
108868 26: "CARET" +
108869 }, +
108870 productions_: [0, [3, 4], [3, 5], [6, 0], [6, 2], [9, 2], [9, 1], [10, 0], [10, 2], [13, 2], [13, 1], [14, 2], [14, 2], [14, 2], [14, 2], [14, 2], [16, 0], [16, 1], [22, 2], [22, 2], [25, 0], [25, 2]], +
108871 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
108872 /* action[1] */ +
108873 , $$ +
108874 /* vstack */ +
108875 , _$ +
108876 /* lstack */ +
108877 ) { +
108878 /* this == yyval */ +
108879 var $0 = $$.length - 1; +
108880 +
108881 switch (yystate) { +
108882 case 1: +
108883 return $$[$0 - 1]; +
108884 break; +
108885 +
108886 case 2: +
108887 yy.setDirection($$[$0 - 3]); +
108888 return $$[$0 - 1]; +
108889 break; +
108890 +
108891 case 4: +
108892 yy.setOptions($$[$0 - 1]); +
108893 this.$ = $$[$0]; +
108894 break; +
108895 +
108896 case 5: +
108897 $$[$0 - 1] += $$[$0]; +
108898 this.$ = $$[$0 - 1]; +
108899 break; +
108900 +
108901 case 7: +
108902 this.$ = []; +
108903 break; +
108904 +
108905 case 8: +
108906 $$[$0 - 1].push($$[$0]); +
108907 this.$ = $$[$0 - 1]; +
108908 break; +
108909 +
108910 case 9: +
108911 this.$ = $$[$0 - 1]; +
108912 break; +
108913 +
108914 case 11: +
108915 yy.commit($$[$0]); +
108916 break; +
108917 +
108918 case 12: +
108919 yy.branch($$[$0]); +
108920 break; +
108921 +
108922 case 13: +
108923 yy.checkout($$[$0]); +
108924 break; +
108925 +
108926 case 14: +
108927 yy.merge($$[$0]); +
108928 break; +
108929 +
108930 case 15: +
108931 yy.reset($$[$0]); +
108932 break; +
108933 +
108934 case 16: +
108935 this.$ = ""; +
108936 break; +
108937 +
108938 case 17: +
108939 this.$ = $$[$0]; +
108940 break; +
108941 +
108942 case 18: +
108943 this.$ = $$[$0 - 1] + ":" + $$[$0]; +
108944 break; +
108945 +
108946 case 19: +
108947 this.$ = $$[$0 - 1] + ":" + yy.count; +
108948 yy.count = 0; +
108949 break; +
108950 +
108951 case 20: +
108952 yy.count = 0; +
108953 break; +
108954 +
108955 case 21: +
108956 yy.count += 1; +
108957 break; +
108958 } +
108959 }, +
108960 table: [{ +
108961 3: 1, +
108962 4: [1, 2] +
108963 }, { +
108964 1: [3] +
108965 }, { +
108966 5: [1, 3], +
108967 8: [1, 4] +
108968 }, { +
108969 6: 5, +
108970 7: $V0, +
108971 9: 6, +
108972 12: $V1 +
108973 }, { +
108974 5: [1, 8] +
108975 }, { +
108976 7: [1, 9] +
108977 }, o($V2, [2, 7], { +
108978 10: 10, +
108979 11: [1, 11] +
108980 }), o($V3, [2, 6]), { +
108981 6: 12, +
108982 7: $V0, +
108983 9: 6, +
108984 12: $V1 +
108985 }, { +
108986 1: [2, 1] +
108987 }, { +
108988 7: [2, 4], +
108989 12: [1, 15], +
108990 13: 13, +
108991 14: 14, +
108992 15: [1, 16], +
108993 17: [1, 17], +
108994 19: [1, 18], +
108995 20: [1, 19], +
108996 21: [1, 20] +
108997 }, o($V3, [2, 5]), { +
108998 7: [1, 21] +
108999 }, o($V2, [2, 8]), { +
109000 12: [1, 22] +
109001 }, o($V2, [2, 10]), { +
109002 12: [2, 16], +
109003 16: 23, +
109004 23: [1, 24] +
109005 }, { +
109006 18: [1, 25] +
109007 }, { +
109008 18: [1, 26] +
109009 }, { +
109010 18: [1, 27] +
109011 }, { +
109012 18: [1, 30], +
109013 22: 28, +
109014 24: [1, 29] +
109015 }, { +
109016 1: [2, 2] +
109017 }, o($V2, [2, 9]), { +
109018 12: [2, 11] +
109019 }, { +
109020 12: [2, 17] +
109021 }, { +
109022 12: [2, 12] +
109023 }, { +
109024 12: [2, 13] +
109025 }, { +
109026 12: [2, 14] +
109027 }, { +
109028 12: [2, 15] +
109029 }, { +
109030 12: $V4, +
109031 25: 31, +
109032 26: $V5 +
109033 }, { +
109034 12: $V4, +
109035 25: 33, +
109036 26: $V5 +
109037 }, { +
109038 12: [2, 18] +
109039 }, { +
109040 12: $V4, +
109041 25: 34, +
109042 26: $V5 +
109043 }, { +
109044 12: [2, 19] +
109045 }, { +
109046 12: [2, 21] +
109047 }], +
109048 defaultActions: { +
109049 9: [2, 1], +
109050 21: [2, 2], +
109051 23: [2, 11], +
109052 24: [2, 17], +
109053 25: [2, 12], +
109054 26: [2, 13], +
109055 27: [2, 14], +
109056 28: [2, 15], +
109057 31: [2, 18], +
109058 33: [2, 19], +
109059 34: [2, 21] +
109060 }, +
109061 parseError: function parseError(str, hash) { +
109062 if (hash.recoverable) { +
109063 this.trace(str); +
109064 } else { +
109065 var error = new Error(str); +
109066 error.hash = hash; +
109067 throw error; +
109068 } +
109069 }, +
109070 parse: function parse(input) { +
109071 var self = this, +
109072 stack = [0], +
109073 tstack = [], +
109074 vstack = [null], +
109075 lstack = [], +
109076 table = this.table, +
109077 yytext = '', +
109078 yylineno = 0, +
109079 yyleng = 0, +
109080 recovering = 0, +
109081 TERROR = 2, +
109082 EOF = 1; +
109083 var args = lstack.slice.call(arguments, 1); +
109084 var lexer = Object.create(this.lexer); +
109085 var sharedState = { +
109086 yy: {} +
109087 }; +
109088 +
109089 for (var k in this.yy) { +
109090 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
109091 sharedState.yy[k] = this.yy[k]; +
109092 } +
109093 } +
109094 +
109095 lexer.setInput(input, sharedState.yy); +
109096 sharedState.yy.lexer = lexer; +
109097 sharedState.yy.parser = this; +
109098 +
109099 if (typeof lexer.yylloc == 'undefined') { +
109100 lexer.yylloc = {}; +
109101 } +
109102 +
109103 var yyloc = lexer.yylloc; +
109104 lstack.push(yyloc); +
109105 var ranges = lexer.options && lexer.options.ranges; +
109106 +
109107 if (typeof sharedState.yy.parseError === 'function') { +
109108 this.parseError = sharedState.yy.parseError; +
109109 } else { +
109110 this.parseError = Object.getPrototypeOf(this).parseError; +
109111 } +
109112 +
109113 function popStack(n) { +
109114 stack.length = stack.length - 2 * n; +
109115 vstack.length = vstack.length - n; +
109116 lstack.length = lstack.length - n; +
109117 } +
109118 +
109119 function lex() { +
109120 var token; +
109121 token = tstack.pop() || lexer.lex() || EOF; +
109122 +
109123 if (typeof token !== 'number') { +
109124 if (token instanceof Array) { +
109125 tstack = token; +
109126 token = tstack.pop(); +
109127 } +
109128 +
109129 token = self.symbols_[token] || token; +
109130 } +
109131 +
109132 return token; +
109133 } +
109134 +
109135 var symbol, +
109136 preErrorSymbol, +
109137 state, +
109138 action, +
109139 a, +
109140 r, +
109141 yyval = {}, +
109142 p, +
109143 len, +
109144 newState, +
109145 expected; +
109146 +
109147 while (true) { +
109148 state = stack[stack.length - 1]; +
109149 +
109150 if (this.defaultActions[state]) { +
109151 action = this.defaultActions[state]; +
109152 } else { +
109153 if (symbol === null || typeof symbol == 'undefined') { +
109154 symbol = lex(); +
109155 } +
109156 +
109157 action = table[state] && table[state][symbol]; +
109158 } +
109159 +
109160 if (typeof action === 'undefined' || !action.length || !action[0]) { +
109161 var errStr = ''; +
109162 expected = []; +
109163 +
109164 for (p in table[state]) { +
109165 if (this.terminals_[p] && p > TERROR) { +
109166 expected.push('\'' + this.terminals_[p] + '\''); +
109167 } +
109168 } +
109169 +
109170 if (lexer.showPosition) { +
109171 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
109172 } else { +
109173 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
109174 } +
109175 +
109176 this.parseError(errStr, { +
109177 text: lexer.match, +
109178 token: this.terminals_[symbol] || symbol, +
109179 line: lexer.yylineno, +
109180 loc: yyloc, +
109181 expected: expected +
109182 }); +
109183 } +
109184 +
109185 if (action[0] instanceof Array && action.length > 1) { +
109186 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
109187 } +
109188 +
109189 switch (action[0]) { +
109190 case 1: +
109191 stack.push(symbol); +
109192 vstack.push(lexer.yytext); +
109193 lstack.push(lexer.yylloc); +
109194 stack.push(action[1]); +
109195 symbol = null; +
109196 +
109197 if (!preErrorSymbol) { +
109198 yyleng = lexer.yyleng; +
109199 yytext = lexer.yytext; +
109200 yylineno = lexer.yylineno; +
109201 yyloc = lexer.yylloc; +
109202 +
109203 if (recovering > 0) { +
109204 recovering--; +
109205 } +
109206 } else { +
109207 symbol = preErrorSymbol; +
109208 preErrorSymbol = null; +
109209 } +
109210 +
109211 break; +
109212 +
109213 case 2: +
109214 len = this.productions_[action[1]][1]; +
109215 yyval.$ = vstack[vstack.length - len]; +
109216 yyval._$ = { +
109217 first_line: lstack[lstack.length - (len || 1)].first_line, +
109218 last_line: lstack[lstack.length - 1].last_line, +
109219 first_column: lstack[lstack.length - (len || 1)].first_column, +
109220 last_column: lstack[lstack.length - 1].last_column +
109221 }; +
109222 +
109223 if (ranges) { +
109224 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
109225 } +
109226 +
109227 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
109228 +
109229 if (typeof r !== 'undefined') { +
109230 return r; +
109231 } +
109232 +
109233 if (len) { +
109234 stack = stack.slice(0, -1 * len * 2); +
109235 vstack = vstack.slice(0, -1 * len); +
109236 lstack = lstack.slice(0, -1 * len); +
109237 } +
109238 +
109239 stack.push(this.productions_[action[1]][0]); +
109240 vstack.push(yyval.$); +
109241 lstack.push(yyval._$); +
109242 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
109243 stack.push(newState); +
109244 break; +
109245 +
109246 case 3: +
109247 return true; +
109248 } +
109249 } +
109250 +
109251 return true; +
109252 } +
109253 }; +
109254 /* generated by jison-lex 0.3.4 */ +
109255 +
109256 var lexer = function () { +
109257 var lexer = { +
109258 EOF: 1, +
109259 parseError: function parseError(str, hash) { +
109260 if (this.yy.parser) { +
109261 this.yy.parser.parseError(str, hash); +
109262 } else { +
109263 throw new Error(str); +
109264 } +
109265 }, +
109266 // resets the lexer, sets new input +
109267 setInput: function (input, yy) { +
109268 this.yy = yy || this.yy || {}; +
109269 this._input = input; +
109270 this._more = this._backtrack = this.done = false; +
109271 this.yylineno = this.yyleng = 0; +
109272 this.yytext = this.matched = this.match = ''; +
109273 this.conditionStack = ['INITIAL']; +
109274 this.yylloc = { +
109275 first_line: 1, +
109276 first_column: 0, +
109277 last_line: 1, +
109278 last_column: 0 +
109279 }; +
109280 +
109281 if (this.options.ranges) { +
109282 this.yylloc.range = [0, 0]; +
109283 } +
109284 +
109285 this.offset = 0; +
109286 return this; +
109287 }, +
109288 // consumes and returns one char from the input +
109289 input: function () { +
109290 var ch = this._input[0]; +
109291 this.yytext += ch; +
109292 this.yyleng++; +
109293 this.offset++; +
109294 this.match += ch; +
109295 this.matched += ch; +
109296 var lines = ch.match(/(?:\r\n?|\n).*/g); +
109297 +
109298 if (lines) { +
109299 this.yylineno++; +
109300 this.yylloc.last_line++; +
109301 } else { +
109302 this.yylloc.last_column++; +
109303 } +
109304 +
109305 if (this.options.ranges) { +
109306 this.yylloc.range[1]++; +
109307 } +
109308 +
109309 this._input = this._input.slice(1); +
109310 return ch; +
109311 }, +
109312 // unshifts one char (or a string) into the input +
109313 unput: function (ch) { +
109314 var len = ch.length; +
109315 var lines = ch.split(/(?:\r\n?|\n)/g); +
109316 this._input = ch + this._input; +
109317 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
109318 +
109319 this.offset -= len; +
109320 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
109321 this.match = this.match.substr(0, this.match.length - 1); +
109322 this.matched = this.matched.substr(0, this.matched.length - 1); +
109323 +
109324 if (lines.length - 1) { +
109325 this.yylineno -= lines.length - 1; +
109326 } +
109327 +
109328 var r = this.yylloc.range; +
109329 this.yylloc = { +
109330 first_line: this.yylloc.first_line, +
109331 last_line: this.yylineno + 1, +
109332 first_column: this.yylloc.first_column, +
109333 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
109334 }; +
109335 +
109336 if (this.options.ranges) { +
109337 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
109338 } +
109339 +
109340 this.yyleng = this.yytext.length; +
109341 return this; +
109342 }, +
109343 // When called from action, caches matched text and appends it on next action +
109344 more: function () { +
109345 this._more = true; +
109346 return this; +
109347 }, +
109348 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
109349 reject: function () { +
109350 if (this.options.backtrack_lexer) { +
109351 this._backtrack = true; +
109352 } else { +
109353 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
109354 text: "", +
109355 token: null, +
109356 line: this.yylineno +
109357 }); +
109358 } +
109359 +
109360 return this; +
109361 }, +
109362 // retain first n characters of the match +
109363 less: function (n) { +
109364 this.unput(this.match.slice(n)); +
109365 }, +
109366 // displays already matched input, i.e. for error messages +
109367 pastInput: function () { +
109368 var past = this.matched.substr(0, this.matched.length - this.match.length); +
109369 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
109370 }, +
109371 // displays upcoming input, i.e. for error messages +
109372 upcomingInput: function () { +
109373 var next = this.match; +
109374 +
109375 if (next.length < 20) { +
109376 next += this._input.substr(0, 20 - next.length); +
109377 } +
109378 +
109379 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
109380 }, +
109381 // displays the character position where the lexing error occurred, i.e. for error messages +
109382 showPosition: function () { +
109383 var pre = this.pastInput(); +
109384 var c = new Array(pre.length + 1).join("-"); +
109385 return pre + this.upcomingInput() + "\n" + c + "^"; +
109386 }, +
109387 // test the lexed token: return FALSE when not a match, otherwise return token +
109388 test_match: function (match, indexed_rule) { +
109389 var token, lines, backup; +
109390 +
109391 if (this.options.backtrack_lexer) { +
109392 // save context +
109393 backup = { +
109394 yylineno: this.yylineno, +
109395 yylloc: { +
109396 first_line: this.yylloc.first_line, +
109397 last_line: this.last_line, +
109398 first_column: this.yylloc.first_column, +
109399 last_column: this.yylloc.last_column +
109400 }, +
109401 yytext: this.yytext, +
109402 match: this.match, +
109403 matches: this.matches, +
109404 matched: this.matched, +
109405 yyleng: this.yyleng, +
109406 offset: this.offset, +
109407 _more: this._more, +
109408 _input: this._input, +
109409 yy: this.yy, +
109410 conditionStack: this.conditionStack.slice(0), +
109411 done: this.done +
109412 }; +
109413 +
109414 if (this.options.ranges) { +
109415 backup.yylloc.range = this.yylloc.range.slice(0); +
109416 } +
109417 } +
109418 +
109419 lines = match[0].match(/(?:\r\n?|\n).*/g); +
109420 +
109421 if (lines) { +
109422 this.yylineno += lines.length; +
109423 } +
109424 +
109425 this.yylloc = { +
109426 first_line: this.yylloc.last_line, +
109427 last_line: this.yylineno + 1, +
109428 first_column: this.yylloc.last_column, +
109429 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
109430 }; +
109431 this.yytext += match[0]; +
109432 this.match += match[0]; +
109433 this.matches = match; +
109434 this.yyleng = this.yytext.length; +
109435 +
109436 if (this.options.ranges) { +
109437 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
109438 } +
109439 +
109440 this._more = false; +
109441 this._backtrack = false; +
109442 this._input = this._input.slice(match[0].length); +
109443 this.matched += match[0]; +
109444 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
109445 +
109446 if (this.done && this._input) { +
109447 this.done = false; +
109448 } +
109449 +
109450 if (token) { +
109451 return token; +
109452 } else if (this._backtrack) { +
109453 // recover context +
109454 for (var k in backup) { +
109455 this[k] = backup[k]; +
109456 } +
109457 +
109458 return false; // rule action called reject() implying the next rule should be tested instead. +
109459 } +
109460 +
109461 return false; +
109462 }, +
109463 // return next match in input +
109464 next: function () { +
109465 if (this.done) { +
109466 return this.EOF; +
109467 } +
109468 +
109469 if (!this._input) { +
109470 this.done = true; +
109471 } +
109472 +
109473 var token, match, tempMatch, index; +
109474 +
109475 if (!this._more) { +
109476 this.yytext = ''; +
109477 this.match = ''; +
109478 } +
109479 +
109480 var rules = this._currentRules(); +
109481 +
109482 for (var i = 0; i < rules.length; i++) { +
109483 tempMatch = this._input.match(this.rules[rules[i]]); +
109484 +
109485 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
109486 match = tempMatch; +
109487 index = i; +
109488 +
109489 if (this.options.backtrack_lexer) { +
109490 token = this.test_match(tempMatch, rules[i]); +
109491 +
109492 if (token !== false) { +
109493 return token; +
109494 } else if (this._backtrack) { +
109495 match = false; +
109496 continue; // rule action called reject() implying a rule MISmatch. +
109497 } else { +
109498 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
109499 return false; +
109500 } +
109501 } else if (!this.options.flex) { +
109502 break; +
109503 } +
109504 } +
109505 } +
109506 +
109507 if (match) { +
109508 token = this.test_match(match, rules[index]); +
109509 +
109510 if (token !== false) { +
109511 return token; +
109512 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
109513 +
109514 +
109515 return false; +
109516 } +
109517 +
109518 if (this._input === "") { +
109519 return this.EOF; +
109520 } else { +
109521 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
109522 text: "", +
109523 token: null, +
109524 line: this.yylineno +
109525 }); +
109526 } +
109527 }, +
109528 // return next match that has a token +
109529 lex: function lex() { +
109530 var r = this.next(); +
109531 +
109532 if (r) { +
109533 return r; +
109534 } else { +
109535 return this.lex(); +
109536 } +
109537 }, +
109538 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
109539 begin: function begin(condition) { +
109540 this.conditionStack.push(condition); +
109541 }, +
109542 // pop the previously active lexer condition state off the condition stack +
109543 popState: function popState() { +
109544 var n = this.conditionStack.length - 1; +
109545 +
109546 if (n > 0) { +
109547 return this.conditionStack.pop(); +
109548 } else { +
109549 return this.conditionStack[0]; +
109550 } +
109551 }, +
109552 // produce the lexer rule set which is active for the currently active lexer condition state +
109553 _currentRules: function _currentRules() { +
109554 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
109555 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
109556 } else { +
109557 return this.conditions["INITIAL"].rules; +
109558 } +
109559 }, +
109560 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
109561 topState: function topState(n) { +
109562 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
109563 +
109564 if (n >= 0) { +
109565 return this.conditionStack[n]; +
109566 } else { +
109567 return "INITIAL"; +
109568 } +
109569 }, +
109570 // alias for begin(condition) +
109571 pushState: function pushState(condition) { +
109572 this.begin(condition); +
109573 }, +
109574 // return the number of states currently on the stack +
109575 stateStackSize: function stateStackSize() { +
109576 return this.conditionStack.length; +
109577 }, +
109578 options: { +
109579 "case-insensitive": true +
109580 }, +
109581 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
109582 var YYSTATE = YY_START; +
109583 +
109584 switch ($avoiding_name_collisions) { +
109585 case 0: +
109586 return 12; +
109587 break; +
109588 +
109589 case 1: +
109590 /* skip all whitespace */ +
109591 break; +
109592 +
109593 case 2: +
109594 /* skip comments */ +
109595 break; +
109596 +
109597 case 3: +
109598 /* skip comments */ +
109599 break; +
109600 +
109601 case 4: +
109602 return 4; +
109603 break; +
109604 +
109605 case 5: +
109606 return 15; +
109607 break; +
109608 +
109609 case 6: +
109610 return 17; +
109611 break; +
109612 +
109613 case 7: +
109614 return 20; +
109615 break; +
109616 +
109617 case 8: +
109618 return 21; +
109619 break; +
109620 +
109621 case 9: +
109622 return 19; +
109623 break; +
109624 +
109625 case 10: +
109626 return 8; +
109627 break; +
109628 +
109629 case 11: +
109630 return 8; +
109631 break; +
109632 +
109633 case 12: +
109634 return 5; +
109635 break; +
109636 +
109637 case 13: +
109638 return 26; +
109639 break; +
109640 +
109641 case 14: +
109642 this.begin("options"); +
109643 break; +
109644 +
109645 case 15: +
109646 this.popState(); +
109647 break; +
109648 +
109649 case 16: +
109650 return 11; +
109651 break; +
109652 +
109653 case 17: +
109654 this.begin("string"); +
109655 break; +
109656 +
109657 case 18: +
109658 this.popState(); +
109659 break; +
109660 +
109661 case 19: +
109662 return 23; +
109663 break; +
109664 +
109665 case 20: +
109666 return 18; +
109667 break; +
109668 +
109669 case 21: +
109670 return 7; +
109671 break; +
109672 } +
109673 }, +
109674 rules: [/^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:gitGraph\b)/i, /^(?:commit\b)/i, /^(?:branch\b)/i, /^(?:merge\b)/i, /^(?:reset\b)/i, /^(?:checkout\b)/i, /^(?:LR\b)/i, /^(?:BT\b)/i, /^(?::)/i, /^(?:\^)/i, /^(?:options\r?\n)/i, /^(?:end\r?\n)/i, /^(?:[^\n]+\r?\n)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[a-zA-Z][a-zA-Z0-9_]+)/i, /^(?:$)/i], +
109675 conditions: { +
109676 "options": { +
109677 "rules": [15, 16], +
109678 "inclusive": false +
109679 }, +
109680 "string": { +
109681 "rules": [18, 19], +
109682 "inclusive": false +
109683 }, +
109684 "INITIAL": { +
109685 "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20, 21], +
109686 "inclusive": true +
109687 } +
109688 } +
109689 }; +
109690 return lexer; +
109691 }(); +
109692 +
109693 parser.lexer = lexer; +
109694 +
109695 function Parser() { +
109696 this.yy = {}; +
109697 } +
109698 +
109699 Parser.prototype = parser; +
109700 parser.Parser = Parser; +
109701 return new Parser(); +
109702}(); +
109703 +
109704if (true) { +
109705 exports.parser = parser; +
109706 exports.Parser = parser.Parser; +
109707 +
109708 exports.parse = function () { +
109709 return parser.parse.apply(parser, arguments); +
109710 }; +
109711 +
109712 exports.main = function commonjsMain(args) { +
109713 if (!args[1]) { +
109714 console.log('Usage: ' + args[0] + ' FILE'); +
109715 process.exit(1); +
109716 } +
109717 +
109718 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
109719 +
109720 return exports.parser.parse(source); +
109721 }; +
109722 +
109723 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
109724 exports.main(process.argv.slice(1)); +
109725 } +
109726} +
109727/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
109728 +
109729/***/ }), +
109730 +
109731/***/ "./src/diagrams/info/infoDb.js": +
109732/*!*************************************!*\ +
109733 !*** ./src/diagrams/info/infoDb.js ***! +
109734 \*************************************/ +
109735/*! exports provided: setMessage, getMessage, setInfo, getInfo, default */ +
109736/***/ (function(module, __webpack_exports__, __webpack_require__) { +
109737 +
109738"use strict"; +
109739__webpack_require__.r(__webpack_exports__); +
109740/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setMessage", function() { return setMessage; }); +
109741/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMessage", function() { return getMessage; }); +
109742/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setInfo", function() { return setInfo; }); +
109743/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getInfo", function() { return getInfo; }); +
109744/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
109745/** +
109746 * Created by knut on 15-01-14. +
109747 */ +
109748 +
109749var message = ''; +
109750var info = false; +
109751const setMessage = txt => { +
109752 _logger__WEBPACK_IMPORTED_MODULE_0__["logger"].debug('Setting message to: ' + txt); +
109753 message = txt; +
109754}; +
109755const getMessage = () => { +
109756 return message; +
109757}; +
109758const setInfo = inf => { +
109759 info = inf; +
109760}; +
109761const getInfo = () => { +
109762 return info; +
109763}; // export const parseError = (err, hash) => { +
109764// global.mermaidAPI.parseError(err, hash) +
109765// } +
109766 +
109767/* harmony default export */ __webpack_exports__["default"] = ({ +
109768 setMessage, +
109769 getMessage, +
109770 setInfo, +
109771 getInfo // parseError +
109772 +
109773}); +
109774 +
109775/***/ }), +
109776 +
109777/***/ "./src/diagrams/info/infoRenderer.js": +
109778/*!*******************************************!*\ +
109779 !*** ./src/diagrams/info/infoRenderer.js ***! +
109780 \*******************************************/ +
109781/*! exports provided: setConf, draw, default */ +
109782/***/ (function(module, __webpack_exports__, __webpack_require__) { +
109783 +
109784"use strict"; +
109785__webpack_require__.r(__webpack_exports__); +
109786/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
109787/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
109788/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
109789/* harmony import */ var _infoDb__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./infoDb */ "./src/diagrams/info/infoDb.js"); +
109790/* harmony import */ var _parser_info_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parser/info.js */ "./src/diagrams/info/parser/info.js"); +
109791/* harmony import */ var _parser_info_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_parser_info_js__WEBPACK_IMPORTED_MODULE_2__); +
109792/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
109793/** +
109794 * Created by knut on 14-12-11. +
109795 */ +
109796 +
109797 +
109798 +
109799 +
109800const conf = {}; +
109801const setConf = function (cnf) { +
109802 const keys = Object.keys(cnf); +
109803 keys.forEach(function (key) { +
109804 conf[key] = cnf[key]; +
109805 }); +
109806}; +
109807/** +
109808 * Draws a an info picture in the tag with id: id based on the graph definition in text. +
109809 * @param text +
109810 * @param id +
109811 */ +
109812 +
109813const draw = (txt, id, ver) => { +
109814 try { +
109815 const parser = _parser_info_js__WEBPACK_IMPORTED_MODULE_2___default.a.parser; +
109816 parser.yy = _infoDb__WEBPACK_IMPORTED_MODULE_1__["default"]; +
109817 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Renering info diagram\n' + txt); // Parse the graph definition +
109818 +
109819 parser.parse(txt); +
109820 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Parsed info diagram'); // Fetch the default direction, use TD if none was found +
109821 +
109822 const svg = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#' + id); +
109823 const g = svg.append('g'); +
109824 g.append('text') // text label for the x axis +
109825 .attr('x', 100).attr('y', 40).attr('class', 'version').attr('font-size', '32px').style('text-anchor', 'middle').text('v ' + ver); +
109826 svg.attr('height', 100); +
109827 svg.attr('width', 400); // svg.attr('viewBox', '0 0 300 150'); +
109828 } catch (e) { +
109829 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].error('Error while rendering info diagram'); +
109830 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].error(e.message); +
109831 } +
109832}; +
109833/* harmony default export */ __webpack_exports__["default"] = ({ +
109834 setConf, +
109835 draw +
109836}); +
109837 +
109838/***/ }), +
109839 +
109840/***/ "./src/diagrams/info/parser/info.js": +
109841/*!******************************************!*\ +
109842 !*** ./src/diagrams/info/parser/info.js ***! +
109843 \******************************************/ +
109844/*! no static exports found */ +
109845/***/ (function(module, exports, __webpack_require__) { +
109846 +
109847/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
109848 +
109849/* +
109850 Returns a Parser object of the following structure: +
109851 +
109852 Parser: { +
109853 yy: {} +
109854 } +
109855 +
109856 Parser.prototype: { +
109857 yy: {}, +
109858 trace: function(), +
109859 symbols_: {associative list: name ==> number}, +
109860 terminals_: {associative list: number ==> name}, +
109861 productions_: [...], +
109862 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
109863 table: [...], +
109864 defaultActions: {...}, +
109865 parseError: function(str, hash), +
109866 parse: function(input), +
109867 +
109868 lexer: { +
109869 EOF: 1, +
109870 parseError: function(str, hash), +
109871 setInput: function(input), +
109872 input: function(), +
109873 unput: function(str), +
109874 more: function(), +
109875 less: function(n), +
109876 pastInput: function(), +
109877 upcomingInput: function(), +
109878 showPosition: function(), +
109879 test_match: function(regex_match_array, rule_index), +
109880 next: function(), +
109881 lex: function(), +
109882 begin: function(condition), +
109883 popState: function(), +
109884 _currentRules: function(), +
109885 topState: function(), +
109886 pushState: function(condition), +
109887 +
109888 options: { +
109889 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
109890 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
109891 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
109892 }, +
109893 +
109894 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
109895 rules: [...], +
109896 conditions: {associative list: name ==> set}, +
109897 } +
109898 } +
109899 +
109900 +
109901 token location info (@$, _$, etc.): { +
109902 first_line: n, +
109903 last_line: n, +
109904 first_column: n, +
109905 last_column: n, +
109906 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
109907 } +
109908 +
109909 +
109910 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
109911 text: (matched text) +
109912 token: (the produced terminal token, if any) +
109913 line: (yylineno) +
109914 } +
109915 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
109916 loc: (yylloc) +
109917 expected: (string describing the set of expected tokens) +
109918 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
109919 } +
109920*/ +
109921var parser = function () { +
109922 var o = function (k, v, o, l) { +
109923 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
109924 +
109925 return o; +
109926 }, +
109927 $V0 = [6, 9, 10, 12]; +
109928 +
109929 var parser = { +
109930 trace: function trace() {}, +
109931 yy: {}, +
109932 symbols_: { +
109933 "error": 2, +
109934 "start": 3, +
109935 "info": 4, +
109936 "document": 5, +
109937 "EOF": 6, +
109938 "line": 7, +
109939 "statement": 8, +
109940 "NL": 9, +
109941 "showInfo": 10, +
109942 "message": 11, +
109943 "say": 12, +
109944 "TXT": 13, +
109945 "$accept": 0, +
109946 "$end": 1 +
109947 }, +
109948 terminals_: { +
109949 2: "error", +
109950 4: "info", +
109951 6: "EOF", +
109952 9: "NL", +
109953 10: "showInfo", +
109954 12: "say", +
109955 13: "TXT" +
109956 }, +
109957 productions_: [0, [3, 3], [5, 0], [5, 2], [7, 1], [7, 1], [8, 1], [8, 1], [11, 2]], +
109958 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
109959 /* action[1] */ +
109960 , $$ +
109961 /* vstack */ +
109962 , _$ +
109963 /* lstack */ +
109964 ) { +
109965 /* this == yyval */ +
109966 var $0 = $$.length - 1; +
109967 +
109968 switch (yystate) { +
109969 case 1: +
109970 return yy; +
109971 break; +
109972 +
109973 case 4: +
109974 break; +
109975 +
109976 case 6: +
109977 yy.setInfo(true); +
109978 break; +
109979 +
109980 case 7: +
109981 yy.setMessage($$[$0]); +
109982 break; +
109983 +
109984 case 8: +
109985 this.$ = $$[$0 - 1].substring(1).trim().replace(/\\n/gm, "\n"); +
109986 break; +
109987 } +
109988 }, +
109989 table: [{ +
109990 3: 1, +
109991 4: [1, 2] +
109992 }, { +
109993 1: [3] +
109994 }, o($V0, [2, 2], { +
109995 5: 3 +
109996 }), { +
109997 6: [1, 4], +
109998 7: 5, +
109999 8: 6, +
110000 9: [1, 7], +
110001 10: [1, 8], +
110002 11: 9, +
110003 12: [1, 10] +
110004 }, { +
110005 1: [2, 1] +
110006 }, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6]), o($V0, [2, 7]), { +
110007 13: [1, 11] +
110008 }, o($V0, [2, 8])], +
110009 defaultActions: { +
110010 4: [2, 1] +
110011 }, +
110012 parseError: function parseError(str, hash) { +
110013 if (hash.recoverable) { +
110014 this.trace(str); +
110015 } else { +
110016 var error = new Error(str); +
110017 error.hash = hash; +
110018 throw error; +
110019 } +
110020 }, +
110021 parse: function parse(input) { +
110022 var self = this, +
110023 stack = [0], +
110024 tstack = [], +
110025 vstack = [null], +
110026 lstack = [], +
110027 table = this.table, +
110028 yytext = '', +
110029 yylineno = 0, +
110030 yyleng = 0, +
110031 recovering = 0, +
110032 TERROR = 2, +
110033 EOF = 1; +
110034 var args = lstack.slice.call(arguments, 1); +
110035 var lexer = Object.create(this.lexer); +
110036 var sharedState = { +
110037 yy: {} +
110038 }; +
110039 +
110040 for (var k in this.yy) { +
110041 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
110042 sharedState.yy[k] = this.yy[k]; +
110043 } +
110044 } +
110045 +
110046 lexer.setInput(input, sharedState.yy); +
110047 sharedState.yy.lexer = lexer; +
110048 sharedState.yy.parser = this; +
110049 +
110050 if (typeof lexer.yylloc == 'undefined') { +
110051 lexer.yylloc = {}; +
110052 } +
110053 +
110054 var yyloc = lexer.yylloc; +
110055 lstack.push(yyloc); +
110056 var ranges = lexer.options && lexer.options.ranges; +
110057 +
110058 if (typeof sharedState.yy.parseError === 'function') { +
110059 this.parseError = sharedState.yy.parseError; +
110060 } else { +
110061 this.parseError = Object.getPrototypeOf(this).parseError; +
110062 } +
110063 +
110064 function popStack(n) { +
110065 stack.length = stack.length - 2 * n; +
110066 vstack.length = vstack.length - n; +
110067 lstack.length = lstack.length - n; +
110068 } +
110069 +
110070 function lex() { +
110071 var token; +
110072 token = tstack.pop() || lexer.lex() || EOF; +
110073 +
110074 if (typeof token !== 'number') { +
110075 if (token instanceof Array) { +
110076 tstack = token; +
110077 token = tstack.pop(); +
110078 } +
110079 +
110080 token = self.symbols_[token] || token; +
110081 } +
110082 +
110083 return token; +
110084 } +
110085 +
110086 var symbol, +
110087 preErrorSymbol, +
110088 state, +
110089 action, +
110090 a, +
110091 r, +
110092 yyval = {}, +
110093 p, +
110094 len, +
110095 newState, +
110096 expected; +
110097 +
110098 while (true) { +
110099 state = stack[stack.length - 1]; +
110100 +
110101 if (this.defaultActions[state]) { +
110102 action = this.defaultActions[state]; +
110103 } else { +
110104 if (symbol === null || typeof symbol == 'undefined') { +
110105 symbol = lex(); +
110106 } +
110107 +
110108 action = table[state] && table[state][symbol]; +
110109 } +
110110 +
110111 if (typeof action === 'undefined' || !action.length || !action[0]) { +
110112 var errStr = ''; +
110113 expected = []; +
110114 +
110115 for (p in table[state]) { +
110116 if (this.terminals_[p] && p > TERROR) { +
110117 expected.push('\'' + this.terminals_[p] + '\''); +
110118 } +
110119 } +
110120 +
110121 if (lexer.showPosition) { +
110122 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
110123 } else { +
110124 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
110125 } +
110126 +
110127 this.parseError(errStr, { +
110128 text: lexer.match, +
110129 token: this.terminals_[symbol] || symbol, +
110130 line: lexer.yylineno, +
110131 loc: yyloc, +
110132 expected: expected +
110133 }); +
110134 } +
110135 +
110136 if (action[0] instanceof Array && action.length > 1) { +
110137 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
110138 } +
110139 +
110140 switch (action[0]) { +
110141 case 1: +
110142 stack.push(symbol); +
110143 vstack.push(lexer.yytext); +
110144 lstack.push(lexer.yylloc); +
110145 stack.push(action[1]); +
110146 symbol = null; +
110147 +
110148 if (!preErrorSymbol) { +
110149 yyleng = lexer.yyleng; +
110150 yytext = lexer.yytext; +
110151 yylineno = lexer.yylineno; +
110152 yyloc = lexer.yylloc; +
110153 +
110154 if (recovering > 0) { +
110155 recovering--; +
110156 } +
110157 } else { +
110158 symbol = preErrorSymbol; +
110159 preErrorSymbol = null; +
110160 } +
110161 +
110162 break; +
110163 +
110164 case 2: +
110165 len = this.productions_[action[1]][1]; +
110166 yyval.$ = vstack[vstack.length - len]; +
110167 yyval._$ = { +
110168 first_line: lstack[lstack.length - (len || 1)].first_line, +
110169 last_line: lstack[lstack.length - 1].last_line, +
110170 first_column: lstack[lstack.length - (len || 1)].first_column, +
110171 last_column: lstack[lstack.length - 1].last_column +
110172 }; +
110173 +
110174 if (ranges) { +
110175 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
110176 } +
110177 +
110178 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
110179 +
110180 if (typeof r !== 'undefined') { +
110181 return r; +
110182 } +
110183 +
110184 if (len) { +
110185 stack = stack.slice(0, -1 * len * 2); +
110186 vstack = vstack.slice(0, -1 * len); +
110187 lstack = lstack.slice(0, -1 * len); +
110188 } +
110189 +
110190 stack.push(this.productions_[action[1]][0]); +
110191 vstack.push(yyval.$); +
110192 lstack.push(yyval._$); +
110193 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
110194 stack.push(newState); +
110195 break; +
110196 +
110197 case 3: +
110198 return true; +
110199 } +
110200 } +
110201 +
110202 return true; +
110203 } +
110204 }; +
110205 /* generated by jison-lex 0.3.4 */ +
110206 +
110207 var lexer = function () { +
110208 var lexer = { +
110209 EOF: 1, +
110210 parseError: function parseError(str, hash) { +
110211 if (this.yy.parser) { +
110212 this.yy.parser.parseError(str, hash); +
110213 } else { +
110214 throw new Error(str); +
110215 } +
110216 }, +
110217 // resets the lexer, sets new input +
110218 setInput: function (input, yy) { +
110219 this.yy = yy || this.yy || {}; +
110220 this._input = input; +
110221 this._more = this._backtrack = this.done = false; +
110222 this.yylineno = this.yyleng = 0; +
110223 this.yytext = this.matched = this.match = ''; +
110224 this.conditionStack = ['INITIAL']; +
110225 this.yylloc = { +
110226 first_line: 1, +
110227 first_column: 0, +
110228 last_line: 1, +
110229 last_column: 0 +
110230 }; +
110231 +
110232 if (this.options.ranges) { +
110233 this.yylloc.range = [0, 0]; +
110234 } +
110235 +
110236 this.offset = 0; +
110237 return this; +
110238 }, +
110239 // consumes and returns one char from the input +
110240 input: function () { +
110241 var ch = this._input[0]; +
110242 this.yytext += ch; +
110243 this.yyleng++; +
110244 this.offset++; +
110245 this.match += ch; +
110246 this.matched += ch; +
110247 var lines = ch.match(/(?:\r\n?|\n).*/g); +
110248 +
110249 if (lines) { +
110250 this.yylineno++; +
110251 this.yylloc.last_line++; +
110252 } else { +
110253 this.yylloc.last_column++; +
110254 } +
110255 +
110256 if (this.options.ranges) { +
110257 this.yylloc.range[1]++; +
110258 } +
110259 +
110260 this._input = this._input.slice(1); +
110261 return ch; +
110262 }, +
110263 // unshifts one char (or a string) into the input +
110264 unput: function (ch) { +
110265 var len = ch.length; +
110266 var lines = ch.split(/(?:\r\n?|\n)/g); +
110267 this._input = ch + this._input; +
110268 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
110269 +
110270 this.offset -= len; +
110271 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
110272 this.match = this.match.substr(0, this.match.length - 1); +
110273 this.matched = this.matched.substr(0, this.matched.length - 1); +
110274 +
110275 if (lines.length - 1) { +
110276 this.yylineno -= lines.length - 1; +
110277 } +
110278 +
110279 var r = this.yylloc.range; +
110280 this.yylloc = { +
110281 first_line: this.yylloc.first_line, +
110282 last_line: this.yylineno + 1, +
110283 first_column: this.yylloc.first_column, +
110284 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
110285 }; +
110286 +
110287 if (this.options.ranges) { +
110288 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
110289 } +
110290 +
110291 this.yyleng = this.yytext.length; +
110292 return this; +
110293 }, +
110294 // When called from action, caches matched text and appends it on next action +
110295 more: function () { +
110296 this._more = true; +
110297 return this; +
110298 }, +
110299 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
110300 reject: function () { +
110301 if (this.options.backtrack_lexer) { +
110302 this._backtrack = true; +
110303 } else { +
110304 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
110305 text: "", +
110306 token: null, +
110307 line: this.yylineno +
110308 }); +
110309 } +
110310 +
110311 return this; +
110312 }, +
110313 // retain first n characters of the match +
110314 less: function (n) { +
110315 this.unput(this.match.slice(n)); +
110316 }, +
110317 // displays already matched input, i.e. for error messages +
110318 pastInput: function () { +
110319 var past = this.matched.substr(0, this.matched.length - this.match.length); +
110320 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
110321 }, +
110322 // displays upcoming input, i.e. for error messages +
110323 upcomingInput: function () { +
110324 var next = this.match; +
110325 +
110326 if (next.length < 20) { +
110327 next += this._input.substr(0, 20 - next.length); +
110328 } +
110329 +
110330 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
110331 }, +
110332 // displays the character position where the lexing error occurred, i.e. for error messages +
110333 showPosition: function () { +
110334 var pre = this.pastInput(); +
110335 var c = new Array(pre.length + 1).join("-"); +
110336 return pre + this.upcomingInput() + "\n" + c + "^"; +
110337 }, +
110338 // test the lexed token: return FALSE when not a match, otherwise return token +
110339 test_match: function (match, indexed_rule) { +
110340 var token, lines, backup; +
110341 +
110342 if (this.options.backtrack_lexer) { +
110343 // save context +
110344 backup = { +
110345 yylineno: this.yylineno, +
110346 yylloc: { +
110347 first_line: this.yylloc.first_line, +
110348 last_line: this.last_line, +
110349 first_column: this.yylloc.first_column, +
110350 last_column: this.yylloc.last_column +
110351 }, +
110352 yytext: this.yytext, +
110353 match: this.match, +
110354 matches: this.matches, +
110355 matched: this.matched, +
110356 yyleng: this.yyleng, +
110357 offset: this.offset, +
110358 _more: this._more, +
110359 _input: this._input, +
110360 yy: this.yy, +
110361 conditionStack: this.conditionStack.slice(0), +
110362 done: this.done +
110363 }; +
110364 +
110365 if (this.options.ranges) { +
110366 backup.yylloc.range = this.yylloc.range.slice(0); +
110367 } +
110368 } +
110369 +
110370 lines = match[0].match(/(?:\r\n?|\n).*/g); +
110371 +
110372 if (lines) { +
110373 this.yylineno += lines.length; +
110374 } +
110375 +
110376 this.yylloc = { +
110377 first_line: this.yylloc.last_line, +
110378 last_line: this.yylineno + 1, +
110379 first_column: this.yylloc.last_column, +
110380 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
110381 }; +
110382 this.yytext += match[0]; +
110383 this.match += match[0]; +
110384 this.matches = match; +
110385 this.yyleng = this.yytext.length; +
110386 +
110387 if (this.options.ranges) { +
110388 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
110389 } +
110390 +
110391 this._more = false; +
110392 this._backtrack = false; +
110393 this._input = this._input.slice(match[0].length); +
110394 this.matched += match[0]; +
110395 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
110396 +
110397 if (this.done && this._input) { +
110398 this.done = false; +
110399 } +
110400 +
110401 if (token) { +
110402 return token; +
110403 } else if (this._backtrack) { +
110404 // recover context +
110405 for (var k in backup) { +
110406 this[k] = backup[k]; +
110407 } +
110408 +
110409 return false; // rule action called reject() implying the next rule should be tested instead. +
110410 } +
110411 +
110412 return false; +
110413 }, +
110414 // return next match in input +
110415 next: function () { +
110416 if (this.done) { +
110417 return this.EOF; +
110418 } +
110419 +
110420 if (!this._input) { +
110421 this.done = true; +
110422 } +
110423 +
110424 var token, match, tempMatch, index; +
110425 +
110426 if (!this._more) { +
110427 this.yytext = ''; +
110428 this.match = ''; +
110429 } +
110430 +
110431 var rules = this._currentRules(); +
110432 +
110433 for (var i = 0; i < rules.length; i++) { +
110434 tempMatch = this._input.match(this.rules[rules[i]]); +
110435 +
110436 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
110437 match = tempMatch; +
110438 index = i; +
110439 +
110440 if (this.options.backtrack_lexer) { +
110441 token = this.test_match(tempMatch, rules[i]); +
110442 +
110443 if (token !== false) { +
110444 return token; +
110445 } else if (this._backtrack) { +
110446 match = false; +
110447 continue; // rule action called reject() implying a rule MISmatch. +
110448 } else { +
110449 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
110450 return false; +
110451 } +
110452 } else if (!this.options.flex) { +
110453 break; +
110454 } +
110455 } +
110456 } +
110457 +
110458 if (match) { +
110459 token = this.test_match(match, rules[index]); +
110460 +
110461 if (token !== false) { +
110462 return token; +
110463 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
110464 +
110465 +
110466 return false; +
110467 } +
110468 +
110469 if (this._input === "") { +
110470 return this.EOF; +
110471 } else { +
110472 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
110473 text: "", +
110474 token: null, +
110475 line: this.yylineno +
110476 }); +
110477 } +
110478 }, +
110479 // return next match that has a token +
110480 lex: function lex() { +
110481 var r = this.next(); +
110482 +
110483 if (r) { +
110484 return r; +
110485 } else { +
110486 return this.lex(); +
110487 } +
110488 }, +
110489 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
110490 begin: function begin(condition) { +
110491 this.conditionStack.push(condition); +
110492 }, +
110493 // pop the previously active lexer condition state off the condition stack +
110494 popState: function popState() { +
110495 var n = this.conditionStack.length - 1; +
110496 +
110497 if (n > 0) { +
110498 return this.conditionStack.pop(); +
110499 } else { +
110500 return this.conditionStack[0]; +
110501 } +
110502 }, +
110503 // produce the lexer rule set which is active for the currently active lexer condition state +
110504 _currentRules: function _currentRules() { +
110505 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
110506 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
110507 } else { +
110508 return this.conditions["INITIAL"].rules; +
110509 } +
110510 }, +
110511 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
110512 topState: function topState(n) { +
110513 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
110514 +
110515 if (n >= 0) { +
110516 return this.conditionStack[n]; +
110517 } else { +
110518 return "INITIAL"; +
110519 } +
110520 }, +
110521 // alias for begin(condition) +
110522 pushState: function pushState(condition) { +
110523 this.begin(condition); +
110524 }, +
110525 // return the number of states currently on the stack +
110526 stateStackSize: function stateStackSize() { +
110527 return this.conditionStack.length; +
110528 }, +
110529 options: { +
110530 "case-insensitive": true +
110531 }, +
110532 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
110533 // Pre-lexer code can go here +
110534 var YYSTATE = YY_START; +
110535 +
110536 switch ($avoiding_name_collisions) { +
110537 case 0: +
110538 return 4; +
110539 break; +
110540 +
110541 case 1: +
110542 return 9; +
110543 break; +
110544 +
110545 case 2: +
110546 return 'space'; +
110547 break; +
110548 +
110549 case 3: +
110550 return 10; +
110551 break; +
110552 +
110553 case 4: +
110554 return 12; +
110555 break; +
110556 +
110557 case 5: +
110558 return 6; +
110559 break; +
110560 +
110561 case 6: +
110562 return 13; +
110563 break; +
110564 } +
110565 }, +
110566 rules: [/^(?:info\b)/i, /^(?:[\s\n\r]+)/i, /^(?:[\s]+)/i, /^(?:showInfo\b)/i, /^(?:say\b)/i, /^(?:$)/i, /^(?:.)/i], +
110567 conditions: { +
110568 "INITIAL": { +
110569 "rules": [0, 1, 2, 3, 4, 5, 6], +
110570 "inclusive": true +
110571 } +
110572 } +
110573 }; +
110574 return lexer; +
110575 }(); +
110576 +
110577 parser.lexer = lexer; +
110578 +
110579 function Parser() { +
110580 this.yy = {}; +
110581 } +
110582 +
110583 Parser.prototype = parser; +
110584 parser.Parser = Parser; +
110585 return new Parser(); +
110586}(); +
110587 +
110588if (true) { +
110589 exports.parser = parser; +
110590 exports.Parser = parser.Parser; +
110591 +
110592 exports.parse = function () { +
110593 return parser.parse.apply(parser, arguments); +
110594 }; +
110595 +
110596 exports.main = function commonjsMain(args) { +
110597 if (!args[1]) { +
110598 console.log('Usage: ' + args[0] + ' FILE'); +
110599 process.exit(1); +
110600 } +
110601 +
110602 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
110603 +
110604 return exports.parser.parse(source); +
110605 }; +
110606 +
110607 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
110608 exports.main(process.argv.slice(1)); +
110609 } +
110610} +
110611/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
110612 +
110613/***/ }), +
110614 +
110615/***/ "./src/diagrams/sequence/parser/sequenceDiagram.js": +
110616/*!*********************************************************!*\ +
110617 !*** ./src/diagrams/sequence/parser/sequenceDiagram.js ***! +
110618 \*********************************************************/ +
110619/*! no static exports found */ +
110620/***/ (function(module, exports, __webpack_require__) { +
110621 +
110622/* WEBPACK VAR INJECTION */(function(process, module) {/* parser generated by jison 0.4.18 */ +
110623 +
110624/* +
110625 Returns a Parser object of the following structure: +
110626 +
110627 Parser: { +
110628 yy: {} +
110629 } +
110630 +
110631 Parser.prototype: { +
110632 yy: {}, +
110633 trace: function(), +
110634 symbols_: {associative list: name ==> number}, +
110635 terminals_: {associative list: number ==> name}, +
110636 productions_: [...], +
110637 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), +
110638 table: [...], +
110639 defaultActions: {...}, +
110640 parseError: function(str, hash), +
110641 parse: function(input), +
110642 +
110643 lexer: { +
110644 EOF: 1, +
110645 parseError: function(str, hash), +
110646 setInput: function(input), +
110647 input: function(), +
110648 unput: function(str), +
110649 more: function(), +
110650 less: function(n), +
110651 pastInput: function(), +
110652 upcomingInput: function(), +
110653 showPosition: function(), +
110654 test_match: function(regex_match_array, rule_index), +
110655 next: function(), +
110656 lex: function(), +
110657 begin: function(condition), +
110658 popState: function(), +
110659 _currentRules: function(), +
110660 topState: function(), +
110661 pushState: function(condition), +
110662 +
110663 options: { +
110664 ranges: boolean (optional: true ==> token location info will include a .range[] member) +
110665 flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) +
110666 backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) +
110667 }, +
110668 +
110669 performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), +
110670 rules: [...], +
110671 conditions: {associative list: name ==> set}, +
110672 } +
110673 } +
110674 +
110675 +
110676 token location info (@$, _$, etc.): { +
110677 first_line: n, +
110678 last_line: n, +
110679 first_column: n, +
110680 last_column: n, +
110681 range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) +
110682 } +
110683 +
110684 +
110685 the parseError function receives a 'hash' object with these members for lexer and parser errors: { +
110686 text: (matched text) +
110687 token: (the produced terminal token, if any) +
110688 line: (yylineno) +
110689 } +
110690 while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { +
110691 loc: (yylloc) +
110692 expected: (string describing the set of expected tokens) +
110693 recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) +
110694 } +
110695*/ +
110696var parser = function () { +
110697 var o = function (k, v, o, l) { +
110698 for (o = o || {}, l = k.length; l--; o[k[l]] = v); +
110699 +
110700 return o; +
110701 }, +
110702 $V0 = [1, 2], +
110703 $V1 = [1, 3], +
110704 $V2 = [1, 4], +
110705 $V3 = [2, 4], +
110706 $V4 = [1, 9], +
110707 $V5 = [1, 11], +
110708 $V6 = [1, 12], +
110709 $V7 = [1, 14], +
110710 $V8 = [1, 15], +
110711 $V9 = [1, 17], +
110712 $Va = [1, 18], +
110713 $Vb = [1, 19], +
110714 $Vc = [1, 20], +
110715 $Vd = [1, 21], +
110716 $Ve = [1, 23], +
110717 $Vf = [1, 24], +
110718 $Vg = [1, 4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 25, 27, 28, 29, 40], +
110719 $Vh = [1, 32], +
110720 $Vi = [4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 25, 29, 40], +
110721 $Vj = [4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 25, 28, 29, 40], +
110722 $Vk = [4, 5, 10, 15, 16, 18, 20, 21, 22, 23, 25, 27, 29, 40], +
110723 $Vl = [38, 39, 40]; +
110724 +
110725 var parser = { +
110726 trace: function trace() {}, +
110727 yy: {}, +
110728 symbols_: { +
110729 "error": 2, +
110730 "start": 3, +
110731 "SPACE": 4, +
110732 "NL": 5, +
110733 "SD": 6, +
110734 "document": 7, +
110735 "line": 8, +
110736 "statement": 9, +
110737 "participant": 10, +
110738 "actor": 11, +
110739 "AS": 12, +
110740 "restOfLine": 13, +
110741 "signal": 14, +
110742 "activate": 15, +
110743 "deactivate": 16, +
110744 "note_statement": 17, +
110745 "title": 18, +
110746 "text2": 19, +
110747 "loop": 20, +
110748 "end": 21, +
110749 "opt": 22, +
110750 "alt": 23, +
110751 "else_sections": 24, +
110752 "par": 25, +
110753 "par_sections": 26, +
110754 "and": 27, +
110755 "else": 28, +
110756 "note": 29, +
110757 "placement": 30, +
110758 "over": 31, +
110759 "actor_pair": 32, +
110760 "spaceList": 33, +
110761 ",": 34, +
110762 "left_of": 35, +
110763 "right_of": 36, +
110764 "signaltype": 37, +
110765 "+": 38, +
110766 "-": 39, +
110767 "ACTOR": 40, +
110768 "SOLID_OPEN_ARROW": 41, +
110769 "DOTTED_OPEN_ARROW": 42, +
110770 "SOLID_ARROW": 43, +
110771 "DOTTED_ARROW": 44, +
110772 "SOLID_CROSS": 45, +
110773 "DOTTED_CROSS": 46, +
110774 "TXT": 47, +
110775 "$accept": 0, +
110776 "$end": 1 +
110777 }, +
110778 terminals_: { +
110779 2: "error", +
110780 4: "SPACE", +
110781 5: "NL", +
110782 6: "SD", +
110783 10: "participant", +
110784 12: "AS", +
110785 13: "restOfLine", +
110786 15: "activate", +
110787 16: "deactivate", +
110788 18: "title", +
110789 20: "loop", +
110790 21: "end", +
110791 22: "opt", +
110792 23: "alt", +
110793 25: "par", +
110794 27: "and", +
110795 28: "else", +
110796 29: "note", +
110797 31: "over", +
110798 34: ",", +
110799 35: "left_of", +
110800 36: "right_of", +
110801 38: "+", +
110802 39: "-", +
110803 40: "ACTOR", +
110804 41: "SOLID_OPEN_ARROW", +
110805 42: "DOTTED_OPEN_ARROW", +
110806 43: "SOLID_ARROW", +
110807 44: "DOTTED_ARROW", +
110808 45: "SOLID_CROSS", +
110809 46: "DOTTED_CROSS", +
110810 47: "TXT" +
110811 }, +
110812 productions_: [0, [3, 2], [3, 2], [3, 2], [7, 0], [7, 2], [8, 2], [8, 1], [8, 1], [9, 5], [9, 3], [9, 2], [9, 3], [9, 3], [9, 2], [9, 3], [9, 4], [9, 4], [9, 4], [9, 4], [26, 1], [26, 4], [24, 1], [24, 4], [17, 4], [17, 4], [33, 2], [33, 1], [32, 3], [32, 1], [30, 1], [30, 1], [14, 5], [14, 5], [14, 4], [11, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [19, 1]], +
110813 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate +
110814 /* action[1] */ +
110815 , $$ +
110816 /* vstack */ +
110817 , _$ +
110818 /* lstack */ +
110819 ) { +
110820 /* this == yyval */ +
110821 var $0 = $$.length - 1; +
110822 +
110823 switch (yystate) { +
110824 case 3: +
110825 yy.apply($$[$0]); +
110826 return $$[$0]; +
110827 break; +
110828 +
110829 case 4: +
110830 this.$ = []; +
110831 break; +
110832 +
110833 case 5: +
110834 $$[$0 - 1].push($$[$0]); +
110835 this.$ = $$[$0 - 1]; +
110836 break; +
110837 +
110838 case 6: +
110839 case 7: +
110840 this.$ = $$[$0]; +
110841 break; +
110842 +
110843 case 8: +
110844 this.$ = []; +
110845 break; +
110846 +
110847 case 9: +
110848 $$[$0 - 3].description = $$[$0 - 1]; +
110849 this.$ = $$[$0 - 3]; +
110850 break; +
110851 +
110852 case 10: +
110853 this.$ = $$[$0 - 1]; +
110854 break; +
110855 +
110856 case 12: +
110857 this.$ = { +
110858 type: 'activeStart', +
110859 signalType: yy.LINETYPE.ACTIVE_START, +
110860 actor: $$[$0 - 1] +
110861 }; +
110862 break; +
110863 +
110864 case 13: +
110865 this.$ = { +
110866 type: 'activeEnd', +
110867 signalType: yy.LINETYPE.ACTIVE_END, +
110868 actor: $$[$0 - 1] +
110869 }; +
110870 break; +
110871 +
110872 case 15: +
110873 this.$ = [{ +
110874 type: 'setTitle', +
110875 text: $$[$0 - 1] +
110876 }]; +
110877 break; +
110878 +
110879 case 16: +
110880 $$[$0 - 1].unshift({ +
110881 type: 'loopStart', +
110882 loopText: $$[$0 - 2], +
110883 signalType: yy.LINETYPE.LOOP_START +
110884 }); +
110885 $$[$0 - 1].push({ +
110886 type: 'loopEnd', +
110887 loopText: $$[$0 - 2], +
110888 signalType: yy.LINETYPE.LOOP_END +
110889 }); +
110890 this.$ = $$[$0 - 1]; +
110891 break; +
110892 +
110893 case 17: +
110894 $$[$0 - 1].unshift({ +
110895 type: 'optStart', +
110896 optText: $$[$0 - 2], +
110897 signalType: yy.LINETYPE.OPT_START +
110898 }); +
110899 $$[$0 - 1].push({ +
110900 type: 'optEnd', +
110901 optText: $$[$0 - 2], +
110902 signalType: yy.LINETYPE.OPT_END +
110903 }); +
110904 this.$ = $$[$0 - 1]; +
110905 break; +
110906 +
110907 case 18: +
110908 // Alt start +
110909 $$[$0 - 1].unshift({ +
110910 type: 'altStart', +
110911 altText: $$[$0 - 2], +
110912 signalType: yy.LINETYPE.ALT_START +
110913 }); // Content in alt is already in $$[$0-1] +
110914 // End +
110915 +
110916 $$[$0 - 1].push({ +
110917 type: 'altEnd', +
110918 signalType: yy.LINETYPE.ALT_END +
110919 }); +
110920 this.$ = $$[$0 - 1]; +
110921 break; +
110922 +
110923 case 19: +
110924 // Parallel start +
110925 $$[$0 - 1].unshift({ +
110926 type: 'parStart', +
110927 parText: $$[$0 - 2], +
110928 signalType: yy.LINETYPE.PAR_START +
110929 }); // Content in par is already in $$[$0-1] +
110930 // End +
110931 +
110932 $$[$0 - 1].push({ +
110933 type: 'parEnd', +
110934 signalType: yy.LINETYPE.PAR_END +
110935 }); +
110936 this.$ = $$[$0 - 1]; +
110937 break; +
110938 +
110939 case 21: +
110940 this.$ = $$[$0 - 3].concat([{ +
110941 type: 'and', +
110942 parText: $$[$0 - 1], +
110943 signalType: yy.LINETYPE.PAR_AND +
110944 }, $$[$0]]); +
110945 break; +
110946 +
110947 case 23: +
110948 this.$ = $$[$0 - 3].concat([{ +
110949 type: 'else', +
110950 altText: $$[$0 - 1], +
110951 signalType: yy.LINETYPE.ALT_ELSE +
110952 }, $$[$0]]); +
110953 break; +
110954 +
110955 case 24: +
110956 this.$ = [$$[$0 - 1], { +
110957 type: 'addNote', +
110958 placement: $$[$0 - 2], +
110959 actor: $$[$0 - 1].actor, +
110960 text: $$[$0] +
110961 }]; +
110962 break; +
110963 +
110964 case 25: +
110965 // Coerce actor_pair into a [to, from, ...] array +
110966 $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2); +
110967 $$[$0 - 2][0] = $$[$0 - 2][0].actor; +
110968 $$[$0 - 2][1] = $$[$0 - 2][1].actor; +
110969 this.$ = [$$[$0 - 1], { +
110970 type: 'addNote', +
110971 placement: yy.PLACEMENT.OVER, +
110972 actor: $$[$0 - 2].slice(0, 2), +
110973 text: $$[$0] +
110974 }]; +
110975 break; +
110976 +
110977 case 28: +
110978 this.$ = [$$[$0 - 2], $$[$0]]; +
110979 break; +
110980 +
110981 case 29: +
110982 this.$ = $$[$0]; +
110983 break; +
110984 +
110985 case 30: +
110986 this.$ = yy.PLACEMENT.LEFTOF; +
110987 break; +
110988 +
110989 case 31: +
110990 this.$ = yy.PLACEMENT.RIGHTOF; +
110991 break; +
110992 +
110993 case 32: +
110994 this.$ = [$$[$0 - 4], $$[$0 - 1], { +
110995 type: 'addMessage', +
110996 from: $$[$0 - 4].actor, +
110997 to: $$[$0 - 1].actor, +
110998 signalType: $$[$0 - 3], +
110999 msg: $$[$0] +
111000 }, { +
111001 type: 'activeStart', +
111002 signalType: yy.LINETYPE.ACTIVE_START, +
111003 actor: $$[$0 - 1] +
111004 }]; +
111005 break; +
111006 +
111007 case 33: +
111008 this.$ = [$$[$0 - 4], $$[$0 - 1], { +
111009 type: 'addMessage', +
111010 from: $$[$0 - 4].actor, +
111011 to: $$[$0 - 1].actor, +
111012 signalType: $$[$0 - 3], +
111013 msg: $$[$0] +
111014 }, { +
111015 type: 'activeEnd', +
111016 signalType: yy.LINETYPE.ACTIVE_END, +
111017 actor: $$[$0 - 4] +
111018 }]; +
111019 break; +
111020 +
111021 case 34: +
111022 this.$ = [$$[$0 - 3], $$[$0 - 1], { +
111023 type: 'addMessage', +
111024 from: $$[$0 - 3].actor, +
111025 to: $$[$0 - 1].actor, +
111026 signalType: $$[$0 - 2], +
111027 msg: $$[$0] +
111028 }]; +
111029 break; +
111030 +
111031 case 35: +
111032 this.$ = { +
111033 type: 'addActor', +
111034 actor: $$[$0] +
111035 }; +
111036 break; +
111037 +
111038 case 36: +
111039 this.$ = yy.LINETYPE.SOLID_OPEN; +
111040 break; +
111041 +
111042 case 37: +
111043 this.$ = yy.LINETYPE.DOTTED_OPEN; +
111044 break; +
111045 +
111046 case 38: +
111047 this.$ = yy.LINETYPE.SOLID; +
111048 break; +
111049 +
111050 case 39: +
111051 this.$ = yy.LINETYPE.DOTTED; +
111052 break; +
111053 +
111054 case 40: +
111055 this.$ = yy.LINETYPE.SOLID_CROSS; +
111056 break; +
111057 +
111058 case 41: +
111059 this.$ = yy.LINETYPE.DOTTED_CROSS; +
111060 break; +
111061 +
111062 case 42: +
111063 this.$ = $$[$0].substring(1).trim().replace(/\\n/gm, "\n"); +
111064 break; +
111065 } +
111066 }, +
111067 table: [{ +
111068 3: 1, +
111069 4: $V0, +
111070 5: $V1, +
111071 6: $V2 +
111072 }, { +
111073 1: [3] +
111074 }, { +
111075 3: 5, +
111076 4: $V0, +
111077 5: $V1, +
111078 6: $V2 +
111079 }, { +
111080 3: 6, +
111081 4: $V0, +
111082 5: $V1, +
111083 6: $V2 +
111084 }, o([1, 4, 5, 10, 15, 16, 18, 20, 22, 23, 25, 29, 40], $V3, { +
111085 7: 7 +
111086 }), { +
111087 1: [2, 1] +
111088 }, { +
111089 1: [2, 2] +
111090 }, { +
111091 1: [2, 3], +
111092 4: $V4, +
111093 5: $V5, +
111094 8: 8, +
111095 9: 10, +
111096 10: $V6, +
111097 11: 22, +
111098 14: 13, +
111099 15: $V7, +
111100 16: $V8, +
111101 17: 16, +
111102 18: $V9, +
111103 20: $Va, +
111104 22: $Vb, +
111105 23: $Vc, +
111106 25: $Vd, +
111107 29: $Ve, +
111108 40: $Vf +
111109 }, o($Vg, [2, 5]), { +
111110 9: 25, +
111111 10: $V6, +
111112 11: 22, +
111113 14: 13, +
111114 15: $V7, +
111115 16: $V8, +
111116 17: 16, +
111117 18: $V9, +
111118 20: $Va, +
111119 22: $Vb, +
111120 23: $Vc, +
111121 25: $Vd, +
111122 29: $Ve, +
111123 40: $Vf +
111124 }, o($Vg, [2, 7]), o($Vg, [2, 8]), { +
111125 11: 26, +
111126 40: $Vf +
111127 }, { +
111128 5: [1, 27] +
111129 }, { +
111130 11: 28, +
111131 40: $Vf +
111132 }, { +
111133 11: 29, +
111134 40: $Vf +
111135 }, { +
111136 5: [1, 30] +
111137 }, { +
111138 19: 31, +
111139 47: $Vh +
111140 }, { +
111141 13: [1, 33] +
111142 }, { +
111143 13: [1, 34] +
111144 }, { +
111145 13: [1, 35] +
111146 }, { +
111147 13: [1, 36] +
111148 }, { +
111149 37: 37, +
111150 41: [1, 38], +
111151 42: [1, 39], +
111152 43: [1, 40], +
111153 44: [1, 41], +
111154 45: [1, 42], +
111155 46: [1, 43] +
111156 }, { +
111157 30: 44, +
111158 31: [1, 45], +
111159 35: [1, 46], +
111160 36: [1, 47] +
111161 }, o([5, 12, 34, 41, 42, 43, 44, 45, 46, 47], [2, 35]), o($Vg, [2, 6]), { +
111162 5: [1, 49], +
111163 12: [1, 48] +
111164 }, o($Vg, [2, 11]), { +
111165 5: [1, 50] +
111166 }, { +
111167 5: [1, 51] +
111168 }, o($Vg, [2, 14]), { +
111169 5: [1, 52] +
111170 }, { +
111171 5: [2, 42] +
111172 }, o($Vi, $V3, { +
111173 7: 53 +
111174 }), o($Vi, $V3, { +
111175 7: 54 +
111176 }), o($Vj, $V3, { +
111177 24: 55, +
111178 7: 56 +
111179 }), o($Vk, $V3, { +
111180 26: 57, +
111181 7: 58 +
111182 }), { +
111183 11: 61, +
111184 38: [1, 59], +
111185 39: [1, 60], +
111186 40: $Vf +
111187 }, o($Vl, [2, 36]), o($Vl, [2, 37]), o($Vl, [2, 38]), o($Vl, [2, 39]), o($Vl, [2, 40]), o($Vl, [2, 41]), { +
111188 11: 62, +
111189 40: $Vf +
111190 }, { +
111191 11: 64, +
111192 32: 63, +
111193 40: $Vf +
111194 }, { +
111195 40: [2, 30] +
111196 }, { +
111197 40: [2, 31] +
111198 }, { +
111199 13: [1, 65] +
111200 }, o($Vg, [2, 10]), o($Vg, [2, 12]), o($Vg, [2, 13]), o($Vg, [2, 15]), { +
111201 4: $V4, +
111202 5: $V5, +
111203 8: 8, +
111204 9: 10, +
111205 10: $V6, +
111206 11: 22, +
111207 14: 13, +
111208 15: $V7, +
111209 16: $V8, +
111210 17: 16, +
111211 18: $V9, +
111212 20: $Va, +
111213 21: [1, 66], +
111214 22: $Vb, +
111215 23: $Vc, +
111216 25: $Vd, +
111217 29: $Ve, +
111218 40: $Vf +
111219 }, { +
111220 4: $V4, +
111221 5: $V5, +
111222 8: 8, +
111223 9: 10, +
111224 10: $V6, +
111225 11: 22, +
111226 14: 13, +
111227 15: $V7, +
111228 16: $V8, +
111229 17: 16, +
111230 18: $V9, +
111231 20: $Va, +
111232 21: [1, 67], +
111233 22: $Vb, +
111234 23: $Vc, +
111235 25: $Vd, +
111236 29: $Ve, +
111237 40: $Vf +
111238 }, { +
111239 21: [1, 68] +
111240 }, { +
111241 4: $V4, +
111242 5: $V5, +
111243 8: 8, +
111244 9: 10, +
111245 10: $V6, +
111246 11: 22, +
111247 14: 13, +
111248 15: $V7, +
111249 16: $V8, +
111250 17: 16, +
111251 18: $V9, +
111252 20: $Va, +
111253 21: [2, 22], +
111254 22: $Vb, +
111255 23: $Vc, +
111256 25: $Vd, +
111257 28: [1, 69], +
111258 29: $Ve, +
111259 40: $Vf +
111260 }, { +
111261 21: [1, 70] +
111262 }, { +
111263 4: $V4, +
111264 5: $V5, +
111265 8: 8, +
111266 9: 10, +
111267 10: $V6, +
111268 11: 22, +
111269 14: 13, +
111270 15: $V7, +
111271 16: $V8, +
111272 17: 16, +
111273 18: $V9, +
111274 20: $Va, +
111275 21: [2, 20], +
111276 22: $Vb, +
111277 23: $Vc, +
111278 25: $Vd, +
111279 27: [1, 71], +
111280 29: $Ve, +
111281 40: $Vf +
111282 }, { +
111283 11: 72, +
111284 40: $Vf +
111285 }, { +
111286 11: 73, +
111287 40: $Vf +
111288 }, { +
111289 19: 74, +
111290 47: $Vh +
111291 }, { +
111292 19: 75, +
111293 47: $Vh +
111294 }, { +
111295 19: 76, +
111296 47: $Vh +
111297 }, { +
111298 34: [1, 77], +
111299 47: [2, 29] +
111300 }, { +
111301 5: [1, 78] +
111302 }, o($Vg, [2, 16]), o($Vg, [2, 17]), o($Vg, [2, 18]), { +
111303 13: [1, 79] +
111304 }, o($Vg, [2, 19]), { +
111305 13: [1, 80] +
111306 }, { +
111307 19: 81, +
111308 47: $Vh +
111309 }, { +
111310 19: 82, +
111311 47: $Vh +
111312 }, { +
111313 5: [2, 34] +
111314 }, { +
111315 5: [2, 24] +
111316 }, { +
111317 5: [2, 25] +
111318 }, { +
111319 11: 83, +
111320 40: $Vf +
111321 }, o($Vg, [2, 9]), o($Vj, $V3, { +
111322 7: 56, +
111323 24: 84 +
111324 }), o($Vk, $V3, { +
111325 7: 58, +
111326 26: 85 +
111327 }), { +
111328 5: [2, 32] +
111329 }, { +
111330 5: [2, 33] +
111331 }, { +
111332 47: [2, 28] +
111333 }, { +
111334 21: [2, 23] +
111335 }, { +
111336 21: [2, 21] +
111337 }], +
111338 defaultActions: { +
111339 5: [2, 1], +
111340 6: [2, 2], +
111341 32: [2, 42], +
111342 46: [2, 30], +
111343 47: [2, 31], +
111344 74: [2, 34], +
111345 75: [2, 24], +
111346 76: [2, 25], +
111347 81: [2, 32], +
111348 82: [2, 33], +
111349 83: [2, 28], +
111350 84: [2, 23], +
111351 85: [2, 21] +
111352 }, +
111353 parseError: function parseError(str, hash) { +
111354 if (hash.recoverable) { +
111355 this.trace(str); +
111356 } else { +
111357 var error = new Error(str); +
111358 error.hash = hash; +
111359 throw error; +
111360 } +
111361 }, +
111362 parse: function parse(input) { +
111363 var self = this, +
111364 stack = [0], +
111365 tstack = [], +
111366 vstack = [null], +
111367 lstack = [], +
111368 table = this.table, +
111369 yytext = '', +
111370 yylineno = 0, +
111371 yyleng = 0, +
111372 recovering = 0, +
111373 TERROR = 2, +
111374 EOF = 1; +
111375 var args = lstack.slice.call(arguments, 1); +
111376 var lexer = Object.create(this.lexer); +
111377 var sharedState = { +
111378 yy: {} +
111379 }; +
111380 +
111381 for (var k in this.yy) { +
111382 if (Object.prototype.hasOwnProperty.call(this.yy, k)) { +
111383 sharedState.yy[k] = this.yy[k]; +
111384 } +
111385 } +
111386 +
111387 lexer.setInput(input, sharedState.yy); +
111388 sharedState.yy.lexer = lexer; +
111389 sharedState.yy.parser = this; +
111390 +
111391 if (typeof lexer.yylloc == 'undefined') { +
111392 lexer.yylloc = {}; +
111393 } +
111394 +
111395 var yyloc = lexer.yylloc; +
111396 lstack.push(yyloc); +
111397 var ranges = lexer.options && lexer.options.ranges; +
111398 +
111399 if (typeof sharedState.yy.parseError === 'function') { +
111400 this.parseError = sharedState.yy.parseError; +
111401 } else { +
111402 this.parseError = Object.getPrototypeOf(this).parseError; +
111403 } +
111404 +
111405 function popStack(n) { +
111406 stack.length = stack.length - 2 * n; +
111407 vstack.length = vstack.length - n; +
111408 lstack.length = lstack.length - n; +
111409 } +
111410 +
111411 function lex() { +
111412 var token; +
111413 token = tstack.pop() || lexer.lex() || EOF; +
111414 +
111415 if (typeof token !== 'number') { +
111416 if (token instanceof Array) { +
111417 tstack = token; +
111418 token = tstack.pop(); +
111419 } +
111420 +
111421 token = self.symbols_[token] || token; +
111422 } +
111423 +
111424 return token; +
111425 } +
111426 +
111427 var symbol, +
111428 preErrorSymbol, +
111429 state, +
111430 action, +
111431 a, +
111432 r, +
111433 yyval = {}, +
111434 p, +
111435 len, +
111436 newState, +
111437 expected; +
111438 +
111439 while (true) { +
111440 state = stack[stack.length - 1]; +
111441 +
111442 if (this.defaultActions[state]) { +
111443 action = this.defaultActions[state]; +
111444 } else { +
111445 if (symbol === null || typeof symbol == 'undefined') { +
111446 symbol = lex(); +
111447 } +
111448 +
111449 action = table[state] && table[state][symbol]; +
111450 } +
111451 +
111452 if (typeof action === 'undefined' || !action.length || !action[0]) { +
111453 var errStr = ''; +
111454 expected = []; +
111455 +
111456 for (p in table[state]) { +
111457 if (this.terminals_[p] && p > TERROR) { +
111458 expected.push('\'' + this.terminals_[p] + '\''); +
111459 } +
111460 } +
111461 +
111462 if (lexer.showPosition) { +
111463 errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; +
111464 } else { +
111465 errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); +
111466 } +
111467 +
111468 this.parseError(errStr, { +
111469 text: lexer.match, +
111470 token: this.terminals_[symbol] || symbol, +
111471 line: lexer.yylineno, +
111472 loc: yyloc, +
111473 expected: expected +
111474 }); +
111475 } +
111476 +
111477 if (action[0] instanceof Array && action.length > 1) { +
111478 throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); +
111479 } +
111480 +
111481 switch (action[0]) { +
111482 case 1: +
111483 stack.push(symbol); +
111484 vstack.push(lexer.yytext); +
111485 lstack.push(lexer.yylloc); +
111486 stack.push(action[1]); +
111487 symbol = null; +
111488 +
111489 if (!preErrorSymbol) { +
111490 yyleng = lexer.yyleng; +
111491 yytext = lexer.yytext; +
111492 yylineno = lexer.yylineno; +
111493 yyloc = lexer.yylloc; +
111494 +
111495 if (recovering > 0) { +
111496 recovering--; +
111497 } +
111498 } else { +
111499 symbol = preErrorSymbol; +
111500 preErrorSymbol = null; +
111501 } +
111502 +
111503 break; +
111504 +
111505 case 2: +
111506 len = this.productions_[action[1]][1]; +
111507 yyval.$ = vstack[vstack.length - len]; +
111508 yyval._$ = { +
111509 first_line: lstack[lstack.length - (len || 1)].first_line, +
111510 last_line: lstack[lstack.length - 1].last_line, +
111511 first_column: lstack[lstack.length - (len || 1)].first_column, +
111512 last_column: lstack[lstack.length - 1].last_column +
111513 }; +
111514 +
111515 if (ranges) { +
111516 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; +
111517 } +
111518 +
111519 r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); +
111520 +
111521 if (typeof r !== 'undefined') { +
111522 return r; +
111523 } +
111524 +
111525 if (len) { +
111526 stack = stack.slice(0, -1 * len * 2); +
111527 vstack = vstack.slice(0, -1 * len); +
111528 lstack = lstack.slice(0, -1 * len); +
111529 } +
111530 +
111531 stack.push(this.productions_[action[1]][0]); +
111532 vstack.push(yyval.$); +
111533 lstack.push(yyval._$); +
111534 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; +
111535 stack.push(newState); +
111536 break; +
111537 +
111538 case 3: +
111539 return true; +
111540 } +
111541 } +
111542 +
111543 return true; +
111544 } +
111545 }; +
111546 /* generated by jison-lex 0.3.4 */ +
111547 +
111548 var lexer = function () { +
111549 var lexer = { +
111550 EOF: 1, +
111551 parseError: function parseError(str, hash) { +
111552 if (this.yy.parser) { +
111553 this.yy.parser.parseError(str, hash); +
111554 } else { +
111555 throw new Error(str); +
111556 } +
111557 }, +
111558 // resets the lexer, sets new input +
111559 setInput: function (input, yy) { +
111560 this.yy = yy || this.yy || {}; +
111561 this._input = input; +
111562 this._more = this._backtrack = this.done = false; +
111563 this.yylineno = this.yyleng = 0; +
111564 this.yytext = this.matched = this.match = ''; +
111565 this.conditionStack = ['INITIAL']; +
111566 this.yylloc = { +
111567 first_line: 1, +
111568 first_column: 0, +
111569 last_line: 1, +
111570 last_column: 0 +
111571 }; +
111572 +
111573 if (this.options.ranges) { +
111574 this.yylloc.range = [0, 0]; +
111575 } +
111576 +
111577 this.offset = 0; +
111578 return this; +
111579 }, +
111580 // consumes and returns one char from the input +
111581 input: function () { +
111582 var ch = this._input[0]; +
111583 this.yytext += ch; +
111584 this.yyleng++; +
111585 this.offset++; +
111586 this.match += ch; +
111587 this.matched += ch; +
111588 var lines = ch.match(/(?:\r\n?|\n).*/g); +
111589 +
111590 if (lines) { +
111591 this.yylineno++; +
111592 this.yylloc.last_line++; +
111593 } else { +
111594 this.yylloc.last_column++; +
111595 } +
111596 +
111597 if (this.options.ranges) { +
111598 this.yylloc.range[1]++; +
111599 } +
111600 +
111601 this._input = this._input.slice(1); +
111602 return ch; +
111603 }, +
111604 // unshifts one char (or a string) into the input +
111605 unput: function (ch) { +
111606 var len = ch.length; +
111607 var lines = ch.split(/(?:\r\n?|\n)/g); +
111608 this._input = ch + this._input; +
111609 this.yytext = this.yytext.substr(0, this.yytext.length - len); //this.yyleng -= len; +
111610 +
111611 this.offset -= len; +
111612 var oldLines = this.match.split(/(?:\r\n?|\n)/g); +
111613 this.match = this.match.substr(0, this.match.length - 1); +
111614 this.matched = this.matched.substr(0, this.matched.length - 1); +
111615 +
111616 if (lines.length - 1) { +
111617 this.yylineno -= lines.length - 1; +
111618 } +
111619 +
111620 var r = this.yylloc.range; +
111621 this.yylloc = { +
111622 first_line: this.yylloc.first_line, +
111623 last_line: this.yylineno + 1, +
111624 first_column: this.yylloc.first_column, +
111625 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len +
111626 }; +
111627 +
111628 if (this.options.ranges) { +
111629 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; +
111630 } +
111631 +
111632 this.yyleng = this.yytext.length; +
111633 return this; +
111634 }, +
111635 // When called from action, caches matched text and appends it on next action +
111636 more: function () { +
111637 this._more = true; +
111638 return this; +
111639 }, +
111640 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +
111641 reject: function () { +
111642 if (this.options.backtrack_lexer) { +
111643 this._backtrack = true; +
111644 } else { +
111645 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { +
111646 text: "", +
111647 token: null, +
111648 line: this.yylineno +
111649 }); +
111650 } +
111651 +
111652 return this; +
111653 }, +
111654 // retain first n characters of the match +
111655 less: function (n) { +
111656 this.unput(this.match.slice(n)); +
111657 }, +
111658 // displays already matched input, i.e. for error messages +
111659 pastInput: function () { +
111660 var past = this.matched.substr(0, this.matched.length - this.match.length); +
111661 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); +
111662 }, +
111663 // displays upcoming input, i.e. for error messages +
111664 upcomingInput: function () { +
111665 var next = this.match; +
111666 +
111667 if (next.length < 20) { +
111668 next += this._input.substr(0, 20 - next.length); +
111669 } +
111670 +
111671 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); +
111672 }, +
111673 // displays the character position where the lexing error occurred, i.e. for error messages +
111674 showPosition: function () { +
111675 var pre = this.pastInput(); +
111676 var c = new Array(pre.length + 1).join("-"); +
111677 return pre + this.upcomingInput() + "\n" + c + "^"; +
111678 }, +
111679 // test the lexed token: return FALSE when not a match, otherwise return token +
111680 test_match: function (match, indexed_rule) { +
111681 var token, lines, backup; +
111682 +
111683 if (this.options.backtrack_lexer) { +
111684 // save context +
111685 backup = { +
111686 yylineno: this.yylineno, +
111687 yylloc: { +
111688 first_line: this.yylloc.first_line, +
111689 last_line: this.last_line, +
111690 first_column: this.yylloc.first_column, +
111691 last_column: this.yylloc.last_column +
111692 }, +
111693 yytext: this.yytext, +
111694 match: this.match, +
111695 matches: this.matches, +
111696 matched: this.matched, +
111697 yyleng: this.yyleng, +
111698 offset: this.offset, +
111699 _more: this._more, +
111700 _input: this._input, +
111701 yy: this.yy, +
111702 conditionStack: this.conditionStack.slice(0), +
111703 done: this.done +
111704 }; +
111705 +
111706 if (this.options.ranges) { +
111707 backup.yylloc.range = this.yylloc.range.slice(0); +
111708 } +
111709 } +
111710 +
111711 lines = match[0].match(/(?:\r\n?|\n).*/g); +
111712 +
111713 if (lines) { +
111714 this.yylineno += lines.length; +
111715 } +
111716 +
111717 this.yylloc = { +
111718 first_line: this.yylloc.last_line, +
111719 last_line: this.yylineno + 1, +
111720 first_column: this.yylloc.last_column, +
111721 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length +
111722 }; +
111723 this.yytext += match[0]; +
111724 this.match += match[0]; +
111725 this.matches = match; +
111726 this.yyleng = this.yytext.length; +
111727 +
111728 if (this.options.ranges) { +
111729 this.yylloc.range = [this.offset, this.offset += this.yyleng]; +
111730 } +
111731 +
111732 this._more = false; +
111733 this._backtrack = false; +
111734 this._input = this._input.slice(match[0].length); +
111735 this.matched += match[0]; +
111736 token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); +
111737 +
111738 if (this.done && this._input) { +
111739 this.done = false; +
111740 } +
111741 +
111742 if (token) { +
111743 return token; +
111744 } else if (this._backtrack) { +
111745 // recover context +
111746 for (var k in backup) { +
111747 this[k] = backup[k]; +
111748 } +
111749 +
111750 return false; // rule action called reject() implying the next rule should be tested instead. +
111751 } +
111752 +
111753 return false; +
111754 }, +
111755 // return next match in input +
111756 next: function () { +
111757 if (this.done) { +
111758 return this.EOF; +
111759 } +
111760 +
111761 if (!this._input) { +
111762 this.done = true; +
111763 } +
111764 +
111765 var token, match, tempMatch, index; +
111766 +
111767 if (!this._more) { +
111768 this.yytext = ''; +
111769 this.match = ''; +
111770 } +
111771 +
111772 var rules = this._currentRules(); +
111773 +
111774 for (var i = 0; i < rules.length; i++) { +
111775 tempMatch = this._input.match(this.rules[rules[i]]); +
111776 +
111777 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { +
111778 match = tempMatch; +
111779 index = i; +
111780 +
111781 if (this.options.backtrack_lexer) { +
111782 token = this.test_match(tempMatch, rules[i]); +
111783 +
111784 if (token !== false) { +
111785 return token; +
111786 } else if (this._backtrack) { +
111787 match = false; +
111788 continue; // rule action called reject() implying a rule MISmatch. +
111789 } else { +
111790 // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
111791 return false; +
111792 } +
111793 } else if (!this.options.flex) { +
111794 break; +
111795 } +
111796 } +
111797 } +
111798 +
111799 if (match) { +
111800 token = this.test_match(match, rules[index]); +
111801 +
111802 if (token !== false) { +
111803 return token; +
111804 } // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) +
111805 +
111806 +
111807 return false; +
111808 } +
111809 +
111810 if (this._input === "") { +
111811 return this.EOF; +
111812 } else { +
111813 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { +
111814 text: "", +
111815 token: null, +
111816 line: this.yylineno +
111817 }); +
111818 } +
111819 }, +
111820 // return next match that has a token +
111821 lex: function lex() { +
111822 var r = this.next(); +
111823 +
111824 if (r) { +
111825 return r; +
111826 } else { +
111827 return this.lex(); +
111828 } +
111829 }, +
111830 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +
111831 begin: function begin(condition) { +
111832 this.conditionStack.push(condition); +
111833 }, +
111834 // pop the previously active lexer condition state off the condition stack +
111835 popState: function popState() { +
111836 var n = this.conditionStack.length - 1; +
111837 +
111838 if (n > 0) { +
111839 return this.conditionStack.pop(); +
111840 } else { +
111841 return this.conditionStack[0]; +
111842 } +
111843 }, +
111844 // produce the lexer rule set which is active for the currently active lexer condition state +
111845 _currentRules: function _currentRules() { +
111846 if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { +
111847 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; +
111848 } else { +
111849 return this.conditions["INITIAL"].rules; +
111850 } +
111851 }, +
111852 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +
111853 topState: function topState(n) { +
111854 n = this.conditionStack.length - 1 - Math.abs(n || 0); +
111855 +
111856 if (n >= 0) { +
111857 return this.conditionStack[n]; +
111858 } else { +
111859 return "INITIAL"; +
111860 } +
111861 }, +
111862 // alias for begin(condition) +
111863 pushState: function pushState(condition) { +
111864 this.begin(condition); +
111865 }, +
111866 // return the number of states currently on the stack +
111867 stateStackSize: function stateStackSize() { +
111868 return this.conditionStack.length; +
111869 }, +
111870 options: { +
111871 "case-insensitive": true +
111872 }, +
111873 performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { +
111874 var YYSTATE = YY_START; +
111875 +
111876 switch ($avoiding_name_collisions) { +
111877 case 0: +
111878 return 5; +
111879 break; +
111880 +
111881 case 1: +
111882 /* skip all whitespace */ +
111883 break; +
111884 +
111885 case 2: +
111886 /* skip same-line whitespace */ +
111887 break; +
111888 +
111889 case 3: +
111890 /* skip comments */ +
111891 break; +
111892 +
111893 case 4: +
111894 /* skip comments */ +
111895 break; +
111896 +
111897 case 5: +
111898 this.begin('ID'); +
111899 return 10; +
111900 break; +
111901 +
111902 case 6: +
111903 this.begin('ALIAS'); +
111904 return 40; +
111905 break; +
111906 +
111907 case 7: +
111908 this.popState(); +
111909 this.popState(); +
111910 this.begin('LINE'); +
111911 return 12; +
111912 break; +
111913 +
111914 case 8: +
111915 this.popState(); +
111916 this.popState(); +
111917 return 5; +
111918 break; +
111919 +
111920 case 9: +
111921 this.begin('LINE'); +
111922 return 20; +
111923 break; +
111924 +
111925 case 10: +
111926 this.begin('LINE'); +
111927 return 22; +
111928 break; +
111929 +
111930 case 11: +
111931 this.begin('LINE'); +
111932 return 23; +
111933 break; +
111934 +
111935 case 12: +
111936 this.begin('LINE'); +
111937 return 28; +
111938 break; +
111939 +
111940 case 13: +
111941 this.begin('LINE'); +
111942 return 25; +
111943 break; +
111944 +
111945 case 14: +
111946 this.begin('LINE'); +
111947 return 27; +
111948 break; +
111949 +
111950 case 15: +
111951 this.popState(); +
111952 return 13; +
111953 break; +
111954 +
111955 case 16: +
111956 return 21; +
111957 break; +
111958 +
111959 case 17: +
111960 return 35; +
111961 break; +
111962 +
111963 case 18: +
111964 return 36; +
111965 break; +
111966 +
111967 case 19: +
111968 return 31; +
111969 break; +
111970 +
111971 case 20: +
111972 return 29; +
111973 break; +
111974 +
111975 case 21: +
111976 this.begin('ID'); +
111977 return 15; +
111978 break; +
111979 +
111980 case 22: +
111981 this.begin('ID'); +
111982 return 16; +
111983 break; +
111984 +
111985 case 23: +
111986 return 18; +
111987 break; +
111988 +
111989 case 24: +
111990 return 6; +
111991 break; +
111992 +
111993 case 25: +
111994 return 34; +
111995 break; +
111996 +
111997 case 26: +
111998 return 5; +
111999 break; +
112000 +
112001 case 27: +
112002 yy_.yytext = yy_.yytext.trim(); +
112003 return 40; +
112004 break; +
112005 +
112006 case 28: +
112007 return 43; +
112008 break; +
112009 +
112010 case 29: +
112011 return 44; +
112012 break; +
112013 +
112014 case 30: +
112015 return 41; +
112016 break; +
112017 +
112018 case 31: +
112019 return 42; +
112020 break; +
112021 +
112022 case 32: +
112023 return 45; +
112024 break; +
112025 +
112026 case 33: +
112027 return 46; +
112028 break; +
112029 +
112030 case 34: +
112031 return 47; +
112032 break; +
112033 +
112034 case 35: +
112035 return 38; +
112036 break; +
112037 +
112038 case 36: +
112039 return 39; +
112040 break; +
112041 +
112042 case 37: +
112043 return 5; +
112044 break; +
112045 +
112046 case 38: +
112047 return 'INVALID'; +
112048 break; +
112049 } +
112050 }, +
112051 rules: [/^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:participant\b)/i, /^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:and\b)/i, /^(?:[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\b)/i, /^(?:sequenceDiagram\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\+\->:\n,;]+)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?::[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i], +
112052 conditions: { +
112053 "LINE": { +
112054 "rules": [2, 3, 15], +
112055 "inclusive": false +
112056 }, +
112057 "ALIAS": { +
112058 "rules": [2, 3, 7, 8], +
112059 "inclusive": false +
112060 }, +
112061 "ID": { +
112062 "rules": [2, 3, 6], +
112063 "inclusive": false +
112064 }, +
112065 "INITIAL": { +
112066 "rules": [0, 1, 3, 4, 5, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38], +
112067 "inclusive": true +
112068 } +
112069 } +
112070 }; +
112071 return lexer; +
112072 }(); +
112073 +
112074 parser.lexer = lexer; +
112075 +
112076 function Parser() { +
112077 this.yy = {}; +
112078 } +
112079 +
112080 Parser.prototype = parser; +
112081 parser.Parser = Parser; +
112082 return new Parser(); +
112083}(); +
112084 +
112085if (true) { +
112086 exports.parser = parser; +
112087 exports.Parser = parser.Parser; +
112088 +
112089 exports.parse = function () { +
112090 return parser.parse.apply(parser, arguments); +
112091 }; +
112092 +
112093 exports.main = function commonjsMain(args) { +
112094 if (!args[1]) { +
112095 console.log('Usage: ' + args[0] + ' FILE'); +
112096 process.exit(1); +
112097 } +
112098 +
112099 var source = __webpack_require__(/*! fs */ "./node_modules/node-libs-browser/mock/empty.js").readFileSync(__webpack_require__(/*! path */ "./node_modules/path-browserify/index.js").normalize(args[1]), "utf8"); +
112100 +
112101 return exports.parser.parse(source); +
112102 }; +
112103 +
112104 if ( true && __webpack_require__.c[__webpack_require__.s] === module) { +
112105 exports.main(process.argv.slice(1)); +
112106 } +
112107} +
112108/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node_modules/process/browser.js */ "./node_modules/process/browser.js"), __webpack_require__(/*! ./../../../../node_modules/webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module))) +
112109 +
112110/***/ }), +
112111 +
112112/***/ "./src/diagrams/sequence/sequenceDb.js": +
112113/*!*********************************************!*\ +
112114 !*** ./src/diagrams/sequence/sequenceDb.js ***! +
112115 \*********************************************/ +
112116/*! exports provided: addActor, addMessage, addSignal, getMessages, getActors, getActor, getActorKeys, getTitle, clear, LINETYPE, ARROWTYPE, PLACEMENT, addNote, setTitle, apply, default */ +
112117/***/ (function(module, __webpack_exports__, __webpack_require__) { +
112118 +
112119"use strict"; +
112120__webpack_require__.r(__webpack_exports__); +
112121/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addActor", function() { return addActor; }); +
112122/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMessage", function() { return addMessage; }); +
112123/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addSignal", function() { return addSignal; }); +
112124/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMessages", function() { return getMessages; }); +
112125/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActors", function() { return getActors; }); +
112126/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActor", function() { return getActor; }); +
112127/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActorKeys", function() { return getActorKeys; }); +
112128/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTitle", function() { return getTitle; }); +
112129/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clear", function() { return clear; }); +
112130/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LINETYPE", function() { return LINETYPE; }); +
112131/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ARROWTYPE", function() { return ARROWTYPE; }); +
112132/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PLACEMENT", function() { return PLACEMENT; }); +
112133/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addNote", function() { return addNote; }); +
112134/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTitle", function() { return setTitle; }); +
112135/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "apply", function() { return apply; }); +
112136/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
112137 +
112138let actors = {}; +
112139let messages = []; +
112140const notes = []; +
112141let title = ''; +
112142const addActor = function (id, name, description) { +
112143 // Don't allow description nulling +
112144 const old = actors[id]; +
112145 if (old && name === old.name && description == null) return; // Don't allow null descriptions, either +
112146 +
112147 if (description == null) description = name; +
112148 actors[id] = { +
112149 name: name, +
112150 description: description +
112151 }; +
112152}; +
112153const addMessage = function (idFrom, idTo, message, answer) { +
112154 messages.push({ +
112155 from: idFrom, +
112156 to: idTo, +
112157 message: message, +
112158 answer: answer +
112159 }); +
112160}; +
112161const addSignal = function (idFrom, idTo, message, messageType) { +
112162 _logger__WEBPACK_IMPORTED_MODULE_0__["logger"].debug('Adding message from=' + idFrom + ' to=' + idTo + ' message=' + message + ' type=' + messageType); +
112163 messages.push({ +
112164 from: idFrom, +
112165 to: idTo, +
112166 message: message, +
112167 type: messageType +
112168 }); +
112169}; +
112170const getMessages = function () { +
112171 return messages; +
112172}; +
112173const getActors = function () { +
112174 return actors; +
112175}; +
112176const getActor = function (id) { +
112177 return actors[id]; +
112178}; +
112179const getActorKeys = function () { +
112180 return Object.keys(actors); +
112181}; +
112182const getTitle = function () { +
112183 return title; +
112184}; +
112185const clear = function () { +
112186 actors = {}; +
112187 messages = []; +
112188}; +
112189const LINETYPE = { +
112190 SOLID: 0, +
112191 DOTTED: 1, +
112192 NOTE: 2, +
112193 SOLID_CROSS: 3, +
112194 DOTTED_CROSS: 4, +
112195 SOLID_OPEN: 5, +
112196 DOTTED_OPEN: 6, +
112197 LOOP_START: 10, +
112198 LOOP_END: 11, +
112199 ALT_START: 12, +
112200 ALT_ELSE: 13, +
112201 ALT_END: 14, +
112202 OPT_START: 15, +
112203 OPT_END: 16, +
112204 ACTIVE_START: 17, +
112205 ACTIVE_END: 18, +
112206 PAR_START: 19, +
112207 PAR_AND: 20, +
112208 PAR_END: 21 +
112209}; +
112210const ARROWTYPE = { +
112211 FILLED: 0, +
112212 OPEN: 1 +
112213}; +
112214const PLACEMENT = { +
112215 LEFTOF: 0, +
112216 RIGHTOF: 1, +
112217 OVER: 2 +
112218}; +
112219const addNote = function (actor, placement, message) { +
112220 const note = { +
112221 actor: actor, +
112222 placement: placement, +
112223 message: message // Coerce actor into a [to, from, ...] array +
112224 +
112225 }; +
112226 const actors = [].concat(actor, actor); +
112227 notes.push(note); +
112228 messages.push({ +
112229 from: actors[0], +
112230 to: actors[1], +
112231 message: message, +
112232 type: LINETYPE.NOTE, +
112233 placement: placement +
112234 }); +
112235}; +
112236const setTitle = function (titleText) { +
112237 title = titleText; +
112238}; +
112239const apply = function (param) { +
112240 if (param instanceof Array) { +
112241 param.forEach(function (item) { +
112242 apply(item); +
112243 }); +
112244 } else { +
112245 switch (param.type) { +
112246 case 'addActor': +
112247 addActor(param.actor, param.actor, param.description); +
112248 break; +
112249 +
112250 case 'activeStart': +
112251 addSignal(param.actor, undefined, undefined, param.signalType); +
112252 break; +
112253 +
112254 case 'activeEnd': +
112255 addSignal(param.actor, undefined, undefined, param.signalType); +
112256 break; +
112257 +
112258 case 'addNote': +
112259 addNote(param.actor, param.placement, param.text); +
112260 break; +
112261 +
112262 case 'addMessage': +
112263 addSignal(param.from, param.to, param.msg, param.signalType); +
112264 break; +
112265 +
112266 case 'loopStart': +
112267 addSignal(undefined, undefined, param.loopText, param.signalType); +
112268 break; +
112269 +
112270 case 'loopEnd': +
112271 addSignal(undefined, undefined, undefined, param.signalType); +
112272 break; +
112273 +
112274 case 'optStart': +
112275 addSignal(undefined, undefined, param.optText, param.signalType); +
112276 break; +
112277 +
112278 case 'optEnd': +
112279 addSignal(undefined, undefined, undefined, param.signalType); +
112280 break; +
112281 +
112282 case 'altStart': +
112283 addSignal(undefined, undefined, param.altText, param.signalType); +
112284 break; +
112285 +
112286 case 'else': +
112287 addSignal(undefined, undefined, param.altText, param.signalType); +
112288 break; +
112289 +
112290 case 'altEnd': +
112291 addSignal(undefined, undefined, undefined, param.signalType); +
112292 break; +
112293 +
112294 case 'setTitle': +
112295 setTitle(param.text); +
112296 break; +
112297 +
112298 case 'parStart': +
112299 addSignal(undefined, undefined, param.parText, param.signalType); +
112300 break; +
112301 +
112302 case 'and': +
112303 addSignal(undefined, undefined, param.parText, param.signalType); +
112304 break; +
112305 +
112306 case 'parEnd': +
112307 addSignal(undefined, undefined, undefined, param.signalType); +
112308 break; +
112309 } +
112310 } +
112311}; +
112312/* harmony default export */ __webpack_exports__["default"] = ({ +
112313 addActor, +
112314 addMessage, +
112315 addSignal, +
112316 getMessages, +
112317 getActors, +
112318 getActor, +
112319 getActorKeys, +
112320 getTitle, +
112321 clear, +
112322 LINETYPE, +
112323 ARROWTYPE, +
112324 PLACEMENT, +
112325 addNote, +
112326 setTitle, +
112327 apply +
112328}); +
112329 +
112330/***/ }), +
112331 +
112332/***/ "./src/diagrams/sequence/sequenceRenderer.js": +
112333/*!***************************************************!*\ +
112334 !*** ./src/diagrams/sequence/sequenceRenderer.js ***! +
112335 \***************************************************/ +
112336/*! exports provided: bounds, drawActors, setConf, draw, default */ +
112337/***/ (function(module, __webpack_exports__, __webpack_require__) { +
112338 +
112339"use strict"; +
112340__webpack_require__.r(__webpack_exports__); +
112341/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bounds", function() { return bounds; }); +
112342/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawActors", function() { return drawActors; }); +
112343/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConf", function() { return setConf; }); +
112344/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return draw; }); +
112345/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
112346/* harmony import */ var _svgDraw__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgDraw */ "./src/diagrams/sequence/svgDraw.js"); +
112347/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../logger */ "./src/logger.js"); +
112348/* harmony import */ var _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parser/sequenceDiagram */ "./src/diagrams/sequence/parser/sequenceDiagram.js"); +
112349/* harmony import */ var _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__); +
112350/* harmony import */ var _sequenceDb__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sequenceDb */ "./src/diagrams/sequence/sequenceDb.js"); +
112351 +
112352 +
112353 +
112354 +
112355 +
112356_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy = _sequenceDb__WEBPACK_IMPORTED_MODULE_4__["default"]; +
112357const conf = { +
112358 diagramMarginX: 50, +
112359 diagramMarginY: 30, +
112360 // Margin between actors +
112361 actorMargin: 50, +
112362 // Width of actor boxes +
112363 width: 150, +
112364 // Height of actor boxes +
112365 height: 65, +
112366 actorFontSize: 14, +
112367 actorFontFamily: '"Open-Sans", "sans-serif"', +
112368 // Margin around loop boxes +
112369 boxMargin: 10, +
112370 boxTextMargin: 5, +
112371 noteMargin: 10, +
112372 // Space between messages +
112373 messageMargin: 35, +
112374 // mirror actors under diagram +
112375 mirrorActors: false, +
112376 // Depending on css styling this might need adjustment +
112377 // Prolongs the edge of the diagram downwards +
112378 bottomMarginAdj: 1, +
112379 // width of activation box +
112380 activationWidth: 10, +
112381 // text placement as: tspan | fo | old only text as before +
112382 textPlacement: 'tspan' +
112383}; +
112384const bounds = { +
112385 data: { +
112386 startx: undefined, +
112387 stopx: undefined, +
112388 starty: undefined, +
112389 stopy: undefined +
112390 }, +
112391 verticalPos: 0, +
112392 sequenceItems: [], +
112393 activations: [], +
112394 init: function () { +
112395 this.sequenceItems = []; +
112396 this.activations = []; +
112397 this.data = { +
112398 startx: undefined, +
112399 stopx: undefined, +
112400 starty: undefined, +
112401 stopy: undefined +
112402 }; +
112403 this.verticalPos = 0; +
112404 }, +
112405 updateVal: function (obj, key, val, fun) { +
112406 if (typeof obj[key] === 'undefined') { +
112407 obj[key] = val; +
112408 } else { +
112409 obj[key] = fun(val, obj[key]); +
112410 } +
112411 }, +
112412 updateBounds: function (startx, starty, stopx, stopy) { +
112413 const _self = this; +
112414 +
112415 let cnt = 0; +
112416 +
112417 function updateFn(type) { +
112418 return function updateItemBounds(item) { +
112419 cnt++; // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems +
112420 +
112421 const n = _self.sequenceItems.length - cnt + 1; +
112422 +
112423 _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min); +
112424 +
112425 _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max); +
112426 +
112427 _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min); +
112428 +
112429 _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max); +
112430 +
112431 if (!(type === 'activation')) { +
112432 _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min); +
112433 +
112434 _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max); +
112435 +
112436 _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min); +
112437 +
112438 _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max); +
112439 } +
112440 }; +
112441 } +
112442 +
112443 this.sequenceItems.forEach(updateFn()); +
112444 this.activations.forEach(updateFn('activation')); +
112445 }, +
112446 insert: function (startx, starty, stopx, stopy) { +
112447 const _startx = Math.min(startx, stopx); +
112448 +
112449 const _stopx = Math.max(startx, stopx); +
112450 +
112451 const _starty = Math.min(starty, stopy); +
112452 +
112453 const _stopy = Math.max(starty, stopy); +
112454 +
112455 this.updateVal(bounds.data, 'startx', _startx, Math.min); +
112456 this.updateVal(bounds.data, 'starty', _starty, Math.min); +
112457 this.updateVal(bounds.data, 'stopx', _stopx, Math.max); +
112458 this.updateVal(bounds.data, 'stopy', _stopy, Math.max); +
112459 this.updateBounds(_startx, _starty, _stopx, _stopy); +
112460 }, +
112461 newActivation: function (message, diagram) { +
112462 const actorRect = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getActors()[message.from.actor]; +
112463 const stackedSize = actorActivations(message.from.actor).length; +
112464 const x = actorRect.x + conf.width / 2 + (stackedSize - 1) * conf.activationWidth / 2; +
112465 this.activations.push({ +
112466 startx: x, +
112467 starty: this.verticalPos + 2, +
112468 stopx: x + conf.activationWidth, +
112469 stopy: undefined, +
112470 actor: message.from.actor, +
112471 anchored: _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].anchorElement(diagram) +
112472 }); +
112473 }, +
112474 endActivation: function (message) { +
112475 // find most recent activation for given actor +
112476 const lastActorActivationIdx = this.activations.map(function (activation) { +
112477 return activation.actor; +
112478 }).lastIndexOf(message.from.actor); +
112479 const activation = this.activations.splice(lastActorActivationIdx, 1)[0]; +
112480 return activation; +
112481 }, +
112482 newLoop: function (title) { +
112483 this.sequenceItems.push({ +
112484 startx: undefined, +
112485 starty: this.verticalPos, +
112486 stopx: undefined, +
112487 stopy: undefined, +
112488 title: title +
112489 }); +
112490 }, +
112491 endLoop: function () { +
112492 const loop = this.sequenceItems.pop(); +
112493 return loop; +
112494 }, +
112495 addSectionToLoop: function (message) { +
112496 const loop = this.sequenceItems.pop(); +
112497 loop.sections = loop.sections || []; +
112498 loop.sectionTitles = loop.sectionTitles || []; +
112499 loop.sections.push(bounds.getVerticalPos()); +
112500 loop.sectionTitles.push(message); +
112501 this.sequenceItems.push(loop); +
112502 }, +
112503 bumpVerticalPos: function (bump) { +
112504 this.verticalPos = this.verticalPos + bump; +
112505 this.data.stopy = this.verticalPos; +
112506 }, +
112507 getVerticalPos: function () { +
112508 return this.verticalPos; +
112509 }, +
112510 getBounds: function () { +
112511 return this.data; +
112512 } +
112513}; +
112514 +
112515const _drawLongText = (text, x, y, g, width) => { +
112516 let textHeight = 0; +
112517 const lines = text.split(/<br\/?>/ig); +
112518 +
112519 for (const line of lines) { +
112520 const textObj = _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].getTextObj(); +
112521 textObj.x = x; +
112522 textObj.y = y + textHeight; +
112523 textObj.textMargin = conf.noteMargin; +
112524 textObj.dy = '1em'; +
112525 textObj.text = line; +
112526 textObj.class = 'noteText'; +
112527 const textElem = _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawText(g, textObj, width); +
112528 textHeight += (textElem._groups || textElem)[0][0].getBBox().height; +
112529 } +
112530 +
112531 return textHeight; +
112532}; +
112533/** +
112534 * Draws an actor in the diagram with the attaced line +
112535 * @param center - The center of the the actor +
112536 * @param pos The position if the actor in the liost of actors +
112537 * @param description The text in the box +
112538 */ +
112539 +
112540 +
112541const drawNote = function (elem, startx, verticalPos, msg, forceWidth) { +
112542 const rect = _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].getNoteRect(); +
112543 rect.x = startx; +
112544 rect.y = verticalPos; +
112545 rect.width = forceWidth || conf.width; +
112546 rect.class = 'note'; +
112547 let g = elem.append('g'); +
112548 const rectElem = _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawRect(g, rect); +
112549 +
112550 const textHeight = _drawLongText(msg.message, startx - 4, verticalPos + 24, g, rect.width - conf.noteMargin); +
112551 +
112552 bounds.insert(startx, verticalPos, startx + rect.width, verticalPos + 2 * conf.noteMargin + textHeight); +
112553 rectElem.attr('height', textHeight + 2 * conf.noteMargin); +
112554 bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin); +
112555}; +
112556/** +
112557 * Draws a message +
112558 * @param elem +
112559 * @param startx +
112560 * @param stopx +
112561 * @param verticalPos +
112562 * @param txtCenter +
112563 * @param msg +
112564 */ +
112565 +
112566 +
112567const drawMessage = function (elem, startx, stopx, verticalPos, msg) { +
112568 const g = elem.append('g'); +
112569 const txtCenter = startx + (stopx - startx) / 2; +
112570 const textElem = g.append('text') // text label for the x axis +
112571 .attr('x', txtCenter).attr('y', verticalPos - 7).style('text-anchor', 'middle').attr('class', 'messageText').text(msg.message); +
112572 let textWidth = (textElem._groups || textElem)[0][0].getBBox().width; +
112573 let line; +
112574 +
112575 if (startx === stopx) { +
112576 if (conf.rightAngles) { +
112577 line = g.append('path').attr('d', `M ${startx},${verticalPos} H ${startx + conf.width / 2} V ${verticalPos + 25} H ${startx}`); +
112578 } else { +
112579 line = g.append('path').attr('d', 'M ' + startx + ',' + verticalPos + ' C ' + (startx + 60) + ',' + (verticalPos - 10) + ' ' + (startx + 60) + ',' + (verticalPos + 30) + ' ' + startx + ',' + (verticalPos + 20)); +
112580 } +
112581 +
112582 bounds.bumpVerticalPos(30); +
112583 const dx = Math.max(textWidth / 2, 100); +
112584 bounds.insert(startx - dx, bounds.getVerticalPos() - 10, stopx + dx, bounds.getVerticalPos()); +
112585 } else { +
112586 line = g.append('line'); +
112587 line.attr('x1', startx); +
112588 line.attr('y1', verticalPos); +
112589 line.attr('x2', stopx); +
112590 line.attr('y2', verticalPos); +
112591 bounds.insert(startx, bounds.getVerticalPos() - 10, stopx, bounds.getVerticalPos()); +
112592 } // Make an SVG Container +
112593 // Draw the line +
112594 +
112595 +
112596 if (msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED || msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED_CROSS || msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED_OPEN) { +
112597 line.style('stroke-dasharray', '3, 3'); +
112598 line.attr('class', 'messageLine1'); +
112599 } else { +
112600 line.attr('class', 'messageLine0'); +
112601 } +
112602 +
112603 let url = ''; +
112604 +
112605 if (conf.arrowMarkerAbsolute) { +
112606 url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; +
112607 url = url.replace(/\(/g, '\\('); +
112608 url = url.replace(/\)/g, '\\)'); +
112609 } +
112610 +
112611 line.attr('stroke-width', 2); +
112612 line.attr('stroke', 'black'); +
112613 line.style('fill', 'none'); // remove any fill colour +
112614 +
112615 if (msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.SOLID || msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED) { +
112616 line.attr('marker-end', 'url(' + url + '#arrowhead)'); +
112617 } +
112618 +
112619 if (msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.SOLID_CROSS || msg.type === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.DOTTED_CROSS) { +
112620 line.attr('marker-end', 'url(' + url + '#crosshead)'); +
112621 } +
112622}; +
112623 +
112624const drawActors = function (diagram, actors, actorKeys, verticalPos) { +
112625 // Draw the actors +
112626 for (let i = 0; i < actorKeys.length; i++) { +
112627 const key = actorKeys[i]; // Add some rendering data to the object +
112628 +
112629 actors[key].x = i * conf.actorMargin + i * conf.width; +
112630 actors[key].y = verticalPos; +
112631 actors[key].width = conf.diagramMarginX; +
112632 actors[key].height = conf.diagramMarginY; // Draw the box with the attached line +
112633 +
112634 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawActor(diagram, actors[key].x, verticalPos, actors[key].description, conf); +
112635 bounds.insert(actors[key].x, verticalPos, actors[key].x + conf.width, conf.height); +
112636 } // Add a margin between the actor boxes and the first arrow +
112637 +
112638 +
112639 bounds.bumpVerticalPos(conf.height); +
112640}; +
112641const setConf = function (cnf) { +
112642 const keys = Object.keys(cnf); +
112643 keys.forEach(function (key) { +
112644 conf[key] = cnf[key]; +
112645 }); +
112646}; +
112647 +
112648const actorActivations = function (actor) { +
112649 return bounds.activations.filter(function (activation) { +
112650 return activation.actor === actor; +
112651 }); +
112652}; +
112653 +
112654const actorFlowVerticaBounds = function (actor) { +
112655 // handle multiple stacked activations for same actor +
112656 const actors = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getActors(); +
112657 const activations = actorActivations(actor); +
112658 const left = activations.reduce(function (acc, activation) { +
112659 return Math.min(acc, activation.startx); +
112660 }, actors[actor].x + conf.width / 2); +
112661 const right = activations.reduce(function (acc, activation) { +
112662 return Math.max(acc, activation.stopx); +
112663 }, actors[actor].x + conf.width / 2); +
112664 return [left, right]; +
112665}; +
112666/** +
112667 * Draws a flowchart in the tag with id: id based on the graph definition in text. +
112668 * @param text +
112669 * @param id +
112670 */ +
112671 +
112672 +
112673const draw = function (text, id) { +
112674 _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.clear(); +
112675 _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].parse(text + '\n'); +
112676 bounds.init(); +
112677 const diagram = d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id="${id}"]`); +
112678 let startx; +
112679 let stopx; +
112680 let forceWidth; // Fetch data from the parsing +
112681 +
112682 const actors = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getActors(); +
112683 const actorKeys = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getActorKeys(); +
112684 const messages = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getMessages(); +
112685 const title = _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.getTitle(); +
112686 drawActors(diagram, actors, actorKeys, 0); // The arrow head definition is attached to the svg once +
112687 +
112688 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].insertArrowHead(diagram); +
112689 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].insertArrowCrossHead(diagram); +
112690 +
112691 function activeEnd(msg, verticalPos) { +
112692 const activationData = bounds.endActivation(msg); +
112693 +
112694 if (activationData.starty + 18 > verticalPos) { +
112695 activationData.starty = verticalPos - 6; +
112696 verticalPos += 12; +
112697 } +
112698 +
112699 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawActivation(diagram, activationData, verticalPos, conf, actorActivations(msg.from.actor).length); +
112700 bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos); +
112701 } // const lastMsg +
112702 // Draw the messages/signals +
112703 +
112704 +
112705 messages.forEach(function (msg) { +
112706 let loopData; +
112707 +
112708 switch (msg.type) { +
112709 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.NOTE: +
112710 bounds.bumpVerticalPos(conf.boxMargin); +
112711 startx = actors[msg.from].x; +
112712 stopx = actors[msg.to].x; +
112713 +
112714 if (msg.placement === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.PLACEMENT.RIGHTOF) { +
112715 drawNote(diagram, startx + (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg); +
112716 } else if (msg.placement === _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.PLACEMENT.LEFTOF) { +
112717 drawNote(diagram, startx - (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg); +
112718 } else if (msg.to === msg.from) { +
112719 // Single-actor over +
112720 drawNote(diagram, startx, bounds.getVerticalPos(), msg); +
112721 } else { +
112722 // Multi-actor over +
112723 forceWidth = Math.abs(startx - stopx) + conf.actorMargin; +
112724 drawNote(diagram, (startx + stopx + conf.width - forceWidth) / 2, bounds.getVerticalPos(), msg, forceWidth); +
112725 } +
112726 +
112727 break; +
112728 +
112729 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ACTIVE_START: +
112730 bounds.newActivation(msg, diagram); +
112731 break; +
112732 +
112733 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ACTIVE_END: +
112734 activeEnd(msg, bounds.getVerticalPos()); +
112735 break; +
112736 +
112737 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.LOOP_START: +
112738 bounds.bumpVerticalPos(conf.boxMargin); +
112739 bounds.newLoop(msg.message); +
112740 bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); +
112741 break; +
112742 +
112743 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.LOOP_END: +
112744 loopData = bounds.endLoop(); +
112745 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawLoop(diagram, loopData, 'loop', conf); +
112746 bounds.bumpVerticalPos(conf.boxMargin); +
112747 break; +
112748 +
112749 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.OPT_START: +
112750 bounds.bumpVerticalPos(conf.boxMargin); +
112751 bounds.newLoop(msg.message); +
112752 bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); +
112753 break; +
112754 +
112755 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.OPT_END: +
112756 loopData = bounds.endLoop(); +
112757 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawLoop(diagram, loopData, 'opt', conf); +
112758 bounds.bumpVerticalPos(conf.boxMargin); +
112759 break; +
112760 +
112761 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ALT_START: +
112762 bounds.bumpVerticalPos(conf.boxMargin); +
112763 bounds.newLoop(msg.message); +
112764 bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); +
112765 break; +
112766 +
112767 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ALT_ELSE: +
112768 bounds.bumpVerticalPos(conf.boxMargin); +
112769 loopData = bounds.addSectionToLoop(msg.message); +
112770 bounds.bumpVerticalPos(conf.boxMargin); +
112771 break; +
112772 +
112773 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.ALT_END: +
112774 loopData = bounds.endLoop(); +
112775 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawLoop(diagram, loopData, 'alt', conf); +
112776 bounds.bumpVerticalPos(conf.boxMargin); +
112777 break; +
112778 +
112779 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.PAR_START: +
112780 bounds.bumpVerticalPos(conf.boxMargin); +
112781 bounds.newLoop(msg.message); +
112782 bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin); +
112783 break; +
112784 +
112785 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.PAR_AND: +
112786 bounds.bumpVerticalPos(conf.boxMargin); +
112787 loopData = bounds.addSectionToLoop(msg.message); +
112788 bounds.bumpVerticalPos(conf.boxMargin); +
112789 break; +
112790 +
112791 case _parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_3__["parser"].yy.LINETYPE.PAR_END: +
112792 loopData = bounds.endLoop(); +
112793 _svgDraw__WEBPACK_IMPORTED_MODULE_1__["default"].drawLoop(diagram, loopData, 'par', conf); +
112794 bounds.bumpVerticalPos(conf.boxMargin); +
112795 break; +
112796 +
112797 default: +
112798 try { +
112799 // lastMsg = msg +
112800 bounds.bumpVerticalPos(conf.messageMargin); +
112801 const fromBounds = actorFlowVerticaBounds(msg.from); +
112802 const toBounds = actorFlowVerticaBounds(msg.to); +
112803 const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0; +
112804 const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1; +
112805 startx = fromBounds[fromIdx]; +
112806 stopx = toBounds[toIdx]; +
112807 const verticalPos = bounds.getVerticalPos(); +
112808 drawMessage(diagram, startx, stopx, verticalPos, msg); +
112809 const allBounds = fromBounds.concat(toBounds); +
112810 bounds.insert(Math.min.apply(null, allBounds), verticalPos, Math.max.apply(null, allBounds), verticalPos); +
112811 } catch (e) { +
112812 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].error('error while drawing message', e); +
112813 } +
112814 +
112815 } +
112816 }); +
112817 +
112818 if (conf.mirrorActors) { +
112819 // Draw actors below diagram +
112820 bounds.bumpVerticalPos(conf.boxMargin * 2); +
112821 drawActors(diagram, actors, actorKeys, bounds.getVerticalPos()); +
112822 } +
112823 +
112824 const box = bounds.getBounds(); // Adjust line height of actor lines now that the height of the diagram is known +
112825 +
112826 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('For line height fix Querying: #' + id + ' .actor-line'); +
112827 const actorLines = d3__WEBPACK_IMPORTED_MODULE_0__["selectAll"]('#' + id + ' .actor-line'); +
112828 actorLines.attr('y2', box.stopy); +
112829 let height = box.stopy - box.starty + 2 * conf.diagramMarginY; +
112830 +
112831 if (conf.mirrorActors) { +
112832 height = height - conf.boxMargin + conf.bottomMarginAdj; +
112833 } +
112834 +
112835 const width = box.stopx - box.startx + 2 * conf.diagramMarginX; +
112836 +
112837 if (title) { +
112838 diagram.append('text').text(title).attr('x', (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX).attr('y', -25); +
112839 } +
112840 +
112841 if (conf.useMaxWidth) { +
112842 diagram.attr('height', '100%'); +
112843 diagram.attr('width', '100%'); +
112844 diagram.attr('style', 'max-width:' + width + 'px;'); +
112845 } else { +
112846 diagram.attr('height', height); +
112847 diagram.attr('width', width); +
112848 } +
112849 +
112850 const extraVertForTitle = title ? 40 : 0; +
112851 diagram.attr('viewBox', box.startx - conf.diagramMarginX + ' -' + (conf.diagramMarginY + extraVertForTitle) + ' ' + width + ' ' + (height + extraVertForTitle)); +
112852}; +
112853/* harmony default export */ __webpack_exports__["default"] = ({ +
112854 bounds, +
112855 drawActors, +
112856 setConf, +
112857 draw +
112858}); +
112859 +
112860/***/ }), +
112861 +
112862/***/ "./src/diagrams/sequence/svgDraw.js": +
112863/*!******************************************!*\ +
112864 !*** ./src/diagrams/sequence/svgDraw.js ***! +
112865 \******************************************/ +
112866/*! exports provided: drawRect, drawText, drawLabel, drawActor, anchorElement, drawActivation, drawLoop, insertArrowHead, insertArrowCrossHead, getTextObj, getNoteRect, default */ +
112867/***/ (function(module, __webpack_exports__, __webpack_require__) { +
112868 +
112869"use strict"; +
112870__webpack_require__.r(__webpack_exports__); +
112871/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawRect", function() { return drawRect; }); +
112872/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawText", function() { return drawText; }); +
112873/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawLabel", function() { return drawLabel; }); +
112874/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawActor", function() { return drawActor; }); +
112875/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "anchorElement", function() { return anchorElement; }); +
112876/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawActivation", function() { return drawActivation; }); +
112877/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawLoop", function() { return drawLoop; }); +
112878/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "insertArrowHead", function() { return insertArrowHead; }); +
112879/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "insertArrowCrossHead", function() { return insertArrowCrossHead; }); +
112880/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTextObj", function() { return getTextObj; }); +
112881/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNoteRect", function() { return getNoteRect; }); +
112882const drawRect = function (elem, rectData) { +
112883 const rectElem = elem.append('rect'); +
112884 rectElem.attr('x', rectData.x); +
112885 rectElem.attr('y', rectData.y); +
112886 rectElem.attr('fill', rectData.fill); +
112887 rectElem.attr('stroke', rectData.stroke); +
112888 rectElem.attr('width', rectData.width); +
112889 rectElem.attr('height', rectData.height); +
112890 rectElem.attr('rx', rectData.rx); +
112891 rectElem.attr('ry', rectData.ry); +
112892 +
112893 if (typeof rectData.class !== 'undefined') { +
112894 rectElem.attr('class', rectData.class); +
112895 } +
112896 +
112897 return rectElem; +
112898}; +
112899const drawText = function (elem, textData, width) { +
112900 // Remove and ignore br:s +
112901 const nText = textData.text.replace(/<br\/?>/ig, ' '); +
112902 const textElem = elem.append('text'); +
112903 textElem.attr('x', textData.x); +
112904 textElem.attr('y', textData.y); +
112905 textElem.style('text-anchor', textData.anchor); +
112906 textElem.attr('fill', textData.fill); +
112907 +
112908 if (typeof textData.class !== 'undefined') { +
112909 textElem.attr('class', textData.class); +
112910 } +
112911 +
112912 const span = textElem.append('tspan'); +
112913 span.attr('x', textData.x + textData.textMargin * 2); +
112914 span.attr('fill', textData.fill); +
112915 span.text(nText); +
112916 return textElem; +
112917}; +
112918const drawLabel = function (elem, txtObject) { +
112919 function genPoints(x, y, width, height, cut) { +
112920 return x + ',' + y + ' ' + (x + width) + ',' + y + ' ' + (x + width) + ',' + (y + height - cut) + ' ' + (x + width - cut * 1.2) + ',' + (y + height) + ' ' + x + ',' + (y + height); +
112921 } +
112922 +
112923 const polygon = elem.append('polygon'); +
112924 polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7)); +
112925 polygon.attr('class', 'labelBox'); +
112926 txtObject.y = txtObject.y + txtObject.labelMargin; +
112927 txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin; +
112928 drawText(elem, txtObject); +
112929}; +
112930let actorCnt = -1; +
112931/** +
112932 * Draws an actor in the diagram with the attaced line +
112933 * @param center - The center of the the actor +
112934 * @param pos The position if the actor in the liost of actors +
112935 * @param description The text in the box +
112936 */ +
112937 +
112938const drawActor = function (elem, left, verticalPos, description, conf) { +
112939 const center = left + conf.width / 2; +
112940 const g = elem.append('g'); +
112941 +
112942 if (verticalPos === 0) { +
112943 actorCnt++; +
112944 g.append('line').attr('id', 'actor' + actorCnt).attr('x1', center).attr('y1', 5).attr('x2', center).attr('y2', 2000).attr('class', 'actor-line').attr('stroke-width', '0.5px').attr('stroke', '#999'); +
112945 } +
112946 +
112947 const rect = getNoteRect(); +
112948 rect.x = left; +
112949 rect.y = verticalPos; +
112950 rect.fill = '#eaeaea'; +
112951 rect.width = conf.width; +
112952 rect.height = conf.height; +
112953 rect.class = 'actor'; +
112954 rect.rx = 3; +
112955 rect.ry = 3; +
112956 drawRect(g, rect); +
112957 +
112958 _drawTextCandidateFunc(conf)(description, g, rect.x, rect.y, rect.width, rect.height, { +
112959 'class': 'actor' +
112960 }, conf); +
112961}; +
112962const anchorElement = function (elem) { +
112963 return elem.append('g'); +
112964}; +
112965/** +
112966 * Draws an actor in the diagram with the attaced line +
112967 * @param elem - element to append activation rect +
112968 * @param bounds - activation box bounds +
112969 * @param verticalPos - precise y cooridnate of bottom activation box edge +
112970 */ +
112971 +
112972const drawActivation = function (elem, bounds, verticalPos, conf, actorActivations) { +
112973 const rect = getNoteRect(); +
112974 const g = bounds.anchored; +
112975 rect.x = bounds.startx; +
112976 rect.y = bounds.starty; +
112977 rect.class = 'activation' + actorActivations % 3; // Will evaluate to 0, 1 or 2 +
112978 +
112979 rect.width = bounds.stopx - bounds.startx; +
112980 rect.height = verticalPos - bounds.starty; +
112981 drawRect(g, rect); +
112982}; +
112983/** +
112984 * Draws an actor in the diagram with the attaced line +
112985 * @param center - The center of the the actor +
112986 * @param pos The position if the actor in the list of actors +
112987 * @param description The text in the box +
112988 */ +
112989 +
112990const drawLoop = function (elem, bounds, labelText, conf) { +
112991 const g = elem.append('g'); +
112992 +
112993 const drawLoopLine = function (startx, starty, stopx, stopy) { +
112994 return g.append('line').attr('x1', startx).attr('y1', starty).attr('x2', stopx).attr('y2', stopy).attr('class', 'loopLine'); +
112995 }; +
112996 +
112997 drawLoopLine(bounds.startx, bounds.starty, bounds.stopx, bounds.starty); +
112998 drawLoopLine(bounds.stopx, bounds.starty, bounds.stopx, bounds.stopy); +
112999 drawLoopLine(bounds.startx, bounds.stopy, bounds.stopx, bounds.stopy); +
113000 drawLoopLine(bounds.startx, bounds.starty, bounds.startx, bounds.stopy); +
113001 +
113002 if (typeof bounds.sections !== 'undefined') { +
113003 bounds.sections.forEach(function (item) { +
113004 drawLoopLine(bounds.startx, item, bounds.stopx, item).style('stroke-dasharray', '3, 3'); +
113005 }); +
113006 } +
113007 +
113008 let txt = getTextObj(); +
113009 txt.text = labelText; +
113010 txt.x = bounds.startx; +
113011 txt.y = bounds.starty; +
113012 txt.labelMargin = 1.5 * 10; // This is the small box that says "loop" +
113013 +
113014 txt.class = 'labelText'; // Its size & position are fixed. +
113015 +
113016 drawLabel(g, txt); +
113017 txt = getTextObj(); +
113018 txt.text = '[ ' + bounds.title + ' ]'; +
113019 txt.x = bounds.startx + (bounds.stopx - bounds.startx) / 2; +
113020 txt.y = bounds.starty + 1.5 * conf.boxMargin; +
113021 txt.anchor = 'middle'; +
113022 txt.class = 'loopText'; +
113023 drawText(g, txt); +
113024 +
113025 if (typeof bounds.sectionTitles !== 'undefined') { +
113026 bounds.sectionTitles.forEach(function (item, idx) { +
113027 if (item !== '') { +
113028 txt.text = '[ ' + item + ' ]'; +
113029 txt.y = bounds.sections[idx] + 1.5 * conf.boxMargin; +
113030 drawText(g, txt); +
113031 } +
113032 }); +
113033 } +
113034}; +
113035/** +
113036 * Setup arrow head and define the marker. The result is appended to the svg. +
113037 */ +
113038 +
113039const insertArrowHead = function (elem) { +
113040 elem.append('defs').append('marker').attr('id', 'arrowhead').attr('refX', 5).attr('refY', 2).attr('markerWidth', 6).attr('markerHeight', 4).attr('orient', 'auto').append('path').attr('d', 'M 0,0 V 4 L6,2 Z'); // this is actual shape for arrowhead +
113041}; +
113042/** +
113043 * Setup arrow head and define the marker. The result is appended to the svg. +
113044 */ +
113045 +
113046const insertArrowCrossHead = function (elem) { +
113047 const defs = elem.append('defs'); +
113048 const marker = defs.append('marker').attr('id', 'crosshead').attr('markerWidth', 15).attr('markerHeight', 8).attr('orient', 'auto').attr('refX', 16).attr('refY', 4); // The arrow +
113049 +
113050 marker.append('path').attr('fill', 'black').attr('stroke', '#000000').style('stroke-dasharray', '0, 0').attr('stroke-width', '1px').attr('d', 'M 9,2 V 6 L16,4 Z'); // The cross +
113051 +
113052 marker.append('path').attr('fill', 'none').attr('stroke', '#000000').style('stroke-dasharray', '0, 0').attr('stroke-width', '1px').attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7'); // this is actual shape for arrowhead +
113053}; +
113054const getTextObj = function () { +
113055 const txt = { +
113056 x: 0, +
113057 y: 0, +
113058 'fill': undefined, +
113059 'text-anchor': 'start', +
113060 style: '#666', +
113061 width: 100, +
113062 height: 100, +
113063 textMargin: 0, +
113064 rx: 0, +
113065 ry: 0 +
113066 }; +
113067 return txt; +
113068}; +
113069const getNoteRect = function () { +
113070 const rect = { +
113071 x: 0, +
113072 y: 0, +
113073 fill: '#EDF2AE', +
113074 stroke: '#666', +
113075 width: 100, +
113076 anchor: 'start', +
113077 height: 100, +
113078 rx: 0, +
113079 ry: 0 +
113080 }; +
113081 return rect; +
113082}; +
113083 +
113084const _drawTextCandidateFunc = function () { +
113085 function byText(content, g, x, y, width, height, textAttrs) { +
113086 const text = g.append('text').attr('x', x + width / 2).attr('y', y + height / 2 + 5).style('text-anchor', 'middle').text(content); +
113087 +
113088 _setTextAttrs(text, textAttrs); +
113089 } +
113090 +
113091 function byTspan(content, g, x, y, width, height, textAttrs, conf) { +
113092 const { +
113093 actorFontSize, +
113094 actorFontFamily +
113095 } = conf; +
113096 const lines = content.split(/<br\/?>/ig); +
113097 +
113098 for (let i = 0; i < lines.length; i++) { +
113099 const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2; +
113100 const text = g.append('text').attr('x', x + width / 2).attr('y', y).style('text-anchor', 'middle').style('font-size', actorFontSize).style('font-family', actorFontFamily); +
113101 text.append('tspan').attr('x', x + width / 2).attr('dy', dy).text(lines[i]); +
113102 text.attr('y', y + height / 2.0).attr('dominant-baseline', 'central').attr('alignment-baseline', 'central'); +
113103 +
113104 _setTextAttrs(text, textAttrs); +
113105 } +
113106 } +
113107 +
113108 function byFo(content, g, x, y, width, height, textAttrs, conf) { +
113109 const s = g.append('switch'); +
113110 const f = s.append('foreignObject').attr('x', x).attr('y', y).attr('width', width).attr('height', height); +
113111 const text = f.append('div').style('display', 'table').style('height', '100%').style('width', '100%'); +
113112 text.append('div').style('display', 'table-cell').style('text-align', 'center').style('vertical-align', 'middle').text(content); +
113113 byTspan(content, s, x, y, width, height, textAttrs, conf); +
113114 +
113115 _setTextAttrs(text, textAttrs); +
113116 } +
113117 +
113118 function _setTextAttrs(toText, fromTextAttrsDict) { +
113119 for (const key in fromTextAttrsDict) { +
113120 if (fromTextAttrsDict.hasOwnProperty(key)) { +
113121 toText.attr(key, fromTextAttrsDict[key]); +
113122 } +
113123 } +
113124 } +
113125 +
113126 return function (conf) { +
113127 return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan; +
113128 }; +
113129}(); +
113130 +
113131/* harmony default export */ __webpack_exports__["default"] = ({ +
113132 drawRect, +
113133 drawText, +
113134 drawLabel, +
113135 drawActor, +
113136 anchorElement, +
113137 drawActivation, +
113138 drawLoop, +
113139 insertArrowHead, +
113140 insertArrowCrossHead, +
113141 getTextObj, +
113142 getNoteRect +
113143}); +
113144 +
113145/***/ }), +
113146 +
113147/***/ "./src/logger.js": +
113148/*!***********************!*\ +
113149 !*** ./src/logger.js ***! +
113150 \***********************/ +
113151/*! exports provided: LEVELS, logger, setLogLevel */ +
113152/***/ (function(module, __webpack_exports__, __webpack_require__) { +
113153 +
113154"use strict"; +
113155__webpack_require__.r(__webpack_exports__); +
113156/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LEVELS", function() { return LEVELS; }); +
113157/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "logger", function() { return logger; }); +
113158/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLogLevel", function() { return setLogLevel; }); +
113159/* harmony import */ var moment_mini__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment-mini */ "./node_modules/moment-mini/moment.min.js"); +
113160/* harmony import */ var moment_mini__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment_mini__WEBPACK_IMPORTED_MODULE_0__); +
113161 +
113162const LEVELS = { +
113163 debug: 1, +
113164 info: 2, +
113165 warn: 3, +
113166 error: 4, +
113167 fatal: 5 +
113168}; +
113169const logger = { +
113170 debug: () => {}, +
113171 info: () => {}, +
113172 warn: () => {}, +
113173 error: () => {}, +
113174 fatal: () => {} +
113175}; +
113176const setLogLevel = function (level) { +
113177 logger.debug = () => {}; +
113178 +
113179 logger.info = () => {}; +
113180 +
113181 logger.warn = () => {}; +
113182 +
113183 logger.error = () => {}; +
113184 +
113185 logger.fatal = () => {}; +
113186 +
113187 if (level <= LEVELS.fatal) { +
113188 logger.fatal = console.log.bind(console, '\x1b[35m', format('FATAL')); +
113189 } +
113190 +
113191 if (level <= LEVELS.error) { +
113192 logger.error = console.log.bind(console, '\x1b[31m', format('ERROR')); +
113193 } +
113194 +
113195 if (level <= LEVELS.warn) { +
113196 logger.warn = console.log.bind(console, `\x1b[33m`, format('WARN')); +
113197 } +
113198 +
113199 if (level <= LEVELS.info) { +
113200 logger.info = console.log.bind(console, '\x1b[34m', format('INFO')); +
113201 } +
113202 +
113203 if (level <= LEVELS.debug) { +
113204 logger.debug = console.log.bind(console, '\x1b[32m', format('DEBUG')); +
113205 } +
113206}; +
113207 +
113208const format = level => { +
113209 const time = moment_mini__WEBPACK_IMPORTED_MODULE_0___default()().format('HH:mm:ss.SSS'); +
113210 return `${time} : ${level} : `; +
113211}; +
113212 +
113213/***/ }), +
113214 +
113215/***/ "./src/mermaid.js": +
113216/*!************************!*\ +
113217 !*** ./src/mermaid.js ***! +
113218 \************************/ +
113219/*! exports provided: default */ +
113220/***/ (function(module, __webpack_exports__, __webpack_require__) { +
113221 +
113222"use strict"; +
113223__webpack_require__.r(__webpack_exports__); +
113224/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! he */ "./node_modules/he/he.js"); +
113225/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_0__); +
113226/* harmony import */ var _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mermaidAPI */ "./src/mermaidAPI.js"); +
113227/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./logger */ "./src/logger.js"); +
113228/** +
113229 * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid functionality and to render +
113230 * the diagrams to svg code. +
113231 */ +
113232 +
113233 +
113234 +
113235/** +
113236 * ## init +
113237 * Function that goes through the document to find the chart definitions in there and render them. +
113238 * +
113239 * The function tags the processed attributes with the attribute data-processed and ignores found elements with the +
113240 * attribute already set. This way the init function can be triggered several times. +
113241 * +
113242 * Optionally, `init` can accept in the second argument one of the following: +
113243 * - a DOM Node +
113244 * - an array of DOM nodes (as would come from a jQuery selector) +
113245 * - a W3C selector, a la `.mermaid` +
113246 * +
113247 * ```mermaid +
113248 * graph LR; +
113249 * a(Find elements)-->b{Processed} +
113250 * b-->|Yes|c(Leave element) +
113251 * b-->|No |d(Transform) +
113252 * ``` +
113253 * Renders the mermaid diagrams +
113254 * @param nodes a css selector or an array of nodes +
113255 */ +
113256 +
113257const init = function () { +
113258 const conf = _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].getConfig(); +
113259 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Starting rendering diagrams'); +
113260 let nodes; +
113261 +
113262 if (arguments.length >= 2) { +
113263 /*! sequence config was passed as #1 */ +
113264 if (typeof arguments[0] !== 'undefined') { +
113265 mermaid.sequenceConfig = arguments[0]; +
113266 } +
113267 +
113268 nodes = arguments[1]; +
113269 } else { +
113270 nodes = arguments[0]; +
113271 } // if last argument is a function this is the callback function +
113272 +
113273 +
113274 let callback; +
113275 +
113276 if (typeof arguments[arguments.length - 1] === 'function') { +
113277 callback = arguments[arguments.length - 1]; +
113278 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Callback function found'); +
113279 } else { +
113280 if (typeof conf.mermaid !== 'undefined') { +
113281 if (typeof conf.mermaid.callback === 'function') { +
113282 callback = conf.mermaid.callback; +
113283 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Callback function found'); +
113284 } else { +
113285 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('No Callback function found'); +
113286 } +
113287 } +
113288 } +
113289 +
113290 nodes = nodes === undefined ? document.querySelectorAll('.mermaid') : typeof nodes === 'string' ? document.querySelectorAll(nodes) : nodes instanceof window.Node ? [nodes] : nodes; // Last case - sequence config was passed pick next +
113291 +
113292 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Start On Load before: ' + mermaid.startOnLoad); +
113293 +
113294 if (typeof mermaid.startOnLoad !== 'undefined') { +
113295 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Start On Load inner: ' + mermaid.startOnLoad); +
113296 _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].initialize({ +
113297 startOnLoad: mermaid.startOnLoad +
113298 }); +
113299 } +
113300 +
113301 if (typeof mermaid.ganttConfig !== 'undefined') { +
113302 _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].initialize({ +
113303 gantt: mermaid.ganttConfig +
113304 }); +
113305 } +
113306 +
113307 let txt; +
113308 +
113309 for (let i = 0; i < nodes.length; i++) { +
113310 const element = nodes[i]; +
113311 /*! Check if previously processed */ +
113312 +
113313 if (!element.getAttribute('data-processed')) { +
113314 element.setAttribute('data-processed', true); +
113315 } else { +
113316 continue; +
113317 } +
113318 +
113319 const id = `mermaid-${Date.now()}`; // Fetch the graph definition including tags +
113320 +
113321 txt = element.innerHTML; // transforms the html to pure text +
113322 +
113323 txt = he__WEBPACK_IMPORTED_MODULE_0___default.a.decode(txt).trim().replace(/<br>/ig, '<br/>'); +
113324 _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].render(id, txt, (svgCode, bindFunctions) => { +
113325 element.innerHTML = svgCode; +
113326 +
113327 if (typeof callback !== 'undefined') { +
113328 callback(id); +
113329 } +
113330 +
113331 bindFunctions(element); +
113332 }, element); +
113333 } +
113334}; +
113335 +
113336const initialize = function (config) { +
113337 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('Initializing mermaid '); +
113338 +
113339 if (typeof config.mermaid !== 'undefined') { +
113340 if (typeof config.mermaid.startOnLoad !== 'undefined') { +
113341 mermaid.startOnLoad = config.mermaid.startOnLoad; +
113342 } +
113343 +
113344 if (typeof config.mermaid.htmlLabels !== 'undefined') { +
113345 mermaid.htmlLabels = config.mermaid.htmlLabels; +
113346 } +
113347 } +
113348 +
113349 _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].initialize(config); +
113350}; +
113351/** +
113352 * ##contentLoaded +
113353 * Callback function that is called when page is loaded. This functions fetches configuration for mermaid rendering and +
113354 * calls init for rendering the mermaid diagrams on the page. +
113355 */ +
113356 +
113357 +
113358const contentLoaded = function () { +
113359 let config; +
113360 +
113361 if (mermaid.startOnLoad) { +
113362 // No config found, do check API config +
113363 config = _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].getConfig(); +
113364 +
113365 if (config.startOnLoad) { +
113366 mermaid.init(); +
113367 } +
113368 } else { +
113369 if (typeof mermaid.startOnLoad === 'undefined') { +
113370 _logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('In start, no config'); +
113371 config = _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].getConfig(); +
113372 +
113373 if (config.startOnLoad) { +
113374 mermaid.init(); +
113375 } +
113376 } +
113377 } +
113378}; +
113379 +
113380if (typeof document !== 'undefined') { +
113381 /*! +
113382 * Wait for document loaded before starting the execution +
113383 */ +
113384 window.addEventListener('load', function () { +
113385 contentLoaded(); +
113386 }, false); +
113387} +
113388 +
113389const mermaid = { +
113390 startOnLoad: true, +
113391 htmlLabels: true, +
113392 mermaidAPI: _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"], +
113393 parse: _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].parse, +
113394 render: _mermaidAPI__WEBPACK_IMPORTED_MODULE_1__["default"].render, +
113395 init, +
113396 initialize, +
113397 contentLoaded +
113398}; +
113399/* harmony default export */ __webpack_exports__["default"] = (mermaid); +
113400 +
113401/***/ }), +
113402 +
113403/***/ "./src/mermaidAPI.js": +
113404/*!***************************!*\ +
113405 !*** ./src/mermaidAPI.js ***! +
113406 \***************************/ +
113407/*! exports provided: encodeEntities, decodeEntities, default */ +
113408/***/ (function(module, __webpack_exports__, __webpack_require__) { +
113409 +
113410"use strict"; +
113411__webpack_require__.r(__webpack_exports__); +
113412/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "encodeEntities", function() { return encodeEntities; }); +
113413/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decodeEntities", function() { return decodeEntities; }); +
113414/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
113415/* harmony import */ var scope_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scope-css */ "./node_modules/scope-css/index.js"); +
113416/* harmony import */ var scope_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scope_css__WEBPACK_IMPORTED_MODULE_1__); +
113417/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../package.json */ "./package.json"); +
113418var _package_json__WEBPACK_IMPORTED_MODULE_2___namespace = /*#__PURE__*/__webpack_require__.t(/*! ../package.json */ "./package.json", 1); +
113419/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./logger */ "./src/logger.js"); +
113420/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ "./src/utils.js"); +
113421/* harmony import */ var _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./diagrams/flowchart/flowRenderer */ "./src/diagrams/flowchart/flowRenderer.js"); +
113422/* harmony import */ var _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./diagrams/flowchart/parser/flow */ "./src/diagrams/flowchart/parser/flow.js"); +
113423/* harmony import */ var _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_6__); +
113424/* harmony import */ var _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./diagrams/flowchart/flowDb */ "./src/diagrams/flowchart/flowDb.js"); +
113425/* harmony import */ var _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./diagrams/sequence/sequenceRenderer */ "./src/diagrams/sequence/sequenceRenderer.js"); +
113426/* harmony import */ var _diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./diagrams/sequence/parser/sequenceDiagram */ "./src/diagrams/sequence/parser/sequenceDiagram.js"); +
113427/* harmony import */ var _diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_9__); +
113428/* harmony import */ var _diagrams_sequence_sequenceDb__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./diagrams/sequence/sequenceDb */ "./src/diagrams/sequence/sequenceDb.js"); +
113429/* harmony import */ var _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./diagrams/gantt/ganttRenderer */ "./src/diagrams/gantt/ganttRenderer.js"); +
113430/* harmony import */ var _diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./diagrams/gantt/parser/gantt */ "./src/diagrams/gantt/parser/gantt.js"); +
113431/* harmony import */ var _diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_12__); +
113432/* harmony import */ var _diagrams_gantt_ganttDb__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./diagrams/gantt/ganttDb */ "./src/diagrams/gantt/ganttDb.js"); +
113433/* harmony import */ var _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./diagrams/class/classRenderer */ "./src/diagrams/class/classRenderer.js"); +
113434/* harmony import */ var _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./diagrams/class/parser/classDiagram */ "./src/diagrams/class/parser/classDiagram.js"); +
113435/* harmony import */ var _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_15__); +
113436/* harmony import */ var _diagrams_class_classDb__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./diagrams/class/classDb */ "./src/diagrams/class/classDb.js"); +
113437/* harmony import */ var _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./diagrams/git/gitGraphRenderer */ "./src/diagrams/git/gitGraphRenderer.js"); +
113438/* harmony import */ var _diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./diagrams/git/parser/gitGraph */ "./src/diagrams/git/parser/gitGraph.js"); +
113439/* harmony import */ var _diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(_diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_18__); +
113440/* harmony import */ var _diagrams_git_gitGraphAst__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./diagrams/git/gitGraphAst */ "./src/diagrams/git/gitGraphAst.js"); +
113441/* harmony import */ var _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./diagrams/info/infoRenderer */ "./src/diagrams/info/infoRenderer.js"); +
113442/* harmony import */ var _diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./diagrams/info/parser/info */ "./src/diagrams/info/parser/info.js"); +
113443/* harmony import */ var _diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(_diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_21__); +
113444/* harmony import */ var _diagrams_info_infoDb__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./diagrams/info/infoDb */ "./src/diagrams/info/infoDb.js"); +
113445/** +
113446 * --- +
113447 * title: mermaidAPI +
113448 * order: 5 +
113449 * --- +
113450 * # mermaidAPI +
113451 * This is the api to be used when handling the integration with the web page instead of using the default integration +
113452 * (mermaid.js). +
113453 * +
113454 * The core of this api is the **render** function that given a graph definitionas text renders the graph/diagram and +
113455 * returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it +
113456 * somewhere in the page or something completely different. +
113457*/ +
113458 +
113459 +
113460 +
113461 +
113462 +
113463 +
113464 +
113465 +
113466 +
113467 +
113468 +
113469 +
113470 +
113471 +
113472 +
113473 +
113474 +
113475 +
113476 +
113477 +
113478 +
113479 +
113480 +
113481const themes = {}; +
113482 +
113483for (const themeName of ['default', 'forest', 'dark', 'neutral']) { +
113484 themes[themeName] = __webpack_require__("./src/themes sync recursive ^\\.\\/.*\\/index\\.scss$")(`./${themeName}/index.scss`); +
113485} +
113486/** +
113487 * ## Configuration +
113488 * These are the default options which can be overridden with the initialization call as in the example below: +
113489 * ``` +
113490 * mermaid.initialize({ +
113491 * flowchart:{ +
113492 * htmlLabels: false +
113493 * } +
113494 * }); +
113495 * ``` +
113496 */ +
113497 +
113498 +
113499const config = { +
113500 /** theme , the CSS style sheet +
113501 * +
113502 * **theme** - Choose one of the built-in themes: default, forest, dark or neutral. To disable any pre-defined mermaid theme, use "null". +
113503 * **themeCSS** - Use your own CSS. This overrides **theme**. +
113504 *``` +
113505 * "theme": "forest", +
113506 * "themeCSS": ".node rect { fill: red; }" +
113507 *``` +
113508 */ +
113509 theme: 'default', +
113510 themeCSS: undefined, +
113511 +
113512 /** +
113513 * logLevel , decides the amount of logging to be used. +
113514 * * debug: 1 +
113515 * * info: 2 +
113516 * * warn: 3 +
113517 * * error: 4 +
113518 * * fatal: 5 +
113519 */ +
113520 logLevel: 5, +
113521 +
113522 /** +
113523 * **startOnLoad** - This options controls whether or mermaid starts when the page loads +
113524 */ +
113525 startOnLoad: true, +
113526 +
113527 /** +
113528 * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or +
113529 * an anchor, #. This matters if you are using base tag settings. +
113530 */ +
113531 arrowMarkerAbsolute: false, +
113532 +
113533 /** +
113534 * ### flowchart +
113535 * *The object containing configurations specific for flowcharts* +
113536 */ +
113537 flowchart: { +
113538 /** +
113539 * **htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels +
113540 * on the edges +
113541 */ +
113542 htmlLabels: true, +
113543 curve: 'linear' +
113544 }, +
113545 +
113546 /** +
113547 * ### sequenceDiagram +
113548 * The object containing configurations specific for sequence diagrams +
113549 */ +
113550 sequence: { +
113551 /** +
113552 * **diagramMarginX** - margin to the right and left of the sequence diagram +
113553 */ +
113554 diagramMarginX: 50, +
113555 +
113556 /** +
113557 * **diagramMarginY** - margin to the over and under the sequence diagram +
113558 */ +
113559 diagramMarginY: 10, +
113560 +
113561 /** +
113562 * **actorMargin** - Margin between actors +
113563 */ +
113564 actorMargin: 50, +
113565 +
113566 /** +
113567 * **width** - Width of actor boxes +
113568 */ +
113569 width: 150, +
113570 +
113571 /** +
113572 * **height** - Height of actor boxes +
113573 */ +
113574 height: 65, +
113575 +
113576 /** +
113577 * **boxMargin** - Margin around loop boxes +
113578 */ +
113579 boxMargin: 10, +
113580 +
113581 /** +
113582 * **boxTextMargin** - margin around the text in loop/alt/opt boxes +
113583 */ +
113584 boxTextMargin: 5, +
113585 +
113586 /** +
113587 * **noteMargin** - margin around notes +
113588 */ +
113589 noteMargin: 10, +
113590 +
113591 /** +
113592 * **messageMargin** - Space between messages +
113593 */ +
113594 messageMargin: 35, +
113595 +
113596 /** +
113597 * **mirrorActors** - mirror actors under diagram +
113598 */ +
113599 mirrorActors: true, +
113600 +
113601 /** +
113602 * **bottomMarginAdj** - Depending on css styling this might need adjustment. +
113603 * Prolongs the edge of the diagram downwards +
113604 */ +
113605 bottomMarginAdj: 1, +
113606 +
113607 /** +
113608 * **useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the +
113609 * available space if not the absolute space required is used +
113610 */ +
113611 useMaxWidth: true, +
113612 +
113613 /** +
113614 * **rightAngles** - this will display arrows that start and begin at the same node as right angles, rather than a curve +
113615 */ +
113616 rightAngles: false +
113617 }, +
113618 +
113619 /** ### gantt +
113620 * The object containing configurations specific for gantt diagrams* +
113621 */ +
113622 gantt: { +
113623 /** +
113624 * **titleTopMargin** - margin top for the text over the gantt diagram +
113625 */ +
113626 titleTopMargin: 25, +
113627 +
113628 /** +
113629 * **barHeight** - the height of the bars in the graph +
113630 */ +
113631 barHeight: 20, +
113632 +
113633 /** +
113634 * **barGap** - the margin between the different activities in the gantt diagram +
113635 */ +
113636 barGap: 4, +
113637 +
113638 /** +
113639 * **topPadding** - margin between title and gantt diagram and between axis and gantt diagram. +
113640 */ +
113641 topPadding: 50, +
113642 +
113643 /** +
113644 * **leftPadding** - the space allocated for the section name to the left of the activities. +
113645 */ +
113646 leftPadding: 75, +
113647 +
113648 /** +
113649 * **gridLineStartPadding** - Vertical starting position of the grid lines +
113650 */ +
113651 gridLineStartPadding: 35, +
113652 +
113653 /** +
113654 * **fontSize** - font size ... +
113655 */ +
113656 fontSize: 11, +
113657 +
113658 /** +
113659 * **fontFamily** - font family ... +
113660 */ +
113661 fontFamily: '"Open-Sans", "sans-serif"', +
113662 +
113663 /** +
113664 * **numberSectionStyles** - the number of alternating section styles +
113665 */ +
113666 numberSectionStyles: 4, +
113667 +
113668 /** +
113669 * **axisFormat** - datetime format of the axis, this might need adjustment to match your locale and preferences +
113670 */ +
113671 axisFormat: '%Y-%m-%d' +
113672 }, +
113673 class: {}, +
113674 git: {} +
113675}; +
113676Object(_logger__WEBPACK_IMPORTED_MODULE_3__["setLogLevel"])(config.logLevel); +
113677 +
113678function parse(text) { +
113679 const graphType = _utils__WEBPACK_IMPORTED_MODULE_4__["default"].detectType(text); +
113680 let parser; +
113681 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Type ' + graphType); +
113682 +
113683 switch (graphType) { +
113684 case 'git': +
113685 parser = _diagrams_git_parser_gitGraph__WEBPACK_IMPORTED_MODULE_18___default.a; +
113686 parser.parser.yy = _diagrams_git_gitGraphAst__WEBPACK_IMPORTED_MODULE_19__["default"]; +
113687 break; +
113688 +
113689 case 'flowchart': +
113690 parser = _diagrams_flowchart_parser_flow__WEBPACK_IMPORTED_MODULE_6___default.a; +
113691 parser.parser.yy = _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_7__["default"]; +
113692 break; +
113693 +
113694 case 'sequence': +
113695 parser = _diagrams_sequence_parser_sequenceDiagram__WEBPACK_IMPORTED_MODULE_9___default.a; +
113696 parser.parser.yy = _diagrams_sequence_sequenceDb__WEBPACK_IMPORTED_MODULE_10__["default"]; +
113697 break; +
113698 +
113699 case 'gantt': +
113700 parser = _diagrams_gantt_parser_gantt__WEBPACK_IMPORTED_MODULE_12___default.a; +
113701 parser.parser.yy = _diagrams_gantt_ganttDb__WEBPACK_IMPORTED_MODULE_13__["default"]; +
113702 break; +
113703 +
113704 case 'class': +
113705 parser = _diagrams_class_parser_classDiagram__WEBPACK_IMPORTED_MODULE_15___default.a; +
113706 parser.parser.yy = _diagrams_class_classDb__WEBPACK_IMPORTED_MODULE_16__["default"]; +
113707 break; +
113708 +
113709 case 'info': +
113710 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('info info info'); +
113711 parser = _diagrams_info_parser_info__WEBPACK_IMPORTED_MODULE_21___default.a; +
113712 parser.parser.yy = _diagrams_info_infoDb__WEBPACK_IMPORTED_MODULE_22__["default"]; +
113713 break; +
113714 } +
113715 +
113716 parser.parser.yy.parseError = (str, hash) => { +
113717 const error = { +
113718 str, +
113719 hash +
113720 }; +
113721 throw error; +
113722 }; +
113723 +
113724 parser.parse(text); +
113725} +
113726 +
113727const encodeEntities = function (text) { +
113728 let txt = text; +
113729 txt = txt.replace(/style.*:\S*#.*;/g, function (s) { +
113730 const innerTxt = s.substring(0, s.length - 1); +
113731 return innerTxt; +
113732 }); +
113733 txt = txt.replace(/classDef.*:\S*#.*;/g, function (s) { +
113734 const innerTxt = s.substring(0, s.length - 1); +
113735 return innerTxt; +
113736 }); +
113737 txt = txt.replace(/#\w+;/g, function (s) { +
113738 const innerTxt = s.substring(1, s.length - 1); +
113739 const isInt = /^\+?\d+$/.test(innerTxt); +
113740 +
113741 if (isInt) { +
113742 return 'fl°°' + innerTxt + '¶ß'; +
113743 } else { +
113744 return 'fl°' + innerTxt + '¶ß'; +
113745 } +
113746 }); +
113747 return txt; +
113748}; +
113749const decodeEntities = function (text) { +
113750 let txt = text; +
113751 txt = txt.replace(/fl°°/g, function () { +
113752 return '&#'; +
113753 }); +
113754 txt = txt.replace(/fl°/g, function () { +
113755 return '&'; +
113756 }); +
113757 txt = txt.replace(/¶ß/g, function () { +
113758 return ';'; +
113759 }); +
113760 return txt; +
113761}; +
113762/** +
113763 * ##render +
113764 * Function that renders an svg with a graph from a chart definition. Usage example below. +
113765 * +
113766 * ``` +
113767 * mermaidAPI.initialize({ +
113768 * startOnLoad:true +
113769 * }); +
113770 * $(function(){ +
113771 * const graphDefinition = 'graph TB\na-->b'; +
113772 * const cb = function(svgGraph){ +
113773 * console.log(svgGraph); +
113774 * }; +
113775 * mermaidAPI.render('id1',graphDefinition,cb); +
113776 * }); +
113777 *``` +
113778 * @param id the id of the element to be rendered +
113779 * @param txt the graph definition +
113780 * @param cb callback which is called after rendering is finished with the svg code as inparam. +
113781 * @param container selector to element in which a div with the graph temporarily will be inserted. In one is +
113782 * provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is +
113783 * completed. +
113784 */ +
113785 +
113786const render = function (id, txt, cb, container) { +
113787 if (typeof container !== 'undefined') { +
113788 container.innerHTML = ''; +
113789 d3__WEBPACK_IMPORTED_MODULE_0__["select"](container).append('div').attr('id', 'd' + id).append('svg').attr('id', id).attr('width', '100%').attr('xmlns', 'http://www.w3.org/2000/svg').append('g'); +
113790 } else { +
113791 const element = document.querySelector('#' + 'd' + id); +
113792 +
113793 if (element) { +
113794 element.innerHTML = ''; +
113795 } +
113796 +
113797 d3__WEBPACK_IMPORTED_MODULE_0__["select"]('body').append('div').attr('id', 'd' + id).append('svg').attr('id', id).attr('width', '100%').attr('xmlns', 'http://www.w3.org/2000/svg').append('g'); +
113798 } +
113799 +
113800 window.txt = txt; +
113801 txt = encodeEntities(txt); +
113802 const element = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#d' + id).node(); +
113803 const graphType = _utils__WEBPACK_IMPORTED_MODULE_4__["default"].detectType(txt); // insert inline style into svg +
113804 +
113805 const svg = element.firstChild; +
113806 const firstChild = svg.firstChild; // pre-defined theme +
113807 +
113808 let style = themes[config.theme]; +
113809 +
113810 if (style === undefined) { +
113811 style = ''; +
113812 } // user provided theme CSS +
113813 +
113814 +
113815 if (config.themeCSS !== undefined) { +
113816 style += `\n${config.themeCSS}`; +
113817 } // classDef +
113818 +
113819 +
113820 if (graphType === 'flowchart') { +
113821 const classes = _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__["default"].getClasses(txt); +
113822 +
113823 for (const className in classes) { +
113824 style += `\n.${className} > * { ${classes[className].styles.join(' !important; ')} !important; }`; +
113825 } +
113826 } +
113827 +
113828 const style1 = document.createElement('style'); +
113829 style1.innerHTML = scope_css__WEBPACK_IMPORTED_MODULE_1___default()(style, `#${id}`); +
113830 svg.insertBefore(style1, firstChild); +
113831 const style2 = document.createElement('style'); +
113832 const cs = window.getComputedStyle(svg); +
113833 style2.innerHTML = `#${id} { +
113834 color: ${cs.color}; +
113835 font: ${cs.font}; +
113836 }`; +
113837 svg.insertBefore(style2, firstChild); +
113838 +
113839 switch (graphType) { +
113840 case 'git': +
113841 config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
113842 _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_17__["default"].setConf(config.git); +
113843 _diagrams_git_gitGraphRenderer__WEBPACK_IMPORTED_MODULE_17__["default"].draw(txt, id, false); +
113844 break; +
113845 +
113846 case 'flowchart': +
113847 config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
113848 _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__["default"].setConf(config.flowchart); +
113849 _diagrams_flowchart_flowRenderer__WEBPACK_IMPORTED_MODULE_5__["default"].draw(txt, id, false); +
113850 break; +
113851 +
113852 case 'sequence': +
113853 config.sequence.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
113854 +
113855 if (config.sequenceDiagram) { +
113856 // backwards compatibility +
113857 _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_8__["default"].setConf(Object.assign(config.sequence, config.sequenceDiagram)); +
113858 console.error('`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.'); +
113859 } else { +
113860 _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_8__["default"].setConf(config.sequence); +
113861 } +
113862 +
113863 _diagrams_sequence_sequenceRenderer__WEBPACK_IMPORTED_MODULE_8__["default"].draw(txt, id); +
113864 break; +
113865 +
113866 case 'gantt': +
113867 config.gantt.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
113868 _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_11__["default"].setConf(config.gantt); +
113869 _diagrams_gantt_ganttRenderer__WEBPACK_IMPORTED_MODULE_11__["default"].draw(txt, id); +
113870 break; +
113871 +
113872 case 'class': +
113873 config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
113874 _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_14__["default"].setConf(config.class); +
113875 _diagrams_class_classRenderer__WEBPACK_IMPORTED_MODULE_14__["default"].draw(txt, id); +
113876 break; +
113877 +
113878 case 'info': +
113879 config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute; +
113880 _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_20__["default"].setConf(config.class); +
113881 _diagrams_info_infoRenderer__WEBPACK_IMPORTED_MODULE_20__["default"].draw(txt, id, _package_json__WEBPACK_IMPORTED_MODULE_2__.version); +
113882 break; +
113883 } +
113884 +
113885 d3__WEBPACK_IMPORTED_MODULE_0__["select"](`[id="${id}"]`).selectAll('foreignobject > *').attr('xmlns', 'http://www.w3.org/1999/xhtml'); +
113886 let url = ''; +
113887 +
113888 if (config.arrowMarkerAbsolute) { +
113889 url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search; +
113890 url = url.replace(/\(/g, '\\('); +
113891 url = url.replace(/\)/g, '\\)'); +
113892 } // Fix for when the base tag is used +
113893 +
113894 +
113895 let svgCode = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#d' + id).node().innerHTML.replace(/url\(#arrowhead/g, 'url(' + url + '#arrowhead', 'g'); +
113896 svgCode = decodeEntities(svgCode); +
113897 +
113898 if (typeof cb !== 'undefined') { +
113899 cb(svgCode, _diagrams_flowchart_flowDb__WEBPACK_IMPORTED_MODULE_7__["default"].bindFunctions); +
113900 cb(svgCode, _diagrams_gantt_ganttDb__WEBPACK_IMPORTED_MODULE_13__["default"].bindFunctions); +
113901 } else { +
113902 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].warn('CB = undefined!'); +
113903 } +
113904 +
113905 const node = d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#d' + id).node(); +
113906 +
113907 if (node !== null && typeof node.remove === 'function') { +
113908 d3__WEBPACK_IMPORTED_MODULE_0__["select"]('#d' + id).node().remove(); +
113909 } +
113910 +
113911 return svgCode; +
113912}; +
113913 +
113914const setConf = function (cnf) { +
113915 // Top level initially mermaid, gflow, sequenceDiagram and gantt +
113916 const lvl1Keys = Object.keys(cnf); +
113917 +
113918 for (let i = 0; i < lvl1Keys.length; i++) { +
113919 if (typeof cnf[lvl1Keys[i]] === 'object' && cnf[lvl1Keys[i]] != null) { +
113920 const lvl2Keys = Object.keys(cnf[lvl1Keys[i]]); +
113921 +
113922 for (let j = 0; j < lvl2Keys.length; j++) { +
113923 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Setting conf ', lvl1Keys[i], '-', lvl2Keys[j]); +
113924 +
113925 if (typeof config[lvl1Keys[i]] === 'undefined') { +
113926 config[lvl1Keys[i]] = {}; +
113927 } +
113928 +
113929 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Setting config: ' + lvl1Keys[i] + ' ' + lvl2Keys[j] + ' to ' + cnf[lvl1Keys[i]][lvl2Keys[j]]); +
113930 config[lvl1Keys[i]][lvl2Keys[j]] = cnf[lvl1Keys[i]][lvl2Keys[j]]; +
113931 } +
113932 } else { +
113933 config[lvl1Keys[i]] = cnf[lvl1Keys[i]]; +
113934 } +
113935 } +
113936}; +
113937 +
113938function initialize(options) { +
113939 _logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('Initializing mermaidAPI ', _package_json__WEBPACK_IMPORTED_MODULE_2__.version); // Update default config with options supplied at initialization +
113940 +
113941 if (typeof options === 'object') { +
113942 setConf(options); +
113943 } +
113944 +
113945 Object(_logger__WEBPACK_IMPORTED_MODULE_3__["setLogLevel"])(config.logLevel); +
113946} +
113947 +
113948function getConfig() { +
113949 return config; +
113950} +
113951 +
113952const mermaidAPI = { +
113953 render, +
113954 parse, +
113955 initialize, +
113956 getConfig +
113957}; +
113958/* harmony default export */ __webpack_exports__["default"] = (mermaidAPI); +
113959 +
113960/***/ }), +
113961 +
113962/***/ "./src/themes sync recursive ^\\.\\/.*\\/index\\.scss$": +
113963/*!***********************************************!*\ +
113964 !*** ./src/themes sync ^\.\/.*\/index\.scss$ ***! +
113965 \***********************************************/ +
113966/*! no static exports found */ +
113967/***/ (function(module, exports, __webpack_require__) { +
113968 +
113969var map = { +
113970 "./dark/index.scss": "./src/themes/dark/index.scss", +
113971 "./default/index.scss": "./src/themes/default/index.scss", +
113972 "./forest/index.scss": "./src/themes/forest/index.scss", +
113973 "./neutral/index.scss": "./src/themes/neutral/index.scss" +
113974}; +
113975 +
113976 +
113977function webpackContext(req) { +
113978 var id = webpackContextResolve(req); +
113979 return __webpack_require__(id); +
113980} +
113981function webpackContextResolve(req) { +
113982 var id = map[req]; +
113983 if(!(id + 1)) { // check for number or string +
113984 var e = new Error("Cannot find module '" + req + "'"); +
113985 e.code = 'MODULE_NOT_FOUND'; +
113986 throw e; +
113987 } +
113988 return id; +
113989} +
113990webpackContext.keys = function webpackContextKeys() { +
113991 return Object.keys(map); +
113992}; +
113993webpackContext.resolve = webpackContextResolve; +
113994module.exports = webpackContext; +
113995webpackContext.id = "./src/themes sync recursive ^\\.\\/.*\\/index\\.scss$"; +
113996 +
113997/***/ }), +
113998 +
113999/***/ "./src/themes/dark/index.scss": +
114000/*!************************************!*\ +
114001 !*** ./src/themes/dark/index.scss ***! +
114002 \************************************/ +
114003/*! no static exports found */ +
114004/***/ (function(module, exports, __webpack_require__) { +
114005 +
114006// css-to-string-loader: transforms styles from css-loader to a string output +
114007 +
114008// Get the styles +
114009var styles = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/dark/index.scss"); +
114010 +
114011if (typeof styles === 'string') { +
114012 // Return an existing string +
114013 module.exports = styles; +
114014} else { +
114015 // Call the custom toString method from css-loader module +
114016 module.exports = styles.toString(); +
114017} +
114018 +
114019/***/ }), +
114020 +
114021/***/ "./src/themes/default/index.scss": +
114022/*!***************************************!*\ +
114023 !*** ./src/themes/default/index.scss ***! +
114024 \***************************************/ +
114025/*! no static exports found */ +
114026/***/ (function(module, exports, __webpack_require__) { +
114027 +
114028// css-to-string-loader: transforms styles from css-loader to a string output +
114029 +
114030// Get the styles +
114031var styles = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/default/index.scss"); +
114032 +
114033if (typeof styles === 'string') { +
114034 // Return an existing string +
114035 module.exports = styles; +
114036} else { +
114037 // Call the custom toString method from css-loader module +
114038 module.exports = styles.toString(); +
114039} +
114040 +
114041/***/ }), +
114042 +
114043/***/ "./src/themes/forest/index.scss": +
114044/*!**************************************!*\ +
114045 !*** ./src/themes/forest/index.scss ***! +
114046 \**************************************/ +
114047/*! no static exports found */ +
114048/***/ (function(module, exports, __webpack_require__) { +
114049 +
114050// css-to-string-loader: transforms styles from css-loader to a string output +
114051 +
114052// Get the styles +
114053var styles = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/forest/index.scss"); +
114054 +
114055if (typeof styles === 'string') { +
114056 // Return an existing string +
114057 module.exports = styles; +
114058} else { +
114059 // Call the custom toString method from css-loader module +
114060 module.exports = styles.toString(); +
114061} +
114062 +
114063/***/ }), +
114064 +
114065/***/ "./src/themes/neutral/index.scss": +
114066/*!***************************************!*\ +
114067 !*** ./src/themes/neutral/index.scss ***! +
114068 \***************************************/ +
114069/*! no static exports found */ +
114070/***/ (function(module, exports, __webpack_require__) { +
114071 +
114072// css-to-string-loader: transforms styles from css-loader to a string output +
114073 +
114074// Get the styles +
114075var styles = __webpack_require__(/*! !../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss */ "./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/lib/loader.js!./src/themes/neutral/index.scss"); +
114076 +
114077if (typeof styles === 'string') { +
114078 // Return an existing string +
114079 module.exports = styles; +
114080} else { +
114081 // Call the custom toString method from css-loader module +
114082 module.exports = styles.toString(); +
114083} +
114084 +
114085/***/ }), +
114086 +
114087/***/ "./src/utils.js": +
114088/*!**********************!*\ +
114089 !*** ./src/utils.js ***! +
114090 \**********************/ +
114091/*! exports provided: detectType, isSubstringInArray, interpolateToCurve, default */ +
114092/***/ (function(module, __webpack_exports__, __webpack_require__) { +
114093 +
114094"use strict"; +
114095__webpack_require__.r(__webpack_exports__); +
114096/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "detectType", function() { return detectType; }); +
114097/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSubstringInArray", function() { return isSubstringInArray; }); +
114098/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interpolateToCurve", function() { return interpolateToCurve; }); +
114099/* harmony import */ var d3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3 */ "./node_modules/d3/index.js"); +
114100/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ "./src/logger.js"); +
114101 +
114102 +
114103/** +
114104 * @function detectType +
114105 * Detects the type of the graph text. +
114106 * ```mermaid +
114107 * graph LR +
114108 * a-->b +
114109 * b-->c +
114110 * c-->d +
114111 * d-->e +
114112 * e-->f +
114113 * f-->g +
114114 * g-->h +
114115 * ``` +
114116 * +
114117 * @param {string} text The text defining the graph +
114118 * @returns {string} A graph definition key +
114119 */ +
114120 +
114121const detectType = function (text) { +
114122 text = text.replace(/^\s*%%.*\n/g, '\n'); +
114123 _logger__WEBPACK_IMPORTED_MODULE_1__["logger"].debug('Detecting diagram type based on the text ' + text); +
114124 +
114125 if (text.match(/^\s*sequenceDiagram/)) { +
114126 return 'sequence'; +
114127 } +
114128 +
114129 if (text.match(/^\s*gantt/)) { +
114130 return 'gantt'; +
114131 } +
114132 +
114133 if (text.match(/^\s*classDiagram/)) { +
114134 return 'class'; +
114135 } +
114136 +
114137 if (text.match(/^\s*gitGraph/)) { +
114138 return 'git'; +
114139 } +
114140 +
114141 if (text.match(/^\s*info/)) { +
114142 return 'info'; +
114143 } +
114144 +
114145 return 'flowchart'; +
114146}; +
114147/** +
114148 * @function isSubstringInArray +
114149 * Detects whether a substring in present in a given array +
114150 * @param {string} str The substring to detect +
114151 * @param {array} arr The array to search +
114152 * @returns {number} the array index containing the substring or -1 if not present +
114153 **/ +
114154 +
114155const isSubstringInArray = function (str, arr) { +
114156 for (let i = 0; i < arr.length; i++) { +
114157 if (arr[i].match(str)) return i; +
114158 } +
114159 +
114160 return -1; +
114161}; +
114162const interpolateToCurve = (interpolate, defaultCurve) => { +
114163 if (!interpolate) { +
114164 return defaultCurve; +
114165 } +
114166 +
114167 const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`; +
114168 return d3__WEBPACK_IMPORTED_MODULE_0__[curveName] || defaultCurve; +
114169}; +
114170/* harmony default export */ __webpack_exports__["default"] = ({ +
114171 detectType, +
114172 isSubstringInArray, +
114173 interpolateToCurve +
114174}); +
114175 +
114176/***/ }) +
114177 +
114178/******/ })["default"]; +
114179}); +
114180//# sourceMappingURL=mermaid.js.map
\No newline at end of file

Build: a7ebffa

© 2023 UNPKG

\ No newline at end of file diff --git a/static/mermaid.js.map b/static/mermaid.js.map new file mode 100644 index 0000000..deb594b --- /dev/null +++ b/static/mermaid.js.map @@ -0,0 +1,65 @@ +UNPKG - mermaid

UNPKG

4.48 MBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack://mermaid/webpack/universalModuleDefinition","webpack://mermaid/webpack/bootstrap","webpack://mermaid/./src/themes/dark/index.scss","webpack://mermaid/./src/themes/default/index.scss","webpack://mermaid/./src/themes/forest/index.scss","webpack://mermaid/./src/themes/neutral/index.scss","webpack://mermaid/./node_modules/css-loader/dist/runtime/api.js","webpack://mermaid/./node_modules/d3-array/src/array.js","webpack://mermaid/./node_modules/d3-array/src/ascending.js","webpack://mermaid/./node_modules/d3-array/src/bisect.js","webpack://mermaid/./node_modules/d3-array/src/bisector.js","webpack://mermaid/./node_modules/d3-array/src/constant.js","webpack://mermaid/./node_modules/d3-array/src/cross.js","webpack://mermaid/./node_modules/d3-array/src/descending.js","webpack://mermaid/./node_modules/d3-array/src/deviation.js","webpack://mermaid/./node_modules/d3-array/src/extent.js","webpack://mermaid/./node_modules/d3-array/src/histogram.js","webpack://mermaid/./node_modules/d3-array/src/identity.js","webpack://mermaid/./node_modules/d3-array/src/index.js","webpack://mermaid/./node_modules/d3-array/src/max.js","webpack://mermaid/./node_modules/d3-array/src/mean.js","webpack://mermaid/./node_modules/d3-array/src/median.js","webpack://mermaid/./node_modules/d3-array/src/merge.js","webpack://mermaid/./node_modules/d3-array/src/min.js","webpack://mermaid/./node_modules/d3-array/src/number.js","webpack://mermaid/./node_modules/d3-array/src/pairs.js","webpack://mermaid/./node_modules/d3-array/src/permute.js","webpack://mermaid/./node_modules/d3-array/src/quantile.js","webpack://mermaid/./node_modules/d3-array/src/range.js","webpack://mermaid/./node_modules/d3-array/src/scan.js","webpack://mermaid/./node_modules/d3-array/src/shuffle.js","webpack://mermaid/./node_modules/d3-array/src/sum.js","webpack://mermaid/./node_modules/d3-array/src/threshold/freedmanDiaconis.js","webpack://mermaid/./node_modules/d3-array/src/threshold/scott.js","webpack://mermaid/./node_modules/d3-array/src/threshold/sturges.js","webpack://mermaid/./node_modules/d3-array/src/ticks.js","webpack://mermaid/./node_modules/d3-array/src/transpose.js","webpack://mermaid/./node_modules/d3-array/src/variance.js","webpack://mermaid/./node_modules/d3-array/src/zip.js","webpack://mermaid/./node_modules/d3-axis/src/array.js","webpack://mermaid/./node_modules/d3-axis/src/axis.js","webpack://mermaid/./node_modules/d3-axis/src/identity.js","webpack://mermaid/./node_modules/d3-axis/src/index.js","webpack://mermaid/./node_modules/d3-brush/src/brush.js","webpack://mermaid/./node_modules/d3-brush/src/constant.js","webpack://mermaid/./node_modules/d3-brush/src/event.js","webpack://mermaid/./node_modules/d3-brush/src/index.js","webpack://mermaid/./node_modules/d3-brush/src/noevent.js","webpack://mermaid/./node_modules/d3-chord/src/array.js","webpack://mermaid/./node_modules/d3-chord/src/chord.js","webpack://mermaid/./node_modules/d3-chord/src/constant.js","webpack://mermaid/./node_modules/d3-chord/src/index.js","webpack://mermaid/./node_modules/d3-chord/src/math.js","webpack://mermaid/./node_modules/d3-chord/src/ribbon.js","webpack://mermaid/./node_modules/d3-collection/src/entries.js","webpack://mermaid/./node_modules/d3-collection/src/index.js","webpack://mermaid/./node_modules/d3-collection/src/keys.js","webpack://mermaid/./node_modules/d3-collection/src/map.js","webpack://mermaid/./node_modules/d3-collection/src/nest.js","webpack://mermaid/./node_modules/d3-collection/src/set.js","webpack://mermaid/./node_modules/d3-collection/src/values.js","webpack://mermaid/./node_modules/d3-color/src/color.js","webpack://mermaid/./node_modules/d3-color/src/cubehelix.js","webpack://mermaid/./node_modules/d3-color/src/define.js","webpack://mermaid/./node_modules/d3-color/src/index.js","webpack://mermaid/./node_modules/d3-color/src/lab.js","webpack://mermaid/./node_modules/d3-color/src/math.js","webpack://mermaid/./node_modules/d3-contour/src/area.js","webpack://mermaid/./node_modules/d3-contour/src/array.js","webpack://mermaid/./node_modules/d3-contour/src/ascending.js","webpack://mermaid/./node_modules/d3-contour/src/blur.js","webpack://mermaid/./node_modules/d3-contour/src/constant.js","webpack://mermaid/./node_modules/d3-contour/src/contains.js","webpack://mermaid/./node_modules/d3-contour/src/contours.js","webpack://mermaid/./node_modules/d3-contour/src/density.js","webpack://mermaid/./node_modules/d3-contour/src/index.js","webpack://mermaid/./node_modules/d3-contour/src/noop.js","webpack://mermaid/./node_modules/d3-dispatch/src/dispatch.js","webpack://mermaid/./node_modules/d3-dispatch/src/index.js","webpack://mermaid/./node_modules/d3-drag/src/constant.js","webpack://mermaid/./node_modules/d3-drag/src/drag.js","webpack://mermaid/./node_modules/d3-drag/src/event.js","webpack://mermaid/./node_modules/d3-drag/src/index.js","webpack://mermaid/./node_modules/d3-drag/src/nodrag.js","webpack://mermaid/./node_modules/d3-drag/src/noevent.js","webpack://mermaid/./node_modules/d3-dsv/src/csv.js","webpack://mermaid/./node_modules/d3-dsv/src/dsv.js","webpack://mermaid/./node_modules/d3-dsv/src/index.js","webpack://mermaid/./node_modules/d3-dsv/src/tsv.js","webpack://mermaid/./node_modules/d3-ease/src/back.js","webpack://mermaid/./node_modules/d3-ease/src/bounce.js","webpack://mermaid/./node_modules/d3-ease/src/circle.js","webpack://mermaid/./node_modules/d3-ease/src/cubic.js","webpack://mermaid/./node_modules/d3-ease/src/elastic.js","webpack://mermaid/./node_modules/d3-ease/src/exp.js","webpack://mermaid/./node_modules/d3-ease/src/index.js","webpack://mermaid/./node_modules/d3-ease/src/linear.js","webpack://mermaid/./node_modules/d3-ease/src/poly.js","webpack://mermaid/./node_modules/d3-ease/src/quad.js","webpack://mermaid/./node_modules/d3-ease/src/sin.js","webpack://mermaid/./node_modules/d3-fetch/src/blob.js","webpack://mermaid/./node_modules/d3-fetch/src/buffer.js","webpack://mermaid/./node_modules/d3-fetch/src/dsv.js","webpack://mermaid/./node_modules/d3-fetch/src/image.js","webpack://mermaid/./node_modules/d3-fetch/src/index.js","webpack://mermaid/./node_modules/d3-fetch/src/json.js","webpack://mermaid/./node_modules/d3-fetch/src/text.js","webpack://mermaid/./node_modules/d3-fetch/src/xml.js","webpack://mermaid/./node_modules/d3-force/src/center.js","webpack://mermaid/./node_modules/d3-force/src/collide.js","webpack://mermaid/./node_modules/d3-force/src/constant.js","webpack://mermaid/./node_modules/d3-force/src/index.js","webpack://mermaid/./node_modules/d3-force/src/jiggle.js","webpack://mermaid/./node_modules/d3-force/src/link.js","webpack://mermaid/./node_modules/d3-force/src/manyBody.js","webpack://mermaid/./node_modules/d3-force/src/radial.js","webpack://mermaid/./node_modules/d3-force/src/simulation.js","webpack://mermaid/./node_modules/d3-force/src/x.js","webpack://mermaid/./node_modules/d3-force/src/y.js","webpack://mermaid/./node_modules/d3-format/src/defaultLocale.js","webpack://mermaid/./node_modules/d3-format/src/exponent.js","webpack://mermaid/./node_modules/d3-format/src/formatDecimal.js","webpack://mermaid/./node_modules/d3-format/src/formatGroup.js","webpack://mermaid/./node_modules/d3-format/src/formatNumerals.js","webpack://mermaid/./node_modules/d3-format/src/formatPrefixAuto.js","webpack://mermaid/./node_modules/d3-format/src/formatRounded.js","webpack://mermaid/./node_modules/d3-format/src/formatSpecifier.js","webpack://mermaid/./node_modules/d3-format/src/formatTrim.js","webpack://mermaid/./node_modules/d3-format/src/formatTypes.js","webpack://mermaid/./node_modules/d3-format/src/identity.js","webpack://mermaid/./node_modules/d3-format/src/index.js","webpack://mermaid/./node_modules/d3-format/src/locale.js","webpack://mermaid/./node_modules/d3-format/src/precisionFixed.js","webpack://mermaid/./node_modules/d3-format/src/precisionPrefix.js","webpack://mermaid/./node_modules/d3-format/src/precisionRound.js","webpack://mermaid/./node_modules/d3-geo/src/adder.js","webpack://mermaid/./node_modules/d3-geo/src/area.js","webpack://mermaid/./node_modules/d3-geo/src/bounds.js","webpack://mermaid/./node_modules/d3-geo/src/cartesian.js","webpack://mermaid/./node_modules/d3-geo/src/centroid.js","webpack://mermaid/./node_modules/d3-geo/src/circle.js","webpack://mermaid/./node_modules/d3-geo/src/clip/antimeridian.js","webpack://mermaid/./node_modules/d3-geo/src/clip/buffer.js","webpack://mermaid/./node_modules/d3-geo/src/clip/circle.js","webpack://mermaid/./node_modules/d3-geo/src/clip/extent.js","webpack://mermaid/./node_modules/d3-geo/src/clip/index.js","webpack://mermaid/./node_modules/d3-geo/src/clip/line.js","webpack://mermaid/./node_modules/d3-geo/src/clip/rectangle.js","webpack://mermaid/./node_modules/d3-geo/src/clip/rejoin.js","webpack://mermaid/./node_modules/d3-geo/src/compose.js","webpack://mermaid/./node_modules/d3-geo/src/constant.js","webpack://mermaid/./node_modules/d3-geo/src/contains.js","webpack://mermaid/./node_modules/d3-geo/src/distance.js","webpack://mermaid/./node_modules/d3-geo/src/graticule.js","webpack://mermaid/./node_modules/d3-geo/src/identity.js","webpack://mermaid/./node_modules/d3-geo/src/index.js","webpack://mermaid/./node_modules/d3-geo/src/interpolate.js","webpack://mermaid/./node_modules/d3-geo/src/length.js","webpack://mermaid/./node_modules/d3-geo/src/math.js","webpack://mermaid/./node_modules/d3-geo/src/noop.js","webpack://mermaid/./node_modules/d3-geo/src/path/area.js","webpack://mermaid/./node_modules/d3-geo/src/path/bounds.js","webpack://mermaid/./node_modules/d3-geo/src/path/centroid.js","webpack://mermaid/./node_modules/d3-geo/src/path/context.js","webpack://mermaid/./node_modules/d3-geo/src/path/index.js","webpack://mermaid/./node_modules/d3-geo/src/path/measure.js","webpack://mermaid/./node_modules/d3-geo/src/path/string.js","webpack://mermaid/./node_modules/d3-geo/src/pointEqual.js","webpack://mermaid/./node_modules/d3-geo/src/polygonContains.js","webpack://mermaid/./node_modules/d3-geo/src/projection/albers.js","webpack://mermaid/./node_modules/d3-geo/src/projection/albersUsa.js","webpack://mermaid/./node_modules/d3-geo/src/projection/azimuthal.js","webpack://mermaid/./node_modules/d3-geo/src/projection/azimuthalEqualArea.js","webpack://mermaid/./node_modules/d3-geo/src/projection/azimuthalEquidistant.js","webpack://mermaid/./node_modules/d3-geo/src/projection/conic.js","webpack://mermaid/./node_modules/d3-geo/src/projection/conicConformal.js","webpack://mermaid/./node_modules/d3-geo/src/projection/conicEqualArea.js","webpack://mermaid/./node_modules/d3-geo/src/projection/conicEquidistant.js","webpack://mermaid/./node_modules/d3-geo/src/projection/cylindricalEqualArea.js","webpack://mermaid/./node_modules/d3-geo/src/projection/equalEarth.js","webpack://mermaid/./node_modules/d3-geo/src/projection/equirectangular.js","webpack://mermaid/./node_modules/d3-geo/src/projection/fit.js","webpack://mermaid/./node_modules/d3-geo/src/projection/gnomonic.js","webpack://mermaid/./node_modules/d3-geo/src/projection/identity.js","webpack://mermaid/./node_modules/d3-geo/src/projection/index.js","webpack://mermaid/./node_modules/d3-geo/src/projection/mercator.js","webpack://mermaid/./node_modules/d3-geo/src/projection/naturalEarth1.js","webpack://mermaid/./node_modules/d3-geo/src/projection/orthographic.js","webpack://mermaid/./node_modules/d3-geo/src/projection/resample.js","webpack://mermaid/./node_modules/d3-geo/src/projection/stereographic.js","webpack://mermaid/./node_modules/d3-geo/src/projection/transverseMercator.js","webpack://mermaid/./node_modules/d3-geo/src/rotation.js","webpack://mermaid/./node_modules/d3-geo/src/stream.js","webpack://mermaid/./node_modules/d3-geo/src/transform.js","webpack://mermaid/./node_modules/d3-hierarchy/src/accessors.js","webpack://mermaid/./node_modules/d3-hierarchy/src/array.js","webpack://mermaid/./node_modules/d3-hierarchy/src/cluster.js","webpack://mermaid/./node_modules/d3-hierarchy/src/constant.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/count.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/each.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/index.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/links.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/path.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack://mermaid/./node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack://mermaid/./node_modules/d3-hierarchy/src/index.js","webpack://mermaid/./node_modules/d3-hierarchy/src/pack/enclose.js","webpack://mermaid/./node_modules/d3-hierarchy/src/pack/index.js","webpack://mermaid/./node_modules/d3-hierarchy/src/pack/siblings.js","webpack://mermaid/./node_modules/d3-hierarchy/src/partition.js","webpack://mermaid/./node_modules/d3-hierarchy/src/stratify.js","webpack://mermaid/./node_modules/d3-hierarchy/src/tree.js","webpack://mermaid/./node_modules/d3-hierarchy/src/treemap/binary.js","webpack://mermaid/./node_modules/d3-hierarchy/src/treemap/dice.js","webpack://mermaid/./node_modules/d3-hierarchy/src/treemap/index.js","webpack://mermaid/./node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack://mermaid/./node_modules/d3-hierarchy/src/treemap/round.js","webpack://mermaid/./node_modules/d3-hierarchy/src/treemap/slice.js","webpack://mermaid/./node_modules/d3-hierarchy/src/treemap/sliceDice.js","webpack://mermaid/./node_modules/d3-hierarchy/src/treemap/squarify.js","webpack://mermaid/./node_modules/d3-interpolate/src/array.js","webpack://mermaid/./node_modules/d3-interpolate/src/basis.js","webpack://mermaid/./node_modules/d3-interpolate/src/basisClosed.js","webpack://mermaid/./node_modules/d3-interpolate/src/color.js","webpack://mermaid/./node_modules/d3-interpolate/src/constant.js","webpack://mermaid/./node_modules/d3-interpolate/src/cubehelix.js","webpack://mermaid/./node_modules/d3-interpolate/src/date.js","webpack://mermaid/./node_modules/d3-interpolate/src/discrete.js","webpack://mermaid/./node_modules/d3-interpolate/src/hcl.js","webpack://mermaid/./node_modules/d3-interpolate/src/hsl.js","webpack://mermaid/./node_modules/d3-interpolate/src/hue.js","webpack://mermaid/./node_modules/d3-interpolate/src/index.js","webpack://mermaid/./node_modules/d3-interpolate/src/lab.js","webpack://mermaid/./node_modules/d3-interpolate/src/number.js","webpack://mermaid/./node_modules/d3-interpolate/src/object.js","webpack://mermaid/./node_modules/d3-interpolate/src/piecewise.js","webpack://mermaid/./node_modules/d3-interpolate/src/quantize.js","webpack://mermaid/./node_modules/d3-interpolate/src/rgb.js","webpack://mermaid/./node_modules/d3-interpolate/src/round.js","webpack://mermaid/./node_modules/d3-interpolate/src/string.js","webpack://mermaid/./node_modules/d3-interpolate/src/transform/decompose.js","webpack://mermaid/./node_modules/d3-interpolate/src/transform/index.js","webpack://mermaid/./node_modules/d3-interpolate/src/transform/parse.js","webpack://mermaid/./node_modules/d3-interpolate/src/value.js","webpack://mermaid/./node_modules/d3-interpolate/src/zoom.js","webpack://mermaid/./node_modules/d3-path/src/index.js","webpack://mermaid/./node_modules/d3-path/src/path.js","webpack://mermaid/./node_modules/d3-polygon/src/area.js","webpack://mermaid/./node_modules/d3-polygon/src/centroid.js","webpack://mermaid/./node_modules/d3-polygon/src/contains.js","webpack://mermaid/./node_modules/d3-polygon/src/cross.js","webpack://mermaid/./node_modules/d3-polygon/src/hull.js","webpack://mermaid/./node_modules/d3-polygon/src/index.js","webpack://mermaid/./node_modules/d3-polygon/src/length.js","webpack://mermaid/./node_modules/d3-quadtree/src/add.js","webpack://mermaid/./node_modules/d3-quadtree/src/cover.js","webpack://mermaid/./node_modules/d3-quadtree/src/data.js","webpack://mermaid/./node_modules/d3-quadtree/src/extent.js","webpack://mermaid/./node_modules/d3-quadtree/src/find.js","webpack://mermaid/./node_modules/d3-quadtree/src/index.js","webpack://mermaid/./node_modules/d3-quadtree/src/quad.js","webpack://mermaid/./node_modules/d3-quadtree/src/quadtree.js","webpack://mermaid/./node_modules/d3-quadtree/src/remove.js","webpack://mermaid/./node_modules/d3-quadtree/src/root.js","webpack://mermaid/./node_modules/d3-quadtree/src/size.js","webpack://mermaid/./node_modules/d3-quadtree/src/visit.js","webpack://mermaid/./node_modules/d3-quadtree/src/visitAfter.js","webpack://mermaid/./node_modules/d3-quadtree/src/x.js","webpack://mermaid/./node_modules/d3-quadtree/src/y.js","webpack://mermaid/./node_modules/d3-random/src/bates.js","webpack://mermaid/./node_modules/d3-random/src/defaultSource.js","webpack://mermaid/./node_modules/d3-random/src/exponential.js","webpack://mermaid/./node_modules/d3-random/src/index.js","webpack://mermaid/./node_modules/d3-random/src/irwinHall.js","webpack://mermaid/./node_modules/d3-random/src/logNormal.js","webpack://mermaid/./node_modules/d3-random/src/normal.js","webpack://mermaid/./node_modules/d3-random/src/uniform.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/colors.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/index.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/ramp.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://mermaid/./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://mermaid/./node_modules/d3-scale/src/array.js","webpack://mermaid/./node_modules/d3-scale/src/band.js","webpack://mermaid/./node_modules/d3-scale/src/constant.js","webpack://mermaid/./node_modules/d3-scale/src/continuous.js","webpack://mermaid/./node_modules/d3-scale/src/diverging.js","webpack://mermaid/./node_modules/d3-scale/src/identity.js","webpack://mermaid/./node_modules/d3-scale/src/index.js","webpack://mermaid/./node_modules/d3-scale/src/linear.js","webpack://mermaid/./node_modules/d3-scale/src/log.js","webpack://mermaid/./node_modules/d3-scale/src/nice.js","webpack://mermaid/./node_modules/d3-scale/src/number.js","webpack://mermaid/./node_modules/d3-scale/src/ordinal.js","webpack://mermaid/./node_modules/d3-scale/src/pow.js","webpack://mermaid/./node_modules/d3-scale/src/quantile.js","webpack://mermaid/./node_modules/d3-scale/src/quantize.js","webpack://mermaid/./node_modules/d3-scale/src/sequential.js","webpack://mermaid/./node_modules/d3-scale/src/threshold.js","webpack://mermaid/./node_modules/d3-scale/src/tickFormat.js","webpack://mermaid/./node_modules/d3-scale/src/time.js","webpack://mermaid/./node_modules/d3-scale/src/utcTime.js","webpack://mermaid/./node_modules/d3-selection/src/constant.js","webpack://mermaid/./node_modules/d3-selection/src/create.js","webpack://mermaid/./node_modules/d3-selection/src/creator.js","webpack://mermaid/./node_modules/d3-selection/src/index.js","webpack://mermaid/./node_modules/d3-selection/src/local.js","webpack://mermaid/./node_modules/d3-selection/src/matcher.js","webpack://mermaid/./node_modules/d3-selection/src/mouse.js","webpack://mermaid/./node_modules/d3-selection/src/namespace.js","webpack://mermaid/./node_modules/d3-selection/src/namespaces.js","webpack://mermaid/./node_modules/d3-selection/src/point.js","webpack://mermaid/./node_modules/d3-selection/src/select.js","webpack://mermaid/./node_modules/d3-selection/src/selectAll.js","webpack://mermaid/./node_modules/d3-selection/src/selection/append.js","webpack://mermaid/./node_modules/d3-selection/src/selection/attr.js","webpack://mermaid/./node_modules/d3-selection/src/selection/call.js","webpack://mermaid/./node_modules/d3-selection/src/selection/classed.js","webpack://mermaid/./node_modules/d3-selection/src/selection/clone.js","webpack://mermaid/./node_modules/d3-selection/src/selection/data.js","webpack://mermaid/./node_modules/d3-selection/src/selection/datum.js","webpack://mermaid/./node_modules/d3-selection/src/selection/dispatch.js","webpack://mermaid/./node_modules/d3-selection/src/selection/each.js","webpack://mermaid/./node_modules/d3-selection/src/selection/empty.js","webpack://mermaid/./node_modules/d3-selection/src/selection/enter.js","webpack://mermaid/./node_modules/d3-selection/src/selection/exit.js","webpack://mermaid/./node_modules/d3-selection/src/selection/filter.js","webpack://mermaid/./node_modules/d3-selection/src/selection/html.js","webpack://mermaid/./node_modules/d3-selection/src/selection/index.js","webpack://mermaid/./node_modules/d3-selection/src/selection/insert.js","webpack://mermaid/./node_modules/d3-selection/src/selection/lower.js","webpack://mermaid/./node_modules/d3-selection/src/selection/merge.js","webpack://mermaid/./node_modules/d3-selection/src/selection/node.js","webpack://mermaid/./node_modules/d3-selection/src/selection/nodes.js","webpack://mermaid/./node_modules/d3-selection/src/selection/on.js","webpack://mermaid/./node_modules/d3-selection/src/selection/order.js","webpack://mermaid/./node_modules/d3-selection/src/selection/property.js","webpack://mermaid/./node_modules/d3-selection/src/selection/raise.js","webpack://mermaid/./node_modules/d3-selection/src/selection/remove.js","webpack://mermaid/./node_modules/d3-selection/src/selection/select.js","webpack://mermaid/./node_modules/d3-selection/src/selection/selectAll.js","webpack://mermaid/./node_modules/d3-selection/src/selection/size.js","webpack://mermaid/./node_modules/d3-selection/src/selection/sort.js","webpack://mermaid/./node_modules/d3-selection/src/selection/sparse.js","webpack://mermaid/./node_modules/d3-selection/src/selection/style.js","webpack://mermaid/./node_modules/d3-selection/src/selection/text.js","webpack://mermaid/./node_modules/d3-selection/src/selector.js","webpack://mermaid/./node_modules/d3-selection/src/selectorAll.js","webpack://mermaid/./node_modules/d3-selection/src/sourceEvent.js","webpack://mermaid/./node_modules/d3-selection/src/touch.js","webpack://mermaid/./node_modules/d3-selection/src/touches.js","webpack://mermaid/./node_modules/d3-selection/src/window.js","webpack://mermaid/./node_modules/d3-shape/src/arc.js","webpack://mermaid/./node_modules/d3-shape/src/area.js","webpack://mermaid/./node_modules/d3-shape/src/areaRadial.js","webpack://mermaid/./node_modules/d3-shape/src/array.js","webpack://mermaid/./node_modules/d3-shape/src/constant.js","webpack://mermaid/./node_modules/d3-shape/src/curve/basis.js","webpack://mermaid/./node_modules/d3-shape/src/curve/basisClosed.js","webpack://mermaid/./node_modules/d3-shape/src/curve/basisOpen.js","webpack://mermaid/./node_modules/d3-shape/src/curve/bundle.js","webpack://mermaid/./node_modules/d3-shape/src/curve/cardinal.js","webpack://mermaid/./node_modules/d3-shape/src/curve/cardinalClosed.js","webpack://mermaid/./node_modules/d3-shape/src/curve/cardinalOpen.js","webpack://mermaid/./node_modules/d3-shape/src/curve/catmullRom.js","webpack://mermaid/./node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack://mermaid/./node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack://mermaid/./node_modules/d3-shape/src/curve/linear.js","webpack://mermaid/./node_modules/d3-shape/src/curve/linearClosed.js","webpack://mermaid/./node_modules/d3-shape/src/curve/monotone.js","webpack://mermaid/./node_modules/d3-shape/src/curve/natural.js","webpack://mermaid/./node_modules/d3-shape/src/curve/radial.js","webpack://mermaid/./node_modules/d3-shape/src/curve/step.js","webpack://mermaid/./node_modules/d3-shape/src/descending.js","webpack://mermaid/./node_modules/d3-shape/src/identity.js","webpack://mermaid/./node_modules/d3-shape/src/index.js","webpack://mermaid/./node_modules/d3-shape/src/line.js","webpack://mermaid/./node_modules/d3-shape/src/lineRadial.js","webpack://mermaid/./node_modules/d3-shape/src/link/index.js","webpack://mermaid/./node_modules/d3-shape/src/math.js","webpack://mermaid/./node_modules/d3-shape/src/noop.js","webpack://mermaid/./node_modules/d3-shape/src/offset/diverging.js","webpack://mermaid/./node_modules/d3-shape/src/offset/expand.js","webpack://mermaid/./node_modules/d3-shape/src/offset/none.js","webpack://mermaid/./node_modules/d3-shape/src/offset/silhouette.js","webpack://mermaid/./node_modules/d3-shape/src/offset/wiggle.js","webpack://mermaid/./node_modules/d3-shape/src/order/ascending.js","webpack://mermaid/./node_modules/d3-shape/src/order/descending.js","webpack://mermaid/./node_modules/d3-shape/src/order/insideOut.js","webpack://mermaid/./node_modules/d3-shape/src/order/none.js","webpack://mermaid/./node_modules/d3-shape/src/order/reverse.js","webpack://mermaid/./node_modules/d3-shape/src/pie.js","webpack://mermaid/./node_modules/d3-shape/src/point.js","webpack://mermaid/./node_modules/d3-shape/src/pointRadial.js","webpack://mermaid/./node_modules/d3-shape/src/stack.js","webpack://mermaid/./node_modules/d3-shape/src/symbol.js","webpack://mermaid/./node_modules/d3-shape/src/symbol/circle.js","webpack://mermaid/./node_modules/d3-shape/src/symbol/cross.js","webpack://mermaid/./node_modules/d3-shape/src/symbol/diamond.js","webpack://mermaid/./node_modules/d3-shape/src/symbol/square.js","webpack://mermaid/./node_modules/d3-shape/src/symbol/star.js","webpack://mermaid/./node_modules/d3-shape/src/symbol/triangle.js","webpack://mermaid/./node_modules/d3-shape/src/symbol/wye.js","webpack://mermaid/./node_modules/d3-time-format/src/defaultLocale.js","webpack://mermaid/./node_modules/d3-time-format/src/index.js","webpack://mermaid/./node_modules/d3-time-format/src/isoFormat.js","webpack://mermaid/./node_modules/d3-time-format/src/isoParse.js","webpack://mermaid/./node_modules/d3-time-format/src/locale.js","webpack://mermaid/./node_modules/d3-time/src/day.js","webpack://mermaid/./node_modules/d3-time/src/duration.js","webpack://mermaid/./node_modules/d3-time/src/hour.js","webpack://mermaid/./node_modules/d3-time/src/index.js","webpack://mermaid/./node_modules/d3-time/src/interval.js","webpack://mermaid/./node_modules/d3-time/src/millisecond.js","webpack://mermaid/./node_modules/d3-time/src/minute.js","webpack://mermaid/./node_modules/d3-time/src/month.js","webpack://mermaid/./node_modules/d3-time/src/second.js","webpack://mermaid/./node_modules/d3-time/src/utcDay.js","webpack://mermaid/./node_modules/d3-time/src/utcHour.js","webpack://mermaid/./node_modules/d3-time/src/utcMinute.js","webpack://mermaid/./node_modules/d3-time/src/utcMonth.js","webpack://mermaid/./node_modules/d3-time/src/utcWeek.js","webpack://mermaid/./node_modules/d3-time/src/utcYear.js","webpack://mermaid/./node_modules/d3-time/src/week.js","webpack://mermaid/./node_modules/d3-time/src/year.js","webpack://mermaid/./node_modules/d3-timer/src/index.js","webpack://mermaid/./node_modules/d3-timer/src/interval.js","webpack://mermaid/./node_modules/d3-timer/src/timeout.js","webpack://mermaid/./node_modules/d3-timer/src/timer.js","webpack://mermaid/./node_modules/d3-transition/src/active.js","webpack://mermaid/./node_modules/d3-transition/src/index.js","webpack://mermaid/./node_modules/d3-transition/src/interrupt.js","webpack://mermaid/./node_modules/d3-transition/src/selection/index.js","webpack://mermaid/./node_modules/d3-transition/src/selection/interrupt.js","webpack://mermaid/./node_modules/d3-transition/src/selection/transition.js","webpack://mermaid/./node_modules/d3-transition/src/transition/attr.js","webpack://mermaid/./node_modules/d3-transition/src/transition/attrTween.js","webpack://mermaid/./node_modules/d3-transition/src/transition/delay.js","webpack://mermaid/./node_modules/d3-transition/src/transition/duration.js","webpack://mermaid/./node_modules/d3-transition/src/transition/ease.js","webpack://mermaid/./node_modules/d3-transition/src/transition/filter.js","webpack://mermaid/./node_modules/d3-transition/src/transition/index.js","webpack://mermaid/./node_modules/d3-transition/src/transition/interpolate.js","webpack://mermaid/./node_modules/d3-transition/src/transition/merge.js","webpack://mermaid/./node_modules/d3-transition/src/transition/on.js","webpack://mermaid/./node_modules/d3-transition/src/transition/remove.js","webpack://mermaid/./node_modules/d3-transition/src/transition/schedule.js","webpack://mermaid/./node_modules/d3-transition/src/transition/select.js","webpack://mermaid/./node_modules/d3-transition/src/transition/selectAll.js","webpack://mermaid/./node_modules/d3-transition/src/transition/selection.js","webpack://mermaid/./node_modules/d3-transition/src/transition/style.js","webpack://mermaid/./node_modules/d3-transition/src/transition/styleTween.js","webpack://mermaid/./node_modules/d3-transition/src/transition/text.js","webpack://mermaid/./node_modules/d3-transition/src/transition/transition.js","webpack://mermaid/./node_modules/d3-transition/src/transition/tween.js","webpack://mermaid/./node_modules/d3-voronoi/src/Beach.js","webpack://mermaid/./node_modules/d3-voronoi/src/Cell.js","webpack://mermaid/./node_modules/d3-voronoi/src/Circle.js","webpack://mermaid/./node_modules/d3-voronoi/src/Diagram.js","webpack://mermaid/./node_modules/d3-voronoi/src/Edge.js","webpack://mermaid/./node_modules/d3-voronoi/src/RedBlackTree.js","webpack://mermaid/./node_modules/d3-voronoi/src/constant.js","webpack://mermaid/./node_modules/d3-voronoi/src/index.js","webpack://mermaid/./node_modules/d3-voronoi/src/point.js","webpack://mermaid/./node_modules/d3-voronoi/src/voronoi.js","webpack://mermaid/./node_modules/d3-zoom/src/constant.js","webpack://mermaid/./node_modules/d3-zoom/src/event.js","webpack://mermaid/./node_modules/d3-zoom/src/index.js","webpack://mermaid/./node_modules/d3-zoom/src/noevent.js","webpack://mermaid/./node_modules/d3-zoom/src/transform.js","webpack://mermaid/./node_modules/d3-zoom/src/zoom.js","webpack://mermaid/./node_modules/d3/dist/package.js","webpack://mermaid/./node_modules/d3/index.js","webpack://mermaid/./node_modules/dagre-d3-renderer/dist/dagre-d3.core.js","webpack://mermaid/./node_modules/dagre-d3-renderer/lib/label/add-html-label.js","webpack://mermaid/./node_modules/dagre-d3-renderer/lib/util.js","webpack://mermaid/./node_modules/dagre-d3-renderer/node_modules/lodash/lodash.js","webpack://mermaid/./node_modules/dagre-layout/dist/dagre-layout.core.js","webpack://mermaid/./node_modules/dagre-layout/node_modules/lodash/lodash.js","webpack://mermaid/./node_modules/escaper/dist/escaper.js","webpack://mermaid/./node_modules/graphlibrary/index.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/components.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/dfs.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/dijkstra-all.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/dijkstra.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/find-cycles.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/floyd-warshall.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/index.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/is-acyclic.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/postorder.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/preorder.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/prim.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/tarjan.js","webpack://mermaid/./node_modules/graphlibrary/lib/alg/topsort.js","webpack://mermaid/./node_modules/graphlibrary/lib/data/priority-queue.js","webpack://mermaid/./node_modules/graphlibrary/lib/graph.js","webpack://mermaid/./node_modules/graphlibrary/lib/json.js","webpack://mermaid/./node_modules/graphlibrary/lib/lodash.js","webpack://mermaid/./node_modules/graphlibrary/node_modules/lodash/lodash.js","webpack://mermaid/./node_modules/he/he.js","webpack://mermaid/./node_modules/is-regexp/index.js","webpack://mermaid/./node_modules/lodash/lodash.js","webpack://mermaid/./node_modules/moment-mini/locale sync ^\\.\\/.*$","webpack://mermaid/./node_modules/moment-mini/moment.min.js","webpack://mermaid/./node_modules/path-browserify/index.js","webpack://mermaid/./node_modules/process/browser.js","webpack://mermaid/./node_modules/scope-css/index.js","webpack://mermaid/./node_modules/slugify/index.js","webpack://mermaid/./node_modules/strip-css-comments/index.js","webpack://mermaid/(webpack)/buildin/global.js","webpack://mermaid/(webpack)/buildin/module.js","webpack://mermaid/./src/diagrams/class/classDb.js","webpack://mermaid/./src/diagrams/class/classRenderer.js","webpack://mermaid/./src/diagrams/class/parser/classDiagram.js","webpack://mermaid/./src/diagrams/flowchart/flowDb.js","webpack://mermaid/./src/diagrams/flowchart/flowRenderer.js","webpack://mermaid/./src/diagrams/flowchart/parser/flow.js","webpack://mermaid/./src/diagrams/gantt/ganttDb.js","webpack://mermaid/./src/diagrams/gantt/ganttRenderer.js","webpack://mermaid/./src/diagrams/gantt/parser/gantt.js","webpack://mermaid/./src/diagrams/git/gitGraphAst.js","webpack://mermaid/./src/diagrams/git/gitGraphRenderer.js","webpack://mermaid/./src/diagrams/git/parser/gitGraph.js","webpack://mermaid/./src/diagrams/info/infoDb.js","webpack://mermaid/./src/diagrams/info/infoRenderer.js","webpack://mermaid/./src/diagrams/info/parser/info.js","webpack://mermaid/./src/diagrams/sequence/parser/sequenceDiagram.js","webpack://mermaid/./src/diagrams/sequence/sequenceDb.js","webpack://mermaid/./src/diagrams/sequence/sequenceRenderer.js","webpack://mermaid/./src/diagrams/sequence/svgDraw.js","webpack://mermaid/./src/logger.js","webpack://mermaid/./src/mermaid.js","webpack://mermaid/./src/mermaidAPI.js","webpack://mermaid/./src/themes sync ^\\.\\/.*\\/index\\.scss$","webpack://mermaid/./src/themes/dark/index.scss?3bd3","webpack://mermaid/./src/themes/default/index.scss?54ca","webpack://mermaid/./src/themes/forest/index.scss?3c73","webpack://mermaid/./src/themes/neutral/index.scss?dee9","webpack://mermaid/./src/utils.js"],"names":["addHtmlLabel","root","node","fo","append","attr","div","label","insert","html","util","applyStyle","labelStyle","style","client","getBoundingClientRect","width","height","isSubgraph","g","v","children","length","edgeToId","e","escapeId","w","name","ID_DELIM","str","String","replace","dom","styleFn","applyClass","classFn","otherClasses","applyTransition","selection","graph","_","isPlainObject","transition","isFunction","relations","classes","addClass","id","methods","members","clear","getClass","getClasses","getRelations","addRelation","relation","logger","debug","JSON","stringify","id1","id2","push","addMember","className","member","theClass","substr","addMembers","MembersArr","Array","isArray","forEach","cleanupLabel","substring","trim","lineType","LINE","DOTTED_LINE","relationType","AGGREGATION","EXTENSION","COMPOSITION","DEPENDENCY","parser","yy","classDb","idCache","classCnt","conf","dividerMargin","padding","textHeight","getGraphId","keys","Object","i","undefined","insertMarkers","elem","edgeCount","total","drawEdge","path","getRelationType","type","points","filter","p","Number","isNaN","y","lineData","lineFunction","d3","x","d","curve","svgPath","url","arrowMarkerAbsolute","window","location","protocol","host","pathname","search","type1","type2","l","p1","Math","floor","p2","ceil","title","text","bounds","getBBox","drawClass","classDef","info","addTspan","textEl","txt","isFirst","tSpan","classInfo","titleHeight","membersLine","membersBox","methodsLine","method","classBox","setConf","cnf","key","draw","parse","diagram","graphlib","Graph","multigraph","setGraph","isMultiGraph","setDefaultEdgeLabel","setNode","setEdge","dagre","layout","nodes","edges","edge","o","k","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","trace","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","console","warn","relationTitle1","relationTitle2","table","defaultActions","parseError","hash","recoverable","error","Error","input","self","stack","tstack","vstack","lstack","recovering","TERROR","EOF","args","slice","call","arguments","lexer","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","ranges","options","getPrototypeOf","popStack","n","lex","token","pop","symbol","preErrorSymbol","state","action","a","r","yyval","len","newState","expected","errStr","showPosition","join","match","line","loc","first_line","last_line","first_column","last_column","range","apply","concat","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","lines","unput","split","oldLines","more","reject","backtrack_lexer","less","pastInput","past","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","YYSTATE","Parser","exports","main","commonjsMain","log","process","exit","source","require","readFileSync","normalize","module","argv","vertices","subGraphs","subGraphLookup","tooltips","subCount","direction","funs","addVertex","styles","s","addLink","start","end","linktext","stroke","updateLinkInterpolate","positions","interp","pos","defaultInterpolate","interpolate","updateLink","defaultStyle","utils","isSubstringInArray","setDirection","dir","setClass","ids","setTooltip","tooltip","setClickFun","functionName","element","select","on","setLink","linkStr","link","getTooltip","setClickEvent","bindFunctions","fun","getDirection","getVertices","getEdges","setupToolTips","tooltipElem","_groups","svg","selectAll","el","rect","duration","left","right","top","document","body","scrollTop","classed","addSubGraph","list","uniq","prims","objs","item","indexOf","nodeList","subGraph","getPosForId","secCount","posCrossRef","indexNodes2","result","count","posCount","childPos","res","getDepthFirstPos","indexNodes","getSubGraphs","addVertices","vert","svgId","styleFromStyleArr","styleStr","arr","vertex","classStr","vertexText","vertexNode","htmlLabels","parentNode","removeChild","svgLabel","createElementNS","rows","j","tspan","setAttributeNS","setAttribute","textContent","appendChild","radious","_shape","labelType","shape","rx","ry","addEdges","cnt","toString","edgeData","arrowhead","interpolateToCurve","arrowheadStyle","labelpos","flowDb","flow","err","compound","rankdir","marginx","marginy","subG","setParent","Render","dagreD3","render","shapes","question","parent","bbox","h","shapeSvg","map","intersect","point","polygon","rect_left_inv_arrow","rect_right_inv_arrow","arrows","none","normal","marker","maxX","minX","maxY","minY","clusterRects","querySelectorAll","clusterEl","xPos","baseVal","value","yPos","cluster","te","labels","dim","insertBefore","firstChild","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","$V71","$V81","$V91","$Va1","$Vb1","$Vc1","$Vd1","$Ve1","dateFormat","axisFormat","excludes","sections","tasks","currentSection","tags","taskCnt","lastTask","lastTaskID","rawTasks","setAxisFormat","getAxisFormat","setDateFormat","setExcludes","toLowerCase","setTitle","getTitle","addSection","getTasks","allItemsPricessed","compileTasks","maxDepth","iterationCount","isInvalidDate","date","isoWeekday","format","checkTaskDates","task","manualEndTime","startTime","moment","add","endTime","renderEndTime","fixTaskDates","toDate","invalid","getStartDate","prevTime","re","afterStatement","exec","findTaskById","dt","Date","setHours","mDate","isValid","getEndDate","durationStatement","parseId","idStr","compileData","prevTask","dataStr","ds","data","getTaskTags","endTimeData","parseData","prevTaskId","startData","taskDb","addTask","descr","rawTask","section","processed","raw","taskInfo","active","crit","milestone","addTaskOrg","newTask","description","compileTask","allProcessed","pushFun","open","functionArgs","argList","charAt","callbackFunction","matchFound","t","pattern","regex","RegExp","shift","ganttDb","titleTopMargin","barHeight","barGap","topPadding","rightPadding","leftPadding","gridLineStartPadding","fontSize","fontFamily","getElementById","parentElement","offsetWidth","useWidth","taskArray","timeScale","domain","rangeRound","categories","catsUnfiltered","checkUnique","makeGant","pageWidth","pageHeight","gap","colorScale","makeGrid","drawRects","vertLabels","drawToday","theArray","theGap","theTopPad","theSidePad","theBarHeight","theColorScale","enter","numberSectionStyles","rectangles","secNum","taskClass","startX","endX","textWidth","taskType","xAxis","tickSize","tickFormat","numOccurances","prevGap","getCount","todayG","today","getCounts","obj","word","commits","head","branches","curBranch","seq","getRandomInt","min","max","random","getId","pool","isfastforwardable","currentCommit","otherCommit","isReachableFrom","currentSeq","otherSeq","setOptions","rawOptString","message","getOptions","commit","msg","branch","merge","otherBranch","checkout","reset","commitRef","ref","parentCount","parseInt","upsert","newval","splice","prettyPrintCommitHistory","commitArr","maxBy","newCommit","nextCommit","uniqBy","prettyPrint","getCommitsArray","getBranchesAsObjArray","branchArr","getBranches","getCommits","orderBy","getCurrentBranch","getHead","allCommitsDict","branchNum","config","nodeSpacing","nodeFillColor","nodeStrokeWidth","nodeStrokeColor","lineStrokeWidth","branchOffset","lineColor","leftMargin","branchColors","nodeRadius","nodeLabel","apiConfig","svgCreateDefs","svgDrawLine","colorIdx","color","lineGen","round","getElementCoords","coords","ctm","getCTM","xn","yn","f","svgDrawLineForCommits","fromId","toId","fromBbox","toBbox","lineStart","lineEnd","cloneNode","selector","renderCommitHistory","commitid","numCommits","size","branchName","renderLines","branchColor","lineDrawn","ver","gitGraphParser","db","assign","setMessage","getMessage","setInfo","inf","getInfo","infoParser","signalType","LINETYPE","ACTIVE_START","actor","ACTIVE_END","unshift","loopText","LOOP_START","LOOP_END","optText","OPT_START","OPT_END","altText","ALT_START","ALT_END","parText","PAR_START","PAR_END","PAR_AND","ALT_ELSE","placement","PLACEMENT","OVER","LEFTOF","RIGHTOF","from","to","SOLID_OPEN","DOTTED_OPEN","SOLID","DOTTED","SOLID_CROSS","DOTTED_CROSS","actors","messages","notes","addActor","old","addMessage","idFrom","idTo","answer","addSignal","messageType","getMessages","getActors","getActor","getActorKeys","NOTE","ARROWTYPE","FILLED","OPEN","addNote","note","titleText","param","sequenceDb","diagramMarginX","diagramMarginY","actorMargin","actorFontSize","actorFontFamily","boxMargin","boxTextMargin","noteMargin","messageMargin","mirrorActors","bottomMarginAdj","activationWidth","textPlacement","startx","stopx","starty","stopy","verticalPos","sequenceItems","activations","init","updateVal","val","updateBounds","_self","updateFn","updateItemBounds","_startx","_stopx","_starty","_stopy","newActivation","actorRect","stackedSize","actorActivations","anchored","svgDraw","anchorElement","endActivation","lastActorActivationIdx","activation","lastIndexOf","newLoop","endLoop","loop","addSectionToLoop","sectionTitles","getVerticalPos","bumpVerticalPos","bump","getBounds","_drawLongText","textObj","getTextObj","textMargin","dy","class","textElem","drawText","drawNote","forceWidth","getNoteRect","rectElem","drawRect","drawMessage","txtCenter","rightAngles","dx","drawActors","actorKeys","drawActor","actorFlowVerticaBounds","reduce","acc","insertArrowHead","insertArrowCrossHead","activeEnd","activationData","drawActivation","loopData","drawLoop","fromBounds","toBounds","fromIdx","toIdx","allBounds","box","actorLines","useMaxWidth","extraVertForTitle","rectData","fill","textData","nText","anchor","span","drawLabel","txtObject","genPoints","cut","labelMargin","actorCnt","center","_drawTextCandidateFunc","labelText","drawLoopLine","idx","defs","byText","content","textAttrs","_setTextAttrs","byTspan","byFo","toText","fromTextAttrsDict","LEVELS","fatal","setLogLevel","level","bind","time","mermaidAPI","getConfig","mermaid","sequenceConfig","callback","Node","startOnLoad","initialize","ganttConfig","gantt","getAttribute","now","innerHTML","he","decode","svgCode","contentLoaded","addEventListener","themes","themeName","theme","themeCSS","logLevel","flowchart","sequence","git","graphType","detectType","gitGraphAst","flowParser","sequenceParser","ganttParser","classParser","infoDb","encodeEntities","innerTxt","isInt","test","decodeEntities","cb","container","querySelector","flowRenderer","style1","createElement","scope","style2","cs","getComputedStyle","font","gitGraphRenderer","sequenceDiagram","sequenceRenderer","ganttRenderer","classRenderer","infoRenderer","pkg","version","remove","lvl1Keys","lvl2Keys","defaultCurve","curveName","toUpperCase"],"mappings":"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AA;AAA8B;;AAEf;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,uDAAM;AAC/B;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,uDAAM;AAC/B;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACxBD;AAAA;AAAA;AAAA;AAAoC;AACN;AACI;;AAEnB;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,uDAAM;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,uDAAM;AAC/B;AACA;AACA;AACA;;AAEA,SAAS,yDAAQ,cAAc,kDAAS;AACxC,CAAC;;;;;;;;;;;;;AC3BD;AAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACpBD;AAAe;AACf;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACjCD;AAAe;AACf;AACA,CAAC;;;;;;;;;;;;;ACFD;AAAA;AAAe;AACf;AACA;AACA;AACA;AACA,CAAC;;AAEM;AACP;AACA;;;;;;;;;;;;;ACTA;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAA8B;;AAEf;AACf,iCAAiC,+CAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACbD;AAAe;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACZD;AAAA;AAAoC;;AAErB;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kDAAS;;AAE1C;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACnBD;AAAe;AACf;AACA;AACA;;AAE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CA;AACA,yBAAyB,gDAAgD,EAAE;AAC3E,wBAAwB,mCAAmC;AAC3D;;AAEA;AACA;AACA;AACA,uBAAuB,WAAW,EAAE;AACpC,wBAAwB,WAAW;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA,UAAU,kDAAK;AACf;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEe;AACf;AACA,CAAC;;AAED;AACA;AACA;AACA,kBAAkB,4DAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,2DAAM;AAChB;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,eAAe,EAAE;;AAEvD;;AAEA;AACA,oCAAoC,mCAAmC,EAAE;AACzE,qCAAqC,wBAAwB,EAAE;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,gDAAgD,EAAE;AAC3F,uDAAuD,gCAAgC,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kEAAW;;AAE/B;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY,+DAAS;AACrB;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA,gBAAgB,2DAAM;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,gHAAgH,EAAE;AACpJ,kCAAkC,gGAAgG,EAAE;AACpI,sCAAsC,uGAAuG,EAAE;AAC/I,uCAAuC,uGAAuG,EAAE;AAChJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,MAAM,gEAAW,KAAK,8CAAU;AAChC;AACA;;AAEA;AACA,QAAQ,kDAAK,WAAW,KAAK,kDAAK,yBAAyB,kDAAK,wBAAwB,wDAAO,GAAG;AAClG;AACA;;AAEA;AACA,eAAe,kDAAK;AACpB,gBAAgB,kDAAK,mEAAmE,kDAAK;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kDAAK;AAC1C;AACA;AACA,iBAAiB,0DAAK;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,2DAAM;AACtB;;AAEA;AACA;;AAEA,QAAQ,kDAAK;AACb;AACA;AACA;AACA,KAAK;AACL,iBAAiB,2DAAM,CAAC,kDAAK;AAC7B;AACA;AACA;AACA;;AAEA,MAAM,2DAAW,CAAC,kDAAK;AACvB;;AAEA,IAAI,8DAAa;AACjB,IAAI,+DAAS;AACb;AACA;;AAEA;AACA,mBAAmB,0DAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wDAAO;AACb;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,uDAAuD;AACvD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,8DAAa;AACnB,UAAU,kDAAK;AACf,YAAY,kDAAK;AACjB;AACA,6CAA6C,oBAAoB,EAAE,OAAO;AAC1E;AACA,OAAO;AACP,QAAQ,0DAAU,CAAC,kDAAK;AACxB;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA,cAAc,kDAAK;AACnB,kBAAkB;AAClB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wDAAO;AACb;;AAEA;AACA,cAAc,kDAAK;AACnB,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,mCAAmC;AACnC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,gBAAgB,kDAAK;AACrB;AACA;AACA;AACA,aAAa;AACb,qCAAqC;AACrC,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wDAAO;AACb;AACA;;AAEA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,yDAAQ;AAC9E;;AAEA;AACA,sEAAsE,yDAAQ;AAC9E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;AC1hBA;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKiB;;;;;;;;;;;;;ACLjB;AAAA;AAAA;AAAmC;;AAE5B;AACP,EAAE,kDAAK;AACP;;AAEe;AACf,EAAE,kDAAK;AACP,EAAE,kDAAK;AACP,CAAC;;;;;;;;;;;;;ACTD;AAAA;AAAO;;;;;;;;;;;;;ACAP;AAAA;AAAA;AAA+B;AACC;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,sDAAK;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB,oBAAoB;AACpB;AACA;AACA;AACA,yBAAyB,sDAAK;AAC9B;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,QAAQ,iDAAG,IAAI,yCAAG;AAClB,wBAAwB,yCAAG;;AAE3B;AACA;AACA,kBAAkB;AAClB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX,gBAAgB;AAChB;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB,+BAA+B;AAChD;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0CAA0C,iDAAG;AAC7C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACxHD;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AACE;;;;;;;;;;;;;ACD3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACLP;AAAA;AAAA;AAAA;AAAA;AAA8B;AACI;AACM;AACX;;AAE7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,4CAAK;AACpB;AACA;AACA;AACA,6CAA6C,4CAAM;AACnD,2CAA2C,4CAAM;AACjD,mBAAmB,iDAAG;AACtB,mBAAmB,iDAAG;AACtB;AACA,6CAA6C,4CAAM;AACnD,2CAA2C,4CAAM;;AAEjD,qCAAqC,oDAAI;;AAEzC;AACA;AACA,qCAAqC;AACrC,0CAA0C,iDAAG,YAAY,iDAAG;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sEAAsE,yDAAQ;AAC9E;;AAEA;AACA,0EAA0E,yDAAQ;AAClF;;AAEA;AACA,wEAAwE,yDAAQ;AAChF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACtFD;AAAe;AACf;AACA,qCAAqC,0BAA0B;AAC/D;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuC;AACF;AACA;AACE;AACI;AACE;;;;;;;;;;;;;ACL7C;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,yEAAyE,8CAA8C;AACvH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,+DAA+D,qBAAqB,EAAE;;AAEtF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEe,kEAAG,EAAC;;;;;;;;;;;;;AC1EnB;AAAA;AAAwB;;AAET;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAG;AACzB;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA8C,aAAa,kCAAkC,EAAE,EAAE;AACjG,wDAAwD,8BAA8B,EAAE;AACxF;;AAEA;AACA,6BAA6B,iDAAiD,EAAE;AAChF,0BAA0B,2CAA2C,EAAE;AACvE,8BAA8B,uDAAuD,EAAE;AACvF,sBAAsB,cAAc,aAAa,EAAE;AACnD,+BAA+B,mCAAmC,aAAa,EAAE;AACjF,iCAAiC,oBAAoB,aAAa,EAAE;AACpE,yBAAyB,YAAY,aAAa;AAClD;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS,oDAAG;AACZ;;AAEA;AACA;AACA;;;;;;;;;;;;;ACxEA;AAAA;AAA6C;;AAE7C;;AAEA,YAAY,4CAAG;;AAEf;AACA;AACA;AACA;AACA;AACA,SAAS,2CAAM;AACf;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0DAA0D,gBAAgB,EAAE;;AAE5E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEe,kEAAG,EAAC;;;;;;;;;;;;;ACtCnB;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;;AAEjC;;AAEA;AACA;;AAEP;AACA;AACA;AACA,0BAA0B,EAAE;AAC5B,0BAA0B,EAAE;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uDAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;AAEc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,uDAAM,WAAW,sDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,uDAAM,WAAW,sDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACyB;AACzB;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,0CAAG,OAAO,yDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAO;AACzC;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,uDAAM,uBAAuB,sDAAM,CAAC,4CAAK;AACzC;AACA,oBAAoB,+CAAQ,YAAY,+CAAQ;AAChD;AACA,GAAG;AACH;AACA,oBAAoB,6CAAM,YAAY,6CAAM;AAC5C;AACA,GAAG;AACH;AACA,iDAAiD,6CAAO;AACxD;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC5DD;AAAA;AAAe;AACf;AACA;AACA,CAAC;;AAEM;AACP;AACA;AACA;AACA;;;;;;;;;;;;;ACTA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmD;AACE;AACJ;;;;;;;;;;;;;ACFjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACO;AACP;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,6CAAO;AACzB;AACA;AACA,qBAAqB,0CAAG,OAAO,yDAAU;AACzC;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,uDAAM,WAAW,sDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC,6CAAO;AACxC;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,uDAAM,WAAW,sDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACxHD;AAAA;AAAA;AAAO;AACA;;;;;;;;;;;;;ACDP;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAA;;AAEO;;;;;;;;;;;;;ACFP;AAAe;AACf;AACA,CAAC;;;;;;;;;;;;;ACFD;AAAA;AAAA;AAAA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,2BAA2B,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,2BAA2B,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1CA;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAe;AACf;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;AC1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmE;AACrC;AACM;AACV;AACQ;AACA;AACR;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA,kBAAkB,yDAAgB;AAClC;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,uDAAM;AACzB,WAAW,yDAAQ;AACnB,WAAW,sDAAK;AAChB,KAAK;AACL,2BAA2B,kDAAS;AACpC;;AAEA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,qDAAI;AACd;AACA,KAAK;;AAEL;AACA,mDAAmD,OAAO;AAC1D,YAAY,yDAAQ;AACpB;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,+DAA+D;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,+DAA+D;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP,iEAAiE;AACjE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4FAA4F,yDAAQ,CAAC,4CAAK,YAAY,yDAAQ;AAC9H;;AAEA;AACA,2DAA2D,6CAAI;AAC/D;;AAEA;AACA,CAAC;;;;;;;;;;;;;AC1MD;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AAChB;AACM;AACF;AACA;;AAElC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA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;ACPP;AAAA,YAAY;AACZ,YAAY;AACZ;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA,GAAG,gBAAgB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,YAAY,yCAAyC;AACrF;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,YAAY,yCAAyC;AACrF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC9HD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2C;AAC4B;AACA;;;;;;;;;;;;;ACFvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwB;;AAExB,UAAU,oDAAG;;AAEN;AACA;AACA;AACA;;;;;;;;;;;;;ACPP;AAAA;AAAA;AAAA;AAAA;;AAEO;AACP;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAEM;AACP;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAEM;AACP;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AA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nB;AACf;AACA,iBAAiB,yDAAQ;AACzB;AACA;;AAEA,6CAA6C,yDAAQ;AACrD;AACA;;AAEA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wEAAwE,yDAAQ;AAChF;;AAEA;AACA,sEAAsE,yDAAQ;AAC9E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACxDD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqC;AACH;AACH;;AAExB;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAG;AAClB,gBAAgB,sDAAK;AACrB,cAAc,4DAAQ;;AAEtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC9ID;AAAA;AAAkC;;AAEnB;AACf,iBAAiB,yDAAQ;AACzB;AACA;AACA;;AAEA,mCAAmC,yDAAQ;;AAE3C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B,wCAAE;AACnB,iBAAiB,wCAAE;AACnB;AACA,kBAAkB,wCAAE;AACpB,kBAAkB,wCAAE;AACpB,kBAAkB,wCAAE;AACpB,GAAG,UAAU,iDAAG,oBAAoB,6CAAO;AAC3C,mCAAmC,wCAAE,IAAI,wCAAE;AAC3C;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;AC3FA;AAAA;AAA2B;;AAEZ;AACf;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,aAAa,6CAAI;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACvBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqH;AAC9E;AACsB;AACtB;AACZ;;AAEZ;AACf,WAAW,iDAAG;AACd,kBAAkB,6CAAO;AACzB;AACA,sBAAsB,iDAAG,OAAO,6CAAO,CAAC;;AAExC;AACA,IAAI,4DAAY;AAChB;;AAEA;AACA,WAAW,iDAAG,WAAW,iDAAG;AAC5B;;AAEA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wCAAE,IAAI,wCAAE;AACxD;AACA;AACA;AACA;AACA;AACA,yBAAyB,2DAAU,oBAAoB,2DAAU;AACjE,yBAAyB,6CAAO;AAChC,yBAAyB,6CAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,2DAAU;AACxC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,4DAAS;AACtB,aAAa,4DAAS;;AAEtB;AACA;AACA;AACA,aAAa,iEAAc;AAC3B,eAAe,+DAAY;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB,iEAAc;AAC9B,YAAY,iEAAc;AAC1B,YAAY,iEAAc;AAC1B,IAAI,sEAAmB;;AAEvB;AACA;AACA,YAAY,+DAAY;AACxB,aAAa,+DAAY;AACzB,2BAA2B,+DAAY;;AAEvC;;AAEA,YAAY,kDAAI;AAChB,YAAY,iEAAc;AAC1B,IAAI,sEAAmB;AACvB,QAAQ,4DAAS;;AAEjB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,iDAAG,SAAS,wCAAE,IAAI,6CAAO;AACzC,oCAAoC,6CAAO;;AAE3C;;AAEA;AACA;AACA;AACA,sCAAsC,iDAAG,mBAAmB,6CAAO;AACnE;AACA,kBAAkB,wCAAE;AACpB,eAAe,iEAAc;AAC7B,MAAM,sEAAmB;AACzB,iBAAiB,4DAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,wCAAE;AACrC;AACA,+BAA+B;AAC/B,mCAAmC;AACnC,4BAA4B;AAC5B,gCAAgC;AAChC;AACA;;AAEA,SAAS,sDAAI,gEAAgE,wCAAE,WAAW,wCAAE;AAC5F,CAAC;;;;;;;;;;;;;ACrLD;AAAA;AAAwC;;AAEzB;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+DAA+D,0DAAa;AAC5E,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACnBD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAkC;AACA;AACM;AACS;AAClB;;AAEhB;AACf;AACA;AACA,qBAAqB,uDAAU;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,mBAAmB,sDAAK;AACxB,0BAA0B,gEAAe;AACzC;AACA;AACA,UAAU,uDAAU;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,4CAAM,GAAG,6CAAO,GAAG,4CAAM;AAC7D,oCAAoC,4CAAM,GAAG,6CAAO,GAAG,4CAAM;AAC7D;;;;;;;;;;;;;AClIA;AAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC1DD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqC;AACH;AACJ;AACI;AACH;;AAE/B;;AAEA;AACA;;AAEe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,WAAW,iDAAG,cAAc,6CAAO;AACnC,UAAU,iDAAG,cAAc,6CAAO;AAClC,UAAU,iDAAG,cAAc,6CAAO;AAClC,gCAAgC;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,uDAAU;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC,OAAO;AAChD,kHAAkH,OAAO;AACzH;AACA,yBAAyB,yEAAyE;AAClG,gBAAgB,0EAA0E;AAC1F;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,sDAAK;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,uDAAU;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,cAAc,qDAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;ACvKA;AAAA;AAAuC;;AAEvC;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB,iBAAiB;AACjB,yBAAyB;AACzB;;AAEA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,2DAAU;AAClB;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;;AAEA,8BAA8B,OAAO;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,qCAAqC,QAAQ;AAC7C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpGA;AAAe;;AAEf;AACA;AACA;;AAEA;AAC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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;;AAEA;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;AClCA;AAAA;AAAe;;;;;;;;;;;;;ACAf;AAAA;AAAA;AAAA;AAA6B;AACD;AACD;;AAE3B,cAAc,sDAAK;AACnB,kBAAkB,sDAAK;AACvB;AACA;AACA;AACA;;AAEA;AACA,SAAS,6CAAI;AACb,aAAa,6CAAI;AACjB,WAAW,6CAAI;AACf;AACA;AACA;AACA,GAAG;AACH;AACA,mEAAmE,6CAAI;AACvE,gBAAgB,iDAAG;AACnB;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEe,yEAAU,EAAC;;;;;;;;;;;;;ACjD1B;AAAA;AAA2B;;AAE3B;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,6CAAI;AACjB,WAAW,6CAAI;AACf,gBAAgB,6CAAI;AACpB,cAAc,6CAAI;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe,2EAAY,EAAC;;;;;;;;;;;;;AC3B5B;AAAA;AAA6B;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,kDAAI;AACxC;AACA;AACA;AACA;AA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;AACP;AACA;;AAEO;AACP;AACA;AACA;;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAO;;AAEA;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACfA;AAAA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACnFD;AAAA;AAAO;AACP;AACA;;AAEe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACRD;AAAe;AACf;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACND;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA,CAAC;;;;;;;;;;;;;ACXD;AAAe;AACf;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;;;;;;;;;;;;ACND;AAAe;AACf;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;;;;;;;;;;;;ACZD;AAAe;AACf;AACA;AACA;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACZD;AAAe;AACf;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACTD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACF;AACY;AACF;AACZ;AACE;AACA;AACU;AACI;AACV;AACF;;AAElB;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,8CAAU;AACnB,QAAQ,6CAAS;AACjB,aAAa,kDAAc;AAC3B,cAAc,mDAAe;AAC7B,OAAO,4CAAQ;AACf,QAAQ,6CAAS;AACjB,QAAQ,6CAAS;AACjB,aAAa,kDAAc;AAC3B,eAAe,oDAAgB;AAC/B,UAAU,+CAAW;AACrB,SAAS,+CAAU;AACnB;AACA;;;;;;;;;;;;;AC9EA;AAAe;AACf;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;;;;;;;;;;;;ACRD;AAAe;AACf;AACA;AACA,wBAAwB;AACxB,kBAAkB,kCAAkC;AACpD;AACA,GAAG;AACH;AACA,CAAC;;;;;;;;;;;;;ACRD;AAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7BA;AAAe;AACf;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;ACND;AAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;;ACRD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6C;AACU;AACV;AACW;AACF;AACL;AACF;AACR;AACY;AACO;AACJ;AACE;AACQ;AACF;AACI;;;;;;;;;;;;;ACdlE;AAAA;AAAwC;;AAEzB;AACf,4BAA4B,sDAAO,CAAC,4CAAK;;AAEzC;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,kBAAkB;AAC/B,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrHA;AAAA;AAAA;AAAA;AAAuC;AACD;AACa;;AAEnD;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA,gBAAgB,sDAAY;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kCAAkC,sDAAY;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,2DAAQ;AAChD;;AAEA;AACA;AACA;;AAEA;AACA,uEAAuE,yDAAQ;AAC/E;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,OAAO;AAC/B,UAAU,6DAAW;AACrB,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC9EA;AAAA;AAAA;AAAgC;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO;AACP;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,OAAO;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,wCAAwC,KAAK,wDAAO;;AAEvE;AACA,aAAa,OAAO;;AAEpB;AACA;;AAEe;AACf;AACA;AACA,CAAC;;;;;;;;;;;;;ACrHD;AAAA;AAAA;AAAwC;AACC;;AAE1B;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA,QAAQ,6DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACnDD;AAAA;AAAA;AAAqC;AACiB;;AAEtD;AACA,eAAe,UAAU;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB,yCAAyC,qDAAI;AAC7C;AACA;AACA;AACA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC,oCAAoC,KAAK,EAAE,aAAa,8DAAa;AACzG;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC,2DAAQ;AAC5C;;AAEA;AACA,0CAA0C,2DAAQ;AAClD;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACxED;AAAA;AAAuC;;AAEvC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,gBAAgB;AAChB,aAAa;AACb,aAAa;AACb,aAAa;AACb,aAAa;AACb,gBAAgB;AAChB,aAAa;AACb;;AAEA,mCAAmC,qDAAI;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACe;AACf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;AC5OD;AAAe;AACf;AACA;AACA;;AAEA,6BAA6B,OAAO;AACpC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC7CD;AAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACXD;AAAA;AAAA;AAAA;AAAA;AAAgC;AACE;AACI;AACa;;AAEpC;AACf,aAAa,iDAAQ;AACrB;AACA;AACA;AACA;AACA,qBAAqB,sDAAY;AACjC,mBAAmB,sDAAY;AAC/B,qBAAqB,sDAAY;AACjC,sBAAsB,sDAAY;AAClC,oBAAoB,sDAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,8CAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,2DAAQ;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA,4EAA4E,yDAAQ;AACpF;;AAEA;AACA;AACA;;AAEA;AACA,0EAA0E,yDAAQ;AAClF;;AAEA;AACA,4EAA4E,yDAAQ;AACpF;;AAEA;AACA,6EAA6E,yDAAQ;AACrF;;AAEA;AACA,2EAA2E,yDAAQ;AACnF;;AAEA;AACA,CAAC;;;;;;;;;;;;;AC7FD;AAAA;AAAA;AAAA;AAAiC;AACE;AACW;;AAE/B;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iDAAiD,OAAO;AACxD,sBAAsB,qDAAW;AACjC,aAAa,sDAAY;AACzB;AACA;AACA,KAAK;AACL,gCAAgC,+DAAa;AAC7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,EAAE,6CAAG,CAAC,EAAC;;;;;;;;;;;;;ACnCR;AAAe;AACf;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACLD;AAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACXD;AAAA;AAAA;AAA0B;AACE;;AAEb;AACf,sBAAsB,8CAAK,GAAG,6CAAI;AAClC,CAAC;;;;;;;;;;;;;ACLD;AAAA;AAAA;AAAA;AAAA;AAAiC;AACE;;AAE5B;;AAEA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;AACA,UAAU,QAAQ;AAClB;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB,OAAO;AAC9D;AACA;;AAEA;AACA,qBAAqB,8DAA8D;AACnF,kBAAkB,qDAAW;AAC7B,SAAS,sDAAY;AACrB;AACA;;AAEA;AACA;;AAEe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,MAAM,EAAC;;;;;;;;;;;;;ACjER;AAAA;AAA4B;;AAEb;AACf;AACA;AACA;AACA;AACA;;AAEA,aAAa,QAAQ,aAAa,sDAAK;AACvC,QAAQ,QAAQ;;AAEhB;AACA,eAAe,QAAQ;AACvB;AACA;AACA,CAAC;;;;;;;;;;;;;AChBD;AAAA;AAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AClBD;AAAA;AAA8B;;AAEf;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oDAAK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CAAC,IAAI,EAAC;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,cAAc,oDAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,yBAAyB,8CAAK;AAC9B,+BAA+B,oDAAW;;;;;;;;;;;;;ACtDjD;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAA8B;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,2BAA2B;AAC3B;AACA;AACA,wCAAwC;AACxC,2BAA2B;AAC3B;AACA,KAAK,OAAO;AACZ;AACA,cAAc,SAAS,uDAAM,SAAS;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA,SAAS;AACT,CAAC;;;;;;;;;;;;;AC/DD;AAAA;AAAA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACzBD;AAAA;AAAA;AAAA;AAAA;AAA+B;AACY;;AAE3C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,uDAAM,SAAS,GAAG,aAAa,uDAAM,SAAS;AACzE,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,gCAAgC;AAChE,cAAc,sDAAsD,uDAAM,OAAO;AACjF,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,cAAc,qDAAqD,uDAAM,OAAO;AAChF,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,uDAAM,SAAS,GAAG,aAAa,uDAAM,SAAS;AACzE,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,mDAAmD,+CAAQ;AAC3D,mDAAmD,+CAAQ;;;;;;;;;;;;;AC9DlE;AAAA;AAAA;AAAA;AAAgD;;AAEhD;AACA;AACA;AACA;;AAEO;AACP,+BAA+B,mDAAQ;AACvC;AACA;AACA;AACA;AACA;AACA,SAAS,0DAAS;AAClB;;AAEO;AACP,4BAA4B,mDAAQ;AACpC;AACA;AACA,iEAAiE,mDAAQ;AACzE;AACA,SAAS,0DAAS;AAClB;;;;;;;;;;;;;ACxBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+B;AACP;AACI;AACF;AACI;AACA;AACA;AACI;;AAEnB;AACf;AACA,wCAAwC,yDAAQ;AAChD,0BAA0B,+CAAM;AAChC,+BAA+B,sDAAK,eAAe,4CAAG,IAAI,+CAAM;AAChE,qBAAqB,8CAAK,GAAG,4CAAG;AAChC,4BAA4B,6CAAI;AAChC,2BAA2B,8CAAK;AAChC,0FAA0F,+CAAM;AAChG,QAAQ,+CAAM;AACd,CAAC;;;;;;;;;;;;;ACnBD;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;;;;;;;;;;;;AC/DD;AAAA;AAAA;AAAA;AAAuC;;;;;;;;;;;;;ACAvC;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEe,mEAAI,EAAC;;;;;;;;;;;;;ACjIpB;AAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACdD;AAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACnBD;AAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACfD;AAAA;AACA;AACA;AACA;AACe;AACf;AACA,CAAC;;;;;;;;;;;;;ACND;AAAA;AAA4B;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,OAAO;AACxB,uBAAuB,sDAAK;AAC5B;AACA;;AAEA,gCAAgC;AAChC;;AAEe;AACf;;AAEA;AACA;AACA;AACA;;AAEA,aAAa,OAAO;AACpB;AACA,aAAa,OAAO;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,QAAQ;AAC3C,qBAAqB,qCAAqC;;AAE1D;AACA,CAAC;;;;;;;;;;;;;AChDD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACQ;AACR;AACQ;AACJ;;;;;;;;;;;;;ACJlD;AAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACtBD;AAAA;AAAe;AACf;AACA;AACA;AACA,CAAC;;AAED;AACA,wCAAwC;;AAExC;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mDAAmD;AACnD,oDAAoD;AACpD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD;AACnD,oDAAoD;AACpD,GAAG;AACH;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;;;;;;;;;;;;;ACpFA;AAAe;AACf,kDAAkD;;AAElD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACzDD;AAAe;AACf;AACA;AACA,8CAA8C;AAC9C,GAAG;AACH;AACA,CAAC;;;;;;;;;;;;;ACND;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAA0B;;AAEX;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA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AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA4C,4CAAK;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,SAAS,yDAAS;AAClB;;;;;;;;;;;;;AC7CA;AAAA;AAAA;AAAmC;;AAEpB;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,SAAS,yDAAS;AAClB;;;;;;;;;;;;;AC9BA;AAAA;AAAA;AAAA;AAAgC;AACF;;AAEf;AACf;AACA;AACA;;AAEA;AACA,6BAA6B,uDAAM;AACnC;;AAEA;AACA,wCAAwC,4CAAK;AAC7C;;AAEA;AACA,uCAAuC,4CAAK;AAC5C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;AChCA;AAAA;AAAA;AAAkC;AAC+E;;AAElG;AACf;AACA;AACA,aAAa,yDAAQ;AACrB;AACA,cAAc,iEAAe;AAC7B;AACA;AACA;AACA,4DAA4D,iEAAe;AAC3E,aAAa,8DAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,gEAAc;AAC1E;AACA;AACA;AACA;AACA,4DAA4D,gEAAc;AAC1E;AACA;AACA;AACA,SAAS,wDAAM;AACf,CAAC;;;;;;;;;;;;;AC9BD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACsB;AACgD;AACxE;AACd;AACmE;AACrE;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP,cAAc,2DAAU,CAAC,+DAAa,EAAE,gEAAa;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;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AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf,iBAAiB,0DAAS;;AAE1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACxDD;AAAe;AACf;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACLD;AAAA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC1ED;AAAA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;AACA,CAAC;;;;;;;;;;;;;ACVD;AAAA;AAAA;AAAA;AAAkC;AACA;AACC;;AAEnC,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,gBAAgB;AACxB;AACA;AACA;AACA,KAAK;AACL,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,QAAQ,iBAAiB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,gBAAgB;AAC7B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,aAAa,iBAAiB;AAC9B;AACA;AA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;;AAEf,8JAA8J,OAAO;AACrK,wHAAwH,OAAO;AAC/H;AACA;AACA;AACA;AACA;;AAEA,QAAQ,QAAQ;AAChB;AACA;;AAEA,aAAa,gDAAS;AACtB,CAAC;;;;;;;;;;;;;ACjBD;AAAe;;AAEf,2DAA2D,OAAO;AAClE,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACVD;AAAe;AACf;AACA,wBAAwB,mBAAmB,EAAE;AAC7C;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAA;AAAA;;AAEO;;AAEP;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEe;AACf;;AAEA;AACA;AACA,6CAA6C,OAAO;AACpD,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA,CAAC;;AAEM;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;AC1GA;AAAe;;AAEf,4DAA4D,SAAS;AACrE,4EAA4E,UAAU;AACtF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACZD;AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC3BD;AAAA;AACA;AAC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AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAA;AAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,8CAA8C;AAC9C,uDAAuD;AACvD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B,8BAA8B,oFAAoF;AAClH,iCAAiC;AACjC;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA,CAAC;;;;;;;;;;;;;AClDD;AAAA;AAAA;AAA2B;AACG;;AAE9B;AACA;AACA;;AAEA;AACA,aAAa,6CAAI;AACjB,WAAW,6CAAI;AACf;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,4BAA4B;AAC1D,8BAA8B,4BAA4B;AAC1D,8BAA8B,4BAA4B,4FAA4F;AACtJ,eAAe,oDAAK,aAAa;AACjC;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA,CAAC;;;;;;;;;;;;;ACnDD;AAAA;AAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B,oFAAoF,0EAA0E;AAC5L,8BAA8B;AAC9B,eAAe,oDAAK,aAAa;AACjC;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA,CAAC;;;;;;;;;;;;;ACtCD;AAAA;AAA8B;;AAE9B;AACA,oBAAoB,4CAAK;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEe;;AAEf;AACA,4BAA4B,4CAAK;AACjC;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,OAAO,EAAC;;;;;;;;;;;;;ACvDT;AAAA;AAAA;AAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uDAAuD;AACvD,8CAA8C;AAC9C;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B,4BAA4B;AAC1D,8BAA8B;AAC9B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;;AAEe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,IAAI,EAAC;;;;;;;;;;;;;AC5DN;AAAA;AAAA;AAAA;AAA2B;AACM;;AAE1B;AACP;AACA;AACA;;AAEA;AACA,aAAa,6CAAI;AACjB,WAAW,6CAAI;AACf;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,4BAA4B;AAC1D,8BAA8B,kDAAkD;AAChF,8BAA8B,4BAA4B;AAC1D,eAAe,uDAAK,aAAa;AACjC;AACA;AACA;AACA;AACA;;AAEe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,IAAI,EAAC;;;;;;;;;;;;;AC5DN;AAAA;AAAA;AAAiC;;AAE1B;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B,kGAAkG;AAChI,8BAA8B;AAC9B,eAAe,uDAAK,aAAa;AACjC;AACA;AACA;AACA;AACA;;AAEe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,IAAI,EAAC;;;;;;;;;;;;;AChDN;AAAA;AAAA;AAAA;AAAgC;AACI;;AAE7B;AACP;AACA;AACA;AACA;;AAEA,oBAAoB,6CAAO;AAC3B;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,6CAAO;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uDAAuD;AACvD,6CAA6C;AAC7C;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B,8BAA8B;AAC9B,iCAAiC;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe;;AAEf;AACA,wDAAwD,kDAAQ;AAChE;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,MAAM,EAAC;;;;;;;;;;;;;ACvFR;AAAA;AAAA;AAAA;AAAgD;AACrB;AACQ;;AAEnC;AACA;AACA;AACA;;AAEA;AACA,aAAa,6CAAI;AACjB,WAAW,6CAAI;AACf;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,4BAA4B;AAC1D,8BAA8B,kDAAkD;AAChF,8BAA8B,4BAA4B;AAC1D,eAAe,yDAAK,aAAa;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe;;AAEf;AACA,8DAA8D,8DAAc;AAC5E;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,MAAM,EAAC;;;;;;;;;;;;;ACzER;AAAA;AAAA;AAA4C;AACT;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B,kGAAkG;AAChI,8BAA8B;AAC9B,eAAe,yDAAK,aAAa;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe;;AAEf;AACA,4DAA4D,0DAAY;AACxE;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,MAAM,EAAC;;;;;;;;;;;;;AC7DR;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B,0CAA0C;AAC1C;AACA;AACA;;AAEe;AACf;AACA,CAAC;;;;;;;;;;;;;AC9BD;AAAA;AAA2B;;AAE3B;AACA;AACA;;AAEA;AACA,aAAa,6CAAI;AACjB,WAAW,6CAAI;AACf;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA,CAAC;;;;;;;;;;;;;ACxBD;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uDAAuD;AACvD,4DAA4D;AAC5D;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,iDAAiD;AACjD;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B,8BAA8B,wDAAwD;AACtF,8DAA8D;AAC9D;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B,4BAA4B,EAAE;AACxD,yBAAyB,2BAA2B,EAAE;AACtD,0BAA0B,4BAA4B,EAAE;AACxD,iDAAiD,mDAAmD;AACpG;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;ACvGA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,WAAW;AACxB;AACA,aAAa,OAAO;AACpB;AACA,iBAAiB,QAAQ;AACzB;AACA,aAAa,WAAW;AACxB;AACA;;AAEe;AACf;AACA,CAAC;;;;;;;;;;;;;AChED;AAAA;AAAA;AAAA;AAAmC;;AAE5B,oCAAoC,+CAAW;;AAEtD;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEe;;AAEf;AACA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;;;ACnCA;AAAA;AAAA;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,8BAA8B,sEAAsE;AACpG,8BAA8B;AAC9B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA,CAAC;;AAE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ACA;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAEc;AACf,WAAW,uDAAY;AACvB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA+G;AAC1D;AACJ;AACF;;;;;;;;;;;;;ACH/C;AAAA;AAAA;AAA0C;;AAEnC;;AAEP;AACA;AACA;;AAEA;AACA;AACA,MAAM,gEAAS;;AAEA,wEAAS,EAAC;;;;;;;;;;;;;ACZzB;AAAA;AAAA;AAAyC;AACA;;AAEzC;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM,+DAAQ,CAAC,uDAAY;;AAEZ,uEAAQ,EAAC;;;;;;;;;;;;;ACZxB;AAAA;AAAA;AAWiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,iDAAS,cAAc,yDAAS;AACxE,iBAAiB,8CAAM;AACvB;AACA;AACA;AACA,SAAS;AACT;AACA,wCAAwC,kDAAU,cAAc,0DAAU;AAC1E,iBAAiB,+CAAO;AACxB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA,KAAK;AACL;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA,KAAK;AACL;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA,KAAK;AACL;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;;AAEA,YAAY,4BAA4B;AACxC;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,+CAAO,OAAO,wDAAQ;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,kDAAU,OAAO,wDAAQ;AACtC;;AAEA;AACA;AACA,gCAAgC,4DAAY,MAAM,oDAAY;AAC9D,aAAa,oDAAY,OAAO,wDAAQ,WAAW,wDAAQ;AAC3D;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,kDAAU,OAAO,wDAAQ;AACtC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,8CAAM,OAAO,uDAAO;AACrC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,iDAAS,OAAO,uDAAO;AACpC;;AAEA;AACA;AACA,gCAAgC,2DAAW,MAAM,mDAAW;AAC5D,aAAa,mDAAW,OAAO,uDAAO,WAAW,uDAAO;AACxD;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,iDAAS,OAAO,uDAAO;AACpC;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AAChB;AACA;AACA;;AAEA,aAAa,4DAAU;AACvB,CAAC;;;;;;;;;;;;;ACzCD;AAAA;AAAA;AAAA;AAAA;AAA+E;AACxC;AACJ;AACK;;AAExC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf,iBAAiB,8DAAS,uCAAuC,sEAAoB,GAAG,oDAAW;AACnG;AACA,sEAAsE,yDAAU;AAChF;AACA;AACA,CAAC;;;;;;;;;;;;;ACzED;AAAA;AAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA,iBAAiB,8DAAS;AAC1B;AACA,CAAC;;;;;;;;;;;;;AC/BD;AAAA;AAAqC;;AAErC;AACA;AACA,IAAI,sDAAI;AACR;AACA;;AAEA;AACA;AACA,IAAI,sDAAI;AACR;AACA;;AAEe;AACf;;AAEA;AACA;AACA;AACA;AACA,QAAQ,qDAAG;AACX,CAAC;;;;;;;;;;;;;ACtBD;AAAA;AAAoC;;AAEpC;AACA;AACA,IAAI,qDAAG;AACP;AACA;;AAEA;AACA;AACA,IAAI,qDAAG;AACP;AACA;;AAEe;AACf;;AAEA;AACA;AACA;AACA;AACA,QAAQ,qDAAG;AACX,CAAC;;;;;;;;;;;;;ACtBD;AAAA;AAAoC;;AAEpC;AACA;AACA;AACA,IAAI,qDAAG;AACP;AACA;;AAEe;AACf;;AAEA;AACA;AACA,QAAQ,qDAAG;AACX,CAAC;;;;;;;;;;;;;ACfD;AAAA;AAAA;AAAqC;AACF;;AAEpB;AACf,2CAA2C,4DAAO;;AAElD,qFAAqF,OAAO;AAC5F,4FAA4F,OAAO;AACnG;AACA;AACA;AACA;AACA;;AAEA,aAAa,iDAAU;AACvB,CAAC;;;;;;;;;;;;;ACfD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuC;AACF;AACU;AACR;AACM;AACR;AACI;AACF;AACN;AACQ;AACA;AACM;AACA;AACR;AACU;AACZ;AACY;AACV;;AAEvC;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEe;AACf,SAAS,8DAAS;AAClB;;AAEO;AACP;AACA;;AAEA,0BAA0B,sDAAS;;AAEnC;AACA;AACA,UAAU,gDAAiB;AAC3B,aAAa,mDAAoB;AACjC,UAAU,+CAAiB;AAC3B,SAAS,8CAAgB;AACzB,aAAa,mDAAoB;AACjC,cAAc,oDAAqB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2CAAa;AACnB,QAAQ,6CAAe;AACvB,aAAa,kDAAoB;AACjC,SAAS,+CAAgB;AACzB,cAAc,oDAAqB;AACnC,QAAQ,8CAAe;AACvB,UAAU,+CAAiB;AAC3B,SAAS,+CAAgB;AACzB,SAAS,8CAAgB;AACzB,YAAY,iDAAmB;AAC/B,QAAQ,6CAAe;AACvB;;;;;;;;;;;;;AC/DA;AAAA;AAAA;AAA+B;AACqD;;AAErE;AACf;AACA,kCAAkC,gEAAiB;AACnD,qBAAqB,8CAAK,GAAG,6DAAc;AAC3C,aAAa,sDAAK,eAAe,6DAAc;AAC/C,QAAQ,gEAAiB;AACzB,CAAC;;;;;;;;;;;;;ACTD;AAAA;AAAmC;;AAEpB;AACf;;AAEA,+JAA+J,OAAO;AACtK,wHAAwH,OAAO;AAC/H;AACA;AACA;AACA;AACA;;AAEA,QAAQ,QAAQ;AAChB;AACA;;AAEA,aAAa,iDAAU;AACvB,CAAC;;;;;;;;;;;;;AClBD;AAAA;AAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,oCAAoC,8CAAI,GAAG,6CAAG;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;;AAEA;AACA,QAAQ,qDAAG;AACX;AACA,CAAC;;;;;;;;;;;;;AC/BD;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA,CAAC;;;;;;;;;;;;;ACVD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqC;AACG;;AAExC,cAAc,4DAAQ;AACtB;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA;;AAEQ;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAEM;AACP;AACA,0DAA0D;AAC1D;AACA;;AAEO;AACP;AACA,2DAA2D;AAC3D;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,sDAAK;;AAEpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,2CAA2C;AAC3C,sCAAsC,wDAAO;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wDAAwD;AACxD;AACA,0DAA0D;AAC1D;AACA,IAAI,wDAAO;AACX;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;;;;;;;;;;;;;AC1JA;AAAA;AAAA;AAAA;AAAsC;AACH;AACM;;AAE1B;AACf;AACA;;AAEA,6CAA6C,6DAAQ;;AAErD,qFAAqF,OAAO;AAC5F,+GAA+G,OAAO;AACtH;AACA;AACA;AACA,QAAQ,yDAAQ,qCAAqC,qDAAG;AACxD;AACA;AACA;;AAEA,aAAa,iDAAU;AACvB,CAAC;;;;;;;;;;;;;ACrBD;AAAA;AAAA;AAAA;AAAyC;AACN;AACM;;AAE1B;AACf;AACA;;AAEA,6CAA6C,gEAAW;;AAExD,yFAAyF,OAAO;AAChG,8DAA8D,OAAO;AACrE;AACA,yFAAyF,qDAAG,uCAAuC,OAAO;AAC1I;AACA,YAAY,yDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,iDAAU;AACvB,CAAC;;;;;;;;;;;;;ACzBD;AAAA;AAAuC;;AAEvC,gBAAgB,sDAAS;;AAEV;AACf;AACA,CAAC;;;;;;;;;;;;;ACND;AAAA;AAAA;AAAA;AAAA;AAA+E;AAC5C;AACA;AACK;;AAExC;AACA;AACA;AACA;AACA;AACA,iBAAiB,0DAAK;AACtB,mDAAmD,0DAAK;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,0DAAK;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,0DAAK;AACtB;AACA,mEAAmE,0DAAK;AACxE;AACA;AACA;AACA;AACA;;AAEe;AACf,yCAAyC,sEAAoB,GAAG,oDAAW;AAC3E;AACA;AACA;AACA;AACA,mCAAmC,yDAAU;AAC7C;AACA,CAAC;;;;;;;;;;;;;ACzDD;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACjBD;AAAA;AAAmC;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA,qBAAqB,yDAAU;AAC/B;AACA,CAAC;;;;;;;;;;;;;ACnBD;AAAA;AAAA;AAA0C;AACD;;AAE1B;AACf;AACA;AACA,YAAY,oDAAK;;AAEjB,2DAA2D,OAAO;AAClE,8DAA8D,OAAO;AACrE;AACA,sBAAsB,qDAAG;AACzB,QAAQ,yDAAQ;AAChB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,aAAa,iDAAU;AACvB,CAAC;;;;;;;;;;;;;ACvBD;AAAA;AAAA;AAAoC;;AAEpC;AACA;AACA;AACA,mBAAmB,qDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,qDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB,2BAA2B,OAAO;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;;AAEA;;AAEA;AACA,gBAAgB,qDAAG;AACnB,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAEM;AACP;;AAEA;AACA,mBAAmB,qDAAG;AACtB,2CAA2C;AAC3C,GAAG;;AAEH;AACA,WAAW,qDAAG;AACd;AACA;;;;;;;;;;;;;AChFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACV;AACkB;AACN;AACH;;AAE3C;;AAEA;AACA,EAAE,kEAAY;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE,4DAAY;AACd,EAAE,gDAAO;AACT;AACA,EAAE,kEAAY;AACd;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uCAAuC,gDAAO;AAC9C,wCAAwC,gDAAO;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE,4DAAY;;AAEd;AACA;AACA,uCAAuC,gDAAO;AAC9C,wCAAwC,gDAAO;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE,4DAAY;;AAEd;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA,IAAI,wDAAU;AACd;;AAEA;AACA;AACA,cAAc,wDAAU;;AAExB,EAAE,4DAAY;AACd,EAAE,4DAAY;AACd;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gDAAO;;AAEpB;AACA;AACA,cAAc,gDAAO,gBAAgB;AACrC;AACA,gBAAgB,gDAAO;AACvB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,mBAAmB,gDAAO;AAC1B;AACA;AACA,SAAS,iBAAiB,gDAAO;AACjC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,wDAAU;AACZ;AACA,EAAE,gDAAO;;AAET;;AAEA;AACA,IAAI,4DAAY;AAChB;AACA,IAAI,gDAAO;AACX,8BAA8B,wDAAU;AACxC,IAAI,4DAAY;AAChB,IAAI,4DAAY;AAChB;AACA;;AAEA,cAAc;AACd,kBAAkB,wDAAU;AAC5B;AACA;;AAEA;AACA,EAAE,4DAAY;AACd,EAAE,4DAAY;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,wDAAU;AACZ,gBAAgB,wDAAU;AAC1B,cAAc,wDAAU;AACxB,EAAE,4DAAY;AACd,EAAE,4DAAY;AACd;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwC;AACQ;;AAEzC;AACP,SAAS,8CAAK;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP,sBAAsB,8CAAK,+BAA+B,OAAO;AACjE,gBAAgB,8CAAK;AACrB;AACA;AACA,iBAAiB,OAAO,uDAAuD,8CAAK;AACpF,iCAAiC,4BAA4B,EAAE;AAC/D,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEO;AACP,eAAe,8CAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,gBAAgB;AACjC,eAAe,8CAAK;AACpB;AACA;AACA;;AAEA;AACA;AACA,aAAa,8CAAK;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,8CAAK;AACzC,wCAAwC,8CAAK;AAC7C,sCAAsC,gDAAO,8BAA8B,gDAAO;AAClF,yCAAyC,8CAAK,MAAM,8DAAgB;AACpE,oCAAoC,gDAAO,gBAAgB,gDAAO,gCAAgC,gDAAO;AACzG,sCAAsC,gDAAO,gBAAgB,gDAAO,4BAA4B,gDAAO;AACvG,sCAAsC,gDAAO,gBAAgB,gDAAO,gCAAgC,gDAAO;AAC3G,sCAAsC,gDAAO,gBAAgB,gDAAO,4BAA4B,gDAAO;AACvG;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC,gBAAgB;AACjD,iBAAiB,8CAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,8CAAK,MAAM,8DAAgB;AACnC,QAAQ,8CAAK,MAAM,8DAAgB;AACnC,QAAQ,8CAAK,MAAM,8DAAgB;AACnC,QAAQ,8CAAK,MAAM,8DAAgB;AACnC;AACA;AACA;;AAEA,2CAA2C;AAC3C,iBAAiB,gBAAgB;AACjC,eAAe,8CAAK;AACpB;AACA,eAAe,8CAAK;AACpB;AACA;AACA;AACA;;;;;;;;;;;;;AC7HA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4C;AACA;;AAE5C;;AAEO;;AAEP;AACA,EAAE,kEAAY;AACd;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,iDAAQ;;AAEpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6DAA6D;;AAE7D;;AAEA;AACA,aAAa,gDAAO;;AAEpB;AACA;AACA;AACA,YAAY,iBAAiB,OAAO;AACpC,KAAK;AACL;AACA,YAAY,eAAe,OAAO;AAClC;AACA;;AAEA,EAAE,gDAAO;AACT;AACA;;AAEO;AACP;AACA;AACA;AACA,IAAI,gDAAO;AACX;AACA,IAAI,kEAAY;AAChB;AACA;AACA;;;;;;;;;;;;;AC7EA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACyB;AAClC;AACJ;AACS;;AAEnC;AACA;AACA;AACA;AACA;AACA;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,qDAAY;AAC5B,gBAAgB,qDAAY;;AAE5B;AACA,aAAa,mDAAW;AACxB;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA,KAAK;AACL,MAAM,0DAAW;AACjB,KAAK;AACL;AACA;AACA;;AAEA,EAAE,+DAAiB;;AAEnB;AACA;AACA;AACA;AACA;AACA,IAAI,uDAAS;AACb,IAAI,uDAAS;AACb;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oDAAoD,QAAQ,+DAAiB,iBAAiB,EAAE;AAChG;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;;AAEA;AACA;AACA;;;;;;;;;;;;;AC7IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAgD;;AAEzC;AACP;AACA,cAAc,8CAAK;AACnB;AACA;AACA;AACA;AACA,EAAE,8CAAK;AACP,EAAE,8CAAK;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,0CAA0C;;AAE1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP,UAAU,8CAAK;AACf;;AAEA;AACA,4BAA4B,8CAAK;AACjC;AACA,iDAAiD,gDAAO;AACxD,mDAAmD,gDAAO;AAC1D,aAAa,8CAAK;AAClB;AACA;AACA;;;;;;;;;;;;;ACvKA;AAAA;AAAA;AACA,gBAAgB;AAChB;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,gBAAgB,QAAQ;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEe,2EAAY,EAAC;;;;;;;;;;;;;AC5O5B;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAA;AAAA;AAA6C;;;;;;;;;;;;;ACA7C;AAAA;AAAA;AAAO;AACP;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;ACNA;AAAA;AAAA;AAAA;AAAkC;AACe;AACN;;AAE5B;AACf,UAAU,wCAAM;AAChB,UAAU,wCAAM;AAChB;;AAEA;AACA,eAAe,gDAAO;AACtB,0CAA0C,gDAAO,IAAI,gDAAO,6BAA6B,gDAAO,IAAI,gDAAO;AAC3G;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iEAAiE,yDAAQ;AACzE;;AAEA;AACA,iEAAiE,yDAAQ;AACzE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;AC/CD;AAAe;AACf;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACJD;AAAA;AAAe;AACf;AACA;AACA;AACA;;;;;;;;;;;;;ACJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAuC;AACwC;;;;;;;;;;;;;ACD/E;AAAA;AAAA;AAAmC;;AAE5B;AACP,EAAE,kDAAK;AACP;;AAEe;AACf,EAAE,kDAAK;AACP,EAAE,kDAAK;AACP,CAAC;;;;;;;;;;;;;ACTD;AAAA;AAAA;AAAA;AAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;;AAEP;;AAEe;AACf;AACA;;;;;;;;;;;;;ACjDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqC;AACW;AACD;AACuB;AAC9B;AACN;AACF;AACgB;AACC;;AAEjD;AACA;AACA,UAAU,kDAAK;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,mDAAQ;AAChC;;AAEA;AACA,UAAU,kDAAK,WAAW,kDAAK;AAC/B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8DAAe;AACnC;AACA,kBAAkB,4DAAQ;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mDAAQ;AAC/B;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,+CAA+C,oDAAS;AACxD;;AAEA;AACA;AACA,oEAAoE,oDAAS;AAC7E;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,kCAAkC,EAAE;AAC1E,mDAAmD,gCAAgC,EAAE;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,kBAAkB,4BAA4B,SAAS,oDAAS,sCAAsC;AACtG;AACA;AACA,SAAS;AACT;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,MAAM,gEAAW,KAAK,8CAAS;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAK;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM,+DAAS;AACf;AACA;;AAEA,IAAI,wDAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,2DAAM,CAAC,kDAAK;AACxB,YAAY,0DAAK;AACjB,aAAa,kDAAK;AAClB,aAAa,kDAAK;;AAElB,IAAI,2DAAW,CAAC,kDAAK;AACrB,IAAI,8DAAa;AACjB;AACA,IAAI,+DAAS;AACb;;AAEA;AACA,MAAM,wDAAO;AACb;AACA,iBAAiB,kDAAK,oBAAoB,kDAAK;AAC/C;AACA;AACA,sEAAsE,0DAAK;AAC3E;;AAEA;AACA;AACA,MAAM,0DAAU,CAAC,kDAAK;AACtB,MAAM,wDAAO;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,0DAAK;AAClB;AACA,qBAAqB,kDAAK;AAC1B;;AAEA,IAAI,wDAAO;AACX,sBAAsB,2DAAM;AAC5B,SAAS,2DAAM;AACf;;AAEA;AACA;AACA;AACA,kBAAkB,kDAAK;AACvB;AACA;;AAEA,IAAI,8DAAa;AACjB,eAAe,OAAO;AACtB,0BAA0B,0DAAK;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA,6CAA6C,sBAAsB,EAAE;AACrE,MAAM,+DAAS;AACf;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,kDAAK;AACvB;;AAEA,IAAI,wDAAO;AACX;AACA,eAAe,OAAO;AACtB,0BAA0B,0DAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,kDAAK;AACvB;;AAEA,IAAI,8DAAa;AACjB;AACA,yCAAyC,oBAAoB,EAAE;AAC/D,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0EAA0E,yDAAQ;AAClF;;AAEA;AACA,sEAAsE,yDAAQ;AAC9E;;AAEA;AACA,yEAAyE,yDAAQ;AACjF;;AAEA;AACA,sEAAsE,yDAAQ;AAC9E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;ACxaD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,kBAAkB;AAClB,eAAe,mYAAmY,oBAAoB,sMAAsM,oBAAoB,sBAAsB,oBAAoB,MAAM,oBAAoB;AACpsB,uBAAuB;AACvB,oBAAoB;;;;;;;;;;;;;ACd3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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C,CAACC,aAAF,CAAgBF,KAAhB,CAAJ,EAA4B;AAC1B,UAAMG,UAAU,GAAGH,KAAK,CAACG,UAAzB;;AACA,QAAIF,6CAAC,CAACG,UAAF,CAAaD,UAAb,CAAJ,EAA8B;AAC5B,aAAOA,UAAU,CAACJ,SAAD,CAAjB;AACD;AACF;;AAED,SAAOA,SAAP;AACD,C,CAED;;;AACe;AACbpB,YADa;AAEbK,UAFa;AAGbZ,YAHa;AAIbuB,YAJa;AAKbG;AALa,CAAf,E;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA,2DAA2D;;AAE3D;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,yBAAyB;AACzB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,MAAM,aAAa,OAAO;;AAEpD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2CAA2C,GAAG;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,cAAc;AACd,cAAc;AACd,gBAAgB;AAChB,eAAe;AACf;;AAEA;AACA;AACA,UAAU;AACV,SAAS;AACT,SAAS;AACT,WAAW;AACX,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,KAA0B;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,MAAM;AACnB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,aAAa,SAAS;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,EAAE;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA,mBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAA6B;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA,oCAAoC,6BAA6B,EAAE;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,6BAA6B;AAC5C,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,gBAAgB;AAChB,OAAO;;AAEP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,mBAAmB;AAClC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,gBAAgB,QAAQ;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,gBAAgB,QAAQ;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,OAAO,WAAW;AACjC,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,WAAW;AACjC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,WAAW;AACjC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,oEAAoE;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C,wCAAwC;AACxC,+DAA+D;AAC/D,iEAAiE;AACjE;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS,GAAG,SAAS,KAAK,SAAS;AAC3D,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D;AACA,mCAAmC,iBAAiB;AACpD,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,4CAA4C,kBAAkB,EAAE;AAChE;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,2BAA2B,EAAE;AACpE;AACA;AACA;AACA,2BAA2B,kCAAkC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,2CAA2C,4BAA4B,EAAE;AACzE;AACA;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,SAAS,KAAK,SAAS,GAAG,SAAS;AAC7D,eAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AAClE;AACA,4BAA4B,SAAS,GAAG,SAAS;AACjD;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAC9E;AACA,8BAA8B,iBAAiB;AAC/C;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,qBAAqB;AACpC,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,iCAAiC,SAAS,eAAe,YAAY,EAAE;AACvE;AACA;AACA;AACA,iCAAiC,SAAS;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,SAAS,eAAe,YAAY,EAAE;AAC3E;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,4CAA4C,kBAAkB,EAAE;AAChE;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS,KAAK,SAAS,GAAG,SAAS;AACtD,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AACxE;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS,GAAG,SAAS,GAAG,SAAS;AACnD,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAChF;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,KAAK,SAAS,GAAG,SAAS;AACpD,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc,OAAO,QAAQ,SAAS,GAAG,SAAS,GAAG;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8BAA8B;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,UAAU,8CAA8C;AACxD,UAAU;AACV;AACA;AACA,oCAAoC,kBAAkB,EAAE;AACxD;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,gDAAgD;AAC1D,UAAU;AACV;AACA;AACA,kCAAkC,mBAAmB,EAAE;AACvD;AACA;AACA;AACA,sBAAsB,2BAA2B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,sBAAsB;AACrC;AACA,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,UAAU;AACV;AACA;AACA;AACA;AACA,QAAQ;AACR,cAAc,OAAO,4BAA4B,QAAQ,8BAA8B;AACvF;AACA;AACA,cAAc,UAAU,4BAA4B,YAAY,8BAA8B;AAC9F;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,qCAAqC;AACpD;AACA,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,gDAAgD;AAC1D,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,cAAc,iBAAiB,EAAE;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA,QAAQ,IAAI;AACZ,cAAc,8BAA8B;AAC5C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA,oCAAoC,kBAAkB,EAAE;AACxD;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mCAAmC;AAC7C,UAAU;AACV;AACA;AACA;AACA,sBAAsB,oCAAoC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,yBAAyB;AACxC;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA,qCAAqC,eAAe,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oBAAoB,iCAAiC;AACrD,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kDAAkD,kBAAkB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,qBAAqB;AACpC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB;AACA,6BAA6B,mBAAmB,cAAc,EAAE,EAAE;AAClE;AACA;AACA,6BAA6B,mBAAmB,cAAc,EAAE,EAAE;AAClE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,iCAAiC,kBAAkB,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA,kDAAkD,kBAAkB,EAAE;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB;AACA,0BAA0B,SAAS;AACnC;AACA;AACA,0BAA0B,SAAS;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS,GAAG,SAAS;AACpD,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,OAAO,SAAS,EAAE,GAAG,OAAO,iBAAiB,EAAE;AACtE,cAAc,OAAO,iBAAiB;AACtC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD,qBAAqB,6BAA6B;AAClD,qBAAqB;AACrB;AACA;AACA,qCAAqC,mBAAmB,EAAE;AAC1D;AACA;AACA;AACA,yBAAyB,2BAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD,qBAAqB,6BAA6B;AAClD,qBAAqB;AACrB;AACA;AACA,yCAAyC,mBAAmB,EAAE;AAC9D;AACA;AACA;AACA,6BAA6B,4BAA4B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB,OAAO,SAAS;AACrC,6BAA6B,gBAAgB,SAAS,GAAG;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,8BAA8B,gBAAgB,SAAS,GAAG;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,QAAQ;AACR,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,KAAK;AACpB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,oBAAoB,EAAE;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA,QAAQ;AACR,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD,qBAAqB;AACrB;AACA;AACA,uCAAuC,cAAc,EAAE;AACvD,cAAc,2BAA2B;AACzC;AACA;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,gBAAgB,SAAS,GAAG,SAAS;AACrC;AACA;AACA;AACA,gBAAgB,SAAS,GAAG,SAAS;AACrC;AACA;AACA;AACA,cAAc,QAAQ,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA,gCAAgC;AAChC,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,+BAA+B,EAAE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO,WAAW;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA,QAAQ,IAAI;AACZ,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA,cAAc,QAAQ,QAAQ,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ,QAAQ,EAAE;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA,iDAAiD,cAAc,EAAE;AACjE;AACA;AACA;AACA,iDAAiD,sBAAsB,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO,WAAW;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,KAAK;AACvC;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,eAAe,gBAAgB;AAC/B,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC,qBAAqB,UAAU;AAC/B;AACA;AACA,sEAAsE,2BAA2B,EAAE;AACnG,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA,4DAA4D;AAC5D,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA,qDAAqD,2BAA2B,EAAE;AAClF,wCAAwC,aAAa,eAAe,EAAE;AACtE,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA,wDAAwD,qCAAqC;AAC7F;AACA;AACA;AACA;AACA,0DAA0D,qBAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,YAAY;AACvD,0CAA0C,QAAQ;AAClD,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B,mCAAmC;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA,4CAA4C;;AAE5C;AACA,uDAAuD;AACvD;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,+BAA+B,iCAAiC;AAChE,cAAc;AACd;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC,aAAa,QAAQ,QAAQ,UAAU,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,aAAa,qBAAqB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU;AACV;AACA;AACA,qCAAqC,mBAAmB,cAAc,EAAE,EAAE;AAC1E,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA,4CAA4C,SAAS;AACrD;AACA;AACA,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,8CAA8C;AACxD,UAAU;AACV;AACA;AACA;AACA,mCAAmC,mCAAmC;AACtE,eAAe,8CAA8C;AAC7D;AACA;AACA;AACA,eAAe,4BAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,UAAU;AACV;AACA;AACA,oCAAoC,iBAAiB;AACrD,eAAe,yBAAyB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,UAAU;AACV;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,OAAO,qBAAqB,EAAE;AACxC,UAAU,OAAO,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB,GAAG,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,qDAAqD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,OAAO,SAAS,EAAE;AAC5B,UAAU,OAAO,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,YAAY,EAAE;AACnD,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AACpE;AACA,sCAAsC,YAAY,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,YAAY,EAAE;AACnD,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AACpE;AACA,qCAAqC,YAAY,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK,MAAM,iBAAiB;;AAE5B;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,4DAA4D;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,yCAAyC;AAC7D;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACxshBD,2BAA2B,SAAS,cAAc,4BAA4B,YAAY,qBAAqB,2DAA2D,uCAAuC,qCAAqC,oCAAoC,EAAE,iBAAiB,sCAAs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;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA,2DAA2D;;AAE3D;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,yBAAyB;AACzB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,MAAM,aAAa,OAAO;;AAEpD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2CAA2C,GAAG;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,cAAc;AACd,cAAc;AACd,gBAAgB;AAChB,eAAe;AACf;;AAEA;AACA;AACA,UAAU;AACV,SAAS;AACT,SAAS;AACT,WAAW;AACX,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,KAA0B;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,MAAM;AACnB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,aAAa,SAAS;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,EAAE;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA,mBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAA6B;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA,oCAAoC,6BAA6B,EAAE;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,6BAA6B;AAC5C,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,gBAAgB;AAChB,OAAO;;AAEP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,mBAAmB;AAClC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,gBAAgB,QAAQ;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,gBAAgB,QAAQ;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,OAAO,WAAW;AACjC,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,WAAW;AACjC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,WAAW;AACjC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,oEAAoE;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C,wCAAwC;AACxC,+DAA+D;AAC/D,iEAAiE;AACjE;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS,GAAG,SAAS,KAAK,SAAS;AAC3D,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D;AACA,mCAAmC,iBAAiB;AACpD,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,4CAA4C,kBAAkB,EAAE;AAChE;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,2BAA2B,EAAE;AACpE;AACA;AACA;AACA,2BAA2B,kCAAkC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,2CAA2C,4BAA4B,EAAE;AACzE;AACA;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,SAAS,KAAK,SAAS,GAAG,SAAS;AAC7D,eAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AAClE;AACA,4BAA4B,SAAS,GAAG,SAAS;AACjD;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAC9E;AACA,8BAA8B,iBAAiB;AAC/C;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,qBAAqB;AACpC,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,iCAAiC,SAAS,eAAe,YAAY,EAAE;AACvE;AACA;AACA;AACA,iCAAiC,SAAS;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,SAAS,eAAe,YAAY,EAAE;AAC3E;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,4CAA4C,kBAAkB,EAAE;AAChE;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS,KAAK,SAAS,GAAG,SAAS;AACtD,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AACxE;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS,GAAG,SAAS,GAAG,SAAS;AACnD,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAChF;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,KAAK,SAAS,GAAG,SAAS;AACpD,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc,OAAO,QAAQ,SAAS,GAAG,SAAS,GAAG;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8BAA8B;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,UAAU,8CAA8C;AACxD,UAAU;AACV;AACA;AACA,oCAAoC,kBAAkB,EAAE;AACxD;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,gDAAgD;AAC1D,UAAU;AACV;AACA;AACA,kCAAkC,mBAAmB,EAAE;AACvD;AACA;AACA;AACA,sBAAsB,2BAA2B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,sBAAsB;AACrC;AACA,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,UAAU;AACV;AACA;AACA;AACA;AACA,QAAQ;AACR,cAAc,OAAO,4BAA4B,QAAQ,8BAA8B;AACvF;AACA;AACA,cAAc,UAAU,4BAA4B,YAAY,8BAA8B;AAC9F;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,qCAAqC;AACpD;AACA,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,gDAAgD;AAC1D,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,cAAc,iBAAiB,EAAE;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA,QAAQ,IAAI;AACZ,cAAc,8BAA8B;AAC5C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA,oCAAoC,kBAAkB,EAAE;AACxD;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mCAAmC;AAC7C,UAAU;AACV;AACA;AACA;AACA,sBAAsB,oCAAoC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,yBAAyB;AACxC;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA,qCAAqC,eAAe,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oBAAoB,iCAAiC;AACrD,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kDAAkD,kBAAkB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,qBAAqB;AACpC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB;AACA,6BAA6B,mBAAmB,cAAc,EAAE,EAAE;AAClE;AACA;AACA,6BAA6B,mBAAmB,cAAc,EAAE,EAAE;AAClE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,iCAAiC,kBAAkB,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA,kDAAkD,kBAAkB,EAAE;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB;AACA,0BAA0B,SAAS;AACnC;AACA;AACA,0BAA0B,SAAS;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS,GAAG,SAAS;AACpD,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,OAAO,SAAS,EAAE,GAAG,OAAO,iBAAiB,EAAE;AACtE,cAAc,OAAO,iBAAiB;AACtC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD,qBAAqB,6BAA6B;AAClD,qBAAqB;AACrB;AACA;AACA,qCAAqC,mBAAmB,EAAE;AAC1D;AACA;AACA;AACA,yBAAyB,2BAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD,qBAAqB,6BAA6B;AAClD,qBAAqB;AACrB;AACA;AACA,yCAAyC,mBAAmB,EAAE;AAC9D;AACA;AACA;AACA,6BAA6B,4BAA4B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB,OAAO,SAAS;AACrC,6BAA6B,gBAAgB,SAAS,GAAG;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,8BAA8B,gBAAgB,SAAS,GAAG;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,QAAQ;AACR,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,KAAK;AACpB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,oBAAoB,EAAE;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA,QAAQ;AACR,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD,qBAAqB;AACrB;AACA;AACA,uCAAuC,cAAc,EAAE;AACvD,cAAc,2BAA2B;AACzC;AACA;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,gBAAgB,SAAS,GAAG,SAAS;AACrC;AACA;AACA;AACA,gBAAgB,SAAS,GAAG,SAAS;AACrC;AACA;AACA;AACA,cAAc,QAAQ,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA,gCAAgC;AAChC,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,+BAA+B,EAAE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO,WAAW;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA,QAAQ,IAAI;AACZ,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA,cAAc,QAAQ,QAAQ,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ,QAAQ,EAAE;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA,iDAAiD,cAAc,EAAE;AACjE;AACA;AACA;AACA,iDAAiD,sBAAsB,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO,WAAW;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,KAAK;AACvC;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,eAAe,gBAAgB;AAC/B,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC,qBAAqB,UAAU;AAC/B;AACA;AACA,sEAAsE,2BAA2B,EAAE;AACnG,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA,4DAA4D;AAC5D,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA,qDAAqD,2BAA2B,EAAE;AAClF,wCAAwC,aAAa,eAAe,EAAE;AACtE,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA,wDAAwD,qCAAqC;AAC7F;AACA;AACA;AACA;AACA,0DAA0D,qBAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,YAAY;AACvD,0CAA0C,QAAQ;AAClD,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B,mCAAmC;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA,4CAA4C;;AAE5C;AACA,uDAAuD;AACvD;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,+BAA+B,iCAAiC;AAChE,cAAc;AACd;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC,aAAa,QAAQ,QAAQ,UAAU,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,aAAa,qBAAqB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU;AACV;AACA;AACA,qCAAqC,mBAAmB,cAAc,EAAE,EAAE;AAC1E,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA,4CAA4C,SAAS;AACrD;AACA;AACA,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,8CAA8C;AACxD,UAAU;AACV;AACA;AACA;AACA,mCAAmC,mCAAmC;AACtE,eAAe,8CAA8C;AAC7D;AACA;AACA;AACA,eAAe,4BAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,UAAU;AACV;AACA;AACA,oCAAoC,iBAAiB;AACrD,eAAe,yBAAyB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,UAAU;AACV;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,OAAO,qBAAqB,EAAE;AACxC,UAAU,OAAO,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB,GAAG,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,qDAAqD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,OAAO,SAAS,EAAE;AAC5B,UAAU,OAAO,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,YAAY,EAAE;AACnD,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AACpE;AACA,sCAAsC,YAAY,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,YAAY,EAAE;AACnD,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AACpE;AACA,qCAAqC,YAAY,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK,MAAM,iBAAiB;;AAE5B;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,4DAA4D;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,yCAAyC;AAC7D;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACxshBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC,KAA4D;AAC7D,CAAC,SACgC;AACjC,CAAC,4BAA4B;;AAE7B;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,iBAAiB;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,IAAI;;AAEtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,mCAAmC;AAC9C;AACA;AACA;AACA;AACA,uEAAuE,IAAI;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,qBAAqB;AACtC;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kBAAkB,mBAAmB;AACrC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA,KAAK,oBAAoB;AACzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA+C;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,qBAAqB,wBAAwB;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;;AAEA,8CAA8C,cAAc;;AAE5D,CAAC;;;;;;;;;;;;ACzdD;AACA,SAAS,mBAAO,CAAC,6DAAa;AAC9B,QAAQ,mBAAO,CAAC,2DAAY;AAC5B,OAAO,mBAAO,CAAC,+DAAW;AAC1B;;;;;;;;;;;;ACJA,QAAQ,mBAAO,CAAC,4DAAW;;AAE3B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;AC1BA,QAAQ,mBAAO,CAAC,4DAAW;;AAE3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA,KAAK;AACL,oBAAoB;AACpB;AACA;;;;;;;;;;;;ACzCA,iBAAiB,mBAAO,CAAC,mEAAY;AACrC,UAAU,mBAAO,CAAC,4DAAW;;AAE7B;;AAEA;AACA;AACA;AACA,GAAG,IAAI;AACP;;;;;;;;;;;;ACTA,UAAU,mBAAO,CAAC,4DAAW;AAC7B,sBAAsB,mBAAO,CAAC,sFAAwB;;AAEtD;;AAEA;;AAEA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;ACrDA,UAAU,mBAAO,CAAC,4DAAW;AAC7B,eAAe,mBAAO,CAAC,+DAAU;;AAEjC;;AAEA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;ACTA,QAAQ,mBAAO,CAAC,4DAAW;;AAE3B;;AAEA;;AAEA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA,KAAK;AACL;AACA;AACA;AACA,uBAAuB;AACvB,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;;;;;;;;;;;;ACjDA;AACA,cAAc,mBAAO,CAAC,uEAAc;AACpC,YAAY,mBAAO,CAAC,mEAAY;AAChC,eAAe,mBAAO,CAAC,2EAAgB;AACvC,cAAc,mBAAO,CAAC,yEAAe;AACrC,iBAAiB,mBAAO,CAAC,+EAAkB;AAC3C,aAAa,mBAAO,CAAC,uEAAc;AACnC,aAAa,mBAAO,CAAC,qEAAa;AAClC,YAAY,mBAAO,CAAC,mEAAY;AAChC,QAAQ,mBAAO,CAAC,2DAAQ;AACxB,UAAU,mBAAO,CAAC,+DAAU;AAC5B,WAAW,mBAAO,CAAC,iEAAW;AAC9B;;;;;;;;;;;;ACZA,cAAc,mBAAO,CAAC,iEAAW;;AAEjC;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA,UAAU,mBAAO,CAAC,yDAAO;;AAEzB;;AAEA;AACA;AACA;;;;;;;;;;;;ACNA,UAAU,mBAAO,CAAC,yDAAO;;AAEzB;;AAEA;AACA;AACA;;;;;;;;;;;;ACNA,UAAU,mBAAO,CAAC,4DAAW;AAC7B,cAAc,mBAAO,CAAC,0DAAU;AAChC,sBAAsB,mBAAO,CAAC,sFAAwB;;AAEtD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;ACnDA,QAAQ,mBAAO,CAAC,4DAAW;;AAE3B;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;AC9CA,UAAU,mBAAO,CAAC,4DAAW;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;AClCA,UAAU,mBAAO,CAAC,4DAAW;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qCAAqC,eAAe;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,6BAA6B;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvJA,UAAU,mBAAO,CAAC,2DAAU;;AAE5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oEAAoE,WAAW;AAC/E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sBAAsB;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sBAAsB;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AC/gBA,UAAU,mBAAO,CAAC,2DAAU;AAC5B,cAAc,mBAAO,CAAC,yDAAS;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,eAAe,2CAA2C;AAC1D,GAAG;AACH;AACA;;;;;;;;;;;;ACjEA;;AAEA;;AAEA,IAAI,IAA6B;AACjC;AACA,aAAa,mBAAO,CAAC,yEAAQ;AAC7B,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA,2DAA2D;;AAE3D;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,yBAAyB;AACzB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,MAAM,aAAa,OAAO;;AAEpD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2CAA2C,GAAG;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,cAAc;AACd,cAAc;AACd,gBAAgB;AAChB,eAAe;AACf;;AAEA;AACA;AACA,UAAU;AACV,SAAS;AACT,SAAS;AACT,WAAW;AACX,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,KAA0B;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,MAAM;AACnB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,aAAa,SAAS;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,EAAE;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA,mBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAA6B;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA,oCAAoC,6BAA6B,EAAE;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,6BAA6B;AAC5C,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,gBAAgB;AAChB,OAAO;;AAEP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,mBAAmB;AAClC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,gBAAgB,QAAQ;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,gBAAgB,QAAQ;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,OAAO,WAAW;AACjC,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,WAAW;AACjC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,WAAW;AACjC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,oEAAoE;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C,wCAAwC;AACxC,+DAA+D;AAC/D,iEAAiE;AACjE;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS,GAAG,SAAS,KAAK,SAAS;AAC3D,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D;AACA,mCAAmC,iBAAiB;AACpD,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,4CAA4C,kBAAkB,EAAE;AAChE;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,2BAA2B,EAAE;AACpE;AACA;AACA;AACA,2BAA2B,kCAAkC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,2CAA2C,4BAA4B,EAAE;AACzE;AACA;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,SAAS,KAAK,SAAS,GAAG,SAAS;AAC7D,eAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AAClE;AACA,4BAA4B,SAAS,GAAG,SAAS;AACjD;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAC9E;AACA,8BAA8B,iBAAiB;AAC/C;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,qBAAqB;AACpC,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,iCAAiC,SAAS,eAAe,YAAY,EAAE;AACvE;AACA;AACA;AACA,iCAAiC,SAAS;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,SAAS,eAAe,YAAY,EAAE;AAC3E;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,4CAA4C,kBAAkB,EAAE;AAChE;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS,KAAK,SAAS,GAAG,SAAS;AACtD,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AACxE;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS,GAAG,SAAS,GAAG,SAAS;AACnD,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAChF;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,KAAK,SAAS,GAAG,SAAS;AACpD,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc,OAAO,QAAQ,SAAS,GAAG,SAAS,GAAG;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8BAA8B;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,UAAU,8CAA8C;AACxD,UAAU;AACV;AACA;AACA,oCAAoC,kBAAkB,EAAE;AACxD;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,gDAAgD;AAC1D,UAAU;AACV;AACA;AACA,kCAAkC,mBAAmB,EAAE;AACvD;AACA;AACA;AACA,sBAAsB,2BAA2B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,sBAAsB;AACrC;AACA,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,UAAU;AACV;AACA;AACA;AACA;AACA,QAAQ;AACR,cAAc,OAAO,4BAA4B,QAAQ,8BAA8B;AACvF;AACA;AACA,cAAc,UAAU,4BAA4B,YAAY,8BAA8B;AAC9F;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,qCAAqC;AACpD;AACA,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,gDAAgD;AAC1D,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,cAAc,iBAAiB,EAAE;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA,QAAQ,IAAI;AACZ,cAAc,8BAA8B;AAC5C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA,oCAAoC,kBAAkB,EAAE;AACxD;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mCAAmC;AAC7C,UAAU;AACV;AACA;AACA;AACA,sBAAsB,oCAAoC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,yBAAyB;AACxC;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA,qCAAqC,eAAe,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oBAAoB,iCAAiC;AACrD,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kDAAkD,kBAAkB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,qBAAqB;AACpC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB;AACA,6BAA6B,mBAAmB,cAAc,EAAE,EAAE;AAClE;AACA;AACA,6BAA6B,mBAAmB,cAAc,EAAE,EAAE;AAClE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,iCAAiC,kBAAkB,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA,kDAAkD,kBAAkB,EAAE;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB;AACA,0BAA0B,SAAS;AACnC;AACA;AACA,0BAA0B,SAAS;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS,GAAG,SAAS;AACpD,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,OAAO,SAAS,EAAE,GAAG,OAAO,iBAAiB,EAAE;AACtE,cAAc,OAAO,iBAAiB;AACtC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD,qBAAqB,6BAA6B;AAClD,qBAAqB;AACrB;AACA;AACA,qCAAqC,mBAAmB,EAAE;AAC1D;AACA;AACA;AACA,yBAAyB,2BAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD,qBAAqB,6BAA6B;AAClD,qBAAqB;AACrB;AACA;AACA,yCAAyC,mBAAmB,EAAE;AAC9D;AACA;AACA;AACA,6BAA6B,4BAA4B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB,OAAO,SAAS;AACrC,6BAA6B,gBAAgB,SAAS,GAAG;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,8BAA8B,gBAAgB,SAAS,GAAG;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,QAAQ;AACR,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,KAAK;AACpB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,oBAAoB,EAAE;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA,QAAQ;AACR,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD,qBAAqB;AACrB;AACA;AACA,uCAAuC,cAAc,EAAE;AACvD,cAAc,2BAA2B;AACzC;AACA;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,gBAAgB,SAAS,GAAG,SAAS;AACrC;AACA;AACA;AACA,gBAAgB,SAAS,GAAG,SAAS;AACrC;AACA;AACA;AACA,cAAc,QAAQ,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA,gCAAgC;AAChC,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,+BAA+B,EAAE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO,WAAW;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA,QAAQ,IAAI;AACZ,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA,cAAc,QAAQ,QAAQ,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ,QAAQ,EAAE;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA,iDAAiD,cAAc,EAAE;AACjE;AACA;AACA;AACA,iDAAiD,sBAAsB,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO,WAAW;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,KAAK;AACvC;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,eAAe,gBAAgB;AAC/B,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC,qBAAqB,UAAU;AAC/B;AACA;AACA,sEAAsE,2BAA2B,EAAE;AACnG,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA,4DAA4D;AAC5D,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA,qDAAqD,2BAA2B,EAAE;AAClF,wCAAwC,aAAa,eAAe,EAAE;AACtE,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA,wDAAwD,qCAAqC;AAC7F;AACA;AACA;AACA;AACA,0DAA0D,qBAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,YAAY;AACvD,0CAA0C,QAAQ;AAClD,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B,mCAAmC;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA,4CAA4C;;AAE5C;AACA,uDAAuD;AACvD;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,+BAA+B,iCAAiC;AAChE,cAAc;AACd;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC,aAAa,QAAQ,QAAQ,UAAU,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,aAAa,qBAAqB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU;AACV;AACA;AACA,qCAAqC,mBAAmB,cAAc,EAAE,EAAE;AAC1E,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA,4CAA4C,SAAS;AACrD;AACA;AACA,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,8CAA8C;AACxD,UAAU;AACV;AACA;AACA;AACA,mCAAmC,mCAAmC;AACtE,eAAe,8CAA8C;AAC7D;AACA;AACA;AACA,eAAe,4BAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,UAAU;AACV;AACA;AACA,oCAAoC,iBAAiB;AACrD,eAAe,yBAAyB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,UAAU;AACV;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,OAAO,qBAAqB,EAAE;AACxC,UAAU,OAAO,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB,GAAG,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,qDAAqD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,OAAO,SAAS,EAAE;AAC5B,UAAU,OAAO,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,YAAY,EAAE;AACnD,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AACpE;AACA,sCAAsC,YAAY,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,YAAY,EAAE;AACnD,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AACpE;AACA,qCAAqC,YAAY,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK,MAAM,iBAAiB;;AAE5B;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,4DAA4D;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,yCAAyC;AAC7D;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACxshBD;AACA,CAAC;;AAED;AACA,mBAAmB,KAA0B;;AAE7C;AACA,kBAAkB,KAAyB;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,8iBAA8iB,wZAAwZ,WAAW;;AAEn+B;AACA;AACA,cAAc;AACd,aAAa;AACb,eAAe;AACf,YAAY;AACZ;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA,wxfAAwxf,inBAAinB,6BAA6B,yBAAyB;AAC/7gB,kBAAkB,4teAA4te,wKAAwK,2uZAA2uZ,wKAAwK,6gFAA6gF;AACtz9B,wBAAwB;AACxB,yBAAyB;AACzB;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0DAA0D;AAC1D;;AAEA;AACA,8BAA8B;AAC9B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC,mBAAmB,iBAAiB;AACpC,qBAAqB,MAAM,YAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,wCAAwC,EAAE;AAC1C,KAAK;AACL;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,uCAAuC;AACvC,IAAI;AACJ,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF,mBAAmB;AACnB;AACA,GAAG,OAAO;AACV;AACA;AACA;AACA;AACA,EAAE,OAAO;AACT;AACA;;AAEA,CAAC;;;;;;;;;;;;;;ACxVY;AACb;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA,2DAA2D;;AAE3D;AACA,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,yBAAyB;AACzB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,MAAM,aAAa,OAAO;;AAEpD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2CAA2C,EAAE;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,cAAc;AACd,cAAc;AACd,gBAAgB;AAChB,eAAe;AACf;;AAEA;AACA;AACA,UAAU;AACV,SAAS;AACT,SAAS;AACT,WAAW;AACX,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,KAA0B;;AAE9C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,MAAM;AACnB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,OAAO;AACpB,aAAa,QAAQ;AACrB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,EAAE;AACf,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,EAAE;AACf,aAAa,QAAQ;AACrB;AACA,aAAa,SAAS;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,SAAS;AACtB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,MAAM;AACnB,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,aAAa,OAAO;AACpB,eAAe,EAAE;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB,aAAa,EAAE;AACf,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe,SAAS;AACxB;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA,mBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAA6B;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA,oCAAoC,6BAA6B,EAAE;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,6BAA6B;AAC5C,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,gBAAgB;AAChB,OAAO;;AAEP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,eAAe,QAAQ;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,mBAAmB;AAClC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,gBAAgB,QAAQ;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,gBAAgB,QAAQ;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,eAAe,OAAO,WAAW;AACjC,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,WAAW;AACjC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,WAAW;AACjC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,oEAAoE;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C,wCAAwC;AACxC,+DAA+D;AAC/D,iEAAiE;AACjE;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS,GAAG,SAAS,KAAK,SAAS;AAC3D,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D;AACA,mCAAmC,iBAAiB;AACpD,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,4CAA4C,kBAAkB,EAAE;AAChE;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,2BAA2B,EAAE;AACpE;AACA;AACA;AACA,2BAA2B,kCAAkC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,2CAA2C,4BAA4B,EAAE;AACzE;AACA;AACA;AACA,+BAA+B,mCAAmC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,SAAS,KAAK,SAAS,GAAG,SAAS;AAC7D,eAAe,SAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AAClE;AACA,4BAA4B,SAAS,GAAG,SAAS;AACjD;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAC9E;AACA,8BAA8B,iBAAiB;AAC/C;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,qBAAqB;AACpC,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,iCAAiC,SAAS,eAAe,YAAY,EAAE;AACvE;AACA;AACA;AACA,iCAAiC,SAAS;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,SAAS,eAAe,YAAY,EAAE;AAC3E;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,oCAAoC;AAC9C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,4CAA4C,kBAAkB,EAAE;AAChE;AACA;AACA;AACA,gCAAgC,qCAAqC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,qCAAqC;AAC/C,UAAU;AACV;AACA;AACA,uCAAuC,kBAAkB,EAAE;AAC3D;AACA;AACA;AACA,2BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS,KAAK,SAAS,GAAG,SAAS;AACtD,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AACxE;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS,GAAG,SAAS,GAAG,SAAS;AACnD,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB;AAChF;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,KAAK,SAAS,GAAG,SAAS;AACpD,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA,uBAAuB,iBAAiB,GAAG,iBAAiB;AAC5D,sBAAsB,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA,eAAe,iBAAiB,GAAG,iBAAiB;AACpD;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc,OAAO,QAAQ,SAAS,GAAG,SAAS,GAAG;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8BAA8B;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,UAAU,8CAA8C;AACxD,UAAU;AACV;AACA;AACA,oCAAoC,kBAAkB,EAAE;AACxD;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,gDAAgD;AAC1D,UAAU;AACV;AACA;AACA,kCAAkC,mBAAmB,EAAE;AACvD;AACA;AACA;AACA,sBAAsB,2BAA2B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,eAAe,EAAE;AACjB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,sBAAsB;AACrC;AACA,eAAe,KAAK;AACpB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,UAAU;AACV;AACA;AACA;AACA;AACA,QAAQ;AACR,cAAc,OAAO,4BAA4B,QAAQ,8BAA8B;AACvF;AACA;AACA,cAAc,UAAU,4BAA4B,YAAY,8BAA8B;AAC9F;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,qCAAqC;AACpD;AACA,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,gDAAgD;AAC1D,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA,uCAAuC,iBAAiB,EAAE;AAC1D;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,cAAc,iBAAiB,EAAE;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA,QAAQ,IAAI;AACZ,cAAc,8BAA8B;AAC5C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU;AACV;AACA;AACA,oCAAoC,kBAAkB,EAAE;AACxD;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oBAAoB;AACnC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,gBAAgB,OAAO;AACvB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mCAAmC;AAC7C,UAAU;AACV;AACA;AACA;AACA,sBAAsB,oCAAoC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,yBAAyB;AACxC;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU;AACV;AACA;AACA,qCAAqC,eAAe,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oBAAoB,iCAAiC;AACrD,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kDAAkD,kBAAkB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,qBAAqB;AACpC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB;AACA,eAAe,QAAQ;AACvB;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB;AACA,6BAA6B,mBAAmB,cAAc,EAAE,EAAE;AAClE;AACA;AACA,6BAA6B,mBAAmB,cAAc,EAAE,EAAE;AAClE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,iCAAiC,kBAAkB,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA,kDAAkD,kBAAkB,EAAE;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB;AACrB;AACA,0BAA0B,SAAS;AACnC;AACA;AACA,0BAA0B,SAAS;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,MAAM;AACvB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,mBAAmB,SAAS,GAAG,SAAS,GAAG,SAAS;AACpD,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,uBAAuB,OAAO,SAAS,EAAE,GAAG,OAAO,iBAAiB,EAAE;AACtE,cAAc,OAAO,iBAAiB;AACtC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD,qBAAqB,6BAA6B;AAClD,qBAAqB;AACrB;AACA;AACA,qCAAqC,mBAAmB,EAAE;AAC1D;AACA;AACA;AACA,yBAAyB,2BAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,qBAAqB,4BAA4B;AACjD,qBAAqB,6BAA6B;AAClD,qBAAqB;AACrB;AACA;AACA,yCAAyC,mBAAmB,EAAE;AAC9D;AACA;AACA;AACA,6BAA6B,4BAA4B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB,OAAO,SAAS;AACrC,6BAA6B,gBAAgB,SAAS,GAAG;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,8BAA8B,gBAAgB,SAAS,GAAG;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,QAAQ;AACR,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,KAAK;AACpB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,oBAAoB,EAAE;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA,QAAQ;AACR,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD,qBAAqB;AACrB;AACA;AACA,uCAAuC,cAAc,EAAE;AACvD,cAAc,2BAA2B;AACzC;AACA;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,gBAAgB,SAAS,GAAG,SAAS;AACrC;AACA;AACA;AACA,gBAAgB,SAAS,GAAG,SAAS;AACrC;AACA;AACA;AACA,cAAc,QAAQ,iBAAiB,GAAG,iBAAiB;AAC3D;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,UAAU;AACzB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,oBAAoB;AACpB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,KAAK;;AAEL;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA,gCAAgC;AAChC,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB,QAAQ,OAAO,+BAA+B,EAAE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO,WAAW;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA,QAAQ,IAAI;AACZ,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,iBAAiB,QAAQ;AACzB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA;AACA;AACA;AACA,cAAc,QAAQ,QAAQ,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ,QAAQ,EAAE;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,qBAAqB,QAAQ,OAAO,SAAS,EAAE;AAC/C;AACA,iDAAiD,cAAc,EAAE;AACjE;AACA;AACA;AACA,iDAAiD,sBAAsB,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,aAAa;AAC5B,eAAe,SAAS;AACxB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO,WAAW;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,KAAK;AACvC;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,eAAe,gBAAgB;AAC/B,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,eAAe,OAAO;AACtB;AACA,gBAAgB,OAAO;AACvB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC,qBAAqB,UAAU;AAC/B;AACA;AACA,sEAAsE,2BAA2B,EAAE;AACnG,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA,4DAA4D;AAC5D,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA,qDAAqD,2BAA2B,EAAE;AAClF,wCAAwC,aAAa,eAAe,EAAE;AACtE,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA,wDAAwD,qCAAqC;AAC7F;AACA;AACA;AACA;AACA,0DAA0D,qBAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,YAAY;AACvD,0CAA0C,QAAQ;AAClD,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B,mCAAmC;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD;AACA;AACA;AACA;AACA,4CAA4C;;AAE5C;AACA,uDAAuD;AACvD;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,+BAA+B,iCAAiC;AAChE,cAAc;AACd;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,gBAAgB,OAAO;AACvB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC,aAAa,QAAQ,QAAQ,UAAU,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,cAAc;AAC7B,gBAAgB,OAAO;AACvB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB,eAAe,KAAK;AACpB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,qBAAqB;AACpC,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,aAAa,qBAAqB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU;AACV;AACA;AACA,qCAAqC,mBAAmB,cAAc,EAAE,EAAE;AAC1E,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA,4CAA4C,SAAS;AACrD;AACA;AACA,eAAe,SAAS,GAAG,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,EAAE;AACnB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,8CAA8C;AACxD,UAAU;AACV;AACA;AACA;AACA,mCAAmC,mCAAmC;AACtE,eAAe,8CAA8C;AAC7D;AACA;AACA;AACA,eAAe,4BAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,UAAU;AACV;AACA;AACA,oCAAoC,iBAAiB;AACrD,eAAe,yBAAyB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,EAAE;AACjB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,UAAU;AACV;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,OAAO,qBAAqB,EAAE;AACxC,UAAU,OAAO,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,KAAK;AACpB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,eAAe,OAAO;AACtB,eAAe,OAAO,YAAY;AAClC,eAAe,QAAQ;AACvB,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB,GAAG,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,qDAAqD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yBAAyB;AACxC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,UAAU,OAAO,SAAS,EAAE;AAC5B,UAAU,OAAO,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,SAAS;AACxB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE;AACjB,iBAAiB,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,YAAY,EAAE;AACnD,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AACpE;AACA,sCAAsC,YAAY,EAAE;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,EAAE;AACnB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C;AACA,qCAAqC,YAAY,EAAE;AACnD,cAAc;AACd;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,OAAO;AACtB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAM;AACrB,eAAe,SAAS;AACxB,iBAAiB,OAAO;AACxB;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;AACpE;AACA,qCAAqC,YAAY,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK,MAAM,iBAAiB;;AAE5B;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,4DAA4D;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,yCAAyC;AAC7D;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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AA6B,IAAI;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,8BAA8B;AAClE;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,oBAAoB;AAC9B;AACA;;AAEA;AACA,UAAU,UAAU;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC/NA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;;ACvL1B;;AAEZ,cAAc,mBAAO,CAAC,gDAAS;AAC/B,cAAc,mBAAO,CAAC,uDAAS;AAC/B,oBAAoB,mBAAO,CAAC,sEAAoB;;AAEhD;AACA;;AAEA;AACA;;AAEA;;AAEA,iCAAiC;AACjC,cAAc;;AAEd;;AAEA;AACA,oDAAoD;;AAEpD;AACA,uEAAuE;;AAEvE;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kEAAkE;AAClE;AACA,4DAA4D,0BAA0B;AACtF;AACA,EAAE;AACF;AACA,6HAA6H;;AAE7H;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,8BAA8B,WAAW,GAAG,MAAM;;AAElD;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACvEA,CAAC;AACD,MAAM,IAA2B;AACjC;AACA;AACA;AACA;AACA,OAAO,EAKJ;AACH,CAAC;AACD;AACA,6BAA6B,0mIAA0mI;AACvoI;;AAEA;AACA;AACA;AACA;;AAEA;A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;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;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","file":"mermaid.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"mermaid\"] = factory();\n\telse\n\t\troot[\"mermaid\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/mermaid.js\");\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #BDD5EA;\\n stroke: purple;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: lightgrey; }\\n\\n.edgePath .path {\\n stroke: lightgrey;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: #e8e8e8; }\\n\\n.cluster rect {\\n fill: #6D6D65;\\n stroke: rgba(255, 255, 255, 0.25);\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #F9FFFE; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #6D6D65;\\n border: 1px solid rgba(255, 255, 255, 0.25);\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #81B1DB;\\n fill: #BDD5EA; }\\n\\ntext.actor {\\n fill: black;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: lightgrey; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: lightgrey; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: lightgrey; }\\n\\n#arrowhead {\\n fill: lightgrey; }\\n\\n#crosshead path {\\n fill: lightgrey !important;\\n stroke: lightgrey !important; }\\n\\n.messageText {\\n fill: lightgrey;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #81B1DB;\\n fill: #BDD5EA; }\\n\\n.labelText {\\n fill: #323D47;\\n stroke: none; }\\n\\n.loopText {\\n fill: lightgrey;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #81B1DB; }\\n\\n.note {\\n stroke: rgba(255, 255, 255, 0.25);\\n fill: #fff5ad; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: rgba(255, 255, 255, 0.3); }\\n\\n.section2 {\\n fill: #EAE8B9; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle1 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle2 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle3 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: lightgrey;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: #DB5757;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: #323D47;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: #323D47;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: #323D47; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #BDD5EA;\\n stroke: rgba(255, 255, 255, 0.5); }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: lightgrey; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: lightgrey; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #81B1DB;\\n stroke: rgba(255, 255, 255, 0.5); }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: #323D47 !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: grey;\\n fill: lightgrey;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: #323D47 !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #E83737;\\n fill: #E83737;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #E83737;\\n fill: #81B1DB;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #E83737;\\n fill: lightgrey;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: #323D47 !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: #323D47 !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: #323D47; }\\n\\ng.classGroup text {\\n fill: purple;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #BDD5EA;\\n stroke: purple; }\\n\\ng.classGroup line {\\n stroke: purple;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #BDD5EA;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: purple;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: purple;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #BDD5EA;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #BDD5EA;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #ECECFF;\\n stroke: #9370DB;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: #333333; }\\n\\n.edgePath .path {\\n stroke: #333333;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: #e8e8e8; }\\n\\n.cluster rect {\\n fill: #ffffde;\\n stroke: #aaaa33;\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #333; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #ffffde;\\n border: 1px solid #aaaa33;\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #CCCCFF;\\n fill: #ECECFF; }\\n\\ntext.actor {\\n fill: black;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: grey; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n#arrowhead {\\n fill: #333; }\\n\\n#crosshead path {\\n fill: #333 !important;\\n stroke: #333 !important; }\\n\\n.messageText {\\n fill: #333;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #CCCCFF;\\n fill: #ECECFF; }\\n\\n.labelText {\\n fill: black;\\n stroke: none; }\\n\\n.loopText {\\n fill: black;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #CCCCFF; }\\n\\n.note {\\n stroke: #aaaa33;\\n fill: #fff5ad; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: rgba(102, 102, 255, 0.49); }\\n\\n.section2 {\\n fill: #fff400; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #333; }\\n\\n.sectionTitle1 {\\n fill: #333; }\\n\\n.sectionTitle2 {\\n fill: #333; }\\n\\n.sectionTitle3 {\\n fill: #333; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: lightgrey;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: red;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: black;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: black;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: white; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #8a90dd;\\n stroke: #534fbc; }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: black; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: black; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #bfc7ff;\\n stroke: #534fbc; }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: black !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: grey;\\n fill: lightgrey;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: black !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #ff8888;\\n fill: red;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #ff8888;\\n fill: #bfc7ff;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #ff8888;\\n fill: lightgrey;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: black !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: black !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: black; }\\n\\ng.classGroup text {\\n fill: #9370DB;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #ECECFF;\\n stroke: #9370DB; }\\n\\ng.classGroup line {\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #ECECFF;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: #9370DB;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: #9370DB;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #ECECFF;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #ECECFF;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #cde498;\\n stroke: #13540c;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: green; }\\n\\n.edgePath .path {\\n stroke: green;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: #e8e8e8; }\\n\\n.cluster rect {\\n fill: #cdffb2;\\n stroke: #6eaa49;\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #333; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #cdffb2;\\n border: 1px solid #6eaa49;\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #13540c;\\n fill: #cde498; }\\n\\ntext.actor {\\n fill: black;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: grey; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n#arrowhead {\\n fill: #333; }\\n\\n#crosshead path {\\n fill: #333 !important;\\n stroke: #333 !important; }\\n\\n.messageText {\\n fill: #333;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #326932;\\n fill: #cde498; }\\n\\n.labelText {\\n fill: black;\\n stroke: none; }\\n\\n.loopText {\\n fill: black;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #326932; }\\n\\n.note {\\n stroke: #6eaa49;\\n fill: #fff5ad; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: #6eaa49; }\\n\\n.section2 {\\n fill: #6eaa49; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #333; }\\n\\n.sectionTitle1 {\\n fill: #333; }\\n\\n.sectionTitle2 {\\n fill: #333; }\\n\\n.sectionTitle3 {\\n fill: #333; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: lightgrey;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: red;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: black;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: black;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: white; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #487e3a;\\n stroke: #13540c; }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: black; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: black; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #cde498;\\n stroke: #13540c; }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: black !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: grey;\\n fill: lightgrey;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: black !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #ff8888;\\n fill: red;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #ff8888;\\n fill: #cde498;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #ff8888;\\n fill: lightgrey;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: black !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: black !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: black; }\\n\\ng.classGroup text {\\n fill: #13540c;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #cde498;\\n stroke: #13540c; }\\n\\ng.classGroup line {\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #cde498;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: #13540c;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: #13540c;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #cde498;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #cde498;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #eee;\\n stroke: #999;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: #333333; }\\n\\n.edgePath .path {\\n stroke: #666;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: white; }\\n\\n.cluster rect {\\n fill: #eaf2fb;\\n stroke: #26a;\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #333; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #eaf2fb;\\n border: 1px solid #26a;\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #999;\\n fill: #eee; }\\n\\ntext.actor {\\n fill: #333;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: #666; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n#arrowhead {\\n fill: #333; }\\n\\n#crosshead path {\\n fill: #333 !important;\\n stroke: #333 !important; }\\n\\n.messageText {\\n fill: #333;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #999;\\n fill: #eee; }\\n\\n.labelText {\\n fill: #333;\\n stroke: none; }\\n\\n.loopText {\\n fill: #333;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #999; }\\n\\n.note {\\n stroke: #777700;\\n fill: #ffa; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: #80b3e6; }\\n\\n.section2 {\\n fill: #80b3e6; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #333; }\\n\\n.sectionTitle1 {\\n fill: #333; }\\n\\n.sectionTitle2 {\\n fill: #333; }\\n\\n.sectionTitle3 {\\n fill: #333; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: #e6e6e6;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: #d42;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: #333;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: #333;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: white; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #26a;\\n stroke: #1a4d80; }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: #333; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: #333; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #eee;\\n stroke: #1a4d80; }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: #333 !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: #666;\\n fill: #bbb;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: #333 !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #b1361b;\\n fill: #d42;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #b1361b;\\n fill: #eee;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #b1361b;\\n fill: #bbb;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: #333 !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: #333 !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: #333; }\\n\\ng.classGroup text {\\n fill: #999;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #eee;\\n stroke: #999; }\\n\\ng.classGroup line {\\n stroke: #999;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #eee;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: #999;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: #999;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #eee;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #eee;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","import variance from \"./variance\";\n\nexport default function(array, f) {\n var v = variance(array, f);\n return v ? Math.sqrt(v) : v;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n return [min, max];\n}\n","import {slice} from \"./array\";\nimport bisect from \"./bisect\";\nimport constant from \"./constant\";\nimport extent from \"./extent\";\nimport identity from \"./identity\";\nimport range from \"./range\";\nimport {tickStep} from \"./ticks\";\nimport sturges from \"./threshold/sturges\";\n\nexport default function() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n var i,\n n = data.length,\n x,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n tz = tickStep(x0, x1, tz);\n tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n }\n\n // Remove any thresholds outside the domain.\n var m = tz.length;\n while (tz[0] <= x0) tz.shift(), --m;\n while (tz[m - 1] > x1) tz.pop(), --m;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n for (i = 0; i < n; ++i) {\n x = values[i];\n if (x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n };\n\n return histogram;\n}\n","export default function(x) {\n return x;\n}\n","export {default as bisect, bisectRight, bisectLeft} from \"./bisect\";\nexport {default as ascending} from \"./ascending\";\nexport {default as bisector} from \"./bisector\";\nexport {default as cross} from \"./cross\";\nexport {default as descending} from \"./descending\";\nexport {default as deviation} from \"./deviation\";\nexport {default as extent} from \"./extent\";\nexport {default as histogram} from \"./histogram\";\nexport {default as thresholdFreedmanDiaconis} from \"./threshold/freedmanDiaconis\";\nexport {default as thresholdScott} from \"./threshold/scott\";\nexport {default as thresholdSturges} from \"./threshold/sturges\";\nexport {default as max} from \"./max\";\nexport {default as mean} from \"./mean\";\nexport {default as median} from \"./median\";\nexport {default as merge} from \"./merge\";\nexport {default as min} from \"./min\";\nexport {default as pairs} from \"./pairs\";\nexport {default as permute} from \"./permute\";\nexport {default as quantile} from \"./quantile\";\nexport {default as range} from \"./range\";\nexport {default as scan} from \"./scan\";\nexport {default as shuffle} from \"./shuffle\";\nexport {default as sum} from \"./sum\";\nexport {default as ticks, tickIncrement, tickStep} from \"./ticks\";\nexport {default as transpose} from \"./transpose\";\nexport {default as variance} from \"./variance\";\nexport {default as zip} from \"./zip\";\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n return max;\n}\n","import number from \"./number\";\n\nexport default function(values, valueof) {\n var n = values.length,\n m = n,\n i = -1,\n value,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) sum += value;\n else --m;\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;\n else --m;\n }\n }\n\n if (m) return sum / m;\n}\n","import ascending from \"./ascending\";\nimport number from \"./number\";\nimport quantile from \"./quantile\";\n\nexport default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n numbers = [];\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) {\n numbers.push(value);\n }\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) {\n numbers.push(value);\n }\n }\n }\n\n return quantile(numbers.sort(ascending), 0.5);\n}\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && min > value) {\n min = value;\n }\n }\n }\n }\n }\n\n return min;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","export default function(array, f) {\n if (f == null) f = pair;\n var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = f(p, p = array[++i]);\n return pairs;\n}\n\nexport function pair(a, b) {\n return [a, b];\n}\n","export default function(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import ascending from \"./ascending\";\n\nexport default function(values, compare) {\n if (!(n = values.length)) return;\n var n,\n i = 0,\n j = 0,\n xi,\n xj = values[j];\n\n if (compare == null) compare = ascending;\n\n while (++i < n) {\n if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n xj = xi, j = i;\n }\n }\n\n if (compare(xj, xj) === 0) return j;\n}\n","export default function(array, i0, i1) {\n var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n\n return array;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n }\n }\n\n else {\n while (++i < n) {\n if (value = +valueof(values[i], i, values)) sum += value;\n }\n }\n\n return sum;\n}\n","import {map} from \"../array\";\nimport ascending from \"../ascending\";\nimport number from \"../number\";\nimport quantile from \"../quantile\";\n\nexport default function(values, min, max) {\n values = map.call(values, number).sort(ascending);\n return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n}\n","import deviation from \"../deviation\";\n\nexport default function(values, min, max) {\n return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","import min from \"./min\";\n\nexport default function(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n}\n\nfunction length(d) {\n return d.length;\n}\n","import number from \"./number\";\n\nexport default function(values, valueof) {\n var n = values.length,\n m = 0,\n i = -1,\n mean = 0,\n value,\n delta,\n sum = 0;\n\n if (valueof == null) {\n while (++i < n) {\n if (!isNaN(value = number(values[i]))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(value = number(valueof(values[i], i, values)))) {\n delta = value - mean;\n mean += delta / ++m;\n sum += delta * (value - mean);\n }\n }\n }\n\n if (m > 1) return sum / (m - 1);\n}\n","import transpose from \"./transpose\";\n\nexport default function() {\n return transpose(arguments);\n}\n","export var slice = Array.prototype.slice;\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export default function(x) {\n return x;\n}\n","export {\n axisTop,\n axisRight,\n axisBottom,\n axisLeft\n} from \"./axis\";\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {customEvent, event, mouse, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant\";\nimport BrushEvent from \"./event\";\nimport noevent, {nopropagation} from \"./noevent\";\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nvar X = {\n name: \"x\",\n handles: [\"e\", \"w\"].map(type),\n input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"].map(type),\n input: function(xy) { return xy; },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n return brush(X);\n}\n\nexport function brushY() {\n return brush(Y);\n}\n\nexport default function() {\n return brush(XY);\n}\n\nfunction brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n listeners = dispatch(brush, \"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\")\n .on(\"mousedown.brush touchstart.brush\", started);\n }\n\n brush.move = function(group, selection) {\n if (group.selection) {\n group\n .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && empty(selection1) ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 && selection1 ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 == null || empty(selection1) ? null : selection1;\n redraw.call(that);\n emit.start().brush().end();\n });\n }\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args) {\n return that.__brush.emitter || new Emitter(that, args);\n }\n\n function Emitter(that, args) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function() {\n if (this.starting) this.starting = false, this.emit(\"start\");\n return this;\n },\n brush: function() {\n this.emit(\"brush\");\n return this;\n },\n end: function() {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n return this;\n },\n emit: function(type) {\n customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function started() {\n if (event.touches) { if (event.changedTouches.length < event.touches.length) return noevent(); }\n else if (touchending) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx,\n dy,\n moving,\n shifting = signX && signY && event.shiftKey,\n lockX,\n lockY,\n point0 = mouse(that),\n point = point0,\n emit = emitter(that, arguments).beforestart();\n\n if (type === \"overlay\") {\n state.selection = selection = [\n [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n ];\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n group\n .on(\"touchmove.brush\", moved, true)\n .on(\"touchend.brush touchcancel.brush\", ended, true);\n } else {\n var view = select(event.view)\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n\n dragDisable(event.view);\n }\n\n nopropagation();\n interrupt(that);\n redraw.call(that);\n emit.start();\n\n function moved() {\n var point1 = mouse(that);\n if (shifting && !lockX && !lockY) {\n if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n else lockX = true;\n }\n point = point1;\n moving = true;\n noevent();\n move();\n }\n\n function move() {\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush();\n }\n }\n\n function ended() {\n nopropagation();\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n group.on(\"touchmove.brush touchend.brush touchcancel.brush\", null);\n } else {\n dragEnable(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end();\n }\n\n function keydowned() {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move();\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n\n function keyupped() {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move();\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move();\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = extent.apply(this, arguments);\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(target, type, selection) {\n this.target = target;\n this.type = type;\n this.selection = selection;\n}\n","export {\n default as brush,\n brushX,\n brushY,\n brushSelection\n} from \"./brush\";\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export var slice = Array.prototype.slice;\n","import {range} from \"d3-array\";\nimport {max, tau} from \"./math\";\n\nfunction compareValue(compare) {\n return function(a, b) {\n return compare(\n a.source.value + a.target.value,\n b.source.value + b.target.value\n );\n };\n}\n\nexport default function() {\n var padAngle = 0,\n sortGroups = null,\n sortSubgroups = null,\n sortChords = null;\n\n function chord(matrix) {\n var n = matrix.length,\n groupSums = [],\n groupIndex = range(n),\n subgroupIndex = [],\n chords = [],\n groups = chords.groups = new Array(n),\n subgroups = new Array(n * n),\n k,\n x,\n x0,\n dx,\n i,\n j;\n\n // Compute the sum.\n k = 0, i = -1; while (++i < n) {\n x = 0, j = -1; while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(range(n));\n k += x;\n }\n\n // Sort groups…\n if (sortGroups) groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n\n // Sort subgroups…\n if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n\n // Convert the sum to scaling factor for [0, 2pi].\n // TODO Allow start and end angle to be specified?\n // TODO Allow padding to be specified as percentage?\n k = max(0, tau - padAngle * n) / k;\n dx = k ? padAngle : tau / n;\n\n // Compute the start and end angle for each group and subgroup.\n // Note: Opera has a bug reordering object literal properties!\n x = 0, i = -1; while (++i < n) {\n x0 = x, j = -1; while (++j < n) {\n var di = groupIndex[i],\n dj = subgroupIndex[di][j],\n v = matrix[di][dj],\n a0 = x,\n a1 = x += v * k;\n subgroups[dj * n + di] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += dx;\n }\n\n // Generate chords for each (non-empty) subgroup-subgroup link.\n i = -1; while (++i < n) {\n j = i - 1; while (++j < n) {\n var source = subgroups[j * n + i],\n target = subgroups[i * n + j];\n if (source.value || target.value) {\n chords.push(source.value < target.value\n ? {source: target, target: source}\n : {source: source, target: target});\n }\n }\n }\n\n return sortChords ? chords.sort(sortChords) : chords;\n }\n\n chord.padAngle = function(_) {\n return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n };\n\n chord.sortGroups = function(_) {\n return arguments.length ? (sortGroups = _, chord) : sortGroups;\n };\n\n chord.sortSubgroups = function(_) {\n return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n };\n\n chord.sortChords = function(_) {\n return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n };\n\n return chord;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export {default as chord} from \"./chord\";\nexport {default as ribbon} from \"./ribbon\";\n","export var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport {cos, halfPi, sin} from \"./math\";\nimport {path} from \"d3-path\";\n\nfunction defaultSource(d) {\n return d.source;\n}\n\nfunction defaultTarget(d) {\n return d.target;\n}\n\nfunction defaultRadius(d) {\n return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n return d.endAngle;\n}\n\nexport default function() {\n var source = defaultSource,\n target = defaultTarget,\n radius = defaultRadius,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n argv = slice.call(arguments),\n s = source.apply(this, argv),\n t = target.apply(this, argv),\n sr = +radius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - halfPi,\n sa1 = endAngle.apply(this, argv) - halfPi,\n sx0 = sr * cos(sa0),\n sy0 = sr * sin(sa0),\n tr = +radius.apply(this, (argv[0] = t, argv)),\n ta0 = startAngle.apply(this, argv) - halfPi,\n ta1 = endAngle.apply(this, argv) - halfPi;\n\n if (!context) context = buffer = path();\n\n context.moveTo(sx0, sy0);\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n context.quadraticCurveTo(0, 0, sx0, sy0);\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n ribbon.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : radius;\n };\n\n ribbon.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\n };\n\n ribbon.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\n };\n\n ribbon.source = function(_) {\n return arguments.length ? (source = _, ribbon) : source;\n };\n\n ribbon.target = function(_) {\n return arguments.length ? (target = _, ribbon) : target;\n };\n\n ribbon.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n };\n\n return ribbon;\n}\n","export default function(map) {\n var entries = [];\n for (var key in map) entries.push({key: key, value: map[key]});\n return entries;\n}\n","export {default as nest} from \"./nest\";\nexport {default as set} from \"./set\";\nexport {default as map} from \"./map\";\nexport {default as keys} from \"./keys\";\nexport {default as values} from \"./values\";\nexport {default as entries} from \"./entries\";\n","export default function(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","export default function(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","export {default as color, rgb, hsl} from \"./color\";\nexport {default as lab, hcl, lch, gray} from \"./lab\";\nexport {default as cubehelix} from \"./cubehelix\";\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","export default function(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(a, b) {\n return a - b;\n}\n","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array\";\nimport ascending from \"./ascending\";\nimport area from \"./area\";\nimport constant from \"./constant\";\nimport contains from \"./contains\";\nimport noop from \"./noop\";\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nexport default function() {\n var dx = 1,\n dy = 1,\n threshold = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = extent(values), start = domain[0], stop = domain[1];\n tz = tickStep(start, stop, tz);\n tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\nexport default function() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (+x(d, i, data) + o) >> k,\n yi = (+y(d, i, data) + o) >> k,\n wi = +weight(d, i, data);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += wi;\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = max(values0);\n tz = tickStep(0, stop, tz);\n tz = range(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n}\n","export {default as contours} from \"./contours\";\nexport {default as contourDensity} from \"./density\";\n","export default function() {}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export {default as dispatch} from \"./dispatch\";\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag\";\nimport noevent, {nopropagation} from \"./noevent\";\nimport constant from \"./constant\";\nimport DragEvent from \"./event\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","export {default as drag} from \"./drag\";\nexport {default as dragDisable, yesdrag as dragEnable} from \"./nodrag\";\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatRows = csv.formatRows;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n })).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(text) {\n return text == null ? \"\"\n : reFormat.test(text += \"\") ? \"\\\"\" + text.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : text;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatRows: formatRows\n };\n}\n","export {default as dsvFormat} from \"./dsv\";\nexport {csvParse, csvParseRows, csvFormat, csvFormatRows} from \"./csv\";\nexport {tsvParse, tsvParseRows, tsvFormat, tsvFormatRows} from \"./tsv\";\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatRows = tsv.formatRows;\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","export function expIn(t) {\n return Math.pow(2, 10 * t - 10);\n}\n\nexport function expOut(t) {\n return 1 - Math.pow(2, -10 * t);\n}\n\nexport function expInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\n}\n","export {\n linear as easeLinear\n} from \"./linear\";\n\nexport {\n quadInOut as easeQuad,\n quadIn as easeQuadIn,\n quadOut as easeQuadOut,\n quadInOut as easeQuadInOut\n} from \"./quad\";\n\nexport {\n cubicInOut as easeCubic,\n cubicIn as easeCubicIn,\n cubicOut as easeCubicOut,\n cubicInOut as easeCubicInOut\n} from \"./cubic\";\n\nexport {\n polyInOut as easePoly,\n polyIn as easePolyIn,\n polyOut as easePolyOut,\n polyInOut as easePolyInOut\n} from \"./poly\";\n\nexport {\n sinInOut as easeSin,\n sinIn as easeSinIn,\n sinOut as easeSinOut,\n sinInOut as easeSinInOut\n} from \"./sin\";\n\nexport {\n expInOut as easeExp,\n expIn as easeExpIn,\n expOut as easeExpOut,\n expInOut as easeExpInOut\n} from \"./exp\";\n\nexport {\n circleInOut as easeCircle,\n circleIn as easeCircleIn,\n circleOut as easeCircleOut,\n circleInOut as easeCircleInOut\n} from \"./circle\";\n\nexport {\n bounceOut as easeBounce,\n bounceIn as easeBounceIn,\n bounceOut as easeBounceOut,\n bounceInOut as easeBounceInOut\n} from \"./bounce\";\n\nexport {\n backInOut as easeBack,\n backIn as easeBackIn,\n backOut as easeBackOut,\n backInOut as easeBackInOut\n} from \"./back\";\n\nexport {\n elasticOut as easeElastic,\n elasticIn as easeElasticIn,\n elasticOut as easeElasticOut,\n elasticInOut as easeElasticInOut\n} from \"./elastic\";\n","export function linear(t) {\n return +t;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","export function quadIn(t) {\n return t * t;\n}\n\nexport function quadOut(t) {\n return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","function responseBlob(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.blob();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n","function responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.arrayBuffer();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n","export {default as blob} from \"./blob\";\nexport {default as buffer} from \"./buffer\";\nexport {default as dsv, csv, tsv} from \"./dsv\";\nexport {default as image} from \"./image\";\nexport {default as json} from \"./json\";\nexport {default as text} from \"./text\";\nexport {default as xml, html, svg} from \"./xml\";\n","function responseJson(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.json();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseJson);\n}\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import text from \"./text\";\n\nfunction parser(type) {\n return function(input, init) {\n return text(input, init).then(function(text) {\n return (new DOMParser).parseFromString(text, type);\n });\n };\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","export default function(x, y) {\n var nodes;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {quadtree} from \"d3-quadtree\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export {default as forceCenter} from \"./center\";\nexport {default as forceCollide} from \"./collide\";\nexport {default as forceLink} from \"./link\";\nexport {default as forceManyBody} from \"./manyBody\";\nexport {default as forceRadial} from \"./radial\";\nexport {default as forceSimulation} from \"./simulation\";\nexport {default as forceX} from \"./x\";\nexport {default as forceY} from \"./y\";\n","export default function() {\n return (Math.random() - 0.5) * 1e-6;\n}\n","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {map} from \"d3-collection\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"missing: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle();\n y = target.y + target.vy - source.y - source.vy || jiggle();\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = map(nodes, id),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {quadtree} from \"d3-quadtree\";\nimport {x, y} from \"./simulation\";\n\nexport default function() {\n var nodes,\n node,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant\";\n\nexport default function(radius, x, y) {\n var nodes,\n strength = constant(0.1),\n strengths,\n radiuses;\n\n if (typeof radius !== \"function\") radius = constant(+radius);\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force(alpha) {\n for (var i = 0, n = nodes.length; i < n; ++i) {\n var node = nodes[i],\n dx = node.x - x || 1e-6,\n dy = node.y - y || 1e-6,\n r = Math.sqrt(dx * dx + dy * dy),\n k = (radiuses[i] - r) * strengths[i] * alpha / r;\n node.vx += dx * k;\n node.vy += dy * k;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n radiuses = new Array(n);\n for (i = 0; i < n; ++i) {\n radiuses[i] = +radius(nodes[i], i, nodes);\n strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _, initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {map} from \"d3-collection\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\");\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick() {\n var i, n = nodes.length, node;\n\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.each(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import constant from \"./constant\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","export {default as formatDefaultLocale, format, formatPrefix} from \"./defaultLocale\";\nexport {default as formatLocale} from \"./locale\";\nexport {default as formatSpecifier} from \"./formatSpecifier\";\nexport {default as precisionFixed} from \"./precisionFixed\";\nexport {default as precisionPrefix} from \"./precisionPrefix\";\nexport {default as precisionRound} from \"./precisionRound\";\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {asin, atan2, cos, degrees, epsilon, epsilon2, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = sqrt(cx * cx + cy * cy + cz * cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n stream(object, centroidStream);\n\n var x = X2,\n y = Y2,\n z = Z2,\n m = x * x + y * y + z * z;\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import noop from \"../noop\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y) {\n line.push([x, y]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian\";\nimport {circleStream} from \"../circle\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math\";\nimport pointEqual from \"../pointEqual\";\nimport clip from \"./index\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import clipRectangle from \"./rectangle\";\n\nexport default function() {\n var x0 = 0,\n y0 = 0,\n x1 = 960,\n y1 = 500,\n cache,\n cacheStream,\n clip;\n\n return clip = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n}\n","import clipBuffer from \"./buffer\";\nimport clipRejoin from \"./rejoin\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"../math\";\nimport clipBuffer from \"./buffer\";\nimport clipLine from \"./line\";\nimport clipRejoin from \"./rejoin\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {default as polygonContains} from \"./polygonContains\";\nimport {default as distance} from \"./distance\";\nimport {epsilon, radians} from \"./math\";\n\nvar containsObjectType = {\n Feature: function(object, point) {\n return containsGeometry(object.geometry, point);\n },\n FeatureCollection: function(object, point) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n return false;\n }\n};\n\nvar containsGeometryType = {\n Sphere: function() {\n return true;\n },\n Point: function(object, point) {\n return containsPoint(object.coordinates, point);\n },\n MultiPoint: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n return false;\n },\n LineString: function(object, point) {\n return containsLine(object.coordinates, point);\n },\n MultiLineString: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsLine(coordinates[i], point)) return true;\n return false;\n },\n Polygon: function(object, point) {\n return containsPolygon(object.coordinates, point);\n },\n MultiPolygon: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n return false;\n },\n GeometryCollection: function(object, point) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n return false;\n }\n};\n\nfunction containsGeometry(geometry, point) {\n return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n ? containsGeometryType[geometry.type](geometry, point)\n : false;\n}\n\nfunction containsPoint(coordinates, point) {\n return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n var ab = distance(coordinates[0], coordinates[1]),\n ao = distance(coordinates[0], point),\n ob = distance(point, coordinates[1]);\n return ao + ob <= ab + epsilon;\n}\n\nfunction containsPolygon(coordinates, point) {\n return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n return [point[0] * radians, point[1] * radians];\n}\n\nexport default function(object, point) {\n return (object && containsObjectType.hasOwnProperty(object.type)\n ? containsObjectType[object.type]\n : containsGeometry)(object, point);\n}\n","import length from \"./length\";\n\nvar coordinates = [null, null],\n object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length(object);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","export default function(x) {\n return x;\n}\n","export {default as geoArea} from \"./area\";\nexport {default as geoBounds} from \"./bounds\";\nexport {default as geoCentroid} from \"./centroid\";\nexport {default as geoCircle} from \"./circle\";\nexport {default as geoClipAntimeridian} from \"./clip/antimeridian\";\nexport {default as geoClipCircle} from \"./clip/circle\";\nexport {default as geoClipExtent} from \"./clip/extent\"; // DEPRECATED! Use d3.geoIdentity().clipExtent(…).\nexport {default as geoClipRectangle} from \"./clip/rectangle\";\nexport {default as geoContains} from \"./contains\";\nexport {default as geoDistance} from \"./distance\";\nexport {default as geoGraticule, graticule10 as geoGraticule10} from \"./graticule\";\nexport {default as geoInterpolate} from \"./interpolate\";\nexport {default as geoLength} from \"./length\";\nexport {default as geoPath} from \"./path/index\";\nexport {default as geoAlbers} from \"./projection/albers\";\nexport {default as geoAlbersUsa} from \"./projection/albersUsa\";\nexport {default as geoAzimuthalEqualArea, azimuthalEqualAreaRaw as geoAzimuthalEqualAreaRaw} from \"./projection/azimuthalEqualArea\";\nexport {default as geoAzimuthalEquidistant, azimuthalEquidistantRaw as geoAzimuthalEquidistantRaw} from \"./projection/azimuthalEquidistant\";\nexport {default as geoConicConformal, conicConformalRaw as geoConicConformalRaw} from \"./projection/conicConformal\";\nexport {default as geoConicEqualArea, conicEqualAreaRaw as geoConicEqualAreaRaw} from \"./projection/conicEqualArea\";\nexport {default as geoConicEquidistant, conicEquidistantRaw as geoConicEquidistantRaw} from \"./projection/conicEquidistant\";\nexport {default as geoEqualEarth, equalEarthRaw as geoEqualEarthRaw} from \"./projection/equalEarth\";\nexport {default as geoEquirectangular, equirectangularRaw as geoEquirectangularRaw} from \"./projection/equirectangular\";\nexport {default as geoGnomonic, gnomonicRaw as geoGnomonicRaw} from \"./projection/gnomonic\";\nexport {default as geoIdentity} from \"./projection/identity\";\nexport {default as geoProjection, projectionMutator as geoProjectionMutator} from \"./projection/index\";\nexport {default as geoMercator, mercatorRaw as geoMercatorRaw} from \"./projection/mercator\";\nexport {default as geoNaturalEarth1, naturalEarth1Raw as geoNaturalEarth1Raw} from \"./projection/naturalEarth1\";\nexport {default as geoOrthographic, orthographicRaw as geoOrthographicRaw} from \"./projection/orthographic\";\nexport {default as geoStereographic, stereographicRaw as geoStereographicRaw} from \"./projection/stereographic\";\nexport {default as geoTransverseMercator, transverseMercatorRaw as geoTransverseMercatorRaw} from \"./projection/transverseMercator\";\nexport {default as geoRotation} from \"./rotation\";\nexport {default as geoStream} from \"./stream\";\nexport {default as geoTransform} from \"./transform\";\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math\";\n\nexport default function(a, b) {\n var x0 = a[0] * radians,\n y0 = a[1] * radians,\n x1 = b[0] * radians,\n y1 = b[1] * radians,\n cy0 = cos(y0),\n sy0 = sin(y0),\n cy1 = cos(y1),\n sy1 = sin(y1),\n kx0 = cy0 * cos(x0),\n ky0 = cy0 * sin(x0),\n kx1 = cy1 * cos(x1),\n ky1 = cy1 * sin(x1),\n d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n k = sin(d);\n\n var interpolate = d ? function(t) {\n var B = sin(t *= d) / k,\n A = sin(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n z = A * sy0 + B * sy1;\n return [\n atan2(y, x) * degrees,\n atan2(z, sqrt(x * x + y * y)) * degrees\n ];\n } : function() {\n return [x0 * degrees, y0 * degrees];\n };\n\n interpolate.distance = d;\n\n return interpolate;\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math\";\nimport noop from \"../noop\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import identity from \"../identity\";\nimport stream from \"../stream\";\nimport pathArea from \"./area\";\nimport pathBounds from \"./bounds\";\nimport pathCentroid from \"./centroid\";\nimport PathContext from \"./context\";\nimport pathMeasure from \"./measure\";\nimport PathString from \"./string\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import conicEqualArea from \"./conicEqualArea\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math\";\nimport albers from \"./albers\";\nimport conicEqualArea from \"./conicEqualArea\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {degrees, pi, radians} from \"../math\";\nimport {projectionMutator} from \"./index\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pow, sign, sin, sqrt, tan} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {mercatorRaw} from \"./mercator\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import {abs, asin, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y;\n return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {abs, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {equirectangularRaw} from \"./equirectangular\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y;\n return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import {asin, cos, sin} from \"../math\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {default as geoStream} from \"../stream\";\nimport boundsStream from \"../path/bounds\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import clipRectangle from \"../clip/rectangle\";\nimport identity from \"../identity\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\n\nfunction scaleTranslate(kx, ky, tx, ty) {\n return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({\n point: function(x, y) {\n this.stream.point(x * kx + tx, y * ky + ty);\n }\n });\n}\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity, // scale, translate and reflect\n x0 = null, y0, x1, y1, // clip extent\n postclip = identity,\n cache,\n cacheStream,\n projection;\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return projection = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n },\n postclip: function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n },\n clipExtent: function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n },\n scale: function(_) {\n return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n },\n translate: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n },\n reflectX: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n },\n reflectY: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n },\n fitExtent: function(extent, object) {\n return fitExtent(projection, extent, object);\n },\n fitSize: function(size, object) {\n return fitSize(projection, size, object);\n },\n fitWidth: function(width, object) {\n return fitWidth(projection, width, object);\n },\n fitHeight: function(height, object) {\n return fitHeight(projection, height, object);\n }\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport clipRectangle from \"../clip/rectangle\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n function transform(x, y) {\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k, (dy - y) / k];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math\";\nimport rotation from \"../rotation\";\nimport projection from \"./index\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import projection from \"./index\";\nimport {abs, epsilon} from \"../math\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math\";\nimport {mercatorProjection} from \"./mercator\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","import compose from \"./compose\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","import node_count from \"./count\";\nimport node_each from \"./each\";\nimport node_eachBefore from \"./eachBefore\";\nimport node_eachAfter from \"./eachAfter\";\nimport node_sum from \"./sum\";\nimport node_sort from \"./sort\";\nimport node_path from \"./path\";\nimport node_ancestors from \"./ancestors\";\nimport node_descendants from \"./descendants\";\nimport node_leaves from \"./leaves\";\nimport node_links from \"./links\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export {default as cluster} from \"./cluster\";\nexport {default as hierarchy} from \"./hierarchy/index\";\nexport {default as pack} from \"./pack/index\";\nexport {default as packSiblings} from \"./pack/siblings\";\nexport {default as packEnclose} from \"./pack/enclose\";\nexport {default as partition} from \"./partition\";\nexport {default as stratify} from \"./stratify\";\nexport {default as tree} from \"./tree\";\nexport {default as treemap} from \"./treemap/index\";\nexport {default as treemapBinary} from \"./treemap/binary\";\nexport {default as treemapDice} from \"./treemap/dice\";\nexport {default as treemapSlice} from \"./treemap/slice\";\nexport {default as treemapSliceDice} from \"./treemap/sliceDice\";\nexport {default as treemapSquarify} from \"./treemap/squarify\";\nexport {default as treemapResquarify} from \"./treemap/resquarify\";\n","import {shuffle, slice} from \"../array\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import {packEnclose} from \"./siblings\";\nimport {optional} from \"../accessors\";\nimport constant, {constantZero} from \"../constant\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","import enclose from \"./enclose\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = circles.length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","import roundNode from \"./treemap/round\";\nimport treemapDice from \"./treemap/dice\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import {required} from \"./accessors\";\nimport {Node, computeHeight} from \"./hierarchy/index\";\n\nvar keyPrefix = \"$\", // Protect against keys like “__proto__”.\n preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var d,\n i,\n n = data.length,\n root,\n parent,\n node,\n nodes = new Array(n),\n nodeId,\n nodeKey,\n nodeByKey = {};\n\n for (i = 0; i < n; ++i) {\n d = data[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = keyPrefix + (node.id = nodeId);\n nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], nodeId = parentId(data[i], i, data);\n if (nodeId == null || !(nodeId += \"\")) {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n } else {\n parent = nodeByKey[keyPrefix + nodeId];\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n","import {Node} from \"./hierarchy/index\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./round\";\nimport squarify from \"./squarify\";\nimport {required} from \"../accessors\";\nimport constant, {constantZero} from \"../constant\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\nimport {phi, squarifyRatio} from \"./squarify\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import dice from \"./dice\";\nimport slice from \"./slice\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hue} from \"./color\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","export {default as interpolate} from \"./value\";\nexport {default as interpolateArray} from \"./array\";\nexport {default as interpolateBasis} from \"./basis\";\nexport {default as interpolateBasisClosed} from \"./basisClosed\";\nexport {default as interpolateDate} from \"./date\";\nexport {default as interpolateDiscrete} from \"./discrete\";\nexport {default as interpolateHue} from \"./hue\";\nexport {default as interpolateNumber} from \"./number\";\nexport {default as interpolateObject} from \"./object\";\nexport {default as interpolateRound} from \"./round\";\nexport {default as interpolateString} from \"./string\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index\";\nexport {default as interpolateZoom} from \"./zoom\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl\";\nexport {default as interpolateLab} from \"./lab\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix\";\nexport {default as piecewise} from \"./piecewise\";\nexport {default as quantize} from \"./quantize\";\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","export {default as path} from \"./path\";\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n a,\n b = polygon[n - 1],\n area = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n}\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n x = 0,\n y = 0,\n a,\n b = polygon[n - 1],\n c,\n k = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n k += c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n\n return k *= 3, [x / k, y / k];\n}\n","export default function(polygon, point) {\n var n = polygon.length,\n p = polygon[n - 1],\n x = point[0], y = point[1],\n x0 = p[0], y0 = p[1],\n x1, y1,\n inside = false;\n\n for (var i = 0; i < n; ++i) {\n p = polygon[i], x1 = p[0], y1 = p[1];\n if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n x0 = x1, y0 = y1;\n }\n\n return inside;\n}\n","// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\n// negative if clockwise, and zero if the points are collinear.\nexport default function(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n}\n","import cross from \"./cross\";\n\nfunction lexicographicOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n var n = points.length,\n indexes = [0, 1],\n size = 2;\n\n for (var i = 2; i < n; ++i) {\n while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n indexes[size++] = i;\n }\n\n return indexes.slice(0, size); // remove popped points\n}\n\nexport default function(points) {\n if ((n = points.length) < 3) return null;\n\n var i,\n n,\n sortedPoints = new Array(n),\n flippedPoints = new Array(n);\n\n for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n sortedPoints.sort(lexicographicOrder);\n for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n var upperIndexes = computeUpperHullIndexes(sortedPoints),\n lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n // Construct the hull polygon, removing possible duplicate endpoints.\n var skipLeft = lowerIndexes[0] === upperIndexes[0],\n skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n hull = [];\n\n // Add upper hull in right-to-l order.\n // Then add lower hull in left-to-right order.\n for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n return hull;\n}\n","export {default as polygonArea} from \"./area\";\nexport {default as polygonCentroid} from \"./centroid\";\nexport {default as polygonHull} from \"./hull\";\nexport {default as polygonContains} from \"./contains\";\nexport {default as polygonLength} from \"./length\";\n","export default function(polygon) {\n var i = -1,\n n = polygon.length,\n b = polygon[n - 1],\n xa,\n ya,\n xb = b[0],\n yb = b[1],\n perimeter = 0;\n\n while (++i < n) {\n xa = xb;\n ya = yb;\n b = polygon[i];\n xb = b[0];\n yb = b[1];\n xa -= xb;\n ya -= yb;\n perimeter += Math.sqrt(xa * xa + ya * ya);\n }\n\n return perimeter;\n}\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, inherit the existing extent.\n if (x1 < x0) x0 = this._x0, x1 = this._x1;\n if (y1 < y0) y0 = this._y0, y1 = this._y1;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else if (x0 > x || x > x1 || y0 > y || y > y1) {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {\n case 0: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);\n break;\n }\n case 1: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);\n break;\n }\n case 2: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);\n break;\n }\n case 3: {\n do parent = new Array(4), parent[i] = node, node = parent;\n while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);\n break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n // If the quadtree covers the point already, just return.\n else return this;\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export {default as quadtree} from \"./quadtree\";\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\nimport tree_y, {defaultY} from \"./y\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import defaultSource from \"./defaultSource\";\nimport irwinHall from \"./irwinHall\";\n\nexport default (function sourceRandomBates(source) {\n function randomBates(n) {\n var randomIrwinHall = irwinHall.source(source)(n);\n return function() {\n return randomIrwinHall() / n;\n };\n }\n\n randomBates.source = sourceRandomBates;\n\n return randomBates;\n})(defaultSource);\n","export default function() {\n return Math.random();\n}\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomExponential(source) {\n function randomExponential(lambda) {\n return function() {\n return -Math.log(1 - source()) / lambda;\n };\n }\n\n randomExponential.source = sourceRandomExponential;\n\n return randomExponential;\n})(defaultSource);\n","export {default as randomUniform} from \"./uniform\";\nexport {default as randomNormal} from \"./normal\";\nexport {default as randomLogNormal} from \"./logNormal\";\nexport {default as randomBates} from \"./bates\";\nexport {default as randomIrwinHall} from \"./irwinHall\";\nexport {default as randomExponential} from \"./exponential\";\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomIrwinHall(source) {\n function randomIrwinHall(n) {\n return function() {\n for (var sum = 0, i = 0; i < n; ++i) sum += source();\n return sum;\n };\n }\n\n randomIrwinHall.source = sourceRandomIrwinHall;\n\n return randomIrwinHall;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport normal from \"./normal\";\n\nexport default (function sourceRandomLogNormal(source) {\n function randomLogNormal() {\n var randomNormal = normal.source(source).apply(this, arguments);\n return function() {\n return Math.exp(randomNormal());\n };\n }\n\n randomLogNormal.source = sourceRandomLogNormal;\n\n return randomLogNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomNormal(source) {\n function randomNormal(mu, sigma) {\n var x, r;\n mu = mu == null ? 0 : +mu;\n sigma = sigma == null ? 1 : +sigma;\n return function() {\n var y;\n\n // If available, use the second previously-generated uniform random.\n if (x != null) y = x, x = null;\n\n // Otherwise, generate a new x and y.\n else do {\n x = source() * 2 - 1;\n y = source() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n }\n\n randomNormal.source = sourceRandomNormal;\n\n return randomNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomUniform(source) {\n function randomUniform(min, max) {\n min = min == null ? 0 : +min;\n max = max == null ? 1 : +max;\n if (arguments.length === 1) max = min, min = 0;\n else max -= min;\n return function() {\n return source() * max + min;\n };\n }\n\n randomUniform.source = sourceRandomUniform;\n\n return randomUniform;\n})(defaultSource);\n","import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","export {default as schemeCategory10} from \"./categorical/category10\";\nexport {default as schemeAccent} from \"./categorical/Accent\";\nexport {default as schemeDark2} from \"./categorical/Dark2\";\nexport {default as schemePaired} from \"./categorical/Paired\";\nexport {default as schemePastel1} from \"./categorical/Pastel1\";\nexport {default as schemePastel2} from \"./categorical/Pastel2\";\nexport {default as schemeSet1} from \"./categorical/Set1\";\nexport {default as schemeSet2} from \"./categorical/Set2\";\nexport {default as schemeSet3} from \"./categorical/Set3\";\nexport {default as interpolateBrBG, scheme as schemeBrBG} from \"./diverging/BrBG\";\nexport {default as interpolatePRGn, scheme as schemePRGn} from \"./diverging/PRGn\";\nexport {default as interpolatePiYG, scheme as schemePiYG} from \"./diverging/PiYG\";\nexport {default as interpolatePuOr, scheme as schemePuOr} from \"./diverging/PuOr\";\nexport {default as interpolateRdBu, scheme as schemeRdBu} from \"./diverging/RdBu\";\nexport {default as interpolateRdGy, scheme as schemeRdGy} from \"./diverging/RdGy\";\nexport {default as interpolateRdYlBu, scheme as schemeRdYlBu} from \"./diverging/RdYlBu\";\nexport {default as interpolateRdYlGn, scheme as schemeRdYlGn} from \"./diverging/RdYlGn\";\nexport {default as interpolateSpectral, scheme as schemeSpectral} from \"./diverging/Spectral\";\nexport {default as interpolateBuGn, scheme as schemeBuGn} from \"./sequential-multi/BuGn\";\nexport {default as interpolateBuPu, scheme as schemeBuPu} from \"./sequential-multi/BuPu\";\nexport {default as interpolateGnBu, scheme as schemeGnBu} from \"./sequential-multi/GnBu\";\nexport {default as interpolateOrRd, scheme as schemeOrRd} from \"./sequential-multi/OrRd\";\nexport {default as interpolatePuBuGn, scheme as schemePuBuGn} from \"./sequential-multi/PuBuGn\";\nexport {default as interpolatePuBu, scheme as schemePuBu} from \"./sequential-multi/PuBu\";\nexport {default as interpolatePuRd, scheme as schemePuRd} from \"./sequential-multi/PuRd\";\nexport {default as interpolateRdPu, scheme as schemeRdPu} from \"./sequential-multi/RdPu\";\nexport {default as interpolateYlGnBu, scheme as schemeYlGnBu} from \"./sequential-multi/YlGnBu\";\nexport {default as interpolateYlGn, scheme as schemeYlGn} from \"./sequential-multi/YlGn\";\nexport {default as interpolateYlOrBr, scheme as schemeYlOrBr} from \"./sequential-multi/YlOrBr\";\nexport {default as interpolateYlOrRd, scheme as schemeYlOrRd} from \"./sequential-multi/YlOrRd\";\nexport {default as interpolateBlues, scheme as schemeBlues} from \"./sequential-single/Blues\";\nexport {default as interpolateGreens, scheme as schemeGreens} from \"./sequential-single/Greens\";\nexport {default as interpolateGreys, scheme as schemeGreys} from \"./sequential-single/Greys\";\nexport {default as interpolatePurples, scheme as schemePurples} from \"./sequential-single/Purples\";\nexport {default as interpolateReds, scheme as schemeReds} from \"./sequential-single/Reds\";\nexport {default as interpolateOranges, scheme as schemeOranges} from \"./sequential-single/Oranges\";\nexport {default as interpolateCubehelixDefault} from \"./sequential-multi/cubehelix\";\nexport {default as interpolateRainbow, warm as interpolateWarm, cool as interpolateCool} from \"./sequential-multi/rainbow\";\nexport {default as interpolateSinebow} from \"./sequential-multi/sinebow\";\nexport {default as interpolateViridis, magma as interpolateMagma, inferno as interpolateInferno, plasma as interpolatePlasma} from \"./sequential-multi/viridis\";\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","import colors from \"../colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","import {linearish} from \"./linear\";\n\nexport default function diverging(interpolator) {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n k10 = 1,\n k21 = 1,\n clamp = false;\n\n function scale(x) {\n var t = 0.5 + ((x = +x) - x1) * (x < x1 ? k10 : k21);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], x2 = +_[2], k10 = x0 === x1 ? 0 : 0.5 / (x1 - x0), k21 = x1 === x2 ? 0 : 0.5 / (x2 - x1), scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return diverging(interpolator).domain([x0, x1, x2]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export {\n default as scaleBand,\n point as scalePoint\n} from \"./band\";\n\nexport {\n default as scaleIdentity\n} from \"./identity\";\n\nexport {\n default as scaleLinear\n} from \"./linear\";\n\nexport {\n default as scaleLog\n} from \"./log\";\n\nexport {\n default as scaleOrdinal,\n implicit as scaleImplicit\n} from \"./ordinal\";\n\nexport {\n default as scalePow,\n sqrt as scaleSqrt\n} from \"./pow\";\n\nexport {\n default as scaleQuantile\n} from \"./quantile\";\n\nexport {\n default as scaleQuantize\n} from \"./quantize\";\n\nexport {\n default as scaleThreshold\n} from \"./threshold\";\n\nexport {\n default as scaleTime\n} from \"./time\";\n\nexport {\n default as scaleUtc\n} from \"./utcTime\";\n\nexport {\n default as scaleSequential\n} from \"./sequential\";\n\nexport {\n default as scaleDiverging\n} from \"./diverging\";\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","export default function(x) {\n return +x;\n}\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n k10 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) * k10;\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], k10 = x0 === x1 ? 0 : 1 / (x1 - x0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\n\nexport default function() {\n return calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import creator from \"./creator\";\nimport select from \"./select\";\n\nexport default function(name) {\n return select(creator(name).call(document.documentElement));\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","export {default as create} from \"./create\";\nexport {default as creator} from \"./creator\";\nexport {default as local} from \"./local\";\nexport {default as matcher} from \"./matcher\";\nexport {default as mouse} from \"./mouse\";\nexport {default as namespace} from \"./namespace\";\nexport {default as namespaces} from \"./namespaces\";\nexport {default as clientPoint} from \"./point\";\nexport {default as select} from \"./select\";\nexport {default as selectAll} from \"./selectAll\";\nexport {default as selection} from \"./selection/index\";\nexport {default as selector} from \"./selector\";\nexport {default as selectorAll} from \"./selectorAll\";\nexport {styleValue as style} from \"./selection/style\";\nexport {default as touch} from \"./touch\";\nexport {default as touches} from \"./touches\";\nexport {default as window} from \"./window\";\nexport {event, customEvent} from \"./selection/on\";\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n};\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n}\n\nexport default matcher;\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([selector == null ? [] : selector], root);\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function selection_cloneShallow() {\n return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","export default function() {\n return !this.node();\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches) {\n if (touches == null) touches = sourceEvent().touches;\n\n for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n points[i] = point(node, touches[i]);\n }\n\n return points;\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport area from \"./area\";\nimport {lineRadial} from \"./lineRadial\"\n\nexport default function() {\n var a = area().curve(curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n a.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return a;\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","export {default as arc} from \"./arc\";\nexport {default as area} from \"./area\";\nexport {default as line} from \"./line\";\nexport {default as pie} from \"./pie\";\nexport {default as areaRadial, default as radialArea} from \"./areaRadial\"; // Note: radialArea is deprecated!\nexport {default as lineRadial, default as radialLine} from \"./lineRadial\"; // Note: radialLine is deprecated!\nexport {default as pointRadial} from \"./pointRadial\";\nexport {linkHorizontal, linkVertical, linkRadial} from \"./link/index\";\n\nexport {default as symbol, symbols} from \"./symbol\";\nexport {default as symbolCircle} from \"./symbol/circle\";\nexport {default as symbolCross} from \"./symbol/cross\";\nexport {default as symbolDiamond} from \"./symbol/diamond\";\nexport {default as symbolSquare} from \"./symbol/square\";\nexport {default as symbolStar} from \"./symbol/star\";\nexport {default as symbolTriangle} from \"./symbol/triangle\";\nexport {default as symbolWye} from \"./symbol/wye\";\n\nexport {default as curveBasisClosed} from \"./curve/basisClosed\";\nexport {default as curveBasisOpen} from \"./curve/basisOpen\";\nexport {default as curveBasis} from \"./curve/basis\";\nexport {default as curveBundle} from \"./curve/bundle\";\nexport {default as curveCardinalClosed} from \"./curve/cardinalClosed\";\nexport {default as curveCardinalOpen} from \"./curve/cardinalOpen\";\nexport {default as curveCardinal} from \"./curve/cardinal\";\nexport {default as curveCatmullRomClosed} from \"./curve/catmullRomClosed\";\nexport {default as curveCatmullRomOpen} from \"./curve/catmullRomOpen\";\nexport {default as curveCatmullRom} from \"./curve/catmullRom\";\nexport {default as curveLinearClosed} from \"./curve/linearClosed\";\nexport {default as curveLinear} from \"./curve/linear\";\nexport {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from \"./curve/monotone\";\nexport {default as curveNatural} from \"./curve/natural\";\nexport {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from \"./curve/step\";\n\nexport {default as stack} from \"./stack\";\nexport {default as stackOffsetExpand} from \"./offset/expand\";\nexport {default as stackOffsetDiverging} from \"./offset/diverging\";\nexport {default as stackOffsetNone} from \"./offset/none\";\nexport {default as stackOffsetSilhouette} from \"./offset/silhouette\";\nexport {default as stackOffsetWiggle} from \"./offset/wiggle\";\nexport {default as stackOrderAscending} from \"./order/ascending\";\nexport {default as stackOrderDescending} from \"./order/descending\";\nexport {default as stackOrderInsideOut} from \"./order/insideOut\";\nexport {default as stackOrderNone} from \"./order/none\";\nexport {default as stackOrderReverse} from \"./order/reverse\";\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"../array\";\nimport constant from \"../constant\";\nimport {x as pointX, y as pointY} from \"../point\";\nimport pointRadial from \"../pointRadial\";\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = pointX,\n y = pointY,\n context = null;\n\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context) context = buffer = path();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n return link(curveVertical);\n}\n\nexport function linkRadial() {\n var l = link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","export default function() {}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = yp;\n }\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import none from \"./none\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","import ascending from \"./ascending\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","import none from \"./none\";\nimport {sum} from \"./ascending\";\n\nexport default function(series) {\n var n = series.length,\n i,\n j,\n sums = series.map(sum),\n order = none(series).sort(function(a, b) { return sums[b] - sums[a]; }),\n top = 0,\n bottom = 0,\n tops = [],\n bottoms = [];\n\n for (i = 0; i < n; ++i) {\n j = order[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n\n return bottoms.reverse().concat(tops);\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import none from \"./none\";\n\nexport default function(series) {\n return none(series).reverse();\n}\n","import constant from \"./constant\";\nimport descending from \"./descending\";\nimport identity from \"./identity\";\nimport {tau} from \"./math\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","export default function(x, y) {\n return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","export {default as timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse} from \"./defaultLocale\";\nexport {default as timeFormatLocale} from \"./locale\";\nexport {default as isoFormat} from \"./isoFormat\";\nexport {default as isoParse} from \"./isoParse\";\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute} from \"./duration\";\n\nvar hour = interval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","export {\n default as timeInterval\n} from \"./interval\";\n\nexport {\n default as timeMillisecond,\n milliseconds as timeMilliseconds,\n default as utcMillisecond,\n milliseconds as utcMilliseconds\n} from \"./millisecond\";\n\nexport {\n default as timeSecond,\n seconds as timeSeconds,\n default as utcSecond,\n seconds as utcSeconds\n} from \"./second\";\n\nexport {\n default as timeMinute,\n minutes as timeMinutes\n} from \"./minute\";\n\nexport {\n default as timeHour,\n hours as timeHours\n} from \"./hour\";\n\nexport {\n default as timeDay,\n days as timeDays\n} from \"./day\";\n\nexport {\n sunday as timeWeek,\n sundays as timeWeeks,\n sunday as timeSunday,\n sundays as timeSundays,\n monday as timeMonday,\n mondays as timeMondays,\n tuesday as timeTuesday,\n tuesdays as timeTuesdays,\n wednesday as timeWednesday,\n wednesdays as timeWednesdays,\n thursday as timeThursday,\n thursdays as timeThursdays,\n friday as timeFriday,\n fridays as timeFridays,\n saturday as timeSaturday,\n saturdays as timeSaturdays\n} from \"./week\";\n\nexport {\n default as timeMonth,\n months as timeMonths\n} from \"./month\";\n\nexport {\n default as timeYear,\n years as timeYears\n} from \"./year\";\n\nexport {\n default as utcMinute,\n utcMinutes as utcMinutes\n} from \"./utcMinute\";\n\nexport {\n default as utcHour,\n utcHours as utcHours\n} from \"./utcHour\";\n\nexport {\n default as utcDay,\n utcDays as utcDays\n} from \"./utcDay\";\n\nexport {\n utcSunday as utcWeek,\n utcSundays as utcWeeks,\n utcSunday as utcSunday,\n utcSundays as utcSundays,\n utcMonday as utcMonday,\n utcMondays as utcMondays,\n utcTuesday as utcTuesday,\n utcTuesdays as utcTuesdays,\n utcWednesday as utcWednesday,\n utcWednesdays as utcWednesdays,\n utcThursday as utcThursday,\n utcThursdays as utcThursdays,\n utcFriday as utcFriday,\n utcFridays as utcFridays,\n utcSaturday as utcSaturday,\n utcSaturdays as utcSaturdays\n} from \"./utcWeek\";\n\nexport {\n default as utcMonth,\n utcMonths as utcMonths\n} from \"./utcMonth\";\n\nexport {\n default as utcYear,\n utcYears as utcYears\n} from \"./utcYear\";\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","export {\n now,\n timer,\n timerFlush\n} from \"./timer\";\n\nexport {\n default as timeout\n} from \"./timeout\";\n\nexport {\n default as interval\n} from \"./interval\";\n","import {Timer, now} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n delay = +delay, time = time == null ? now() : +time;\n t.restart(function tick(elapsed) {\n elapsed += total;\n t.restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n return t;\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Transition} from \"./transition/index\";\nimport {SCHEDULED} from \"./transition/schedule\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import \"./selection/index\";\nexport {default as transition} from \"./transition/index\";\nexport {default as active} from \"./active\";\nexport {default as interrupt} from \"./interrupt\";\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttribute(name);\n value0 = this.getAttribute(name);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0, value1 = value(this);\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n value0 = this.getAttributeNS(fullname.space, fullname.local);\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + \"\"));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrTweenNS(fullname, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.setAttribute(name, i(t));\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease\n};\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTING) throw new Error(\"too late; already started\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n // Dispatch the interrupt event.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions. No interrupt event is dispatched\n // because the cancelled transitions never started. Note that this also\n // removes this transition from the pending list!\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(null, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleRemove(name, interpolate) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nfunction styleRemoveEnd(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var value00,\n interpolate0;\n return function() {\n var value0 = style(this, name);\n return value0 === value1 ? null\n : value0 === value00 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var value00,\n value10,\n interpolate0;\n return function() {\n var value0 = style(this, name),\n value1 = value(this);\n if (value1 == null) value1 = (this.style.removeProperty(name), style(this, name));\n return value0 === value1 ? null\n : value0 === value00 && value1 === value10 ? interpolate0\n : interpolate0 = interpolate(value00 = value0, value10 = value1);\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleRemove(name, i))\n .on(\"end.style.\" + name, styleRemoveEnd(name))\n : this.styleTween(name, typeof value === \"function\"\n ? styleFunction(name, i, tweenValue(this, \"style.\" + name, value))\n : styleConstant(name, i, value + \"\"), priority);\n}\n","function styleTween(name, value, priority) {\n function tween() {\n var node = this, i = value.apply(node, arguments);\n return i && function(t) {\n node.style.setProperty(name, i(t), priority);\n };\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export {default as voronoi} from \"./voronoi\";\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function ZoomEvent(target, type, transform) {\n this.target = target;\n this.type = type;\n this.transform = transform;\n}\n","export {default as zoom} from \"./zoom\";\nexport {default as zoomTransform, identity as zoomIdentity} from \"./transform\";\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n return node.__zoom || identity;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant\";\nimport ZoomEvent from \"./event\";\nimport {Transform, identity} from \"./transform\";\nimport noevent, {nopropagation} from \"./noevent\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.button;\n}\n\nfunction defaultExtent() {\n var e = this, w, h;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n w = e.width.baseVal.value;\n h = e.height.baseVal.value;\n } else {\n w = e.clientWidth;\n h = e.clientHeight;\n }\n return [[0, 0], [w, h]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta() {\n return -event.deltaY * (event.deltaMode ? 120 : 1) / 500;\n}\n\nfunction defaultTouchable() {\n return \"ontouchstart\" in this;\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n gestures = [],\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled)\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n });\n };\n\n zoom.scaleTo = function(selection, k) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = centroid(e),\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n });\n };\n\n zoom.translateBy = function(selection, x, y) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n });\n };\n\n zoom.translateTo = function(selection, x, y) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p = centroid(e);\n return constrain(identity.translate(p[0], p[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n });\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, center) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args),\n e = extent.apply(that, args),\n p = center || centroid(e),\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args) {\n for (var i = 0, n = gestures.length, g; i < n; ++i) {\n if ((g = gestures[i]).that === that) {\n return g;\n }\n }\n return new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.index = -1;\n this.active = 0;\n this.extent = extent.apply(that, args);\n }\n\n Gesture.prototype = {\n start: function() {\n if (++this.active === 1) {\n this.index = gestures.push(this) - 1;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n gestures.splice(this.index, 1);\n this.index = -1;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function wheeled() {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = mouse(this);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent();\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = mouse(this),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation();\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved() {\n noevent();\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped() {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent();\n g.end();\n }\n }\n\n function dblclicked() {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = mouse(this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);\n\n noevent();\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);\n else select(this).call(zoom.transform, t1);\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n started,\n n = touches.length, i, t, p;\n\n nopropagation();\n for (i = 0; i < n; ++i) {\n t = touches[i], p = touch(this, touches, t.identifier);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true;\n else if (!g.touch1) g.touch1 = p;\n }\n\n // If this is a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (touchstarting) {\n touchstarting = clearTimeout(touchstarting);\n if (!g.touch1) {\n g.end();\n p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n return;\n }\n }\n\n if (started) {\n touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved() {\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent();\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = touch(this, touches, t.identifier);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended() {\n var g = gesture(this, arguments),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation();\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else g.end();\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n return zoom;\n}\n","export var name = \"d3\";\nexport var version = \"5.7.0\";\nexport var description = \"Data-Driven Documents\";\nexport var keywords = [\"dom\",\"visualization\",\"svg\",\"animation\",\"canvas\"];\nexport var homepage = \"https://d3js.org\";\nexport var license = \"BSD-3-Clause\";\nexport var author = {\"name\":\"Mike Bostock\",\"url\":\"https://bost.ocks.org/mike\"};\nexport var main = \"dist/d3.node.js\";\nexport var unpkg = \"dist/d3.min.js\";\nexport var jsdelivr = \"dist/d3.min.js\";\nexport var module = \"index.js\";\nexport var repository = {\"type\":\"git\",\"url\":\"https://github.com/d3/d3.git\"};\nexport var scripts = {\"pretest\":\"rimraf dist && mkdir dist && json2module package.json > dist/package.js && node rollup.node\",\"test\":\"tape 'test/**/*-test.js'\",\"prepublishOnly\":\"yarn test && rollup -c\",\"postpublish\":\"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \\\"d3 ${npm_package_version}\\\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \\\"${npm_package_version}\\\" && git tag -am \\\"${npm_package_version}\\\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js\"};\nexport var devDependencies = {\"json2module\":\"0.0\",\"rimraf\":\"2\",\"rollup\":\"0.64\",\"rollup-plugin-ascii\":\"0.0\",\"rollup-plugin-node-resolve\":\"3\",\"rollup-plugin-terser\":\"1\",\"tape\":\"4\"};\nexport var dependencies = {\"d3-array\":\"1\",\"d3-axis\":\"1\",\"d3-brush\":\"1\",\"d3-chord\":\"1\",\"d3-collection\":\"1\",\"d3-color\":\"1\",\"d3-contour\":\"1\",\"d3-dispatch\":\"1\",\"d3-drag\":\"1\",\"d3-dsv\":\"1\",\"d3-ease\":\"1\",\"d3-fetch\":\"1\",\"d3-force\":\"1\",\"d3-format\":\"1\",\"d3-geo\":\"1\",\"d3-hierarchy\":\"1\",\"d3-interpolate\":\"1\",\"d3-path\":\"1\",\"d3-polygon\":\"1\",\"d3-quadtree\":\"1\",\"d3-random\":\"1\",\"d3-scale\":\"2\",\"d3-scale-chromatic\":\"1\",\"d3-selection\":\"1\",\"d3-shape\":\"1\",\"d3-time\":\"1\",\"d3-time-format\":\"2\",\"d3-timer\":\"1\",\"d3-transition\":\"1\",\"d3-voronoi\":\"1\",\"d3-zoom\":\"1\"};\n","export {version} from \"./dist/package\";\nexport * from \"d3-array\";\nexport * from \"d3-axis\";\nexport * from \"d3-brush\";\nexport * from \"d3-chord\";\nexport * from \"d3-collection\";\nexport * from \"d3-color\";\nexport * from \"d3-contour\";\nexport * from \"d3-dispatch\";\nexport * from \"d3-drag\";\nexport * from \"d3-dsv\";\nexport * from \"d3-ease\";\nexport * from \"d3-fetch\";\nexport * from \"d3-force\";\nexport * from \"d3-format\";\nexport * from \"d3-geo\";\nexport * from \"d3-hierarchy\";\nexport * from \"d3-interpolate\";\nexport * from \"d3-path\";\nexport * from \"d3-polygon\";\nexport * from \"d3-quadtree\";\nexport * from \"d3-random\";\nexport * from \"d3-scale\";\nexport * from \"d3-scale-chromatic\";\nexport * from \"d3-selection\";\nexport * from \"d3-shape\";\nexport * from \"d3-time\";\nexport * from \"d3-time-format\";\nexport * from \"d3-timer\";\nexport * from \"d3-transition\";\nexport * from \"d3-voronoi\";\nexport * from \"d3-zoom\";\n","module.exports=function(t){var e={};function a(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,a),n.l=!0,n.exports}return a.m=t,a.c=e,a.d=function(t,e,r){a.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},a.r=function(t){Object.defineProperty(t,\"__esModule\",{value:!0})},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,\"a\",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p=\"\",a.w={},a(a.s=25)}([function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,n=a(2),l=(r=n)&&r.__esModule?r:{default:r};var u=/:/g;function i(t){return t?String(t).replace(u,\"\\\\:\"):\"\"}e.default={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return i(t.v)+\":\"+i(t.w)+\":\"+i(t.name)},applyStyle:function(t,e){e&&t.attr(\"style\",e)},applyClass:function(t,e,a){e&&t.attr(\"class\",e).attr(\"class\",a+\" \"+t.attr(\"class\"))},applyTransition:function(t,e){var a=e.graph();if(l.default.isPlainObject(a)){var r=a.transition;if(l.default.isFunction(r))return r(t)}return t}}},function(t,e){t.exports=require(\"d3\")},function(t,e){t.exports=require(\"lodash\")},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=u(a(16)),n=u(a(15)),l=u(a(14));function u(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e,a){var u=e.label,i=t.append(\"g\");\"svg\"===e.labelType?(0,l.default)(i,e):\"string\"!=typeof u||\"html\"===e.labelType?(0,n.default)(i,e):(0,r.default)(i,e);var d=i.node().getBBox(),o=void 0;switch(a){case\"top\":o=-e.height/2;break;case\"bottom\":o=e.height/2-d.height;break;default:o=-d.height/2}return i.attr(\"transform\",\"translate(\"+-d.width/2+\",\"+o+\")\"),i}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t,e,a,r){var n=t.x,l=t.y,u=n-r.x,i=l-r.y,d=Math.sqrt(e*e*i*i+a*a*u*u),o=Math.abs(e*a*u/d);r.x<n&&(o=-o);var s=Math.abs(e*a*i/d);return r.y<l&&(s=-s),{x:n+o,y:l+s}}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t,e){var a=t.x,r=t.y,n=e.x-a,l=e.y-r,u=t.width/2,i=t.height/2,d=void 0,o=void 0;return Math.abs(l)*u>Math.abs(n)*i?(l<0&&(i=-i),d=0===l?0:i*n/l,o=i):(n<0&&(u=-u),d=u,o=0===n?0:u*l/n),{x:a+d,y:r+o}}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,n=a(23),l=(r=n)&&r.__esModule?r:{default:r};e.default=function(t,e,a){var r=t.x,n=t.y,u=[],i=Number.POSITIVE_INFINITY,d=Number.POSITIVE_INFINITY;e.forEach(function(t){i=Math.min(i,t.x),d=Math.min(d,t.y)});for(var o=r-t.width/2-i,s=n-t.height/2-d,f=0;f<e.length;f+=1){var c=e[f],h=e[f<e.length-1?f+1:0],p=(0,l.default)(t,a,{x:o+c.x,y:s+c.y},{x:o+h.x,y:s+h.y});p&&u.push(p)}return u.length?(u.length>1&&u.sort(function(t,e){var r=t.x-a.x,n=t.y-a.y,l=Math.sqrt(r*r+n*n),u=e.x-a.x,i=e.y-a.y,d=Math.sqrt(u*u+i*i);return l<d?-1:l===d?0:1}),u[0]):(console.log(\"NO INTERSECTION FOUND, RETURN NODE CENTER\",t),t)}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,n=a(4),l=(r=n)&&r.__esModule?r:{default:r};e.default=function(t,e,a){return(0,l.default)(t,e,e,a)}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t,e){return t.intersect(e)}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,n=a(0),l=(r=n)&&r.__esModule?r:{default:r};function u(t,e,a,r){var n=t.append(\"marker\").attr(\"id\",e).attr(\"viewBox\",\"0 0 10 10\").attr(\"refX\",9).attr(\"refY\",5).attr(\"markerUnits\",\"strokeWidth\").attr(\"markerWidth\",8).attr(\"markerHeight\",6).attr(\"orient\",\"auto\").append(\"path\").attr(\"d\",\"M 0 0 L 10 5 L 0 10 z\").style(\"stroke-width\",1).style(\"stroke-dasharray\",\"1,0\");l.default.applyStyle(n,a[r+\"Style\"]),a[r+\"Class\"]&&n.attr(\"class\",a[r+\"Class\"])}e.default={normal:u,vee:function(t,e,a,r){var n=t.append(\"marker\").attr(\"id\",e).attr(\"viewBox\",\"0 0 10 10\").attr(\"refX\",9).attr(\"refY\",5).attr(\"markerUnits\",\"strokeWidth\").attr(\"markerWidth\",8).attr(\"markerHeight\",6).attr(\"orient\",\"auto\").append(\"path\").attr(\"d\",\"M 0 0 L 10 5 L 0 10 L 4 5 z\").style(\"stroke-width\",1).style(\"stroke-dasharray\",\"1,0\");l.default.applyStyle(n,a[r+\"Style\"]),a[r+\"Class\"]&&n.attr(\"class\",a[r+\"Class\"])},undirected:function(t,e,a,r){var n=t.append(\"marker\").attr(\"id\",e).attr(\"viewBox\",\"0 0 10 10\").attr(\"refX\",9).attr(\"refY\",5).attr(\"markerUnits\",\"strokeWidth\").attr(\"markerWidth\",8).attr(\"markerHeight\",6).attr(\"orient\",\"auto\").append(\"path\").attr(\"d\",\"M 0 5 L 10 5\").style(\"stroke-width\",1).style(\"stroke-dasharray\",\"1,0\");l.default.applyStyle(n,a[r+\"Style\"]),a[r+\"Class\"]&&n.attr(\"class\",a[r+\"Class\"])},default:u}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=i(a(5)),n=i(a(4)),l=i(a(7)),u=i(a(6));function i(t){return t&&t.__esModule?t:{default:t}}e.default={rect:function(t,e,a){var n=t.insert(\"rect\",\":first-child\").attr(\"rx\",a.rx).attr(\"ry\",a.ry).attr(\"x\",-e.width/2).attr(\"y\",-e.height/2).attr(\"width\",e.width).attr(\"height\",e.height);return a.intersect=function(t){return(0,r.default)(a,t)},n},ellipse:function(t,e,a){var r=e.width/2,l=e.height/2,u=t.insert(\"ellipse\",\":first-child\").attr(\"x\",-e.width/2).attr(\"y\",-e.height/2).attr(\"rx\",r).attr(\"ry\",l);return a.intersect=function(t){return(0,n.default)(a,r,l,t)},u},circle:function(t,e,a){var r=Math.max(e.width,e.height)/2,n=t.insert(\"circle\",\":first-child\").attr(\"x\",-e.width/2).attr(\"y\",-e.height/2).attr(\"r\",r);return a.intersect=function(t){return(0,l.default)(a,r,t)},n},diamond:function(t,e,a){var r=e.width*Math.SQRT2/2,n=e.height*Math.SQRT2/2,l=[{x:0,y:-n},{x:-r,y:0},{x:0,y:n},{x:r,y:0}],i=t.insert(\"polygon\",\":first-child\").attr(\"points\",l.map(function(t){return t.x+\",\"+t.y}).join(\" \"));return a.intersect=function(t){return(0,u.default)(a,l,t)},i}}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),n=i(a(2)),l=i(a(8)),u=i(a(0));function i(t){return t&&t.__esModule?t:{default:t}}function d(t,e){var a=r.line().x(function(t){return t.x}).y(function(t){return t.y});return a.curve(t.curve),a(e)}e.default=function(t,e,a){var i=t.selectAll(\"g.edgePath\").data(e.edges(),function(t){return u.default.edgeToId(t)}).classed(\"update\",!0);return function(t,e){var a=t.enter().append(\"g\").attr(\"class\",\"edgePath\").style(\"opacity\",0);a.append(\"path\").attr(\"class\",\"path\").attr(\"d\",function(t){var a=e.edge(t),r=e.node(t.v).elem,l=n.default.range(a.points.length).map(function(){return e=(t=r).getBBox(),{x:(a=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:a.f};var t,e,a});return d(a,l)}),a.append(\"defs\")}(i,e),function(t,e){var a=t.exit();u.default.applyTransition(a,e).style(\"opacity\",0).remove(),u.default.applyTransition(a.select(\"path.path\"),e).attr(\"d\",function(t){var a=e.node(t.v);if(a){var l=n.default.range(this.getTotalLength()).map(function(){return a});return d({},l)}return r.select(this).attr(\"d\")})}(i,e),i=t.selectAll(\"g.edgePath\"),u.default.applyTransition(i,e).style(\"opacity\",1),i.each(function(t){var a=r.select(this),n=e.edge(t);n.elem=this,n.id&&a.attr(\"id\",n.id),u.default.applyClass(a,n.class,(a.classed(\"update\")?\"update \":\"\")+\"edgePath\")}),i.selectAll(\"path.path\").each(function(t){var a=e.edge(t);a.arrowheadId=n.default.uniqueId(\"arrowhead\");var i=r.select(this).attr(\"marker-end\",function(){return\"url(#\"+a.arrowheadId+\")\"}).style(\"fill\",\"none\");u.default.applyTransition(i,e).attr(\"d\",function(t){return function(t,e){var a=t.edge(e),r=t.node(e.v),n=t.node(e.w),u=a.points.slice(1,a.points.length-1);return u.unshift((0,l.default)(r,u[0])),u.push((0,l.default)(n,u[u.length-1])),d(a,u)}(e,t)}),u.default.applyStyle(i,a.style)}),i.selectAll(\"defs *\").remove(),i.selectAll(\"defs\").each(function(t){var n=e.edge(t);(0,a[n.arrowhead])(r.select(this),n.arrowheadId,n,\"arrowhead\")}),i}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),n=i(a(2)),l=i(a(3)),u=i(a(0));function i(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){var a=t.selectAll(\"g.edgeLabel\").data(e.edges(),function(t){return u.default.edgeToId(t)}).classed(\"update\",!0);return a.selectAll(\"*\").remove(),a.enter().append(\"g\").classed(\"edgeLabel\",!0).style(\"opacity\",0),(a=t.selectAll(\"g.edgeLabel\")).each(function(t){var a=e.edge(t),u=(0,l.default)(r.select(this),e.edge(t),0,0).classed(\"label\",!0),i=u.node().getBBox();a.labelId&&u.attr(\"id\",a.labelId),n.default.has(a,\"width\")||(a.width=i.width),n.default.has(a,\"height\")||(a.height=i.height)}),u.default.applyTransition(a.exit(),e).style(\"opacity\",0).remove(),a}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),n=u(a(0)),l=u(a(3));function u(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){var a=e.nodes().filter(function(t){return n.default.isSubgraph(e,t)}),u=t.selectAll(\"g.cluster\").data(a,function(t){return t});return u.selectAll(\"*\").remove(),u.enter().append(\"g\").attr(\"class\",\"cluster\").attr(\"id\",function(t){return e.node(t).id}).style(\"opacity\",0),u=t.selectAll(\"g.cluster\"),n.default.applyTransition(u,e).style(\"opacity\",1),u.each(function(t){var a=e.node(t),n=r.select(this);r.select(this).append(\"rect\");var u=n.append(\"g\").attr(\"class\",\"label\");(0,l.default)(u,a,a.clusterLabelPos)}),u.selectAll(\"rect\").each(function(t){var a=e.node(t),l=r.select(this);n.default.applyStyle(l,a.style)}),n.default.applyTransition(u.exit(),e).style(\"opacity\",0).remove(),u}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,n=a(0),l=(r=n)&&r.__esModule?r:{default:r};e.default=function(t,e){var a=t;return a.node().appendChild(e.label),l.default.applyStyle(a,e.labelStyle),a}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},l=a(0),u=(r=l)&&r.__esModule?r:{default:r};e.default=function(t,e){var a=t.append(\"foreignObject\").attr(\"width\",\"100000\"),r=a.append(\"xhtml:div\");r.attr(\"xmlns\",\"http://www.w3.org/1999/xhtml\");var l=e.label;switch(void 0===l?\"undefined\":n(l)){case\"function\":r.insert(l);break;case\"object\":r.insert(function(){return l});break;default:r.html(l)}u.default.applyStyle(r,e.labelStyle),r.style(\"display\",\"inline-block\"),r.style(\"white-space\",\"nowrap\");var i=r.node().getBoundingClientRect();return a.attr(\"width\",i.width).attr(\"height\",i.height),a}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,n=a(0),l=(r=n)&&r.__esModule?r:{default:r};e.default=function(t,e){for(var a=t.append(\"text\"),r=function(t){for(var e=\"\",a=!1,r=null,n=0;n<t.length;n+=1)if(r=t[n],a){switch(r){case\"n\":e+=\"\\n\";break;default:e+=r}a=!1}else\"\\\\\"===r?a=!0:e+=r;return e}(e.label).split(\"\\n\"),n=0;n<r.length;n+=1)a.append(\"tspan\").attr(\"xml:space\",\"preserve\").attr(\"dy\",\"1em\").attr(\"x\",\"1\").text(r[n]);return l.default.applyStyle(a,e.labelStyle),a}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=i(a(2)),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),l=i(a(3)),u=i(a(0));function i(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e,a){var i=e.nodes().filter(function(t){return!u.default.isSubgraph(e,t)}),d=t.selectAll(\"g.node\").data(i,function(t){return t}).classed(\"update\",!0);return d.selectAll(\"*\").remove(),d.enter().append(\"g\").attr(\"class\",\"node\").style(\"opacity\",0),(d=t.selectAll(\"g.node\")).each(function(t){var i=e.node(t),d=n.select(this);u.default.applyClass(d,i.class,(d.classed(\"update\")?\"update \":\"\")+\"node\");var o=d.append(\"g\").attr(\"class\",\"label\"),s=(0,l.default)(o,i),f=a[i.shape],c=r.default.pick(s.node().getBBox(),\"width\",\"height\");i.elem=this,i.id&&d.attr(\"id\",i.id),i.labelId&&o.attr(\"id\",i.labelId),r.default.has(i,\"width\")&&(c.width=i.width),r.default.has(i,\"height\")&&(c.height=i.height),c.width+=i.paddingLeft+i.paddingRight,c.height+=i.paddingTop+i.paddingBottom,o.attr(\"transform\",\"translate(\"+(i.paddingLeft-i.paddingRight)/2+\",\"+(i.paddingTop-i.paddingBottom)/2+\")\");var h=f(n.select(this),c,i);u.default.applyStyle(h,i.style);var p=h.node().getBBox();i.width=p.width,i.height=p.height}),u.default.applyTransition(d.exit(),e).style(\"opacity\",0).remove(),d}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),l=a(0),u=(r=l)&&r.__esModule?r:{default:r};e.default=function(t,e){var a=t.filter(function(){return!n.select(this).classed(\"update\")});function r(t){var a=e.node(t);return\"translate(\"+a.x+\",\"+a.y+\")\"}a.attr(\"transform\",r),u.default.applyTransition(t,e).style(\"opacity\",1).attr(\"transform\",r),u.default.applyTransition(a.selectAll(\"rect\"),e).attr(\"width\",function(t){return e.node(t).width}).attr(\"height\",function(t){return e.node(t).height}).attr(\"x\",function(t){return-e.node(t).width/2}).attr(\"y\",function(t){return-e.node(t).height/2})}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),n=u(a(2)),l=u(a(0));function u(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){function a(t){var a=e.edge(t);return n.default.has(a,\"x\")?\"translate(\"+a.x+\",\"+a.y+\")\":\"\"}t.filter(function(){return!r.select(this).classed(\"update\")}).attr(\"transform\",a),l.default.applyTransition(t,e).style(\"opacity\",1).attr(\"transform\",a)}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r,n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),l=a(0),u=(r=l)&&r.__esModule?r:{default:r};e.default=function(t,e){function a(t){var a=e.node(t);return\"translate(\"+a.x+\",\"+a.y+\")\"}t.filter(function(){return!n.select(this).classed(\"update\")}).attr(\"transform\",a),u.default.applyTransition(t,e).style(\"opacity\",1).attr(\"transform\",a)}},function(t,e){t.exports=require(\"dagre-layout\")},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=y(a(2)),n=y(a(21)),l=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(a(1)),u=y(a(20)),i=y(a(19)),d=y(a(18)),o=y(a(17)),s=y(a(13)),f=y(a(12)),c=y(a(11)),h=y(a(10)),p=y(a(9));function y(t){return t&&t.__esModule?t:{default:t}}var g={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:\"rect\"},v={arrowhead:\"normal\",curve:l.curveLinear};function _(t,e){var a=t.select(\"g.\"+e);return a.empty()&&(a=t.append(\"g\").attr(\"class\",e)),a}e.default=function(){var t=o.default,e=s.default,a=f.default,l=c.default,y=h.default,x=p.default,b=function(o,s){!function(t){t.nodes().forEach(function(e){var a=t.node(e);r.default.has(a,\"label\")||t.children(e).length||(a.label=e),r.default.has(a,\"paddingX\")&&r.default.defaults(a,{paddingLeft:a.paddingX,paddingRight:a.paddingX}),r.default.has(a,\"paddingY\")&&r.default.defaults(a,{paddingTop:a.paddingY,paddingBottom:a.paddingY}),r.default.has(a,\"padding\")&&r.default.defaults(a,{paddingLeft:a.padding,paddingRight:a.padding,paddingTop:a.padding,paddingBottom:a.padding}),r.default.defaults(a,g),r.default.each([\"paddingLeft\",\"paddingRight\",\"paddingTop\",\"paddingBottom\"],function(t){a[t]=Number(a[t])}),r.default.has(a,\"width\")&&(a._prevWidth=a.width),r.default.has(a,\"height\")&&(a._prevHeight=a.height)}),t.edges().forEach(function(e){var a=t.edge(e);r.default.has(a,\"label\")||(a.label=\"\"),r.default.defaults(a,v)})}(s),o.selectAll(\"*\").remove();var f=_(o,\"output\"),c=_(f,\"clusters\"),h=_(f,\"edgePaths\"),p=a(_(f,\"edgeLabels\"),s),b=t(_(f,\"nodes\"),s,y);n.default.layout(s);var m=1e3,M=1e3,w=-1e3,O=-1e3,P=s;P.nodes().map(function(t){return P.node(t)}).forEach(function(t){m=Math.min(m,t.x-t.width/2),M=Math.min(M,t.y-t.height/2),w=Math.max(w,t.x+t.width/2),O=Math.max(O,t.y+t.height/2)}),P.edges().forEach(function(t){var e=P.edge(t);void 0!==e.label&&void 0!==e.x&&void 0!==e.y&&(m=Math.min(m,e.x-e.width/2),M=Math.min(M,e.y-e.height/2),w=Math.max(w,e.x+e.width/2),O=Math.max(O,e.y+e.height/2));for(var a=e.points.slice(1,e.points.length-1),r=0;r<a.length;r++){var n=a[r];m=Math.min(m,n.x),M=Math.min(M,n.y),w=Math.max(w,n.x),O=Math.max(O,n.y)}}),P.minX=m,P.minY=M,P.maxX=w,P.maxY=O,(0,u.default)(b,s),(0,i.default)(p,s),l(h,s,x);var j=e(c,s);(0,d.default)(j,s),function(t){r.default.each(t.nodes(),function(e){var a=t.node(e);r.default.has(a,\"_prevWidth\")?a.width=a._prevWidth:delete a.width,r.default.has(a,\"_prevHeight\")?a.height=a._prevHeight:delete a.height,delete a._prevWidth,delete a._prevHeight})}(s)};return b.createNodes=function(e){return arguments.length?(t=e,b):t},b.createClusters=function(t){return arguments.length?(e=t,b):e},b.createEdgeLabels=function(t){return arguments.length?(a=t,b):a},b.createEdgePaths=function(t){return arguments.length?(l=t,b):l},b.shapes=function(t){return arguments.length?(y=t,b):y},b.arrows=function(t){return arguments.length?(x=t,b):x},b}},function(t,e,a){\"use strict\";function r(t,e){return t*e>0}Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t,e,a,n){var l=e.y-t.y,u=t.x-e.x,i=e.x*t.y-t.x*e.y,d=l*a.x+u*a.y+i,o=l*n.x+u*n.y+i;if(0===d||0===o||!r(d,o)){var s=n.y-a.y,f=a.x-n.x,c=n.x*a.y-a.x*n.y,h=s*t.x+f*t.y+c,p=s*e.x+f*e.y+c;if(0===h||0===p||!r(h,p)){var y=l*f-s*u;if(0!==y){var g=Math.abs(y/2),v=u*c-f*i;return{x:v<0?(v-g)/y:(v+g)/y,y:(v=s*i-l*c)<0?(v-g)/y:(v+g)/y}}}}}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=d(a(8)),n=d(a(7)),l=d(a(4)),u=d(a(6)),i=d(a(5));function d(t){return t&&t.__esModule?t:{default:t}}e.default={node:r.default,circle:n.default,ellipse:l.default,polygon:u.default,rect:i.default}},function(t,e,a){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=u(a(24)),n=u(a(22)),l=u(a(0));function u(t){return t&&t.__esModule?t:{default:t}}e.default={intersect:r.default,render:n.default,util:l.default}}]);\n//# sourceMappingURL=dagre-d3.core.js.map","import util from '../util'\n\nfunction addHtmlLabel (root, node) {\n const fo = root\n .append('foreignObject')\n .attr('width', '100000')\n\n const div = fo\n .append('xhtml:div')\n div.attr('xmlns', 'http://www.w3.org/1999/xhtml')\n\n const label = node.label\n switch (typeof label) {\n case 'function':\n div.insert(label)\n break\n case 'object':\n // Currently we assume this is a DOM object.\n div.insert(function () { return label })\n break\n default: div.html(label)\n }\n\n util.applyStyle(div, node.labelStyle)\n div.style('display', 'inline-block')\n // Fix for firefox\n div.style('white-space', 'nowrap')\n\n const client = div.node().getBoundingClientRect()\n fo\n .attr('width', client.width)\n .attr('height', client.height)\n\n return fo\n}\n\nexport default addHtmlLabel\n","import _ from 'lodash'\n\n/*\n * Returns true if the specified node in the graph is a subgraph node. A\n * subgraph node is one that contains other nodes.\n */\nfunction isSubgraph (g, v) {\n return !!g.children(v).length\n}\n\nfunction edgeToId (e) {\n return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name)\n}\n\nconst ID_DELIM = /:/g\nfunction escapeId (str) {\n return str ? String(str).replace(ID_DELIM, '\\\\:') : ''\n}\n\nfunction applyStyle (dom, styleFn) {\n if (styleFn) {\n dom.attr('style', styleFn)\n }\n}\n\nfunction applyClass (dom, classFn, otherClasses) {\n if (classFn) {\n dom\n .attr('class', classFn)\n .attr('class', otherClasses + ' ' + dom.attr('class'))\n }\n}\n\nfunction applyTransition (selection, g) {\n const graph = g.graph()\n\n if (_.isPlainObject(graph)) {\n const transition = graph.transition\n if (_.isFunction(transition)) {\n return transition(selection)\n }\n }\n\n return selection\n}\n\n// Public utility functions\nexport default {\n isSubgraph,\n edgeToId,\n applyStyle,\n applyClass,\n applyTransition\n}\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.5';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n 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',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** 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/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n 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 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n return key == '__proto__'\n ? undefined\n : object[key];\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n var sourceURL = '//# sourceURL=' +\n ('sourceURL' in options\n ? options.sourceURL\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = (lodashFunc.name + ''),\n names = realNames[key] || (realNames[key] = []);\n\n names.push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","module.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,\"__esModule\",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n.w={},n(n.s=27)}([function(e,t){e.exports=require(\"lodash\")},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.addDummyNode=d,t.simplify=f,t.asNonCompoundGraph=i,t.successorWeights=l,t.predecessorWeights=c,t.intersectRect=s,t.buildLayerMatrix=h,t.normalizeRanks=v,t.removeEmptyRanks=g,t.addBorderNode=p,t.maxRank=m,t.partition=E,t.time=b,t.notime=w;var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r},o=n(2);function d(e,t,n,r){var a=void 0;do{a=u.default.uniqueId(r)}while(e.hasNode(a));return n.dummy=t,e.setNode(a,n),a}function f(e){var t=(new o.Graph).setGraph(e.graph());return u.default.forEach(e.nodes(),function(n){t.setNode(n,e.node(n))}),u.default.forEach(e.edges(),function(n){var r=t.edge(n.v,n.w)||{weight:0,minlen:1},a=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+a.weight,minlen:Math.max(r.minlen,a.minlen)})}),t}function i(e){var t=new o.Graph({multigraph:e.isMultigraph()}).setGraph(e.graph());return u.default.forEach(e.nodes(),function(n){e.children(n).length||t.setNode(n,e.node(n))}),u.default.forEach(e.edges(),function(n){t.setEdge(n,e.edge(n))}),t}function l(e){var t=u.default.map(e.nodes(),function(t){var n={};return u.default.forEach(e.outEdges(t),function(t){n[t.w]=(n[t.w]||0)+e.edge(t).weight}),n});return u.default.zipObject(e.nodes(),t)}function c(e){var t=u.default.map(e.nodes(),function(t){var n={};return u.default.forEach(e.inEdges(t),function(t){n[t.v]=(n[t.v]||0)+e.edge(t).weight}),n});return u.default.zipObject(e.nodes(),t)}function s(e,t){var n=e.x,r=e.y,a=t.x-n,u=t.y-r,o=e.width/2,d=e.height/2;if(!a&&!u)throw new Error(\"Not possible to find intersection inside of the rectangle\");var f=void 0,i=void 0;return Math.abs(u)*o>Math.abs(a)*d?(u<0&&(d=-d),f=d*a/u,i=d):(a<0&&(o=-o),f=o,i=o*u/a),{x:n+f,y:r+i}}function h(e){var t=u.default.map(u.default.range(m(e)+1),function(){return[]});return u.default.forEach(e.nodes(),function(n){var r=e.node(n),a=r.rank;u.default.isUndefined(a)||(t[a][r.order]=n)}),t}function v(e){var t=u.default.min(u.default.map(e.nodes(),function(t){return e.node(t).rank}));u.default.forEach(e.nodes(),function(n){var r=e.node(n);u.default.has(r,\"rank\")&&(r.rank-=t)})}function g(e){var t=u.default.min(u.default.map(e.nodes(),function(t){return e.node(t).rank})),n=[];u.default.forEach(e.nodes(),function(r){var a=e.node(r).rank-t;n[a]||(n[a]=[]),n[a].push(r)});var r=0,a=e.graph().nodeRankFactor;u.default.forEach(n,function(t,n){u.default.isUndefined(t)&&n%a!=0?--r:r&&u.default.forEach(t,function(t){e.node(t).rank+=r})})}function p(e,t,n,r){var a={width:0,height:0};return arguments.length>=4&&(a.rank=n,a.order=r),d(e,\"border\",a,t)}function m(e){return u.default.max(u.default.map(e.nodes(),function(t){var n=e.node(t).rank;if(!u.default.isUndefined(n))return n}))}function E(e,t){var n={lhs:[],rhs:[]};return u.default.forEach(e,function(e){t(e)?n.lhs.push(e):n.rhs.push(e)}),n}function b(e,t){var n=u.default.now();try{return t()}finally{console.log(e+\" time: \"+(u.default.now()-n)+\"ms\")}}function w(e,t){return t()}t.default={addDummyNode:d,simplify:f,asNonCompoundGraph:i,successorWeights:l,predecessorWeights:c,intersectRect:s,buildLayerMatrix:h,normalizeRanks:v,removeEmptyRanks:g,addBorderNode:p,maxRank:m,partition:E,time:b,notime:w}},function(e,t){e.exports=require(\"graphlibrary\")},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.longestPath=o,t.slack=d;var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};function o(e){var t={};u.default.forEach(e.sources(),function n(r){var a=e.node(r);if(u.default.has(t,r))return a.rank;t[r]=!0;var o=u.default.min(u.default.map(e.outEdges(r),function(t){return n(t.w)-e.edge(t).minlen}))||0;return a.rank=o})}function d(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}t.default={longestPath:o,slack:d}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r},o=n(2),d=n(3);function f(e,t){return u.default.forEach(e.nodes(),function n(r){u.default.forEach(t.nodeEdges(r),function(a){var u=a.v,o=r===u?a.w:u;e.hasNode(o)||(0,d.slack)(t,a)||(e.setNode(o,{}),e.setEdge(r,o,{}),n(o))})}),e.nodeCount()}function i(e,t){return u.default.minBy(t.edges(),function(n){if(e.hasNode(n.v)!==e.hasNode(n.w))return(0,d.slack)(t,n)})}function l(e,t,n){u.default.forEach(e.nodes(),function(e){t.node(e).rank+=n})}t.default=function(e){var t=new o.Graph({directed:!1}),n=e.nodes()[0],r=e.nodeCount();t.setNode(n,{});for(var a=void 0;f(t,e)<r;)a=i(t,e),l(t,e,t.hasNode(a.v)?(0,d.slack)(e,a):-(0,d.slack)(e,a));return t}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.positionX=p;var r=o(n(0)),a=n(2),u=o(n(1));function o(e){return e&&e.__esModule?e:{default:e}}function d(e,t){var n={};return r.default.reduce(t,function(t,a){var u=0,o=0,d=t.length,f=r.default.last(a);return r.default.forEach(a,function(t,l){var c=function(e,t){if(e.node(t).dummy)return r.default.find(e.predecessors(t),function(t){return e.node(t).dummy})}(e,t),s=c?e.node(c).order:d;(c||t===f)&&(r.default.forEach(a.slice(o,l+1),function(t){r.default.forEach(e.predecessors(t),function(r){var a=e.node(r),o=a.order;!(o<u||s<o)||a.dummy&&e.node(t).dummy||i(n,r,t)})}),o=l+1,u=s)}),a}),n}function f(e,t){var n={};function a(t,a,u,o,d){var f=void 0;r.default.forEach(r.default.range(a,u),function(a){f=t[a],e.node(f).dummy&&r.default.forEach(e.predecessors(f),function(t){var r=e.node(t);r.dummy&&(r.order<o||r.order>d)&&i(n,t,f)})})}return r.default.reduce(t,function(t,n){var u=-1,o=void 0,d=0;return r.default.forEach(n,function(r,f){if(\"border\"===e.node(r).dummy){var i=e.predecessors(r);i.length&&(o=e.node(i[0]).order,a(n,d,f,u,o),d=f,u=o)}a(n,d,n.length,o,t.length)}),n}),n}function i(e,t,n){if(t>n){var r=t;t=n,n=r}var a=e[t];a||(e[t]=a={}),a[n]=!0}function l(e,t,n){if(t>n){var a=t;t=n,n=a}return r.default.has(e[t],n)}function c(e,t,n,a){var u={},o={},d={};return r.default.forEach(t,function(e){r.default.forEach(e,function(e,t){u[e]=e,o[e]=e,d[e]=t})}),r.default.forEach(t,function(e){var t=-1;r.default.forEach(e,function(e){var f=a(e);if(f.length)for(var i=((f=r.default.sortBy(f,function(e){return d[e]})).length-1)/2,c=Math.floor(i),s=Math.ceil(i);c<=s;++c){var h=f[c];o[e]===e&&t<d[h]&&!l(n,e,h)&&(o[h]=e,o[e]=u[e]=u[h],t=d[h])}})}),{root:u,align:o}}function s(e,t,n,u,o){var d={},f=function(e,t,n,u){var o=new a.Graph,d=e.graph(),f=function(e,t,n){return function(a,u,o){var d=a.node(u),f=a.node(o),i=0,l=void 0;if(i+=d.width/2,r.default.has(d,\"labelpos\"))switch(d.labelpos.toLowerCase()){case\"l\":l=-d.width/2;break;case\"r\":l=d.width/2}if(l&&(i+=n?l:-l),l=0,i+=(d.dummy?t:e)/2,i+=(f.dummy?t:e)/2,i+=f.width/2,r.default.has(f,\"labelpos\"))switch(f.labelpos.toLowerCase()){case\"l\":l=f.width/2;break;case\"r\":l=-f.width/2}return l&&(i+=n?l:-l),l=0,i}}(d.nodesep,d.edgesep,u);return r.default.forEach(t,function(t){var a=void 0;r.default.forEach(t,function(t){var r=n[t];if(o.setNode(r),a){var u=n[a],d=o.edge(u,r);o.setEdge(u,r,Math.max(f(e,t,a),d||0))}a=t})}),o}(e,t,n,o),i={};r.default.forEach(f.nodes(),function e(t){r.default.has(i,t)||(i[t]=!0,d[t]=r.default.reduce(f.inEdges(t),function(t,n){return e(n.v),Math.max(t,d[n.v]+f.edge(n))},0))});var l=o?\"borderLeft\":\"borderRight\";return r.default.forEach(f.nodes(),function t(n){if(2!==i[n]){i[n]++;var a=e.node(n),u=r.default.reduce(f.outEdges(n),function(e,n){return t(n.w),Math.min(e,d[n.w]-f.edge(n))},Number.POSITIVE_INFINITY);u!==Number.POSITIVE_INFINITY&&a.borderType!==l&&(d[n]=Math.max(d[n],u))}}),r.default.forEach(u,function(e){d[e]=d[n[e]]}),d}function h(e,t){return r.default.minBy(r.default.values(t),function(t){var n=(r.default.minBy(r.default.toPairs(t),function(t){return t[1]-m(e,t[0])/2})||[\"k\",0])[1];return(r.default.maxBy(r.default.toPairs(t),function(t){return t[1]+m(e,t[0])/2})||[\"k\",0])[1]-n})}function v(e,t){var n=r.default.values(t),a=r.default.min(n),u=r.default.max(n);r.default.forEach([\"u\",\"d\"],function(n){r.default.forEach([\"l\",\"r\"],function(o){var d=n+o,f=e[d];if(f!==t){var i=r.default.values(f),l=\"l\"===o?a-r.default.min(i):u-r.default.max(i);l&&(e[d]=r.default.mapValues(f,function(e){return e+l}))}})})}function g(e,t){return r.default.mapValues(e.ul,function(n,a){if(t)return e[t.toLowerCase()][a];var u=r.default.sortBy(r.default.map(e,a));return(u[1]+u[2])/2})}function p(e){var t=u.default.buildLayerMatrix(e),n=r.default.merge(d(e,t),f(e,t)),a={},o=void 0;r.default.forEach([\"u\",\"d\"],function(u){o=\"u\"===u?t:r.default.values(t).reverse(),r.default.forEach([\"l\",\"r\"],function(t){\"r\"===t&&(o=r.default.map(o,function(e){return r.default.values(e).reverse()}));var d=r.default.bind(\"u\"===u?e.predecessors:e.successors,e),f=c(0,o,n,d),i=s(e,o,f.root,f.align,\"r\"===t);\"r\"===t&&(i=r.default.mapValues(i,function(e){return-e})),a[u+t]=i})});var i=h(e,a);return v(a,i),g(a,e.graph().align)}function m(e,t){return e.node(t).width}t.default={positionX:p,findType1Conflicts:d,findType2Conflicts:f,addConflict:i,hasConflict:l,verticalAlignment:c,horizontalCompaction:s,alignCoordinates:v,findSmallestWidthAlignment:h,balance:g}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(n(0)),a=o(n(1)),u=n(5);function o(e){return e&&e.__esModule?e:{default:e}}t.default=function(e){(function(e){var t=a.default.buildLayerMatrix(e),n=e.graph().ranksep,u=0;r.default.forEach(t,function(t){var a=r.default.max(r.default.map(t,function(t){return e.node(t).height}));r.default.forEach(t,function(t){e.node(t).y=u+a/2}),u+=a+n})})(e=a.default.asNonCompoundGraph(e)),r.default.forEach((0,u.positionX)(e),function(t,n){e.node(n).x=t})}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e,t,n){var r={},a=void 0;u.default.forEach(n,function(n){for(var u=e.parent(n),o=void 0,d=void 0;u;){if((o=e.parent(u))?(d=r[o],r[o]=u):(d=a,a=u),d&&d!==u)return void t.setEdge(d,u);u=o}})}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r},o=n(2);t.default=function(e,t,n){var r=function(e){for(var t=void 0;e.hasNode(t=u.default.uniqueId(\"_root\")););return t}(e),a=new o.Graph({compound:!0}).setGraph({root:r}).setDefaultNodeLabel(function(t){return e.node(t)});return u.default.forEach(e.nodes(),function(o){var d=e.node(o),f=e.parent(o);(d.rank===t||d.minRank<=t&&t<=d.maxRank)&&(a.setNode(o),a.setParent(o,f||r),u.default.forEach(e[n](o),function(t){var n=t.v===o?t.w:t.v,r=a.edge(n,o),d=u.default.isUndefined(r)?0:r.weight;a.setEdge(n,o,{weight:e.edge(t).weight+d})}),u.default.has(d,\"minRank\")&&a.setNode(o,{borderLeft:d.borderLeft[t],borderRight:d.borderRight[t]}))}),a}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=u(n(0)),a=u(n(1));function u(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){for(var a=void 0;t.length&&(a=r.default.last(t)).i<=n;)t.pop(),e.push(a.vs),n++;return n}t.default=function(e,t){var n,u=a.default.partition(e,function(e){return r.default.has(e,\"barycenter\")}),d=u.lhs,f=r.default.sortBy(u.rhs,function(e){return-e.i}),i=[],l=0,c=0,s=0;d.sort((n=!!t,function(e,t){return e.barycenter<t.barycenter?-1:e.barycenter>t.barycenter?1:n?t.i-e.i:e.i-t.i})),s=o(i,f,s),r.default.forEach(d,function(e){s+=e.vs.length,i.push(e.vs),l+=e.barycenter*e.weight,c+=e.weight,s=o(i,f,s)});var h={vs:r.default.flatten(i,!0)};return c&&(h.barycenter=l/c,h.weight=c),h}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e,t){var n={};return u.default.forEach(e,function(e,t){var r=n[e.v]={indegree:0,in:[],out:[],vs:[e.v],i:t};u.default.isUndefined(e.barycenter)||(r.barycenter=e.barycenter,r.weight=e.weight)}),u.default.forEach(t.edges(),function(e){var t=n[e.v],r=n[e.w];u.default.isUndefined(t)||u.default.isUndefined(r)||(r.indegree++,t.out.push(n[e.w]))}),function(e){var t=[];function n(e){return function(t){var n,r,a,o;t.merged||(u.default.isUndefined(t.barycenter)||u.default.isUndefined(e.barycenter)||t.barycenter>=e.barycenter)&&(r=t,a=0,o=0,(n=e).weight&&(a+=n.barycenter*n.weight,o+=n.weight),r.weight&&(a+=r.barycenter*r.weight,o+=r.weight),n.vs=r.vs.concat(n.vs),n.barycenter=a/o,n.weight=o,n.i=Math.min(r.i,n.i),r.merged=!0)}}function r(t){return function(n){n.in.push(t),0==--n.indegree&&e.push(n)}}for(;e.length;){var a=e.pop();t.push(a),u.default.forEach(a.in.reverse(),n(a)),u.default.forEach(a.out,r(a))}return u.default.chain(t).filter(function(e){return!e.merged}).map(function(e){return u.default.pick(e,[\"vs\",\"i\",\"barycenter\",\"weight\"])}).value()}(u.default.filter(n,function(e){return!e.indegree}))}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e,t){return u.default.map(t,function(t){var n=e.inEdges(t);if(n.length){var r=u.default.reduce(n,function(t,n){var r=e.edge(n),a=e.node(n.v);return{sum:t.sum+r.weight*a.order,weight:t.weight+r.weight}},{sum:0,weight:0});return{v:t,barycenter:r.sum/r.weight,weight:r.weight}}return{v:t}})}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=d(n(0)),a=d(n(11)),u=d(n(10)),o=d(n(9));function d(e){return e&&e.__esModule?e:{default:e}}t.default=function e(t,n,d,f){var i=t.children(n),l=t.node(n),c=l?l.borderLeft:void 0,s=l?l.borderRight:void 0,h={};c&&(i=r.default.filter(i,function(e){return e!==c&&e!==s}));var v=(0,a.default)(t,i);r.default.forEach(v,function(n){if(t.children(n.v).length){var a=e(t,n.v,d,f);h[n.v]=a,r.default.has(a,\"barycenter\")&&(u=n,o=a,r.default.isUndefined(u.barycenter)?(u.barycenter=o.barycenter,u.weight=o.weight):(u.barycenter=(u.barycenter*u.weight+o.barycenter*o.weight)/(u.weight+o.weight),u.weight+=o.weight))}var u,o});var g=(0,u.default)(v,d);!function(e,t){r.default.forEach(e,function(e){e.vs=r.default.flatten(e.vs.map(function(e){return t[e]?t[e].vs:e}),!0)})}(g,h);var p=(0,o.default)(g,f);if(c&&(p.vs=r.default.flatten([c,p.vs,s],!0),t.predecessors(c).length)){var m=t.node(t.predecessors(c)[0]),E=t.node(t.predecessors(s)[0]);r.default.has(p,\"barycenter\")||(p.barycenter=0,p.weight=0),p.barycenter=(p.barycenter*p.weight+m.order+E.order)/(p.weight+2),p.weight+=2}return p}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};function o(e,t,n){for(var r=u.default.zipObject(n,u.default.map(n,function(e,t){return t})),a=u.default.flatten(u.default.map(t,function(t){return u.default.chain(e.outEdges(t)).map(function(t){return{pos:r[t.w],weight:e.edge(t).weight}}).sortBy(\"pos\").value()}),!0),o=1;o<n.length;)o<<=1;var d=2*o-1;o-=1;var f=u.default.map(new Array(d),function(){return 0}),i=0;return u.default.forEach(a.forEach(function(e){var t=e.pos+o;f[t]+=e.weight;for(var n=0;t>0;)t%2&&(n+=f[t+1]),f[t=t-1>>1]+=e.weight;i+=e.weight*n})),i}t.default=function(e,t){for(var n=0,r=1;r<t.length;++r)n+=o(e,t[r-1],t[r]);return n}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e){var t={},n=u.default.filter(e.nodes(),function(t){return!e.children(t).length}),r=u.default.max(u.default.map(n,function(t){return e.node(t).rank})),a=u.default.map(u.default.range(r+1),function(){return[]}),o=u.default.sortBy(n,function(t){return e.node(t).rank});return u.default.forEach(o,function n(r){if(!u.default.has(t,r)){t[r]=!0;var o=e.node(r);a[o.rank].push(r),u.default.forEach(e.successors(r),n)}}),a}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=c(n(0)),a=n(2),u=c(n(14)),o=c(n(13)),d=c(n(12)),f=c(n(8)),i=c(n(7)),l=c(n(1));function c(e){return e&&e.__esModule?e:{default:e}}function s(e,t,n){return r.default.map(t,function(t){return(0,f.default)(e,t,n)})}function h(e,t){var n=new a.Graph;r.default.forEach(e,function(e){var a=e.graph().root,u=(0,d.default)(e,a,n,t);r.default.forEach(u.vs,function(t,n){e.node(t).order=n}),(0,i.default)(e,n,u.vs)})}function v(e,t){r.default.forEach(t,function(t){r.default.forEach(t,function(t,n){e.node(t).order=n})})}t.default=function(e){var t=l.default.maxRank(e),n=s(e,r.default.range(1,t+1),\"inEdges\"),a=s(e,r.default.range(t-1,-1,-1),\"outEdges\"),d=(0,u.default)(e);v(e,d);for(var f=Number.POSITIVE_INFINITY,i=void 0,c=0,g=0;g<4;++c,++g){h(c%2?n:a,c%4>=2),d=l.default.buildLayerMatrix(e);var p=(0,o.default)(e,d);p<f&&(g=0,i=r.default.cloneDeep(d),f=p)}v(e,i)}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};function o(e){u.default.forEach(e.nodes(),function(t){d(e.node(t))}),u.default.forEach(e.edges(),function(t){d(e.edge(t))})}function d(e){var t=e.width;e.width=e.height,e.height=t}function f(e){e.y=-e.y}function i(e){var t=e.x;e.x=e.y,e.y=t}t.default={adjust:function(e){var t=e.graph().rankdir.toLowerCase();\"lr\"!==t&&\"rl\"!==t||o(e)},undo:function(e){var t=e.graph().rankdir.toLowerCase();\"bt\"!==t&&\"rl\"!==t||function(e){u.default.forEach(e.nodes(),function(t){f(e.node(t))}),u.default.forEach(e.edges(),function(t){var n=e.edge(t);u.default.forEach(n.points,f),u.default.has(n,\"y\")&&f(n)})}(e),\"lr\"!==t&&\"rl\"!==t||(function(e){u.default.forEach(e.nodes(),function(t){i(e.node(t))}),u.default.forEach(e.edges(),function(t){var n=e.edge(t);u.default.forEach(n.points,i),u.default.has(n,\"x\")&&i(n)})}(e),o(e))}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=u(n(0)),a=u(n(1));function u(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n,r,u,o){var d={width:0,height:0,rank:o,borderType:t},f=u[t][o-1],i=a.default.addDummyNode(e,\"border\",d,n);u[t][o]=i,e.setParent(i,r),f&&e.setEdge(f,i,{weight:1})}t.default=function(e){r.default.forEach(e.children(),function t(n){var a=e.children(n),u=e.node(n);if(a.length&&r.default.forEach(a,t),r.default.has(u,\"minRank\")){u.borderLeft=[],u.borderRight=[];for(var d=u.minRank,f=u.maxRank+1;d<f;++d)o(e,\"borderLeft\",\"_bl\",n,u,d),o(e,\"borderRight\",\"_br\",n,u,d)}})}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=u(n(0)),a=u(n(1));function u(e){return e&&e.__esModule?e:{default:e}}t.default={run:function(e){var t=a.default.addDummyNode(e,\"root\",{},\"_root\"),n=function(e){var t={};return r.default.forEach(e.children(),function(n){!function n(a,u){var o=e.children(a);o&&o.length&&r.default.forEach(o,function(e){n(e,u+1)}),t[a]=u}(n,1)}),t}(e),u=r.default.max(r.default.values(n))-1,o=2*u+1;e.graph().nestingRoot=t,r.default.forEach(e.edges(),function(t){e.edge(t).minlen*=o});var d=function(e){return r.default.reduce(e.edges(),function(t,n){return t+e.edge(n).weight},0)}(e)+1;r.default.forEach(e.children(),function(f){!function e(t,n,u,o,d,f,i){var l=t.children(i);if(l.length){var c=a.default.addBorderNode(t,\"_bt\"),s=a.default.addBorderNode(t,\"_bb\"),h=t.node(i);t.setParent(c,i),h.borderTop=c,t.setParent(s,i),h.borderBottom=s,r.default.forEach(l,function(r){e(t,n,u,o,d,f,r);var a=t.node(r),l=a.borderTop?a.borderTop:r,h=a.borderBottom?a.borderBottom:r,v=a.borderTop?o:2*o,g=l!==h?1:d-f[i]+1;t.setEdge(c,l,{weight:v,minlen:g,nestingEdge:!0}),t.setEdge(h,s,{weight:v,minlen:g,nestingEdge:!0})}),t.parent(i)||t.setEdge(n,c,{weight:0,minlen:d+f[i]})}else i!==n&&t.setEdge(n,i,{weight:0,minlen:u})}(e,t,o,d,u,n,f)}),e.graph().nodeRankFactor=o},cleanup:function(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.default.forEach(e.edges(),function(t){e.edge(t).nestingEdge&&e.removeEdge(t)})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(0),u=(r=a)&&r.__esModule?r:{default:r};t.default=function(e){var t=function(e){var t={},n=0;return u.default.forEach(e.children(),function r(a){var o=n;u.default.forEach(e.children(a),r),t[a]={low:o,lim:n++}}),t}(e);u.default.forEach(e.graph().dummyChains,function(n){for(var r=e.node(n),a=r.edgeObj,u=function(e,t,n,r){var a=[],u=[],o=Math.min(t[n].low,t[r].low),d=Math.max(t[n].lim,t[r].lim),f=void 0,i=void 0;f=n;do{f=e.parent(f),a.push(f)}while(f&&(t[f].low>o||d>t[f].lim));for(i=f,f=r;(f=e.parent(f))!==i;)u.push(f);return{path:a.concat(u.reverse()),lca:i}}(e,t,a.v,a.w),o=u.path,d=u.lca,f=0,i=o[f],l=!0;n!==a.w;){if(r=e.node(n),l){for(;(i=o[f])!==d&&e.node(i).maxRank<r.rank;)f++;i===d&&(l=!1)}if(!l){for(;f<o.length-1&&e.node(i=o[f+1]).minRank<=r.rank;)f++;i=o[f]}e.setParent(n,i),n=e.successors(n)[0]}})}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=f(n(0)),a=n(2),u=f(n(4)),o=n(3),d=n(1);function f(e){return e&&e.__esModule?e:{default:e}}var i=a.alg.preorder,l=a.alg.postorder;function c(e){e=(0,d.simplify)(e),(0,o.longestPath)(e);var t=(0,u.default)(e);v(t),s(t,e);for(var n=void 0;n=g(t);)m(t,e,n,p(t,e,n))}function s(e,t){var n=l(e,e.nodes());n=n.slice(0,n.length-1),r.default.forEach(n,function(n){!function(e,t,n){var r=e.node(n).parent;e.edge(n,r).cutvalue=h(e,t,n)}(e,t,n)})}function h(e,t,n){var a=e.node(n).parent,u=!0,o=t.edge(n,a),d=0;return o||(u=!1,o=t.edge(a,n)),d=o.weight,r.default.forEach(t.nodeEdges(n),function(r){var o,f,i=r.v===n,l=i?r.w:r.v;if(l!==a){var c=i===u,s=t.edge(r).weight;if(d+=c?s:-s,o=n,f=l,e.hasEdge(o,f)){var h=e.edge(n,l).cutvalue;d+=c?-h:h}}}),d}function v(e,t){arguments.length<2&&(t=e.nodes()[0]),function e(t,n,a,u,o){var d=a;var f=t.node(u);n[u]=!0;r.default.forEach(t.neighbors(u),function(o){r.default.has(n,o)||(a=e(t,n,a,o,u))});f.low=d;f.lim=a++;o?f.parent=o:delete f.parent;return a}(e,{},1,t)}function g(e){return r.default.find(e.edges(),function(t){return e.edge(t).cutvalue<0})}function p(e,t,n){var a=n.v,u=n.w;t.hasEdge(a,u)||(a=n.w,u=n.v);var d=e.node(a),f=e.node(u),i=d,l=!1;d.lim>f.lim&&(i=f,l=!0);var c=r.default.filter(t.edges(),function(t){return l===E(e,e.node(t.v),i)&&l!==E(e,e.node(t.w),i)});return r.default.minBy(c,function(e){return(0,o.slack)(t,e)})}function m(e,t,n,a){var u=n.v,o=n.w;e.removeEdge(u,o),e.setEdge(a.v,a.w,{}),v(e),s(e,t),function(e,t){var n=r.default.find(e.nodes(),function(e){return!t.node(e).parent}),a=i(e,n);a=a.slice(1),r.default.forEach(a,function(n){var r=e.node(n).parent,a=t.edge(n,r),u=!1;a||(a=t.edge(r,n),u=!0),t.node(n).rank=t.node(r).rank+(u?a.minlen:-a.minlen)})}(e,t)}function E(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}c.initLowLimValues=v,c.initCutValues=s,c.calcCutValue=h,c.leaveEdge=g,c.enterEdge=p,c.exchangeEdges=m,t.default=c},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(3),a=o(n(4)),u=o(n(20));function o(e){return e&&e.__esModule?e:{default:e}}var d=r.longestPath;function f(e){(0,u.default)(e)}t.default=function(e){switch(e.graph().ranker){case\"network-simplex\":f(e);break;case\"tight-tree\":!function(e){(0,r.longestPath)(e),(0,a.default)(e)}(e);break;case\"longest-path\":d(e);break;default:f(e)}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=u(n(0)),a=u(n(1));function u(e){return e&&e.__esModule?e:{default:e}}t.default={run:function(e){e.graph().dummyChains=[],r.default.forEach(e.edges(),function(t){!function(e,t){var n=t.v,r=e.node(n).rank,u=t.w,o=e.node(u).rank,d=t.name,f=e.edge(t),i=f.labelRank;if(o!==r+1){e.removeEdge(t);var l=void 0,c=void 0,s=void 0;for(s=0,++r;r<o;++s,++r)f.points=[],c={width:0,height:0,edgeLabel:f,edgeObj:t,rank:r},l=a.default.addDummyNode(e,\"edge\",c,\"_d\"),r===i&&(c.width=f.width,c.height=f.height,c.dummy=\"edge-label\",c.labelpos=f.labelpos),e.setEdge(n,l,{weight:f.weight},d),0===s&&e.graph().dummyChains.push(l),n=l;e.setEdge(n,u,{weight:f.weight},d)}}(e,t)})},undo:function(e){r.default.forEach(e.graph().dummyChains,function(t){var n=e.node(t),r=n.edgeLabel,a=null;for(e.setEdge(n.edgeObj,r);n.dummy;)a=e.successors(t)[0],e.removeNode(t),r.points.push({x:n.x,y:n.y}),\"edge-label\"===n.dummy&&(r.x=n.x,r.y=n.y,r.width=n.width,r.height=n.height),t=a,n=e.node(t)})}}},function(e,t,n){\"use strict\";function r(){var e={};e._next=e._prev=e,this._sentinel=e}function a(e){e._prev._next=e._next,e._next._prev=e._prev,delete e._next,delete e._prev}function u(e,t){if(\"_next\"!==e&&\"_prev\"!==e)return t}Object.defineProperty(t,\"__esModule\",{value:!0}),r.prototype.dequeue=function(){var e=this._sentinel,t=e._prev;if(t!==e)return a(t),t},r.prototype.enqueue=function(e){var t=this._sentinel;e._prev&&e._next&&a(e),e._next=t._next,t._next._prev=e,t._next=e,e._prev=t},r.prototype.toString=function(){for(var e=[],t=this._sentinel,n=t._prev;n!==t;)e.push(JSON.stringify(n,u)),n=n._prev;return\"[\"+e.join(\", \")+\"]\"},t.default=r},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(n(0)),a=n(2),u=o(n(23));function o(e){return e&&e.__esModule?e:{default:e}}var d=r.default.constant(1);function f(e,t,n,a,u){var o=u?[]:void 0;return r.default.forEach(e.inEdges(a.v),function(r){var a=e.edge(r),d=e.node(r.v);u&&o.push({v:r.v,w:r.w}),d.out-=a,i(t,n,d)}),r.default.forEach(e.outEdges(a.v),function(r){var a=e.edge(r),u=r.w,o=e.node(u);o.in-=a,i(t,n,o)}),e.removeNode(a.v),o}function i(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}t.default=function(e,t){if(e.nodeCount()<=1)return[];var n=function(e,t){var n=new a.Graph,o=0,d=0;r.default.forEach(e.nodes(),function(e){n.setNode(e,{v:e,in:0,out:0})}),r.default.forEach(e.edges(),function(e){var r=n.edge(e.v,e.w)||0,a=t(e),u=r+a;n.setEdge(e.v,e.w,u),d=Math.max(d,n.node(e.v).out+=a),o=Math.max(o,n.node(e.w).in+=a)});var f=r.default.range(d+o+3).map(function(){return new u.default}),l=o+1;return r.default.forEach(n.nodes(),function(e){i(f,l,n.node(e))}),{graph:n,buckets:f,zeroIdx:l}}(e,t||d),o=function(e,t,n){for(var r=[],a=t[t.length-1],u=t[0],o=void 0;e.nodeCount();){for(;o=u.dequeue();)f(e,t,n,o);for(;o=a.dequeue();)f(e,t,n,o);if(e.nodeCount())for(var d=t.length-2;d>0;--d)if(o=t[d].dequeue()){r=r.concat(f(e,t,n,o,!0));break}}return r}(n.graph,n.buckets,n.zeroIdx);return r.default.flatten(r.default.map(o,function(t){return e.outEdges(t.v,t.w)}),!0)}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=u(n(0)),a=u(n(24));function u(e){return e&&e.__esModule?e:{default:e}}t.default={run:function(e){var t=\"greedy\"===e.graph().acyclicer?(0,a.default)(e,function(e){return function(t){return e.edge(t).weight}}(e)):function(e){var t=[],n={},a={};return r.default.forEach(e.nodes(),function u(o){r.default.has(a,o)||(a[o]=!0,n[o]=!0,r.default.forEach(e.outEdges(o),function(e){r.default.has(n,e.w)?t.push(e):u(e.w)}),delete n[o])}),t}(e);r.default.forEach(t,function(t){var n=e.edge(t);e.removeEdge(t),n.forwardName=t.name,n.reversed=!0,e.setEdge(t.w,t.v,n,r.default.uniqueId(\"rev\"))})},undo:function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t);if(n.reversed){e.removeEdge(t);var r=n.forwardName;delete n.reversed,delete n.forwardName,e.setEdge(t.w,t.v,n,r)}})}}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=p(n(0)),a=n(2),u=p(n(25)),o=p(n(22)),d=p(n(21)),f=n(1),i=p(f),l=p(n(19)),c=p(n(18)),s=p(n(17)),h=p(n(16)),v=p(n(15)),g=p(n(6));function p(e){return e&&e.__esModule?e:{default:e}}var m=[\"nodesep\",\"edgesep\",\"ranksep\",\"marginx\",\"marginy\"],E={ranksep:50,edgesep:20,nodesep:50,rankdir:\"tb\"},b=[\"acyclicer\",\"ranker\",\"rankdir\",\"align\"],w=[\"width\",\"height\"],y={width:0,height:0},_=[\"minlen\",\"weight\",\"width\",\"height\",\"labeloffset\"],x={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:\"r\"},k=[\"labelpos\"];function M(e,t){return r.default.mapValues(r.default.pick(e,t),Number)}function N(e){var t={};return r.default.forEach(e,function(e,n){t[n.toLowerCase()]=e}),t}t.default=function(e,t){var n=t&&t.debugTiming?i.default.time:i.default.notime;n(\"layout\",function(){var t=n(\" buildLayoutGraph\",function(){return function(e){var t=new a.Graph({multigraph:!0,compound:!0}),n=N(e.graph());return t.setGraph(r.default.merge({},E,M(n,m),r.default.pick(n,b))),r.default.forEach(e.nodes(),function(n){var a=N(e.node(n));t.setNode(n,r.default.defaults(M(a,w),y)),t.setParent(n,e.parent(n))}),r.default.forEach(e.edges(),function(n){var a=N(e.edge(n));t.setEdge(n,r.default.merge({},x,M(a,_),r.default.pick(a,k)))}),t}(e)});n(\" runLayout\",function(){!function(e,t){t(\" makeSpaceForEdgeLabels\",function(){!function(e){var t=e.graph();t.ranksep/=2,r.default.forEach(e.edges(),function(n){var r=e.edge(n);r.minlen*=2,\"c\"!==r.labelpos.toLowerCase()&&(\"TB\"===t.rankdir||\"BT\"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)})}(e)}),t(\" removeSelfEdges\",function(){!function(e){r.default.forEach(e.edges(),function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}})}(e)}),t(\" acyclic\",function(){u.default.run(e)}),t(\" nestingGraph.run\",function(){c.default.run(e)}),t(\" rank\",function(){(0,d.default)(i.default.asNonCompoundGraph(e))}),t(\" injectEdgeLabelProxies\",function(){!function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),a=e.node(t.w),u={rank:(a.rank-r.rank)/2+r.rank,e:t};i.default.addDummyNode(e,\"edge-proxy\",u,\"_ep\")}})}(e)}),t(\" removeEmptyRanks\",function(){(0,f.removeEmptyRanks)(e)}),t(\" nestingGraph.cleanup\",function(){c.default.cleanup(e)}),t(\" normalizeRanks\",function(){(0,f.normalizeRanks)(e)}),t(\" assignRankMinMax\",function(){!function(e){var t=0;r.default.forEach(e.nodes(),function(n){var r=e.node(n);r.borderTop&&(r.minRank=e.node(r.borderTop).rank,r.maxRank=e.node(r.borderBottom).rank,t=Math.max(t,r.maxRank))}),e.graph().maxRank=t}(e)}),t(\" removeEdgeLabelProxies\",function(){!function(e){r.default.forEach(e.nodes(),function(t){var n=e.node(t);\"edge-proxy\"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))})}(e)}),t(\" normalize.run\",function(){o.default.run(e)}),t(\" parentDummyChains\",function(){(0,l.default)(e)}),t(\" addBorderSegments\",function(){(0,s.default)(e)}),t(\" order\",function(){(0,v.default)(e)}),t(\" insertSelfEdges\",function(){!function(e){var t=i.default.buildLayerMatrix(e);r.default.forEach(t,function(t){var n=0;r.default.forEach(t,function(t,a){var u=e.node(t);u.order=a+n,r.default.forEach(u.selfEdges,function(t){i.default.addDummyNode(e,\"selfedge\",{width:t.label.width,height:t.label.height,rank:u.rank,order:a+ ++n,e:t.e,label:t.label},\"_se\")}),delete u.selfEdges})})}(e)}),t(\" adjustCoordinateSystem\",function(){h.default.adjust(e)}),t(\" position\",function(){(0,g.default)(e)}),t(\" positionSelfEdges\",function(){!function(e){r.default.forEach(e.nodes(),function(t){var n=e.node(t);if(\"selfedge\"===n.dummy){var r=e.node(n.e.v),a=r.x+r.width/2,u=r.y,o=n.x-a,d=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:a+2*o/3,y:u-d},{x:a+5*o/6,y:u-d},{x:a+o,y:u},{x:a+5*o/6,y:u+d},{x:a+2*o/3,y:u+d}],n.label.x=n.x,n.label.y=n.y}})}(e)}),t(\" removeBorderNodes\",function(){!function(e){r.default.forEach(e.nodes(),function(t){if(e.children(t).length){var n=e.node(t),a=e.node(n.borderTop),u=e.node(n.borderBottom),o=e.node(r.default.last(n.borderLeft)),d=e.node(r.default.last(n.borderRight));n.width=Math.abs(d.x-o.x),n.height=Math.abs(u.y-a.y),n.x=o.x+n.width/2,n.y=a.y+n.height/2}}),r.default.forEach(e.nodes(),function(t){\"border\"===e.node(t).dummy&&e.removeNode(t)})}(e)}),t(\" normalize.undo\",function(){o.default.undo(e)}),t(\" fixupEdgeLabelCoords\",function(){!function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t);if(r.default.has(n,\"x\"))switch(\"l\"!==n.labelpos&&\"r\"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case\"l\":n.x-=n.width/2+n.labeloffset;break;case\"r\":n.x+=n.width/2+n.labeloffset}})}(e)}),t(\" undoCoordinateSystem\",function(){h.default.undo(e)}),t(\" translateGraph\",function(){!function(e){var t=Number.POSITIVE_INFINITY,n=0,a=Number.POSITIVE_INFINITY,u=0,o=e.graph(),d=o.marginx||0,f=o.marginy||0;function i(e){var r=e.x,o=e.y,d=e.width,f=e.height;t=Math.min(t,r-d/2),n=Math.max(n,r+d/2),a=Math.min(a,o-f/2),u=Math.max(u,o+f/2)}r.default.forEach(e.nodes(),function(t){i(e.node(t))}),r.default.forEach(e.edges(),function(t){var n=e.edge(t);r.default.has(n,\"x\")&&i(n)}),t-=d,a-=f,r.default.forEach(e.nodes(),function(n){var r=e.node(n);r.x-=t,r.y-=a}),r.default.forEach(e.edges(),function(n){var u=e.edge(n);r.default.forEach(u.points,function(e){e.x-=t,e.y-=a}),r.default.has(u,\"x\")&&(u.x-=t),r.default.has(u,\"y\")&&(u.y-=a)}),o.width=n-t+d,o.height=u-a+f}(e)}),t(\" assignNodeIntersects\",function(){!function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t),r=e.node(t.v),a=e.node(t.w),u=null,o=null;n.points?(u=n.points[0],o=n.points[n.points.length-1]):(n.points=[],u=a,o=r),n.points.unshift(i.default.intersectRect(r,u)),n.points.push(i.default.intersectRect(a,o))})}(e)}),t(\" reversePoints\",function(){!function(e){r.default.forEach(e.edges(),function(t){var n=e.edge(t);n.reversed&&n.points.reverse()})}(e)}),t(\" acyclic.undo\",function(){u.default.undo(e)})}(t,n)}),n(\" updateInputGraph\",function(){!function(e,t){r.default.forEach(e.nodes(),function(n){var r=e.node(n),a=t.node(n);r&&(r.x=a.x,r.y=a.y,t.children(n).length&&(r.width=a.width,r.height=a.height))}),r.default.forEach(e.edges(),function(n){var a=e.edge(n),u=t.edge(n);a.points=u.points,r.default.has(u,\"x\")&&(a.x=u.x,a.y=u.y)}),e.graph().width=t.graph().width,e.graph().height=t.graph().height}(e,t)})})}},function(e,t,n){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,a=n(26),u=(r=a)&&r.__esModule?r:{default:r};t.default={layout:u.default}}]);\n//# sourceMappingURL=dagre-layout.core.js.map","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.5';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n 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',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** 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/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n 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 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n return key == '__proto__'\n ? undefined\n : object[key];\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n var sourceURL = '//# sourceURL=' +\n ('sourceURL' in options\n ? options.sourceURL\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = (lodashFunc.name + ''),\n names = realNames[key] || (realNames[key] = []);\n\n names.push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","/*!\n * Escaper v2.5.3\n * https://github.com/kobezzza/Escaper\n *\n * Released under the MIT license\n * https://github.com/kobezzza/Escaper/blob/master/LICENSE\n *\n * Date: Tue, 23 Jan 2018 15:58:45 GMT\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define('Escaper', ['exports'], factory) :\n\t(factory((global.Escaper = {})));\n}(this, (function (exports) { 'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar Escaper = void 0;\nvar escaper = Escaper = {\n\tVERSION: [2, 5, 3],\n\tcontent: [],\n\tcache: {},\n\tsnakeskinRgxp: null,\n\tsymbols: null,\n\treplace: replace,\n\tpaste: paste\n};\n\nvar stringLiterals = {\n\t'\"': true,\n\t'\\'': true,\n\t'`': true\n};\n\nvar literals = {\n\t'/': true\n};\n\nfor (var key in stringLiterals) {\n\tif (!stringLiterals.hasOwnProperty(key)) {\n\t\tbreak;\n\t}\n\n\tliterals[key] = true;\n}\n\nvar singleComments = {\n\t'//': true,\n\t'//*': true,\n\t'//!': true,\n\t'//#': true,\n\t'//@': true,\n\t'//$': true\n};\n\nvar multComments = {\n\t'/*': true,\n\t'/**': true,\n\t'/*!': true,\n\t'/*#': true,\n\t'/*@': true,\n\t'/*$': true\n};\n\nvar keyArr = [];\nvar finalMap = {};\n\nfor (var _key in literals) {\n\tif (!literals.hasOwnProperty(_key)) {\n\t\tbreak;\n\t}\n\n\tkeyArr.push(_key);\n\tfinalMap[_key] = true;\n}\n\nfor (var _key2 in singleComments) {\n\tif (!singleComments.hasOwnProperty(_key2)) {\n\t\tbreak;\n\t}\n\n\tkeyArr.push(_key2);\n\tfinalMap[_key2] = true;\n}\n\nfor (var _key3 in multComments) {\n\tif (!multComments.hasOwnProperty(_key3)) {\n\t\tbreak;\n\t}\n\n\tkeyArr.push(_key3);\n\tfinalMap[_key3] = true;\n}\n\nvar rgxpFlags = [];\nvar rgxpFlagsMap = {\n\t'g': true,\n\t'm': true,\n\t'i': true,\n\t'y': true,\n\t'u': true\n};\n\nfor (var _key4 in rgxpFlagsMap) {\n\tif (!rgxpFlagsMap.hasOwnProperty(_key4)) {\n\t\tbreak;\n\t}\n\n\trgxpFlags.push(_key4);\n}\n\nvar escapeEndMap = {\n\t'-': true,\n\t'+': true,\n\t'*': true,\n\t'%': true,\n\t'~': true,\n\t'>': true,\n\t'<': true,\n\t'^': true,\n\t',': true,\n\t';': true,\n\t'=': true,\n\t'|': true,\n\t'&': true,\n\t'!': true,\n\t'?': true,\n\t':': true,\n\t'(': true,\n\t'{': true,\n\t'[': true\n};\n\nvar escapeEndWordMap = {\n\t'return': true,\n\t'yield': true,\n\t'await': true,\n\t'typeof': true,\n\t'void': true,\n\t'instanceof': true,\n\t'delete': true,\n\t'in': true,\n\t'new': true,\n\t'of': true\n};\n\n/**\n * @param {!Object} obj\n * @param {!Object} p\n * @param {(boolean|number)} val\n */\nfunction mix(obj, p, val) {\n\tfor (var _key5 in obj) {\n\t\tif (!obj.hasOwnProperty(_key5)) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (_key5 in p === false) {\n\t\t\tp[_key5] = val;\n\t\t}\n\t}\n}\n\nvar symbols = void 0;\nvar snakeskinRgxp = void 0;\n\nvar uSRgxp = /[^\\s/]/;\nvar wRgxp = /[a-z]/;\nvar sRgxp = /\\s/;\nvar nRgxp = /[\\r\\n]/;\nvar posRgxp = /\\${pos}/g;\n\nvar objMap = {\n\t'object': true,\n\t'function': true\n};\n\n/**\n * Replaces all found blocks ' ... ', \" ... \", ` ... `, / ... /, // ..., /* ... *\\/ to\n * __ESCAPER_QUOT__number_ in a string and returns a new string\n *\n * @param {string} str - source string\n * @param {(Object<string, boolean>|boolean)=} [opt_withCommentsOrParams=false] - parameters:\n *\n * (if a parameter value is set to -1, then all found matches will be removed from the final string,\n * or if the value will be set to true/false they will be included/excluded)\n *\n * *) @label - template for replacement, e.g. __ESCAPER_QUOT__${pos}_\n * *) @all - replaces all found matches\n * *) @comments - replaces all kinds of comments\n * *) @strings - replaces all kinds of string literals\n * *) @literals - replaces all kinds of string literals and regular expressions\n * *) `\n * *) '\n * *) \"\n * *) /\n * *) //\n * *) //*\n * *) //!\n * *) //#\n * *) //@\n * *) //$\n * *) /*\n * *) /**\n * *) /*!\n * *) /*#\n * *) /*@\n * *) /*$\n *\n * OR if the value is boolean, then will be replaced all found comments (true) / literals (false)\n *\n * @param {Array=} [opt_content=Escaper.content] - array for matches\n * @param {?boolean=} [opt_snakeskin] - private parameter for using with Snakeskin\n * @return {string}\n */\nfunction replace(str, opt_withCommentsOrParams, opt_content, opt_snakeskin) {\n\tsymbols = symbols || Escaper.symbols || 'a-z';\n\tsnakeskinRgxp = snakeskinRgxp || Escaper.snakeskinRgxp || new RegExp('[!$' + symbols + '_]', 'i');\n\n\tvar _Escaper = Escaper,\n\t cache = _Escaper.cache,\n\t content = _Escaper.content;\n\n\n\tvar isObj = Boolean(opt_withCommentsOrParams && objMap[typeof opt_withCommentsOrParams === 'undefined' ? 'undefined' : _typeof(opt_withCommentsOrParams)]);\n\n\tvar p = isObj ? Object(opt_withCommentsOrParams) : {};\n\n\tfunction mark(pos) {\n\t\tif (p['@label']) {\n\t\t\treturn p['@label'].replace(posRgxp, pos);\n\t\t}\n\n\t\treturn '__ESCAPER_QUOT__' + pos + '_';\n\t}\n\n\tvar withComments = false;\n\tif (typeof opt_withCommentsOrParams === 'boolean') {\n\t\twithComments = Boolean(opt_withCommentsOrParams);\n\t}\n\n\tif ('@comments' in p) {\n\t\tmix(multComments, p, p['@comments']);\n\t\tmix(singleComments, p, p['@comments']);\n\t\tdelete p['@comments'];\n\t}\n\n\tif ('@strings' in p) {\n\t\tmix(stringLiterals, p, p['@strings']);\n\t\tdelete p['@strings'];\n\t}\n\n\tif ('@literals' in p) {\n\t\tmix(literals, p, p['@literals']);\n\t\tdelete p['@literals'];\n\t}\n\n\tif ('@all' in p) {\n\t\tmix(finalMap, p, p['@all']);\n\t\tdelete p['@all'];\n\t}\n\n\tvar cacheKey = '';\n\tfor (var i = -1; ++i < keyArr.length;) {\n\t\tvar el = keyArr[i];\n\n\t\tif (multComments[el] || singleComments[el]) {\n\t\t\tp[el] = withComments || p[el];\n\t\t} else {\n\t\t\tp[el] = p[el] || !isObj;\n\t\t}\n\n\t\tcacheKey += p[el] + ',';\n\t}\n\n\tvar initStr = str,\n\t stack = opt_content || content;\n\n\tif (stack === content && cache[cacheKey] && cache[cacheKey][initStr]) {\n\t\treturn cache[cacheKey][initStr];\n\t}\n\n\tvar begin = false,\n\t end = true;\n\n\tvar escape = false,\n\t comment = false;\n\n\tvar selectionStart = 0,\n\t block = false;\n\n\tvar templateVar = 0,\n\t filterStart = false;\n\n\tvar cut = void 0,\n\t label = void 0;\n\n\tvar part = '',\n\t rPart = '';\n\n\tfor (var _i = -1; ++_i < str.length;) {\n\t\tvar _el = str.charAt(_i);\n\n\t\tvar next = str.charAt(_i + 1),\n\t\t word = str.substr(_i, 2),\n\t\t extWord = str.substr(_i, 3);\n\n\t\tif (!comment) {\n\t\t\tif (!begin) {\n\t\t\t\tif (_el === '/') {\n\t\t\t\t\tif (singleComments[word] || multComments[word]) {\n\t\t\t\t\t\tif (singleComments[extWord] || multComments[extWord]) {\n\t\t\t\t\t\t\tcomment = extWord;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomment = word;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (comment) {\n\t\t\t\t\t\tselectionStart = _i;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (escapeEndMap[_el] || escapeEndWordMap[rPart]) {\n\t\t\t\t\tend = true;\n\t\t\t\t\trPart = '';\n\t\t\t\t} else if (uSRgxp.test(_el)) {\n\t\t\t\t\tend = false;\n\t\t\t\t}\n\n\t\t\t\tif (wRgxp.test(_el)) {\n\t\t\t\t\tpart += _el;\n\t\t\t\t} else {\n\t\t\t\t\trPart = part;\n\t\t\t\t\tpart = '';\n\t\t\t\t}\n\n\t\t\t\tvar skip = false;\n\t\t\t\tif (opt_snakeskin) {\n\t\t\t\t\tif (_el === '|' && snakeskinRgxp.test(next)) {\n\t\t\t\t\t\tfilterStart = true;\n\t\t\t\t\t\tend = false;\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\t} else if (filterStart && sRgxp.test(_el)) {\n\t\t\t\t\t\tfilterStart = false;\n\t\t\t\t\t\tend = true;\n\t\t\t\t\t\tskip = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!skip) {\n\t\t\t\t\tif (escapeEndMap[_el]) {\n\t\t\t\t\t\tend = true;\n\t\t\t\t\t} else if (uSRgxp.test(_el)) {\n\t\t\t\t\t\tend = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// [] inside RegExp\n\t\t\tif (begin === '/' && !escape) {\n\t\t\t\tif (_el === '[') {\n\t\t\t\t\tblock = true;\n\t\t\t\t} else if (_el === ']') {\n\t\t\t\t\tblock = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!begin && templateVar) {\n\t\t\t\tif (_el === '}') {\n\t\t\t\t\ttemplateVar--;\n\t\t\t\t} else if (_el === '{') {\n\t\t\t\t\ttemplateVar++;\n\t\t\t\t}\n\n\t\t\t\tif (!templateVar) {\n\t\t\t\t\t_el = '`';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (begin === '`' && !escape && word === '${') {\n\t\t\t\t_el = '`';\n\t\t\t\t_i++;\n\t\t\t\ttemplateVar++;\n\t\t\t}\n\n\t\t\tif (finalMap[_el] && (_el !== '/' || end) && !begin) {\n\t\t\t\tbegin = _el;\n\t\t\t\tselectionStart = _i;\n\t\t\t} else if (begin && (_el === '\\\\' || escape)) {\n\t\t\t\tescape = !escape;\n\t\t\t} else if (finalMap[_el] && begin === _el && !escape && (begin !== '/' || !block)) {\n\t\t\t\tif (_el === '/') {\n\t\t\t\t\tfor (var j = -1; ++j < rgxpFlags.length;) {\n\t\t\t\t\t\tif (rgxpFlagsMap[str.charAt(_i + 1)]) {\n\t\t\t\t\t\t\t_i++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbegin = false;\n\t\t\t\tend = false;\n\n\t\t\t\tif (p[_el]) {\n\t\t\t\t\tcut = str.substring(selectionStart, _i + 1);\n\n\t\t\t\t\tif (p[_el] === -1) {\n\t\t\t\t\t\tlabel = '';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel = mark(stack.length);\n\t\t\t\t\t\tstack.push(cut);\n\t\t\t\t\t}\n\n\t\t\t\t\tstr = str.substring(0, selectionStart) + label + str.substring(_i + 1);\n\t\t\t\t\t_i += label.length - cut.length;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (nRgxp.test(next) && singleComments[comment] || multComments[_el + str.charAt(_i - 1)] && _i - selectionStart > 2 && multComments[comment]) {\n\t\t\tif (p[comment]) {\n\t\t\t\tcut = str.substring(selectionStart, _i + 1);\n\n\t\t\t\tif (p[comment] === -1) {\n\t\t\t\t\tlabel = '';\n\t\t\t\t} else {\n\t\t\t\t\tlabel = mark(stack.length);\n\t\t\t\t\tstack.push(cut);\n\t\t\t\t}\n\n\t\t\t\tstr = str.substring(0, selectionStart) + label + str.substring(_i + 1);\n\t\t\t\t_i += label.length - cut.length;\n\t\t\t}\n\n\t\t\tcomment = false;\n\t\t}\n\t}\n\n\tif (stack === content) {\n\t\tcache[cacheKey] = cache[cacheKey] || {};\n\t\tcache[cacheKey][initStr] = str;\n\t}\n\n\treturn str;\n}\n\nvar pasteRgxp = /__ESCAPER_QUOT__(\\d+)_/g;\n\n/**\n * Replaces all found blocks __ESCAPER_QUOT__number_ to real content in a string\n * and returns a new string\n *\n * @param {string} str - source string\n * @param {Array=} [opt_content=Escaper.content] - array of matches\n * @param {RegExp=} [opt_rgxp] - RegExp for searching, e.g. /__ESCAPER_QUOT__(\\d+)_/g\n * @return {string}\n */\nfunction paste(str, opt_content, opt_rgxp) {\n\treturn str.replace(opt_rgxp || pasteRgxp, function (str, pos) {\n\t\treturn (opt_content || Escaper.content)[pos];\n\t});\n}\n\nexports['default'] = escaper;\nexports.replace = replace;\nexports.paste = paste;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","module.exports = {\n Graph: require('./lib/graph'),\n json: require('./lib/json'),\n alg: require('./lib/alg')\n}\n","var _ = require('../lodash')\n\nmodule.exports = components\n\nfunction components (g) {\n const visited = {}\n const cmpts = []\n let cmpt\n\n function dfs (v) {\n if (_.has(visited, v)) return\n visited[v] = true\n cmpt.push(v)\n _.each(g.successors(v), dfs)\n _.each(g.predecessors(v), dfs)\n }\n\n _.each(g.nodes(), function (v) {\n cmpt = []\n dfs(v)\n if (cmpt.length) {\n cmpts.push(cmpt)\n }\n })\n\n return cmpts\n}\n","var _ = require('../lodash')\n\nmodule.exports = dfs\n\n/*\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * Order must be one of \"pre\" or \"post\".\n */\nfunction dfs (g, vs, order) {\n if (!_.isArray(vs)) {\n vs = [vs]\n }\n\n var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g)\n\n const acc = []\n const visited = {}\n _.each(vs, function (v) {\n if (!g.hasNode(v)) {\n throw new Error('Graph does not have node: ' + v)\n }\n\n doDfs(g, v, order === 'post', visited, navigation, acc)\n })\n return acc\n}\n\nfunction doDfs (g, v, postorder, visited, navigation, acc) {\n if (!_.has(visited, v)) {\n visited[v] = true\n\n if (!postorder) { acc.push(v) }\n _.each(navigation(v), function (w) {\n doDfs(g, w, postorder, visited, navigation, acc)\n })\n if (postorder) { acc.push(v) }\n }\n}\n","const dijkstra = require('./dijkstra')\nconst _ = require('../lodash')\n\nmodule.exports = dijkstraAll\n\nfunction dijkstraAll (g, weightFunc, edgeFunc) {\n return _.transform(g.nodes(), function (acc, v) {\n acc[v] = dijkstra(g, v, weightFunc, edgeFunc)\n }, {})\n}\n","const _ = require('../lodash')\nconst PriorityQueue = require('../data/priority-queue')\n\nmodule.exports = dijkstra\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1)\n\nfunction dijkstra (g, source, weightFn, edgeFn) {\n return runDijkstra(g, String(source),\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn || function (v) { return g.outEdges(v) })\n}\n\nfunction runDijkstra (g, source, weightFn, edgeFn) {\n const results = {}\n const pq = new PriorityQueue()\n let v, vEntry\n\n var updateNeighbors = function (edge) {\n const w = edge.v !== v ? edge.v : edge.w\n const wEntry = results[w]\n const weight = weightFn(edge)\n const distance = vEntry.distance + weight\n\n if (weight < 0) {\n throw new Error('dijkstra does not allow negative edge weights. ' +\n 'Bad edge: ' + edge + ' Weight: ' + weight)\n }\n\n if (distance < wEntry.distance) {\n wEntry.distance = distance\n wEntry.predecessor = v\n pq.decrease(w, distance)\n }\n }\n\n g.nodes().forEach(function (v) {\n var distance = v === source ? 0 : Number.POSITIVE_INFINITY\n results[v] = { distance: distance }\n pq.add(v, distance)\n })\n\n while (pq.size() > 0) {\n v = pq.removeMin()\n vEntry = results[v]\n if (vEntry.distance === Number.POSITIVE_INFINITY) {\n break\n }\n\n edgeFn(v).forEach(updateNeighbors)\n }\n\n return results\n}\n","const _ = require('../lodash')\nconst tarjan = require('./tarjan')\n\nmodule.exports = findCycles\n\nfunction findCycles (g) {\n return _.filter(tarjan(g), function (cmpt) {\n return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0]))\n })\n}\n","var _ = require('../lodash')\n\nmodule.exports = floydWarshall\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1)\n\nfunction floydWarshall (g, weightFn, edgeFn) {\n return runFloydWarshall(g,\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn || function (v) { return g.outEdges(v) })\n}\n\nfunction runFloydWarshall (g, weightFn, edgeFn) {\n const results = {}\n const nodes = g.nodes()\n\n nodes.forEach(function (v) {\n results[v] = {}\n results[v][v] = { distance: 0 }\n nodes.forEach(function (w) {\n if (v !== w) {\n results[v][w] = { distance: Number.POSITIVE_INFINITY }\n }\n })\n edgeFn(v).forEach(function (edge) {\n const w = edge.v === v ? edge.w : edge.v\n const d = weightFn(edge)\n results[v][w] = { distance: d, predecessor: v }\n })\n })\n\n nodes.forEach(function (k) {\n var rowK = results[k]\n nodes.forEach(function (i) {\n var rowI = results[i]\n nodes.forEach(function (j) {\n var ik = rowI[k]\n var kj = rowK[j]\n var ij = rowI[j]\n var altDistance = ik.distance + kj.distance\n if (altDistance < ij.distance) {\n ij.distance = altDistance\n ij.predecessor = kj.predecessor\n }\n })\n })\n })\n\n return results\n}\n","module.exports = {\n components: require('./components'),\n dijkstra: require('./dijkstra'),\n dijkstraAll: require('./dijkstra-all'),\n findCycles: require('./find-cycles'),\n floydWarshall: require('./floyd-warshall'),\n isAcyclic: require('./is-acyclic'),\n postorder: require('./postorder'),\n preorder: require('./preorder'),\n prim: require('./prim'),\n tarjan: require('./tarjan'),\n topsort: require('./topsort')\n}\n","var topsort = require('./topsort')\n\nmodule.exports = isAcyclic\n\nfunction isAcyclic (g) {\n try {\n topsort(g)\n } catch (e) {\n if (e instanceof topsort.CycleException) {\n return false\n }\n throw e\n }\n return true\n}\n","var dfs = require('./dfs')\n\nmodule.exports = postorder\n\nfunction postorder (g, vs) {\n return dfs(g, vs, 'post')\n}\n","var dfs = require('./dfs')\n\nmodule.exports = preorder\n\nfunction preorder (g, vs) {\n return dfs(g, vs, 'pre')\n}\n","const _ = require('../lodash')\nconst Graph = require('../graph')\nconst PriorityQueue = require('../data/priority-queue')\n\nmodule.exports = prim\n\nfunction prim (g, weightFunc) {\n const result = new Graph()\n const parents = {}\n const pq = new PriorityQueue()\n let v\n\n function updateNeighbors (edge) {\n const w = edge.v === v ? edge.w : edge.v\n const pri = pq.priority(w)\n if (pri !== undefined) {\n var edgeWeight = weightFunc(edge)\n if (edgeWeight < pri) {\n parents[w] = v\n pq.decrease(w, edgeWeight)\n }\n }\n }\n\n if (g.nodeCount() === 0) {\n return result\n }\n\n _.each(g.nodes(), function (v) {\n pq.add(v, Number.POSITIVE_INFINITY)\n result.setNode(v)\n })\n\n // Start from an arbitrary node\n pq.decrease(g.nodes()[0], 0)\n\n var init = false\n while (pq.size() > 0) {\n v = pq.removeMin()\n if (_.has(parents, v)) {\n result.setEdge(v, parents[v])\n } else if (init) {\n throw new Error('Input graph is not connected: ' + g)\n } else {\n init = true\n }\n\n g.nodeEdges(v).forEach(updateNeighbors)\n }\n\n return result\n}\n","var _ = require('../lodash')\n\nmodule.exports = tarjan\n\nfunction tarjan (g) {\n let index = 0\n const stack = []\n const visited = {} // node id -> { onStack, lowlink, index }\n const results = []\n\n function dfs (v) {\n var entry = visited[v] = {\n onStack: true,\n lowlink: index,\n index: index++\n }\n stack.push(v)\n\n g.successors(v).forEach(function (w) {\n if (!_.has(visited, w)) {\n dfs(w)\n entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink)\n } else if (visited[w].onStack) {\n entry.lowlink = Math.min(entry.lowlink, visited[w].index)\n }\n })\n\n if (entry.lowlink === entry.index) {\n const cmpt = []\n let w\n do {\n w = stack.pop()\n visited[w].onStack = false\n cmpt.push(w)\n } while (v !== w)\n results.push(cmpt)\n }\n }\n\n g.nodes().forEach(function (v) {\n if (!_.has(visited, v)) {\n dfs(v)\n }\n })\n\n return results\n}\n","const _ = require('../lodash')\n\nmodule.exports = topsort\ntopsort.CycleException = CycleException\n\nfunction topsort (g) {\n const visited = {}\n const stack = {}\n const results = []\n\n function visit (node) {\n if (_.has(stack, node)) {\n throw new CycleException()\n }\n\n if (!_.has(visited, node)) {\n stack[node] = true\n visited[node] = true\n _.each(g.predecessors(node), visit)\n delete stack[node]\n results.push(node)\n }\n }\n\n _.each(g.sinks(), visit)\n\n if (_.size(visited) !== g.nodeCount()) {\n throw new CycleException()\n }\n\n return results\n}\n\nfunction CycleException () {}\nCycleException.prototype = new Error() // must be an instance of Error to pass testing\n","const _ = require('../lodash')\n\nmodule.exports = PriorityQueue\n\n/**\n * A min-priority queue data structure. This algorithm is derived from Cormen,\n * et al., \"Introduction to Algorithms\". The basic idea of a min-priority\n * queue is that you can efficiently (in O(1) time) get the smallest key in\n * the queue. Adding and removing elements takes O(log n) time. A key can\n * have its priority decreased in O(log n) time.\n */\nfunction PriorityQueue () {\n this._arr = []\n this._keyIndices = {}\n}\n\n/**\n * Returns the number of elements in the queue. Takes `O(1)` time.\n */\nPriorityQueue.prototype.size = function () {\n return this._arr.length\n}\n\n/**\n * Returns the keys that are in the queue. Takes `O(n)` time.\n */\nPriorityQueue.prototype.keys = function () {\n return this._arr.map(function (x) { return x.key })\n}\n\n/**\n * Returns `true` if **key** is in the queue and `false` if not.\n */\nPriorityQueue.prototype.has = function (key) {\n return _.has(this._keyIndices, key)\n}\n\n/**\n * Returns the priority for **key**. If **key** is not present in the queue\n * then this function returns `undefined`. Takes `O(1)` time.\n *\n * @param {Object} key\n */\nPriorityQueue.prototype.priority = function (key) {\n var index = this._keyIndices[key]\n if (index !== undefined) {\n return this._arr[index].priority\n }\n}\n\n/**\n * Returns the key for the minimum element in this queue. If the queue is\n * empty this function throws an Error. Takes `O(1)` time.\n */\nPriorityQueue.prototype.min = function () {\n if (this.size() === 0) {\n throw new Error('Queue underflow')\n }\n return this._arr[0].key\n}\n\n/**\n * Inserts a new key into the priority queue. If the key already exists in\n * the queue this function returns `false`; otherwise it will return `true`.\n * Takes `O(n)` time.\n *\n * @param {Object} key the key to add\n * @param {Number} priority the initial priority for the key\n */\nPriorityQueue.prototype.add = function (key, priority) {\n var keyIndices = this._keyIndices\n key = String(key)\n if (!_.has(keyIndices, key)) {\n var arr = this._arr\n var index = arr.length\n keyIndices[key] = index\n arr.push({key: key, priority: priority})\n this._decrease(index)\n return true\n }\n return false\n}\n\n/**\n * Removes and returns the smallest key in the queue. Takes `O(log n)` time.\n */\nPriorityQueue.prototype.removeMin = function () {\n this._swap(0, this._arr.length - 1)\n var min = this._arr.pop()\n delete this._keyIndices[min.key]\n this._heapify(0)\n return min.key\n}\n\n/**\n * Decreases the priority for **key** to **priority**. If the new priority is\n * greater than the previous priority, this function will throw an Error.\n *\n * @param {Object} key the key for which to raise priority\n * @param {Number} priority the new priority for the key\n */\nPriorityQueue.prototype.decrease = function (key, priority) {\n var index = this._keyIndices[key]\n if (priority > this._arr[index].priority) {\n throw new Error('New priority is greater than current priority. ' +\n 'Key: ' + key + ' Old: ' + this._arr[index].priority + ' New: ' + priority)\n }\n this._arr[index].priority = priority\n this._decrease(index)\n}\n\nPriorityQueue.prototype._heapify = function (i) {\n const arr = this._arr\n const l = 2 * i\n const r = l + 1\n let largest = i\n if (l < arr.length) {\n largest = arr[l].priority < arr[largest].priority ? l : largest\n if (r < arr.length) {\n largest = arr[r].priority < arr[largest].priority ? r : largest\n }\n if (largest !== i) {\n this._swap(i, largest)\n this._heapify(largest)\n }\n }\n}\n\nPriorityQueue.prototype._decrease = function (index) {\n var arr = this._arr\n var priority = arr[index].priority\n var parent\n while (index !== 0) {\n parent = index >> 1\n if (arr[parent].priority < priority) {\n break\n }\n this._swap(index, parent)\n index = parent\n }\n}\n\nPriorityQueue.prototype._swap = function (i, j) {\n var arr = this._arr\n var keyIndices = this._keyIndices\n var origArrI = arr[i]\n var origArrJ = arr[j]\n arr[i] = origArrJ\n arr[j] = origArrI\n keyIndices[origArrJ.key] = i\n keyIndices[origArrI.key] = j\n}\n","const _ = require('./lodash')\n\nmodule.exports = Graph\n\nconst DEFAULT_EDGE_NAME = '\\x00'\nconst GRAPH_NODE = '\\x00'\nconst EDGE_KEY_DELIM = '\\x01'\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\nfunction Graph (opts) {\n this._isDirected = _.has(opts, 'directed') ? opts.directed : true\n this._isMultigraph = _.has(opts, 'multigraph') ? opts.multigraph : false\n this._isCompound = _.has(opts, 'compound') ? opts.compound : false\n\n // Label for the graph itself\n this._label = undefined\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined)\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined)\n\n // v -> label\n this._nodes = {}\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {}\n\n // v -> children\n this._children = {}\n this._children[GRAPH_NODE] = {}\n }\n\n // v -> edgeObj\n this._in = {}\n\n // u -> v -> Number\n this._preds = {}\n\n // v -> edgeObj\n this._out = {}\n\n // v -> w -> Number\n this._sucs = {}\n\n // e -> edgeObj\n this._edgeObjs = {}\n\n // e -> label\n this._edgeLabels = {}\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0\n\n/* === Graph functions ========= */\n\nGraph.prototype.isDirected = function () {\n return this._isDirected\n}\n\nGraph.prototype.isMultigraph = function () {\n return this._isMultigraph\n}\n\nGraph.prototype.isCompound = function () {\n return this._isCompound\n}\n\nGraph.prototype.setGraph = function (label) {\n this._label = label\n return this\n}\n\nGraph.prototype.graph = function () {\n return this._label\n}\n\n/* === Node functions ========== */\n\nGraph.prototype.setDefaultNodeLabel = function (newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault)\n }\n this._defaultNodeLabelFn = newDefault\n return this\n}\n\nGraph.prototype.nodeCount = function () {\n return this._nodeCount\n}\n\nGraph.prototype.nodes = function () {\n return _.keys(this._nodes)\n}\n\nGraph.prototype.sources = function () {\n var self = this\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._in[v])\n })\n}\n\nGraph.prototype.sinks = function () {\n var self = this\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._out[v])\n })\n}\n\nGraph.prototype.setNodes = function (vs, value) {\n var args = arguments\n var self = this\n _.each(vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value)\n } else {\n self.setNode(v)\n }\n })\n return this\n}\n\nGraph.prototype.setNode = function (v, value) {\n if (_.has(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value\n }\n return this\n }\n\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v)\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE\n this._children[v] = {}\n this._children[GRAPH_NODE][v] = true\n }\n this._in[v] = {}\n this._preds[v] = {}\n this._out[v] = {}\n this._sucs[v] = {}\n ++this._nodeCount\n return this\n}\n\nGraph.prototype.node = function (v) {\n return this._nodes[v]\n}\n\nGraph.prototype.hasNode = function (v) {\n return _.has(this._nodes, v)\n}\n\nGraph.prototype.removeNode = function (v) {\n var self = this\n if (_.has(this._nodes, v)) {\n var removeEdge = function (e) { self.removeEdge(self._edgeObjs[e]) }\n delete this._nodes[v]\n if (this._isCompound) {\n this._removeFromParentsChildList(v)\n delete this._parent[v]\n _.each(this.children(v), function (child) {\n self.setParent(child)\n })\n delete this._children[v]\n }\n _.each(_.keys(this._in[v]), removeEdge)\n delete this._in[v]\n delete this._preds[v]\n _.each(_.keys(this._out[v]), removeEdge)\n delete this._out[v]\n delete this._sucs[v]\n --this._nodeCount\n }\n return this\n}\n\nGraph.prototype.setParent = function (v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph')\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE\n } else {\n // Coerce parent to string\n parent += ''\n for (var ancestor = parent;\n !_.isUndefined(ancestor);\n ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v +\n ' would create a cycle')\n }\n }\n\n this.setNode(parent)\n }\n\n this.setNode(v)\n this._removeFromParentsChildList(v)\n this._parent[v] = parent\n this._children[parent][v] = true\n return this\n}\n\nGraph.prototype._removeFromParentsChildList = function (v) {\n delete this._children[this._parent[v]][v]\n}\n\nGraph.prototype.parent = function (v) {\n if (this._isCompound) {\n var parent = this._parent[v]\n if (parent !== GRAPH_NODE) {\n return parent\n }\n }\n}\n\nGraph.prototype.children = function (v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE\n }\n\n if (this._isCompound) {\n var children = this._children[v]\n if (children) {\n return _.keys(children)\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes()\n } else if (this.hasNode(v)) {\n return []\n }\n}\n\nGraph.prototype.predecessors = function (v) {\n var predsV = this._preds[v]\n if (predsV) {\n return _.keys(predsV)\n }\n}\n\nGraph.prototype.successors = function (v) {\n var sucsV = this._sucs[v]\n if (sucsV) {\n return _.keys(sucsV)\n }\n}\n\nGraph.prototype.neighbors = function (v) {\n var preds = this.predecessors(v)\n if (preds) {\n return _.union(preds, this.successors(v))\n }\n}\n\nGraph.prototype.isLeaf = function (v) {\n var neighbors\n if (this.isDirected()) {\n neighbors = this.successors(v)\n } else {\n neighbors = this.neighbors(v)\n }\n return neighbors.length === 0\n}\n\nGraph.prototype.filterNodes = function (filter) {\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound\n })\n\n copy.setGraph(this.graph())\n\n var self = this\n _.each(this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value)\n }\n })\n\n _.each(this._edgeObjs, function (e) {\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e))\n }\n })\n\n var parents = {}\n function findParent (v) {\n var parent = self.parent(v)\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent\n return parent\n } else if (parent in parents) {\n return parents[parent]\n } else {\n return findParent(parent)\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function (v) {\n copy.setParent(v, findParent(v))\n })\n }\n\n return copy\n}\n\n/* === Edge functions ========== */\n\nGraph.prototype.setDefaultEdgeLabel = function (newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault)\n }\n this._defaultEdgeLabelFn = newDefault\n return this\n}\n\nGraph.prototype.edgeCount = function () {\n return this._edgeCount\n}\n\nGraph.prototype.edges = function () {\n return _.values(this._edgeObjs)\n}\n\nGraph.prototype.setPath = function (vs, value) {\n const self = this\n const args = arguments\n _.reduce(vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value)\n } else {\n self.setEdge(v, w)\n }\n return w\n })\n return this\n}\n\n/*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\nGraph.prototype.setEdge = function () {\n let v, w, name, value\n let valueSpecified = false\n const arg0 = arguments[0]\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v\n w = arg0.w\n name = arg0.name\n if (arguments.length === 2) {\n value = arguments[1]\n valueSpecified = true\n }\n } else {\n v = arg0\n w = arguments[1]\n name = arguments[3]\n if (arguments.length > 2) {\n value = arguments[2]\n valueSpecified = true\n }\n }\n\n v = '' + v\n w = '' + w\n if (!_.isUndefined(name)) {\n name = '' + name\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name)\n if (_.has(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value\n }\n return this\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false')\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v)\n this.setNode(w)\n\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name)\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name)\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v\n w = edgeObj.w\n\n Object.freeze(edgeObj)\n this._edgeObjs[e] = edgeObj\n incrementOrInitEntry(this._preds[w], v)\n incrementOrInitEntry(this._sucs[v], w)\n this._in[w][e] = edgeObj\n this._out[v][e] = edgeObj\n this._edgeCount++\n return this\n}\n\nGraph.prototype.edge = function (v, w, name) {\n var e = (arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name))\n return this._edgeLabels[e]\n}\n\nGraph.prototype.hasEdge = function (v, w, name) {\n var e = (arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name))\n return _.has(this._edgeLabels, e)\n}\n\nGraph.prototype.removeEdge = function (v, w, name) {\n const e = (arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name))\n const edge = this._edgeObjs[e]\n if (edge) {\n v = edge.v\n w = edge.w\n delete this._edgeLabels[e]\n delete this._edgeObjs[e]\n decrementOrRemoveEntry(this._preds[w], v)\n decrementOrRemoveEntry(this._sucs[v], w)\n delete this._in[w][e]\n delete this._out[v][e]\n this._edgeCount--\n }\n return this\n}\n\nGraph.prototype.inEdges = function (v, u) {\n var inV = this._in[v]\n if (inV) {\n var edges = _.values(inV)\n if (!u) {\n return edges\n }\n return _.filter(edges, function (edge) { return edge.v === u })\n }\n}\n\nGraph.prototype.outEdges = function (v, w) {\n var outV = this._out[v]\n if (outV) {\n var edges = _.values(outV)\n if (!w) {\n return edges\n }\n return _.filter(edges, function (edge) { return edge.w === w })\n }\n}\n\nGraph.prototype.nodeEdges = function (v, w) {\n var inEdges = this.inEdges(v, w)\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w))\n }\n}\n\nfunction incrementOrInitEntry (map, k) {\n if (map[k]) {\n map[k]++\n } else {\n map[k] = 1\n }\n}\n\nfunction decrementOrRemoveEntry (map, k) {\n if (!--map[k]) { delete map[k] }\n}\n\nfunction edgeArgsToId (isDirected, v_, w_, name) {\n var v = '' + v_\n var w = '' + w_\n if (!isDirected && v > w) {\n var tmp = v\n v = w\n w = tmp\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM +\n (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name)\n}\n\nfunction edgeArgsToObj (isDirected, v_, w_, name) {\n var v = '' + v_\n var w = '' + w_\n if (!isDirected && v > w) {\n var tmp = v\n v = w\n w = tmp\n }\n var edgeObj = { v: v, w: w }\n if (name) {\n edgeObj.name = name\n }\n return edgeObj\n}\n\nfunction edgeObjToId (isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name)\n}\n","const _ = require('./lodash')\nconst Graph = require('./graph')\n\nmodule.exports = {\n write: write,\n read: read\n}\n\nfunction write (g) {\n var json = {\n options: {\n directed: g.isDirected(),\n multigraph: g.isMultigraph(),\n compound: g.isCompound()\n },\n nodes: writeNodes(g),\n edges: writeEdges(g)\n }\n if (!_.isUndefined(g.graph())) {\n json.value = _.clone(g.graph())\n }\n return json\n}\n\nfunction writeNodes (g) {\n return _.map(g.nodes(), function (v) {\n const nodeValue = g.node(v)\n const parent = g.parent(v)\n const node = { v: v }\n if (!_.isUndefined(nodeValue)) {\n node.value = nodeValue\n }\n if (!_.isUndefined(parent)) {\n node.parent = parent\n }\n return node\n })\n}\n\nfunction writeEdges (g) {\n return _.map(g.edges(), function (e) {\n const edgeValue = g.edge(e)\n const edge = { v: e.v, w: e.w }\n if (!_.isUndefined(e.name)) {\n edge.name = e.name\n }\n if (!_.isUndefined(edgeValue)) {\n edge.value = edgeValue\n }\n return edge\n })\n}\n\nfunction read (json) {\n var g = new Graph(json.options).setGraph(json.value)\n _.each(json.nodes, function (entry) {\n g.setNode(entry.v, entry.value)\n if (entry.parent) {\n g.setParent(entry.v, entry.parent)\n }\n })\n _.each(json.edges, function (entry) {\n g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value)\n })\n return g\n}\n","/* global window */\n\nvar lodash\n\nif (typeof require === 'function') {\n try {\n lodash = require('lodash')\n } catch (e) {}\n}\n\nif (!lodash) {\n lodash = window._\n}\n\nmodule.exports = lodash\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.5';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n 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',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** 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/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n 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 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n return key == '__proto__'\n ? undefined\n : object[key];\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n var sourceURL = '//# sourceURL=' +\n ('sourceURL' in options\n ? options.sourceURL\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = (lodashFunc.name + ''),\n names = realNames[key] || (realNames[key] = []);\n\n names.push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","/*! https://mths.be/he v1.2.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t// All astral symbols.\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\t// All ASCII symbols (not just printable ASCII) except those listed in the\n\t// first column of the overrides table.\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides\n\tvar regexAsciiWhitelist = /[\\x01-\\x7F]/g;\n\t// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or\n\t// code points listed in the first column of the overrides table on\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.\n\tvar regexBmpWhitelist = /[\\x01-\\t\\x0B\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g;\n\n\tvar regexEncodeNonAscii = /<\\u20D2|=\\u20E5|>\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '&quot;',\n\t\t'&': '&amp;',\n\t\t'\\'': '&#x27;',\n\t\t'<': '&lt;',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '&gt;',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '&#x60;'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;')\n\t\t\t\t\t.replace(/&#x66;&#x6A;/g, '&fjlig;');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&amp`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `&#119558;`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `&#x1D306;`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","'use strict';\nmodule.exports = function (re) {\n\treturn Object.prototype.toString.call(re) === '[object RegExp]';\n};\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.11';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n 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',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** 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/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n 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 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n var sourceURL = '//# sourceURL=' +\n ('sourceURL' in options\n ? options.sourceURL\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = (lodashFunc.name + ''),\n names = realNames[key] || (realNames[key] = []);\n\n names.push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","var map = {\n\t\"./locale\": \"./node_modules/moment-mini/locale/locale.js\",\n\t\"./locale.js\": \"./node_modules/moment-mini/locale/locale.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/moment-mini/locale sync recursive ^\\\\.\\\\/.*$\";","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){\"use strict\";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||\"[object Array]\"===Object.prototype.toString.call(e)}function u(e){return null!=e&&\"[object Object]\"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function d(e){return\"number\"==typeof e||\"[object Number]\"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||\"[object Date]\"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n<e.length;++n)s.push(t(e[n],n));return s}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function _(e,t){for(var n in t)m(t,n)&&(e[n]=t[n]);return m(t,\"toString\")&&(e.toString=t.toString),m(t,\"valueOf\")&&(e.valueOf=t.valueOf),e}function y(e,t,n,s){return Ot(e,t,n,s,!0).utc()}function g(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function p(e){if(null==e._isValid){var t=g(e),n=i.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function v(e){var t=y(NaN);return null!=e?_(g(t),e):g(t).userInvalidated=!0,t}i=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};var r=c.momentProperties=[];function w(e,t){var n,s,i;if(l(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),l(t._i)||(e._i=t._i),l(t._f)||(e._f=t._f),l(t._l)||(e._l=t._l),l(t._strict)||(e._strict=t._strict),l(t._tzm)||(e._tzm=t._tzm),l(t._isUTC)||(e._isUTC=t._isUTC),l(t._offset)||(e._offset=t._offset),l(t._pf)||(e._pf=g(t)),l(t._locale)||(e._locale=t._locale),0<r.length)for(n=0;n<r.length;n++)l(i=t[s=r[n]])||(e[s]=i);return e}var t=!1;function M(e){w(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,c.updateOffset(this),t=!1)}function S(e){return e instanceof M||null!=e&&null!=e._isAMomentObject}function D(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function k(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=D(t)),n}function a(e,t,n){var s,i=Math.min(e.length,t.length),r=Math.abs(e.length-t.length),a=0;for(s=0;s<i;s++)(n&&e[s]!==t[s]||!n&&k(e[s])!==k(t[s]))&&a++;return a+r}function Y(e){!1===c.suppressDeprecationWarnings&&\"undefined\"!=typeof console&&console.warn&&console.warn(\"Deprecation warning: \"+e)}function n(i,r){var a=!0;return _(function(){if(null!=c.deprecationHandler&&c.deprecationHandler(null,i),a){for(var e,t=[],n=0;n<arguments.length;n++){if(e=\"\",\"object\"==typeof arguments[n]){for(var s in e+=\"\\n[\"+n+\"] \",arguments[0])e+=s+\": \"+arguments[0][s]+\", \";e=e.slice(0,-2)}else e=arguments[n];t.push(e)}Y(i+\"\\nArguments: \"+Array.prototype.slice.call(t).join(\"\")+\"\\n\"+(new Error).stack),a=!1}return r.apply(this,arguments)},r)}var s,O={};function T(e,t){null!=c.deprecationHandler&&c.deprecationHandler(e,t),O[e]||(Y(t),O[e]=!0)}function x(e){return e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}function b(e,t){var n,s=_({},e);for(n in t)m(t,n)&&(u(e[n])&&u(t[n])?(s[n]={},_(s[n],e[n]),_(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)m(e,n)&&!m(t,n)&&u(e[n])&&(s[n]=_({},s[n]));return s}function P(e){null!=e&&this.set(e)}c.suppressDeprecationWarnings=!1,c.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)m(e,t)&&n.push(t);return n};var W={};function H(e,t){var n=e.toLowerCase();W[n]=W[n+\"s\"]=W[t]=e}function R(e){return\"string\"==typeof e?W[e]||W[e.toLowerCase()]:void 0}function C(e){var t,n,s={};for(n in e)m(e,n)&&(t=R(n))&&(s[t]=e[n]);return s}var F={};function L(e,t){F[e]=t}function U(e,t,n){var s=\"\"+Math.abs(e),i=t-s.length;return(0<=e?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}var N=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,G=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,V={},E={};function I(e,t,n,s){var i=s;\"string\"==typeof s&&(i=function(){return this[s]()}),e&&(E[e]=i),t&&(E[t[0]]=function(){return U(i.apply(this,arguments),t[1],t[2])}),n&&(E[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function A(e,t){return e.isValid()?(t=j(t,e.localeData()),V[t]=V[t]||function(s){var e,i,t,r=s.match(N);for(e=0,i=r.length;e<i;e++)E[r[e]]?r[e]=E[r[e]]:r[e]=(t=r[e]).match(/\\[[\\s\\S]/)?t.replace(/^\\[|\\]$/g,\"\"):t.replace(/\\\\/g,\"\");return function(e){var t,n=\"\";for(t=0;t<i;t++)n+=x(r[t])?r[t].call(e,s):r[t];return n}}(t),V[t](e)):e.localeData().invalidDate()}function j(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(G.lastIndex=0;0<=n&&G.test(e);)e=e.replace(G,s),G.lastIndex=0,n-=1;return e}var Z=/\\d/,z=/\\d\\d/,$=/\\d{3}/,q=/\\d{4}/,J=/[+-]?\\d{6}/,B=/\\d\\d?/,Q=/\\d\\d\\d\\d?/,X=/\\d\\d\\d\\d\\d\\d?/,K=/\\d{1,3}/,ee=/\\d{1,4}/,te=/[+-]?\\d{1,6}/,ne=/\\d+/,se=/[+-]?\\d+/,ie=/Z|[+-]\\d\\d:?\\d\\d/gi,re=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,ae=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,oe={};function ue(e,n,s){oe[e]=x(n)?n:function(e,t){return e&&s?s:n}}function le(e,t){return m(oe,e)?oe[e](t._strict,t._locale):new RegExp(de(e.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function de(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}var he={};function ce(e,n){var t,s=n;for(\"string\"==typeof e&&(e=[e]),d(n)&&(s=function(e,t){t[n]=k(e)}),t=0;t<e.length;t++)he[e[t]]=s}function fe(e,i){ce(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}var me=0,_e=1,ye=2,ge=3,pe=4,ve=5,we=6,Me=7,Se=8;function De(e){return ke(e)?366:365}function ke(e){return e%4==0&&e%100!=0||e%400==0}I(\"Y\",0,0,function(){var e=this.year();return e<=9999?\"\"+e:\"+\"+e}),I(0,[\"YY\",2],0,function(){return this.year()%100}),I(0,[\"YYYY\",4],0,\"year\"),I(0,[\"YYYYY\",5],0,\"year\"),I(0,[\"YYYYYY\",6,!0],0,\"year\"),H(\"year\",\"y\"),L(\"year\",1),ue(\"Y\",se),ue(\"YY\",B,z),ue(\"YYYY\",ee,q),ue(\"YYYYY\",te,J),ue(\"YYYYYY\",te,J),ce([\"YYYYY\",\"YYYYYY\"],me),ce(\"YYYY\",function(e,t){t[me]=2===e.length?c.parseTwoDigitYear(e):k(e)}),ce(\"YY\",function(e,t){t[me]=c.parseTwoDigitYear(e)}),ce(\"Y\",function(e,t){t[me]=parseInt(e,10)}),c.parseTwoDigitYear=function(e){return k(e)+(68<k(e)?1900:2e3)};var Ye,Oe=Te(\"FullYear\",!0);function Te(t,n){return function(e){return null!=e?(be(this,t,e),c.updateOffset(this,n),this):xe(this,t)}}function xe(e,t){return e.isValid()?e._d[\"get\"+(e._isUTC?\"UTC\":\"\")+t]():NaN}function be(e,t,n){e.isValid()&&!isNaN(n)&&(\"FullYear\"===t&&ke(e.year())&&1===e.month()&&29===e.date()?e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n,e.month(),Pe(n,e.month())):e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n))}function Pe(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,s=(t%(n=12)+n)%n;return e+=(t-s)/12,1===s?ke(e)?29:28:31-s%7%2}Ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},I(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),I(\"MMM\",0,0,function(e){return this.localeData().monthsShort(this,e)}),I(\"MMMM\",0,0,function(e){return this.localeData().months(this,e)}),H(\"month\",\"M\"),L(\"month\",8),ue(\"M\",B),ue(\"MM\",B,z),ue(\"MMM\",function(e,t){return t.monthsShortRegex(e)}),ue(\"MMMM\",function(e,t){return t.monthsRegex(e)}),ce([\"M\",\"MM\"],function(e,t){t[_e]=k(e)-1}),ce([\"MMM\",\"MMMM\"],function(e,t,n,s){var i=n._locale.monthsParse(e,s,n._strict);null!=i?t[_e]=i:g(n).invalidMonth=e});var We=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,He=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\");var Re=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\");function Ce(e,t){var n;if(!e.isValid())return e;if(\"string\"==typeof t)if(/^\\d+$/.test(t))t=k(t);else if(!d(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),Pe(e.year(),t)),e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+\"Month\"](t,n),e}function Fe(e){return null!=e?(Ce(this,e),c.updateOffset(this,!0),this):xe(this,\"Month\")}var Le=ae;var Ue=ae;function Ne(){function e(e,t){return t.length-e.length}var t,n,s=[],i=[],r=[];for(t=0;t<12;t++)n=y([2e3,t]),s.push(this.monthsShort(n,\"\")),i.push(this.months(n,\"\")),r.push(this.months(n,\"\")),r.push(this.monthsShort(n,\"\"));for(s.sort(e),i.sort(e),r.sort(e),t=0;t<12;t++)s[t]=de(s[t]),i[t]=de(i[t]);for(t=0;t<24;t++)r[t]=de(r[t]);this._monthsRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\")}function Ge(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&0<=e&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function Ve(e,t,n){var s=7+t-n;return-((7+Ge(e,0,s).getUTCDay()-t)%7)+s-1}function Ee(e,t,n,s,i){var r,a,o=1+7*(t-1)+(7+n-s)%7+Ve(e,s,i);return o<=0?a=De(r=e-1)+o:o>De(e)?(r=e+1,a=o-De(e)):(r=e,a=o),{year:r,dayOfYear:a}}function Ie(e,t,n){var s,i,r=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Ae(i=e.year()-1,t,n):a>Ae(e.year(),t,n)?(s=a-Ae(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Ae(e,t,n){var s=Ve(e,t,n),i=Ve(e+1,t,n);return(De(e)-s+i)/7}I(\"w\",[\"ww\",2],\"wo\",\"week\"),I(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),H(\"week\",\"w\"),H(\"isoWeek\",\"W\"),L(\"week\",5),L(\"isoWeek\",5),ue(\"w\",B),ue(\"ww\",B,z),ue(\"W\",B),ue(\"WW\",B,z),fe([\"w\",\"ww\",\"W\",\"WW\"],function(e,t,n,s){t[s.substr(0,1)]=k(e)});I(\"d\",0,\"do\",\"day\"),I(\"dd\",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I(\"ddd\",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I(\"dddd\",0,0,function(e){return this.localeData().weekdays(this,e)}),I(\"e\",0,0,\"weekday\"),I(\"E\",0,0,\"isoWeekday\"),H(\"day\",\"d\"),H(\"weekday\",\"e\"),H(\"isoWeekday\",\"E\"),L(\"day\",11),L(\"weekday\",11),L(\"isoWeekday\",11),ue(\"d\",B),ue(\"e\",B),ue(\"E\",B),ue(\"dd\",function(e,t){return t.weekdaysMinRegex(e)}),ue(\"ddd\",function(e,t){return t.weekdaysShortRegex(e)}),ue(\"dddd\",function(e,t){return t.weekdaysRegex(e)}),fe([\"dd\",\"ddd\",\"dddd\"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:g(n).invalidWeekday=e}),fe([\"d\",\"e\",\"E\"],function(e,t,n,s){t[s]=k(e)});var je=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\");var Ze=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\");var ze=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\");var $e=ae;var qe=ae;var Je=ae;function Be(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),s=this.weekdaysMin(n,\"\"),i=this.weekdaysShort(n,\"\"),r=this.weekdays(n,\"\"),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);for(a.sort(e),o.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)o[t]=de(o[t]),u[t]=de(u[t]),l[t]=de(l[t]);this._weekdaysRegex=new RegExp(\"^(\"+l.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+u.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\")}function Qe(){return this.hours()%12||12}function Xe(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ke(e,t){return t._meridiemParse}I(\"H\",[\"HH\",2],0,\"hour\"),I(\"h\",[\"hh\",2],0,Qe),I(\"k\",[\"kk\",2],0,function(){return this.hours()||24}),I(\"hmm\",0,0,function(){return\"\"+Qe.apply(this)+U(this.minutes(),2)}),I(\"hmmss\",0,0,function(){return\"\"+Qe.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),I(\"Hmm\",0,0,function(){return\"\"+this.hours()+U(this.minutes(),2)}),I(\"Hmmss\",0,0,function(){return\"\"+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Xe(\"a\",!0),Xe(\"A\",!1),H(\"hour\",\"h\"),L(\"hour\",13),ue(\"a\",Ke),ue(\"A\",Ke),ue(\"H\",B),ue(\"h\",B),ue(\"k\",B),ue(\"HH\",B,z),ue(\"hh\",B,z),ue(\"kk\",B,z),ue(\"hmm\",Q),ue(\"hmmss\",X),ue(\"Hmm\",Q),ue(\"Hmmss\",X),ce([\"H\",\"HH\"],ge),ce([\"k\",\"kk\"],function(e,t,n){var s=k(e);t[ge]=24===s?0:s}),ce([\"a\",\"A\"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ce([\"h\",\"hh\"],function(e,t,n){t[ge]=k(e),g(n).bigHour=!0}),ce(\"hmm\",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s)),g(n).bigHour=!0}),ce(\"hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i)),g(n).bigHour=!0}),ce(\"Hmm\",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s))}),ce(\"Hmmss\",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i))});var et,tt=Te(\"Hours\",!0),nt={calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},longDateFormat:{LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},invalidDate:\"Invalid date\",ordinal:\"%d\",dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},months:He,monthsShort:Re,week:{dow:0,doy:6},weekdays:je,weekdaysMin:ze,weekdaysShort:Ze,meridiemParse:/[ap]\\.?m?\\.?/i},st={},it={};function rt(e){return e?e.toLowerCase().replace(\"_\",\"-\"):e}function at(e){var t=null;if(!st[e]&&\"undefined\"!=typeof module&&module&&module.exports)try{t=et._abbr,require(\"./locale/\"+e),ot(t)}catch(e){}return st[e]}function ot(e,t){var n;return e&&((n=l(t)?lt(e):ut(e,t))?et=n:\"undefined\"!=typeof console&&console.warn&&console.warn(\"Locale \"+e+\" not found. Did you forget to load it?\")),et._abbr}function ut(e,t){if(null!==t){var n,s=nt;if(t.abbr=e,null!=st[e])T(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),s=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])s=st[t.parentLocale]._config;else{if(null==(n=at(t.parentLocale)))return it[t.parentLocale]||(it[t.parentLocale]=[]),it[t.parentLocale].push({name:e,config:t}),null;s=n._config}return st[e]=new P(b(s,t)),it[e]&&it[e].forEach(function(e){ut(e.name,e.config)}),ot(e),st[e]}return delete st[e],null}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return et;if(!o(e)){if(t=at(e))return t;e=[e]}return function(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=rt(e[r]).split(\"-\")).length,n=(n=rt(e[r+1]))?n.split(\"-\"):null;0<t;){if(s=at(i.slice(0,t).join(\"-\")))return s;if(n&&n.length>=t&&a(i,n,!0)>=t-1)break;t--}r++}return et}(e)}function dt(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[_e]<0||11<n[_e]?_e:n[ye]<1||n[ye]>Pe(n[me],n[_e])?ye:n[ge]<0||24<n[ge]||24===n[ge]&&(0!==n[pe]||0!==n[ve]||0!==n[we])?ge:n[pe]<0||59<n[pe]?pe:n[ve]<0||59<n[ve]?ve:n[we]<0||999<n[we]?we:-1,g(e)._overflowDayOfYear&&(t<me||ye<t)&&(t=ye),g(e)._overflowWeeks&&-1===t&&(t=Me),g(e)._overflowWeekday&&-1===t&&(t=Se),g(e).overflow=t),e}function ht(e,t,n){return null!=e?e:null!=t?t:n}function ct(e){var t,n,s,i,r,a=[];if(!e._d){var o,u;for(o=e,u=new Date(c.now()),s=o._useUTC?[u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()]:[u.getFullYear(),u.getMonth(),u.getDate()],e._w&&null==e._a[ye]&&null==e._a[_e]&&function(e){var t,n,s,i,r,a,o,u;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)r=1,a=4,n=ht(t.GG,e._a[me],Ie(Tt(),1,4).year),s=ht(t.W,1),((i=ht(t.E,1))<1||7<i)&&(u=!0);else{r=e._locale._week.dow,a=e._locale._week.doy;var l=Ie(Tt(),r,a);n=ht(t.gg,e._a[me],l.year),s=ht(t.w,l.week),null!=t.d?((i=t.d)<0||6<i)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||6<t.e)&&(u=!0)):i=r}s<1||s>Ae(n,r,a)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[me]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=ht(e._a[me],s[me]),(e._dayOfYear>De(r)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=Ge(r,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[pe]&&0===e._a[ve]&&0===e._a[we]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&0<=e&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(g(e).weekdayMismatch=!0)}}var ft=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,mt=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,_t=/Z|[+-]\\d\\d(?::?\\d\\d)?/,yt=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/]],gt=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],pt=/^\\/?Date\\((\\-?\\d+)/i;function vt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(g(e).iso=!0,t=0,n=yt.length;t<n;t++)if(yt[t][1].exec(u[1])){i=yt[t][0],s=!1!==yt[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=gt.length;t<n;t++)if(gt[t][1].exec(u[3])){r=(u[2]||\" \")+gt[t][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(u[4]){if(!_t.exec(u[4]))return void(e._isValid=!1);a=\"Z\"}e._f=i+(r||\"\")+(a||\"\"),kt(e)}else e._isValid=!1}var wt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;function Mt(e,t,n,s,i,r){var a=[function(e){var t=parseInt(e,10);{if(t<=49)return 2e3+t;if(t<=999)return 1900+t}return t}(e),Re.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&a.push(parseInt(r,10)),a}var St={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Dt(e){var t,n,s,i=wt.exec(e._i.replace(/\\([^)]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").trim());if(i){var r=Mt(i[4],i[3],i[2],i[5],i[6],i[7]);if(t=i[1],n=r,s=e,t&&Ze.indexOf(t)!==new Date(n[0],n[1],n[2]).getDay()&&(g(s).weekdayMismatch=!0,!(s._isValid=!1)))return;e._a=r,e._tzm=function(e,t,n){if(e)return St[e];if(t)return 0;var s=parseInt(n,10),i=s%100;return(s-i)/100*60+i}(i[8],i[9],i[10]),e._d=Ge.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),g(e).rfc2822=!0}else e._isValid=!1}function kt(e){if(e._f!==c.ISO_8601)if(e._f!==c.RFC_2822){e._a=[],g(e).empty=!0;var t,n,s,i,r,a,o,u,l=\"\"+e._i,d=l.length,h=0;for(s=j(e._f,e._locale).match(N)||[],t=0;t<s.length;t++)i=s[t],(n=(l.match(le(i,e))||[])[0])&&(0<(r=l.substr(0,l.indexOf(n))).length&&g(e).unusedInput.push(r),l=l.slice(l.indexOf(n)+n.length),h+=n.length),E[i]?(n?g(e).empty=!1:g(e).unusedTokens.push(i),a=i,u=e,null!=(o=n)&&m(he,a)&&he[a](o,u._a,u,a)):e._strict&&!n&&g(e).unusedTokens.push(i);g(e).charsLeftOver=d-h,0<l.length&&g(e).unusedInput.push(l),e._a[ge]<=12&&!0===g(e).bigHour&&0<e._a[ge]&&(g(e).bigHour=void 0),g(e).parsedDateParts=e._a.slice(0),g(e).meridiem=e._meridiem,e._a[ge]=function(e,t,n){var s;if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):(null!=e.isPM&&((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0)),t)}(e._locale,e._a[ge],e._meridiem),ct(e),dt(e)}else Dt(e);else vt(e)}function Yt(e){var t,n,s,i,r=e._i,a=e._f;return e._locale=e._locale||lt(e._l),null===r||void 0===a&&\"\"===r?v({nullInput:!0}):(\"string\"==typeof r&&(e._i=r=e._locale.preparse(r)),S(r)?new M(dt(r)):(h(r)?e._d=r:o(a)?function(e){var t,n,s,i,r;if(0===e._f.length)return g(e).invalidFormat=!0,e._d=new Date(NaN);for(i=0;i<e._f.length;i++)r=0,t=w({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],kt(t),p(t)&&(r+=g(t).charsLeftOver,r+=10*g(t).unusedTokens.length,g(t).score=r,(null==s||r<s)&&(s=r,n=t));_(e,n||t)}(e):a?kt(e):l(n=(t=e)._i)?t._d=new Date(c.now()):h(n)?t._d=new Date(n.valueOf()):\"string\"==typeof n?(s=t,null===(i=pt.exec(s._i))?(vt(s),!1===s._isValid&&(delete s._isValid,Dt(s),!1===s._isValid&&(delete s._isValid,c.createFromInputFallback(s)))):s._d=new Date(+i[1])):o(n)?(t._a=f(n.slice(0),function(e){return parseInt(e,10)}),ct(t)):u(n)?function(e){if(!e._d){var t=C(e._i);e._a=f([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),ct(e)}}(t):d(n)?t._d=new Date(n):c.createFromInputFallback(t),p(e)||(e._d=null),e))}function Ot(e,t,n,s,i){var r,a={};return!0!==n&&!1!==n||(s=n,n=void 0),(u(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||o(e)&&0===e.length)&&(e=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=i,a._l=n,a._i=e,a._f=t,a._strict=s,(r=new M(dt(Yt(a))))._nextDay&&(r.add(1,\"d\"),r._nextDay=void 0),r}function Tt(e,t,n,s){return Ot(e,t,n,s,!1)}c.createFromInputFallback=n(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(e){e._d=new Date(e._i+(e._useUTC?\" UTC\":\"\"))}),c.ISO_8601=function(){},c.RFC_2822=function(){};var xt=n(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:v()}),bt=n(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:v()});function Pt(e,t){var n,s;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Tt();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Wt=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Ht(e){var t=C(e),n=t.year||0,s=t.quarter||0,i=t.month||0,r=t.week||0,a=t.day||0,o=t.hour||0,u=t.minute||0,l=t.second||0,d=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Ye.call(Wt,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var n=!1,s=0;s<Wt.length;++s)if(e[Wt[s]]){if(n)return!1;parseFloat(e[Wt[s]])!==k(e[Wt[s]])&&(n=!0)}return!0}(t),this._milliseconds=+d+1e3*l+6e4*u+1e3*o*60*60,this._days=+a+7*r,this._months=+i+3*s+12*n,this._data={},this._locale=lt(),this._bubble()}function Rt(e){return e instanceof Ht}function Ct(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){I(e,0,0,function(){var e=this.utcOffset(),t=\"+\";return e<0&&(e=-e,t=\"-\"),t+U(~~(e/60),2)+n+U(~~e%60,2)})}Ft(\"Z\",\":\"),Ft(\"ZZ\",\"\"),ue(\"Z\",re),ue(\"ZZ\",re),ce([\"Z\",\"ZZ\"],function(e,t,n){n._useUTC=!0,n._tzm=Ut(re,e)});var Lt=/([\\+\\-]|\\d\\d)/gi;function Ut(e,t){var n=(t||\"\").match(e);if(null===n)return null;var s=((n[n.length-1]||[])+\"\").match(Lt)||[\"-\",0,0],i=60*s[1]+k(s[2]);return 0===i?0:\"+\"===s[0]?i:-i}function Nt(e,t){var n,s;return t._isUTC?(n=t.clone(),s=(S(e)||h(e)?e.valueOf():Tt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+s),c.updateOffset(n,!1),n):Tt(e).local()}function Gt(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Vt(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}c.updateOffset=function(){};var Et=/^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/,It=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function At(e,t){var n,s,i,r=e,a=null;return Rt(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:d(e)?(r={},t?r[t]=e:r.milliseconds=e):(a=Et.exec(e))?(n=\"-\"===a[1]?-1:1,r={y:0,d:k(a[ye])*n,h:k(a[ge])*n,m:k(a[pe])*n,s:k(a[ve])*n,ms:k(Ct(1e3*a[we]))*n}):(a=It.exec(e))?(n=\"-\"===a[1]?-1:(a[1],1),r={y:jt(a[2],n),M:jt(a[3],n),w:jt(a[4],n),d:jt(a[5],n),h:jt(a[6],n),m:jt(a[7],n),s:jt(a[8],n)}):null==r?r={}:\"object\"==typeof r&&(\"from\"in r||\"to\"in r)&&(i=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Nt(t,e),e.isBefore(t)?n=Zt(e,t):((n=Zt(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(Tt(r.from),Tt(r.to)),(r={}).ms=i.milliseconds,r.M=i.months),s=new Ht(r),Rt(e)&&m(e,\"_locale\")&&(s._locale=e._locale),s}function jt(e,t){var n=e&&parseFloat(e.replace(\",\",\".\"));return(isNaN(n)?0:n)*t}function Zt(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,\"M\").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,\"M\"),n}function zt(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(T(i,\"moment().\"+i+\"(period, number) is deprecated. Please use moment().\"+i+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),n=e,e=t,t=n),$t(this,At(e=\"string\"==typeof e?+e:e,t),s),this}}function $t(e,t,n,s){var i=t._milliseconds,r=Ct(t._days),a=Ct(t._months);e.isValid()&&(s=null==s||s,a&&Ce(e,xe(e,\"Month\")+a*n),r&&be(e,\"Date\",xe(e,\"Date\")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s&&c.updateOffset(e,r||a))}At.fn=Ht.prototype,At.invalid=function(){return At(NaN)};var qt=zt(1,\"add\"),Jt=zt(-1,\"subtract\");function Bt(e,t){var n=12*(t.year()-e.year())+(t.month()-e.month()),s=e.clone().add(n,\"months\");return-(n+(t-s<0?(t-s)/(s-e.clone().add(n-1,\"months\")):(t-s)/(e.clone().add(n+1,\"months\")-s)))||0}function Qt(e){var t;return void 0===e?this._locale._abbr:(null!=(t=lt(e))&&(this._locale=t),this)}c.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",c.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var Xt=n(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(e){return void 0===e?this.localeData():this.locale(e)});function Kt(){return this._locale}function en(e,t){I(0,[e,e.length],0,t)}function tn(e,t,n,s,i){var r;return null==e?Ie(this,s,i).year:((r=Ae(e,s,i))<t&&(t=r),function(e,t,n,s,i){var r=Ee(e,t,n,s,i),a=Ge(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,s,i))}I(0,[\"gg\",2],0,function(){return this.weekYear()%100}),I(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100}),en(\"gggg\",\"weekYear\"),en(\"ggggg\",\"weekYear\"),en(\"GGGG\",\"isoWeekYear\"),en(\"GGGGG\",\"isoWeekYear\"),H(\"weekYear\",\"gg\"),H(\"isoWeekYear\",\"GG\"),L(\"weekYear\",1),L(\"isoWeekYear\",1),ue(\"G\",se),ue(\"g\",se),ue(\"GG\",B,z),ue(\"gg\",B,z),ue(\"GGGG\",ee,q),ue(\"gggg\",ee,q),ue(\"GGGGG\",te,J),ue(\"ggggg\",te,J),fe([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(e,t,n,s){t[s.substr(0,2)]=k(e)}),fe([\"gg\",\"GG\"],function(e,t,n,s){t[s]=c.parseTwoDigitYear(e)}),I(\"Q\",0,\"Qo\",\"quarter\"),H(\"quarter\",\"Q\"),L(\"quarter\",7),ue(\"Q\",Z),ce(\"Q\",function(e,t){t[_e]=3*(k(e)-1)}),I(\"D\",[\"DD\",2],\"Do\",\"date\"),H(\"date\",\"D\"),L(\"date\",9),ue(\"D\",B),ue(\"DD\",B,z),ue(\"Do\",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),ce([\"D\",\"DD\"],ye),ce(\"Do\",function(e,t){t[ye]=k(e.match(B)[0])});var nn=Te(\"Date\",!0);I(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),H(\"dayOfYear\",\"DDD\"),L(\"dayOfYear\",4),ue(\"DDD\",K),ue(\"DDDD\",$),ce([\"DDD\",\"DDDD\"],function(e,t,n){n._dayOfYear=k(e)}),I(\"m\",[\"mm\",2],0,\"minute\"),H(\"minute\",\"m\"),L(\"minute\",14),ue(\"m\",B),ue(\"mm\",B,z),ce([\"m\",\"mm\"],pe);var sn=Te(\"Minutes\",!1);I(\"s\",[\"ss\",2],0,\"second\"),H(\"second\",\"s\"),L(\"second\",15),ue(\"s\",B),ue(\"ss\",B,z),ce([\"s\",\"ss\"],ve);var rn,an=Te(\"Seconds\",!1);for(I(\"S\",0,0,function(){return~~(this.millisecond()/100)}),I(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),I(0,[\"SSS\",3],0,\"millisecond\"),I(0,[\"SSSS\",4],0,function(){return 10*this.millisecond()}),I(0,[\"SSSSS\",5],0,function(){return 100*this.millisecond()}),I(0,[\"SSSSSS\",6],0,function(){return 1e3*this.millisecond()}),I(0,[\"SSSSSSS\",7],0,function(){return 1e4*this.millisecond()}),I(0,[\"SSSSSSSS\",8],0,function(){return 1e5*this.millisecond()}),I(0,[\"SSSSSSSSS\",9],0,function(){return 1e6*this.millisecond()}),H(\"millisecond\",\"ms\"),L(\"millisecond\",16),ue(\"S\",K,Z),ue(\"SS\",K,z),ue(\"SSS\",K,$),rn=\"SSSS\";rn.length<=9;rn+=\"S\")ue(rn,ne);function on(e,t){t[we]=k(1e3*(\"0.\"+e))}for(rn=\"S\";rn.length<=9;rn+=\"S\")ce(rn,on);var un=Te(\"Milliseconds\",!1);I(\"z\",0,0,\"zoneAbbr\"),I(\"zz\",0,0,\"zoneName\");var ln=M.prototype;function dn(e){return e}ln.add=qt,ln.calendar=function(e,t){var n=e||Tt(),s=Nt(n,this).startOf(\"day\"),i=c.calendarFormat(this,s)||\"sameElse\",r=t&&(x(t[i])?t[i].call(this,n):t[i]);return this.format(r||this.localeData().calendar(i,this,Tt(n)))},ln.clone=function(){return new M(this)},ln.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Nt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=R(t)){case\"year\":r=Bt(this,s)/12;break;case\"month\":r=Bt(this,s);break;case\"quarter\":r=Bt(this,s)/3;break;case\"second\":r=(this-s)/1e3;break;case\"minute\":r=(this-s)/6e4;break;case\"hour\":r=(this-s)/36e5;break;case\"day\":r=(this-s-i)/864e5;break;case\"week\":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:D(r)},ln.endOf=function(e){return void 0===(e=R(e))||\"millisecond\"===e?this:(\"date\"===e&&(e=\"day\"),this.startOf(e).add(1,\"isoWeek\"===e?\"week\":e).subtract(1,\"ms\"))},ln.format=function(e){e||(e=this.isUtc()?c.defaultFormatUtc:c.defaultFormat);var t=A(this,e);return this.localeData().postformat(t)},ln.from=function(e,t){return this.isValid()&&(S(e)&&e.isValid()||Tt(e).isValid())?At({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ln.fromNow=function(e){return this.from(Tt(),e)},ln.to=function(e,t){return this.isValid()&&(S(e)&&e.isValid()||Tt(e).isValid())?At({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ln.toNow=function(e){return this.to(Tt(),e)},ln.get=function(e){return x(this[e=R(e)])?this[e]():this},ln.invalidAt=function(){return g(this).overflow},ln.isAfter=function(e,t){var n=S(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=R(l(t)?\"millisecond\":t))?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},ln.isBefore=function(e,t){var n=S(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=R(l(t)?\"millisecond\":t))?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},ln.isBetween=function(e,t,n,s){return(\"(\"===(s=s||\"()\")[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(\")\"===s[1]?this.isBefore(t,n):!this.isAfter(t,n))},ln.isSame=function(e,t){var n,s=S(e)?e:Tt(e);return!(!this.isValid()||!s.isValid())&&(\"millisecond\"===(t=R(t||\"millisecond\"))?this.valueOf()===s.valueOf():(n=s.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},ln.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},ln.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},ln.isValid=function(){return p(this)},ln.lang=Xt,ln.locale=Qt,ln.localeData=Kt,ln.max=bt,ln.min=xt,ln.parsingFlags=function(){return _({},g(this))},ln.set=function(e,t){if(\"object\"==typeof e)for(var n=function(e){var t=[];for(var n in e)t.push({unit:n,priority:F[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}(e=C(e)),s=0;s<n.length;s++)this[n[s].unit](e[n[s].unit]);else if(x(this[e=R(e)]))return this[e](t);return this},ln.startOf=function(e){switch(e=R(e)){case\"year\":this.month(0);case\"quarter\":case\"month\":this.date(1);case\"week\":case\"isoWeek\":case\"day\":case\"date\":this.hours(0);case\"hour\":this.minutes(0);case\"minute\":this.seconds(0);case\"second\":this.milliseconds(0)}return\"week\"===e&&this.weekday(0),\"isoWeek\"===e&&this.isoWeekday(1),\"quarter\"===e&&this.month(3*Math.floor(this.month()/3)),this},ln.subtract=Jt,ln.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},ln.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},ln.toDate=function(){return new Date(this.valueOf())},ln.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||9999<n.year()?A(n,t?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):x(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace(\"Z\",A(n,\"Z\")):A(n,t?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")},ln.inspect=function(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var e=\"moment\",t=\"\";this.isLocal()||(e=0===this.utcOffset()?\"moment.utc\":\"moment.parseZone\",t=\"Z\");var n=\"[\"+e+'(\"]',s=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",i=t+'[\")]';return this.format(n+s+\"-MM-DD[T]HH:mm:ss.SSS\"+i)},ln.toJSON=function(){return this.isValid()?this.toISOString():null},ln.toString=function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},ln.unix=function(){return Math.floor(this.valueOf()/1e3)},ln.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},ln.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},ln.year=Oe,ln.isLeapYear=function(){return ke(this.year())},ln.weekYear=function(e){return tn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},ln.isoWeekYear=function(e){return tn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},ln.quarter=ln.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},ln.month=Fe,ln.daysInMonth=function(){return Pe(this.year(),this.month())},ln.week=ln.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),\"d\")},ln.isoWeek=ln.isoWeeks=function(e){var t=Ie(this,1,4).week;return null==e?t:this.add(7*(e-t),\"d\")},ln.weeksInYear=function(){var e=this.localeData()._week;return Ae(this.year(),e.dow,e.doy)},ln.isoWeeksInYear=function(){return Ae(this.year(),1,4)},ln.date=nn,ln.day=ln.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,n,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,n=this.localeData(),e=\"string\"!=typeof t?t:isNaN(t)?\"number\"==typeof(t=n.weekdaysParse(t))?t:null:parseInt(t,10),this.add(e-s,\"d\")):s},ln.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,\"d\")},ln.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=(n=e,s=this.localeData(),\"string\"==typeof n?s.weekdaysParse(n)%7||7:isNaN(n)?null:n);return this.day(this.day()%7?t:t-7)}return this.day()||7;var n,s},ln.dayOfYear=function(e){var t=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==e?t:this.add(e-t,\"d\")},ln.hour=ln.hours=tt,ln.minute=ln.minutes=sn,ln.second=ln.seconds=an,ln.millisecond=ln.milliseconds=un,ln.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if(\"string\"==typeof e){if(null===(e=Ut(re,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Gt(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,\"m\"),i!==e&&(!t||this._changeInProgress?$t(this,At(e-i,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,c.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:Gt(this)},ln.utc=function(e){return this.utcOffset(0,e)},ln.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Gt(this),\"m\")),this},ln.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\"string\"==typeof this._i){var e=Ut(ie,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},ln.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Tt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},ln.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ln.isLocal=function(){return!!this.isValid()&&!this._isUTC},ln.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ln.isUtc=Vt,ln.isUTC=Vt,ln.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},ln.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},ln.dates=n(\"dates accessor is deprecated. Use date instead.\",nn),ln.months=n(\"months accessor is deprecated. Use month instead\",Fe),ln.years=n(\"years accessor is deprecated. Use year instead\",Oe),ln.zone=n(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",function(e,t){return null!=e?(\"string\"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),ln.isDSTShifted=n(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(w(e,this),(e=Yt(e))._a){var t=e._isUTC?y(e._a):Tt(e._a);this._isDSTShifted=this.isValid()&&0<a(e._a,t.toArray())}else this._isDSTShifted=!1;return this._isDSTShifted});var hn=P.prototype;function cn(e,t,n,s){var i=lt(),r=y().set(s,t);return i[n](r,e)}function fn(e,t,n){if(d(e)&&(t=e,e=void 0),e=e||\"\",null!=t)return cn(e,t,n,\"month\");var s,i=[];for(s=0;s<12;s++)i[s]=cn(e,s,n,\"month\");return i}function mn(e,t,n,s){\"boolean\"==typeof e?d(t)&&(n=t,t=void 0):(t=e,e=!1,d(n=t)&&(n=t,t=void 0)),t=t||\"\";var i,r=lt(),a=e?r._week.dow:0;if(null!=n)return cn(t,(n+a)%7,s,\"day\");var o=[];for(i=0;i<7;i++)o[i]=cn(t,(i+a)%7,s,\"day\");return o}hn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return x(s)?s.call(t,n):s},hn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},hn.invalidDate=function(){return this._invalidDate},hn.ordinal=function(e){return this._ordinal.replace(\"%d\",e)},hn.preparse=dn,hn.postformat=dn,hn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return x(i)?i(e,t,n,s):i.replace(/%d/i,e)},hn.pastFuture=function(e,t){var n=this._relativeTime[0<e?\"future\":\"past\"];return x(n)?n(t):n.replace(/%s/i,t)},hn.set=function(e){var t,n;for(n in e)x(t=e[n])?this[n]=t:this[\"_\"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)},hn.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||We).test(t)?\"format\":\"standalone\"][e.month()]:o(this._months)?this._months:this._months.standalone},hn.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[We.test(t)?\"format\":\"standalone\"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},hn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=y([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,\"\").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,\"\").toLocaleLowerCase();return n?\"MMM\"===t?-1!==(i=Ye.call(this._shortMonthsParse,a))?i:null:-1!==(i=Ye.call(this._longMonthsParse,a))?i:null:\"MMM\"===t?-1!==(i=Ye.call(this._shortMonthsParse,a))?i:-1!==(i=Ye.call(this._longMonthsParse,a))?i:null:-1!==(i=Ye.call(this._longMonthsParse,a))?i:-1!==(i=Ye.call(this._shortMonthsParse,a))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=y([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp(\"^\"+this.months(i,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[s]=new RegExp(\"^\"+this.monthsShort(i,\"\").replace(\".\",\"\")+\"$\",\"i\")),n||this._monthsParse[s]||(r=\"^\"+this.months(i,\"\")+\"|^\"+this.monthsShort(i,\"\"),this._monthsParse[s]=new RegExp(r.replace(\".\",\"\"),\"i\")),n&&\"MMMM\"===t&&this._longMonthsParse[s].test(e))return s;if(n&&\"MMM\"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},hn.monthsRegex=function(e){return this._monthsParseExact?(m(this,\"_monthsRegex\")||Ne.call(this),e?this._monthsStrictRegex:this._monthsRegex):(m(this,\"_monthsRegex\")||(this._monthsRegex=Ue),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},hn.monthsShortRegex=function(e){return this._monthsParseExact?(m(this,\"_monthsRegex\")||Ne.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(m(this,\"_monthsShortRegex\")||(this._monthsShortRegex=Le),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},hn.week=function(e){return Ie(e,this._week.dow,this._week.doy).week},hn.firstDayOfYear=function(){return this._week.doy},hn.firstDayOfWeek=function(){return this._week.dow},hn.weekdays=function(e,t){return e?o(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?\"format\":\"standalone\"][e.day()]:o(this._weekdays)?this._weekdays:this._weekdays.standalone},hn.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},hn.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},hn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=y([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,\"\").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,\"\").toLocaleLowerCase();return n?\"dddd\"===t?-1!==(i=Ye.call(this._weekdaysParse,a))?i:null:\"ddd\"===t?-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:\"dddd\"===t?-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:\"ddd\"===t?-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=y([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp(\"^\"+this.weekdays(i,\"\").replace(\".\",\".?\")+\"$\",\"i\"),this._shortWeekdaysParse[s]=new RegExp(\"^\"+this.weekdaysShort(i,\"\").replace(\".\",\".?\")+\"$\",\"i\"),this._minWeekdaysParse[s]=new RegExp(\"^\"+this.weekdaysMin(i,\"\").replace(\".\",\".?\")+\"$\",\"i\")),this._weekdaysParse[s]||(r=\"^\"+this.weekdays(i,\"\")+\"|^\"+this.weekdaysShort(i,\"\")+\"|^\"+this.weekdaysMin(i,\"\"),this._weekdaysParse[s]=new RegExp(r.replace(\".\",\"\"),\"i\")),n&&\"dddd\"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&\"ddd\"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&\"dd\"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},hn.weekdaysRegex=function(e){return this._weekdaysParseExact?(m(this,\"_weekdaysRegex\")||Be.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(m(this,\"_weekdaysRegex\")||(this._weekdaysRegex=$e),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},hn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(m(this,\"_weekdaysRegex\")||Be.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(m(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=qe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},hn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(m(this,\"_weekdaysRegex\")||Be.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(m(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=Je),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},hn.isPM=function(e){return\"p\"===(e+\"\").toLowerCase().charAt(0)},hn.meridiem=function(e,t,n){return 11<e?n?\"pm\":\"PM\":n?\"am\":\"AM\"},ot(\"en\",{dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===k(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\")}}),c.lang=n(\"moment.lang is deprecated. Use moment.locale instead.\",ot),c.langData=n(\"moment.langData is deprecated. Use moment.localeData instead.\",lt);var _n=Math.abs;function yn(e,t,n,s){var i=At(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function gn(e){return e<0?Math.floor(e):Math.ceil(e)}function pn(e){return 4800*e/146097}function vn(e){return 146097*e/4800}function wn(e){return function(){return this.as(e)}}var Mn=wn(\"ms\"),Sn=wn(\"s\"),Dn=wn(\"m\"),kn=wn(\"h\"),Yn=wn(\"d\"),On=wn(\"w\"),Tn=wn(\"M\"),xn=wn(\"y\");function bn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Pn=bn(\"milliseconds\"),Wn=bn(\"seconds\"),Hn=bn(\"minutes\"),Rn=bn(\"hours\"),Cn=bn(\"days\"),Fn=bn(\"months\"),Ln=bn(\"years\");var Un=Math.round,Nn={ss:44,s:45,m:45,h:22,d:26,M:11};var Gn=Math.abs;function Vn(e){return(0<e)-(e<0)||+e}function En(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=Gn(this._milliseconds)/1e3,s=Gn(this._days),i=Gn(this._months);t=D((e=D(n/60))/60),n%=60,e%=60;var r=D(i/12),a=i%=12,o=s,u=t,l=e,d=n?n.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",h=this.asSeconds();if(!h)return\"P0D\";var c=h<0?\"-\":\"\",f=Vn(this._months)!==Vn(h)?\"-\":\"\",m=Vn(this._days)!==Vn(h)?\"-\":\"\",_=Vn(this._milliseconds)!==Vn(h)?\"-\":\"\";return c+\"P\"+(r?f+r+\"Y\":\"\")+(a?f+a+\"M\":\"\")+(o?m+o+\"D\":\"\")+(u||l||d?\"T\":\"\")+(u?_+u+\"H\":\"\")+(l?_+l+\"M\":\"\")+(d?_+d+\"S\":\"\")}var In=Ht.prototype;return In.isValid=function(){return this._isValid},In.abs=function(){var e=this._data;return this._milliseconds=_n(this._milliseconds),this._days=_n(this._days),this._months=_n(this._months),e.milliseconds=_n(e.milliseconds),e.seconds=_n(e.seconds),e.minutes=_n(e.minutes),e.hours=_n(e.hours),e.months=_n(e.months),e.years=_n(e.years),this},In.add=function(e,t){return yn(this,e,t,1)},In.subtract=function(e,t){return yn(this,e,t,-1)},In.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if(\"month\"===(e=R(e))||\"year\"===e)return t=this._days+s/864e5,n=this._months+pn(t),\"month\"===e?n:n/12;switch(t=this._days+Math.round(vn(this._months)),e){case\"week\":return t/7+s/6048e5;case\"day\":return t+s/864e5;case\"hour\":return 24*t+s/36e5;case\"minute\":return 1440*t+s/6e4;case\"second\":return 86400*t+s/1e3;case\"millisecond\":return Math.floor(864e5*t)+s;default:throw new Error(\"Unknown unit \"+e)}},In.asMilliseconds=Mn,In.asSeconds=Sn,In.asMinutes=Dn,In.asHours=kn,In.asDays=Yn,In.asWeeks=On,In.asMonths=Tn,In.asYears=xn,In.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12):NaN},In._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return 0<=r&&0<=a&&0<=o||r<=0&&a<=0&&o<=0||(r+=864e5*gn(vn(o)+a),o=a=0),u.milliseconds=r%1e3,e=D(r/1e3),u.seconds=e%60,t=D(e/60),u.minutes=t%60,n=D(t/60),u.hours=n%24,o+=i=D(pn(a+=D(n/24))),a-=gn(vn(i)),s=D(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},In.clone=function(){return At(this)},In.get=function(e){return e=R(e),this.isValid()?this[e+\"s\"]():NaN},In.milliseconds=Pn,In.seconds=Wn,In.minutes=Hn,In.hours=Rn,In.days=Cn,In.weeks=function(){return D(this.days()/7)},In.months=Fn,In.years=Ln,In.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t,n,s,i,r,a,o,u,l,d,h,c=this.localeData(),f=(n=!e,s=c,i=At(t=this).abs(),r=Un(i.as(\"s\")),a=Un(i.as(\"m\")),o=Un(i.as(\"h\")),u=Un(i.as(\"d\")),l=Un(i.as(\"M\")),d=Un(i.as(\"y\")),(h=r<=Nn.ss&&[\"s\",r]||r<Nn.s&&[\"ss\",r]||a<=1&&[\"m\"]||a<Nn.m&&[\"mm\",a]||o<=1&&[\"h\"]||o<Nn.h&&[\"hh\",o]||u<=1&&[\"d\"]||u<Nn.d&&[\"dd\",u]||l<=1&&[\"M\"]||l<Nn.M&&[\"MM\",l]||d<=1&&[\"y\"]||[\"yy\",d])[2]=n,h[3]=0<+t,h[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,h));return e&&(f=c.pastFuture(+this,f)),c.postformat(f)},In.toISOString=En,In.toString=En,In.toJSON=En,In.locale=Qt,In.localeData=Kt,In.toIsoString=n(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",En),In.lang=Xt,I(\"X\",0,0,\"unix\"),I(\"x\",0,0,\"valueOf\"),ue(\"x\",se),ue(\"X\",/[+-]?\\d+(\\.\\d{1,3})?/),ce(\"X\",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),ce(\"x\",function(e,t,n){n._d=new Date(k(e))}),c.version=\"2.22.1\",e=Tt,c.fn=ln,c.min=function(){return Pt(\"isBefore\",[].slice.call(arguments,0))},c.max=function(){return Pt(\"isAfter\",[].slice.call(arguments,0))},c.now=function(){return Date.now?Date.now():+new Date},c.utc=y,c.unix=function(e){return Tt(1e3*e)},c.months=function(e,t){return fn(e,t,\"months\")},c.isDate=h,c.locale=ot,c.invalid=v,c.duration=At,c.isMoment=S,c.weekdays=function(e,t,n){return mn(e,t,n,\"weekdays\")},c.parseZone=function(){return Tt.apply(null,arguments).parseZone()},c.localeData=lt,c.isDuration=Rt,c.monthsShort=function(e,t){return fn(e,t,\"monthsShort\")},c.weekdaysMin=function(e,t,n){return mn(e,t,n,\"weekdaysMin\")},c.defineLocale=ut,c.updateLocale=function(e,t){if(null!=t){var n,s,i=nt;null!=(s=at(e))&&(i=s._config),(n=new P(t=b(i,t))).parentLocale=st[e],st[e]=n,ot(e)}else null!=st[e]&&(null!=st[e].parentLocale?st[e]=st[e].parentLocale:null!=st[e]&&delete st[e]);return st[e]},c.locales=function(){return s(st)},c.weekdaysShort=function(e,t,n){return mn(e,t,n,\"weekdaysShort\")},c.normalizeUnits=R,c.relativeTimeRounding=function(e){return void 0===e?Un:\"function\"==typeof e&&(Un=e,!0)},c.relativeTimeThreshold=function(e,t){return void 0!==Nn[e]&&(void 0===t?Nn[e]:(Nn[e]=t,\"s\"===e&&(Nn.ss=t-1),!0))},c.calendarFormat=function(e,t){var n=e.diff(t,\"days\",!0);return n<-6?\"sameElse\":n<-1?\"lastWeek\":n<0?\"lastDay\":n<1?\"sameDay\":n<2?\"nextDay\":n<7?\"nextWeek\":\"sameElse\"},c.prototype=ln,c.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"YYYY-[W]WW\",MONTH:\"YYYY-MM\"},c});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // 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\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // 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.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict'\r\n\r\nvar slugify = require('slugify')\r\nvar escaper = require('escaper')\r\nvar stripComments = require('strip-css-comments')\r\n\r\nmodule.exports = scope\r\nscope.replace = replace\r\n\r\nfunction scope (css, parent, o) {\r\n\tif (!css) return css\r\n\r\n\tif (!parent) return css\r\n\r\n\tif (typeof o === 'string') o = {keyframes: o}\r\n\tif (!o) o = {keyframes: false}\r\n\r\n\tcss = replace(css, parent + ' $1$2')\r\n\r\n\t//regexp.escape\r\n\tvar parentRe = parent.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\r\n\r\n\t//replace self-selectors\r\n\tcss = css.replace(new RegExp('(' + parentRe + ')\\\\s*\\\\1(?=[\\\\s\\\\r\\\\n,{])', 'g'), '$1')\r\n\r\n\t//replace `:host` with parent\r\n\tcss = css.replace(new RegExp('(' + parentRe + ')\\\\s*:host', 'g'), '$1')\r\n\r\n\t//revoke wrongly replaced @ statements, like @supports, @import, @media etc.\r\n\tcss = css.replace(new RegExp('(' + parentRe + ')\\\\s*@', 'g'), '@')\r\n\r\n\t//revoke wrongly replaced :root blocks\r\n\tcss = css.replace(new RegExp('(' + parentRe + ')\\\\s*:root', 'g'), ':root')\r\n\r\n\t//animations: prefix animation anmes\r\n\tvar animations = [],\r\n\t animationNameRe = /@keyframes\\s+([a-zA-Z0-9_-]+)\\s*{/g,\r\n\t match\r\n\twhile ((match = animationNameRe.exec(css)) !== null) {\r\n\t\tif (animations.indexOf(match[1]) < 0)\r\n\t\t\tanimations.push(match[1])\r\n\t}\r\n\r\n\tvar slug = slugify(parent)\r\n\r\n\tanimations.forEach(function (name) {\r\n\t\tvar newName = (o.keyframes === true ? slug + '-' : typeof o.keyframes === 'string' ? o.keyframes : '') + name\r\n\t\tcss = css.replace(new RegExp('(@keyframes\\\\s+)' + name + '(\\\\s*{)', 'g'),\r\n\t\t\t\t '$1' + newName + '$2')\r\n\t\tcss = css.replace(new RegExp('(animation(?:-name)?\\\\s*:[^;]*\\\\s*)' + name + '([\\\\s;}])', 'g'),\r\n\t\t\t\t '$1' + newName + '$2')\r\n\t})\r\n \t//animation: revoke wrongly replaced keyframes\r\n\tcss = css.replace(new RegExp('(' + parentRe + ' )(\\\\s*(?:to|from|[+-]?(?:(?:\\\\.\\\\d+)|(?:\\\\d+(?:\\\\.\\\\d*)?))%))(?=[\\\\s\\\\r\\\\n,{])', 'g'), '$2')\r\n\r\n\treturn css\r\n}\r\n\r\nfunction replace (css, replacer) {\r\n\tvar arr = []\r\n\r\n\tcss = stripComments(css)\r\n\r\n\t// escape strings etc.\r\n\tcss = escaper.replace(css, true, arr)\r\n\r\n\tcss = css.replace(/([^\\r\\n,{}]+)(,(?=[^}]*{)|\\s*{)/g, replacer)\r\n\r\n\t// insert comments, strings etc. back\r\n\tcss = escaper.paste(css, arr)\r\n\r\n\treturn css\r\n}\r\n\r\n","\n;(function (name, root, factory) {\n if (typeof exports === 'object') {\n module.exports = factory()\n module.exports['default'] = factory()\n }\n /* istanbul ignore next */\n else if (typeof define === 'function' && define.amd) {\n define(factory)\n }\n else {\n root[name] = factory()\n }\n}('slugify', this, function () {\n /* eslint-disable */\n var charMap = JSON.parse('{\"$\":\"dollar\",\"%\":\"percent\",\"&\":\"and\",\"<\":\"less\",\">\":\"greater\",\"|\":\"or\",\"¢\":\"cent\",\"£\":\"pound\",\"¤\":\"currency\",\"¥\":\"yen\",\"©\":\"(c)\",\"ª\":\"a\",\"®\":\"(r)\",\"º\":\"o\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"Æ\":\"AE\",\"Ç\":\"C\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"Ð\":\"D\",\"Ñ\":\"N\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"Ý\":\"Y\",\"Þ\":\"TH\",\"ß\":\"ss\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"æ\":\"ae\",\"ç\":\"c\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"ð\":\"d\",\"ñ\":\"n\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"ý\":\"y\",\"þ\":\"th\",\"ÿ\":\"y\",\"Ā\":\"A\",\"ā\":\"a\",\"Ă\":\"A\",\"ă\":\"a\",\"Ą\":\"A\",\"ą\":\"a\",\"Ć\":\"C\",\"ć\":\"c\",\"Č\":\"C\",\"č\":\"c\",\"Ď\":\"D\",\"ď\":\"d\",\"Đ\":\"DJ\",\"đ\":\"dj\",\"Ē\":\"E\",\"ē\":\"e\",\"Ė\":\"E\",\"ė\":\"e\",\"Ę\":\"e\",\"ę\":\"e\",\"Ě\":\"E\",\"ě\":\"e\",\"Ğ\":\"G\",\"ğ\":\"g\",\"Ģ\":\"G\",\"ģ\":\"g\",\"Ĩ\":\"I\",\"ĩ\":\"i\",\"Ī\":\"i\",\"ī\":\"i\",\"Į\":\"I\",\"į\":\"i\",\"İ\":\"I\",\"ı\":\"i\",\"Ķ\":\"k\",\"ķ\":\"k\",\"Ļ\":\"L\",\"ļ\":\"l\",\"Ľ\":\"L\",\"ľ\":\"l\",\"Ł\":\"L\",\"ł\":\"l\",\"Ń\":\"N\",\"ń\":\"n\",\"Ņ\":\"N\",\"ņ\":\"n\",\"Ň\":\"N\",\"ň\":\"n\",\"Ő\":\"O\",\"ő\":\"o\",\"Œ\":\"OE\",\"œ\":\"oe\",\"Ŕ\":\"R\",\"ŕ\":\"r\",\"Ř\":\"R\",\"ř\":\"r\",\"Ś\":\"S\",\"ś\":\"s\",\"Ş\":\"S\",\"ş\":\"s\",\"Š\":\"S\",\"š\":\"s\",\"Ţ\":\"T\",\"ţ\":\"t\",\"Ť\":\"T\",\"ť\":\"t\",\"Ũ\":\"U\",\"ũ\":\"u\",\"Ū\":\"u\",\"ū\":\"u\",\"Ů\":\"U\",\"ů\":\"u\",\"Ű\":\"U\",\"ű\":\"u\",\"Ų\":\"U\",\"ų\":\"u\",\"Ź\":\"Z\",\"ź\":\"z\",\"Ż\":\"Z\",\"ż\":\"z\",\"Ž\":\"Z\",\"ž\":\"z\",\"ƒ\":\"f\",\"Ơ\":\"O\",\"ơ\":\"o\",\"Ư\":\"U\",\"ư\":\"u\",\"Lj\":\"LJ\",\"lj\":\"lj\",\"Nj\":\"NJ\",\"nj\":\"nj\",\"Ș\":\"S\",\"ș\":\"s\",\"Ț\":\"T\",\"ț\":\"t\",\"˚\":\"o\",\"Ά\":\"A\",\"Έ\":\"E\",\"Ή\":\"H\",\"Ί\":\"I\",\"Ό\":\"O\",\"Ύ\":\"Y\",\"Ώ\":\"W\",\"ΐ\":\"i\",\"Α\":\"A\",\"Β\":\"B\",\"Γ\":\"G\",\"Δ\":\"D\",\"Ε\":\"E\",\"Ζ\":\"Z\",\"Η\":\"H\",\"Θ\":\"8\",\"Ι\":\"I\",\"Κ\":\"K\",\"Λ\":\"L\",\"Μ\":\"M\",\"Ν\":\"N\",\"Ξ\":\"3\",\"Ο\":\"O\",\"Π\":\"P\",\"Ρ\":\"R\",\"Σ\":\"S\",\"Τ\":\"T\",\"Υ\":\"Y\",\"Φ\":\"F\",\"Χ\":\"X\",\"Ψ\":\"PS\",\"Ω\":\"W\",\"Ϊ\":\"I\",\"Ϋ\":\"Y\",\"ά\":\"a\",\"έ\":\"e\",\"ή\":\"h\",\"ί\":\"i\",\"ΰ\":\"y\",\"α\":\"a\",\"β\":\"b\",\"γ\":\"g\",\"δ\":\"d\",\"ε\":\"e\",\"ζ\":\"z\",\"η\":\"h\",\"θ\":\"8\",\"ι\":\"i\",\"κ\":\"k\",\"λ\":\"l\",\"μ\":\"m\",\"ν\":\"n\",\"ξ\":\"3\",\"ο\":\"o\",\"π\":\"p\",\"ρ\":\"r\",\"ς\":\"s\",\"σ\":\"s\",\"τ\":\"t\",\"υ\":\"y\",\"φ\":\"f\",\"χ\":\"x\",\"ψ\":\"ps\",\"ω\":\"w\",\"ϊ\":\"i\",\"ϋ\":\"y\",\"ό\":\"o\",\"ύ\":\"y\",\"ώ\":\"w\",\"Ё\":\"Yo\",\"Ђ\":\"DJ\",\"Є\":\"Ye\",\"І\":\"I\",\"Ї\":\"Yi\",\"Ј\":\"J\",\"Љ\":\"LJ\",\"Њ\":\"NJ\",\"Ћ\":\"C\",\"Џ\":\"DZ\",\"А\":\"A\",\"Б\":\"B\",\"В\":\"V\",\"Г\":\"G\",\"Д\":\"D\",\"Е\":\"E\",\"Ж\":\"Zh\",\"З\":\"Z\",\"И\":\"I\",\"Й\":\"J\",\"К\":\"K\",\"Л\":\"L\",\"М\":\"M\",\"Н\":\"N\",\"О\":\"O\",\"П\":\"P\",\"Р\":\"R\",\"С\":\"S\",\"Т\":\"T\",\"У\":\"U\",\"Ф\":\"F\",\"Х\":\"H\",\"Ц\":\"C\",\"Ч\":\"Ch\",\"Ш\":\"Sh\",\"Щ\":\"Sh\",\"Ъ\":\"U\",\"Ы\":\"Y\",\"Ь\":\"\",\"Э\":\"E\",\"Ю\":\"Yu\",\"Я\":\"Ya\",\"а\":\"a\",\"б\":\"b\",\"в\":\"v\",\"г\":\"g\",\"д\":\"d\",\"е\":\"e\",\"ж\":\"zh\",\"з\":\"z\",\"и\":\"i\",\"й\":\"j\",\"к\":\"k\",\"л\":\"l\",\"м\":\"m\",\"н\":\"n\",\"о\":\"o\",\"п\":\"p\",\"р\":\"r\",\"с\":\"s\",\"т\":\"t\",\"у\":\"u\",\"ф\":\"f\",\"х\":\"h\",\"ц\":\"c\",\"ч\":\"ch\",\"ш\":\"sh\",\"щ\":\"sh\",\"ъ\":\"u\",\"ы\":\"y\",\"ь\":\"\",\"э\":\"e\",\"ю\":\"yu\",\"я\":\"ya\",\"ё\":\"yo\",\"ђ\":\"dj\",\"є\":\"ye\",\"і\":\"i\",\"ї\":\"yi\",\"ј\":\"j\",\"љ\":\"lj\",\"њ\":\"nj\",\"ћ\":\"c\",\"џ\":\"dz\",\"Ґ\":\"G\",\"ґ\":\"g\",\"฿\":\"baht\",\"ა\":\"a\",\"ბ\":\"b\",\"გ\":\"g\",\"დ\":\"d\",\"ე\":\"e\",\"ვ\":\"v\",\"ზ\":\"z\",\"თ\":\"t\",\"ი\":\"i\",\"კ\":\"k\",\"ლ\":\"l\",\"მ\":\"m\",\"ნ\":\"n\",\"ო\":\"o\",\"პ\":\"p\",\"ჟ\":\"zh\",\"რ\":\"r\",\"ს\":\"s\",\"ტ\":\"t\",\"უ\":\"u\",\"ფ\":\"f\",\"ქ\":\"k\",\"ღ\":\"gh\",\"ყ\":\"q\",\"შ\":\"sh\",\"ჩ\":\"ch\",\"ც\":\"ts\",\"ძ\":\"dz\",\"წ\":\"ts\",\"ჭ\":\"ch\",\"ხ\":\"kh\",\"ჯ\":\"j\",\"ჰ\":\"h\",\"ẞ\":\"SS\",\"Ạ\":\"A\",\"ạ\":\"a\",\"Ả\":\"A\",\"ả\":\"a\",\"Ấ\":\"A\",\"ấ\":\"a\",\"Ầ\":\"A\",\"ầ\":\"a\",\"Ẩ\":\"A\",\"ẩ\":\"a\",\"Ẫ\":\"A\",\"ẫ\":\"a\",\"Ậ\":\"A\",\"ậ\":\"a\",\"Ắ\":\"A\",\"ắ\":\"a\",\"Ằ\":\"A\",\"ằ\":\"a\",\"Ẳ\":\"A\",\"ẳ\":\"a\",\"Ẵ\":\"A\",\"ẵ\":\"a\",\"Ặ\":\"A\",\"ặ\":\"a\",\"Ẹ\":\"E\",\"ẹ\":\"e\",\"Ẻ\":\"E\",\"ẻ\":\"e\",\"Ẽ\":\"E\",\"ẽ\":\"e\",\"Ế\":\"E\",\"ế\":\"e\",\"Ề\":\"E\",\"ề\":\"e\",\"Ể\":\"E\",\"ể\":\"e\",\"Ễ\":\"E\",\"ễ\":\"e\",\"Ệ\":\"E\",\"ệ\":\"e\",\"Ỉ\":\"I\",\"ỉ\":\"i\",\"Ị\":\"I\",\"ị\":\"i\",\"Ọ\":\"O\",\"ọ\":\"o\",\"Ỏ\":\"O\",\"ỏ\":\"o\",\"Ố\":\"O\",\"ố\":\"o\",\"Ồ\":\"O\",\"ồ\":\"o\",\"Ổ\":\"O\",\"ổ\":\"o\",\"Ỗ\":\"O\",\"ỗ\":\"o\",\"Ộ\":\"O\",\"ộ\":\"o\",\"Ớ\":\"O\",\"ớ\":\"o\",\"Ờ\":\"O\",\"ờ\":\"o\",\"Ở\":\"O\",\"ở\":\"o\",\"Ỡ\":\"O\",\"ỡ\":\"o\",\"Ợ\":\"O\",\"ợ\":\"o\",\"Ụ\":\"U\",\"ụ\":\"u\",\"Ủ\":\"U\",\"ủ\":\"u\",\"Ứ\":\"U\",\"ứ\":\"u\",\"Ừ\":\"U\",\"ừ\":\"u\",\"Ử\":\"U\",\"ử\":\"u\",\"Ữ\":\"U\",\"ữ\":\"u\",\"Ự\":\"U\",\"ự\":\"u\",\"Ỳ\":\"Y\",\"ỳ\":\"y\",\"Ỵ\":\"Y\",\"ỵ\":\"y\",\"Ỷ\":\"Y\",\"ỷ\":\"y\",\"Ỹ\":\"Y\",\"ỹ\":\"y\",\"‘\":\"\\'\",\"’\":\"\\'\",\"“\":\"\\\\\\\"\",\"”\":\"\\\\\\\"\",\"†\":\"+\",\"•\":\"*\",\"…\":\"...\",\"₠\":\"ecu\",\"₢\":\"cruzeiro\",\"₣\":\"french franc\",\"₤\":\"lira\",\"₥\":\"mill\",\"₦\":\"naira\",\"₧\":\"peseta\",\"₨\":\"rupee\",\"₩\":\"won\",\"₪\":\"new shequel\",\"₫\":\"dong\",\"€\":\"euro\",\"₭\":\"kip\",\"₮\":\"tugrik\",\"₯\":\"drachma\",\"₰\":\"penny\",\"₱\":\"peso\",\"₲\":\"guarani\",\"₳\":\"austral\",\"₴\":\"hryvnia\",\"₵\":\"cedi\",\"₹\":\"indian rupee\",\"₽\":\"russian ruble\",\"₿\":\"bitcoin\",\"℠\":\"sm\",\"™\":\"tm\",\"∂\":\"d\",\"∆\":\"delta\",\"∑\":\"sum\",\"∞\":\"infinity\",\"♥\":\"love\",\"元\":\"yuan\",\"円\":\"yen\",\"﷼\":\"rial\"}')\n /* eslint-enable */\n\n function replace (string, options) {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n options = (typeof options === 'string')\n ? {replacement: options}\n : options || {}\n\n var slug = string.split('')\n .reduce(function (result, ch) {\n return result + (charMap[ch] || ch)\n // allowed\n .replace(options.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]/g, '')\n }, '')\n // trim leading/trailing spaces\n .trim()\n // convert spaces\n .replace(/[-\\s]+/g, options.replacement || '-')\n\n return options.lower ? slug.toLowerCase() : slug\n }\n\n replace.extend = function (customMap) {\n for (var key in customMap) {\n charMap[key] = customMap[key]\n }\n }\n\n return replace\n}))\n","'use strict';\nvar isRegExp = require('is-regexp');\n\nmodule.exports = function (str, opts) {\n\tstr = str.toString();\n\topts = opts || {};\n\n\tvar preserveFilter;\n\tvar comment = '';\n\tvar currentChar = '';\n\tvar insideString = false;\n\tvar preserveImportant = !(opts.preserve === false || opts.all === true);\n\tvar ret = '';\n\n\tif (typeof opts.preserve === 'function') {\n\t\tpreserveImportant = false;\n\t\tpreserveFilter = opts.preserve;\n\t} else if (isRegExp(opts.preserve)) {\n\t\tpreserveImportant = false;\n\t\tpreserveFilter = function (comment) {\n\t\t\treturn opts.preserve.test(comment);\n\t\t};\n\t}\n\n\tfor (var i = 0; i < str.length; i++) {\n\t\tcurrentChar = str[i];\n\n\t\tif (str[i - 1] !== '\\\\') {\n\t\t\tif (currentChar === '\"' || currentChar === '\\'') {\n\t\t\t\tif (insideString === currentChar) {\n\t\t\t\t\tinsideString = false;\n\t\t\t\t} else if (!insideString) {\n\t\t\t\t\tinsideString = currentChar;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// find beginning of /* type comment\n\t\tif (!insideString && currentChar === '/' && str[i + 1] === '*') {\n\t\t\t// ignore important comment when configured to preserve comments using important syntax: /*!\n\t\t\tif (!(preserveImportant && str[i + 2] === '!')) {\n\t\t\t\tvar j = i + 2;\n\n\t\t\t\t// iterate over comment\n\t\t\t\tfor (; j < str.length; j++) {\n\t\t\t\t\t// find end of comment\n\t\t\t\t\tif (str[j] === '*' && str[j + 1] === '/') {\n\t\t\t\t\t\tif (preserveFilter) {\n\t\t\t\t\t\t\t// evaluate comment text\n\t\t\t\t\t\t\tret = preserveFilter(comment) ? ret + ('/*' + comment + '*/') : ret;\n\t\t\t\t\t\t\tcomment = '';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// store comment text to be evaluated by the filter when the end of the comment is reached\n\t\t\t\t\tif (preserveFilter) {\n\t\t\t\t\t\tcomment += str[j];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// resume iteration over CSS string from the end of the comment\n\t\t\t\ti = j + 1;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tret += currentChar;\n\t}\n\n\treturn ret;\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","\nimport { logger } from '../../logger'\n\nlet relations = []\nlet classes = {}\n\n/**\n * Function called by parser when a node definition has been found.\n * @param id\n * @param text\n * @param type\n * @param style\n */\nexport const addClass = function (id) {\n if (typeof classes[id] === 'undefined') {\n classes[id] = {\n id: id,\n methods: [],\n members: []\n }\n }\n}\n\nexport const clear = function () {\n relations = []\n classes = {}\n}\n\nexport const getClass = function (id) {\n return classes[id]\n}\nexport const getClasses = function () {\n return classes\n}\n\nexport const getRelations = function () {\n return relations\n}\n\nexport const addRelation = function (relation) {\n logger.debug('Adding relation: ' + JSON.stringify(relation))\n addClass(relation.id1)\n addClass(relation.id2)\n relations.push(relation)\n}\n\nexport const addMember = function (className, member) {\n const theClass = classes[className]\n if (typeof member === 'string') {\n if (member.substr(-1) === ')') {\n theClass.methods.push(member)\n } else {\n theClass.members.push(member)\n }\n }\n}\n\nexport const addMembers = function (className, MembersArr) {\n if (Array.isArray(MembersArr)) {\n MembersArr.forEach(member => addMember(className, member))\n }\n}\n\nexport const cleanupLabel = function (label) {\n if (label.substring(0, 1) === ':') {\n return label.substr(2).trim()\n } else {\n return label.trim()\n }\n}\n\nexport const lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n}\n\nexport const relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3\n}\n\nexport default {\n addClass,\n clear,\n getClass,\n getClasses,\n getRelations,\n addRelation,\n addMember,\n addMembers,\n cleanupLabel,\n lineType,\n relationType\n}\n","import * as d3 from 'd3'\nimport dagre from 'dagre-layout'\nimport graphlib from 'graphlibrary'\nimport { logger } from '../../logger'\nimport classDb from './classDb'\nimport { parser } from './parser/classDiagram'\n\nparser.yy = classDb\n\nconst idCache = {}\n\nlet classCnt = 0\nconst conf = {\n dividerMargin: 10,\n padding: 5,\n textHeight: 10\n}\n\n// Todo optimize\nconst getGraphId = function (label) {\n const keys = Object.keys(idCache)\n\n for (let i = 0; i < keys.length; i++) {\n if (idCache[keys[i]].label === label) {\n return keys[i]\n }\n }\n\n return undefined\n}\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\nconst insertMarkers = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'extensionStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,7 L18,13 V 1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'extensionEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,1 V 13 L18,7 Z') // this is actual shape for arrowhead\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'compositionStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'compositionEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'aggregationStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'aggregationEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'dependencyStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'dependencyEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z')\n}\n\nlet edgeCount = 0\nlet total = 0\nconst drawEdge = function (elem, path, relation) {\n const getRelationType = function (type) {\n switch (type) {\n case classDb.relationType.AGGREGATION:\n return 'aggregation'\n case classDb.relationType.EXTENSION:\n return 'extension'\n case classDb.relationType.COMPOSITION:\n return 'composition'\n case classDb.relationType.DEPENDENCY:\n return 'dependency'\n }\n }\n\n path.points = path.points.filter(p => !Number.isNaN(p.y))\n\n // The data for our line\n const lineData = path.points\n\n // This is the accessor function we talked about above\n const lineFunction = d3\n .line()\n .x(function (d) {\n return d.x\n })\n .y(function (d) {\n return d.y\n })\n .curve(d3.curveBasis)\n\n const svgPath = elem\n .append('path')\n .attr('d', lineFunction(lineData))\n .attr('id', 'edge' + edgeCount)\n .attr('class', 'relation')\n let url = ''\n if (conf.arrowMarkerAbsolute) {\n url =\n window.location.protocol +\n '//' +\n window.location.host +\n window.location.pathname +\n window.location.search\n url = url.replace(/\\(/g, '\\\\(')\n url = url.replace(/\\)/g, '\\\\)')\n }\n\n if (relation.relation.type1 !== 'none') {\n svgPath.attr(\n 'marker-start',\n 'url(' +\n url +\n '#' +\n getRelationType(relation.relation.type1) +\n 'Start' +\n ')'\n )\n }\n if (relation.relation.type2 !== 'none') {\n svgPath.attr(\n 'marker-end',\n 'url(' +\n url +\n '#' +\n getRelationType(relation.relation.type2) +\n 'End' +\n ')'\n )\n }\n\n let x, y\n const l = path.points.length\n if (l % 2 !== 0 && l > 1) {\n const p1 = path.points[Math.floor(l / 2)]\n const p2 = path.points[Math.ceil(l / 2)]\n x = (p1.x + p2.x) / 2\n y = (p1.y + p2.y) / 2\n } else {\n const p = path.points[Math.floor(l / 2)]\n x = p.x\n y = p.y\n }\n\n if (typeof relation.title !== 'undefined') {\n const g = elem.append('g').attr('class', 'classLabel')\n const label = g\n .append('text')\n .attr('class', 'label')\n .attr('x', x)\n .attr('y', y)\n .attr('fill', 'red')\n .attr('text-anchor', 'middle')\n .text(relation.title)\n\n window.label = label\n const bounds = label.node().getBBox()\n\n g.insert('rect', ':first-child')\n .attr('class', 'box')\n .attr('x', bounds.x - conf.padding / 2)\n .attr('y', bounds.y - conf.padding / 2)\n .attr('width', bounds.width + conf.padding)\n .attr('height', bounds.height + conf.padding)\n }\n\n edgeCount++\n}\n\nconst drawClass = function (elem, classDef) {\n logger.info('Rendering class ' + classDef)\n\n const addTspan = function (textEl, txt, isFirst) {\n const tSpan = textEl\n .append('tspan')\n .attr('x', conf.padding)\n .text(txt)\n if (!isFirst) {\n tSpan.attr('dy', conf.textHeight)\n }\n }\n\n const id = 'classId' + (classCnt % total)\n const classInfo = {\n id: id,\n label: classDef.id,\n width: 0,\n height: 0\n }\n\n const g = elem\n .append('g')\n .attr('id', id)\n .attr('class', 'classGroup')\n const title = g\n .append('text')\n .attr('x', conf.padding)\n .attr('y', conf.textHeight + conf.padding)\n .text(classDef.id)\n\n const titleHeight = title.node().getBBox().height\n\n const membersLine = g\n .append('line') // text label for the x axis\n .attr('x1', 0)\n .attr('y1', conf.padding + titleHeight + conf.dividerMargin / 2)\n .attr('y2', conf.padding + titleHeight + conf.dividerMargin / 2)\n\n const members = g\n .append('text') // text label for the x axis\n .attr('x', conf.padding)\n .attr('y', titleHeight + conf.dividerMargin + conf.textHeight)\n .attr('fill', 'white')\n .attr('class', 'classText')\n\n let isFirst = true\n classDef.members.forEach(function (member) {\n addTspan(members, member, isFirst)\n isFirst = false\n })\n\n const membersBox = members.node().getBBox()\n\n const methodsLine = g\n .append('line') // text label for the x axis\n .attr('x1', 0)\n .attr(\n 'y1',\n conf.padding + titleHeight + conf.dividerMargin + membersBox.height\n )\n .attr(\n 'y2',\n conf.padding + titleHeight + conf.dividerMargin + membersBox.height\n )\n\n const methods = g\n .append('text') // text label for the x axis\n .attr('x', conf.padding)\n .attr(\n 'y',\n titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight\n )\n .attr('fill', 'white')\n .attr('class', 'classText')\n\n isFirst = true\n\n classDef.methods.forEach(function (method) {\n addTspan(methods, method, isFirst)\n isFirst = false\n })\n\n const classBox = g.node().getBBox()\n g.insert('rect', ':first-child')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', classBox.width + 2 * conf.padding)\n .attr('height', classBox.height + conf.padding + 0.5 * conf.dividerMargin)\n\n membersLine.attr('x2', classBox.width + 2 * conf.padding)\n methodsLine.attr('x2', classBox.width + 2 * conf.padding)\n\n classInfo.width = classBox.width + 2 * conf.padding\n classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin\n\n idCache[id] = classInfo\n classCnt++\n return classInfo\n}\n\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n parser.yy.clear()\n parser.parse(text)\n\n logger.info('Rendering diagram ' + text)\n\n /// / Fetch the default direction, use TD if none was found\n const diagram = d3.select(`[id='${id}']`)\n insertMarkers(diagram)\n\n // Layout graph, Create a new directed graph\n const g = new graphlib.Graph({\n multigraph: true\n })\n\n // Set an object for the graph label\n g.setGraph({\n isMultiGraph: true\n })\n\n // Default to assigning a new object as a label for each new edge.\n g.setDefaultEdgeLabel(function () {\n return {}\n })\n\n const classes = classDb.getClasses()\n const keys = Object.keys(classes)\n total = keys.length\n for (let i = 0; i < keys.length; i++) {\n const classDef = classes[keys[i]]\n const node = drawClass(diagram, classDef)\n // Add nodes to the graph. The first argument is the node id. The second is\n // metadata about the node. In this case we're going to add labels to each of\n // our nodes.\n g.setNode(node.id, node)\n logger.info('Org height: ' + node.height)\n }\n\n const relations = classDb.getRelations()\n relations.forEach(function (relation) {\n logger.info(\n 'tjoho' +\n getGraphId(relation.id1) +\n getGraphId(relation.id2) +\n JSON.stringify(relation)\n )\n g.setEdge(getGraphId(relation.id1), getGraphId(relation.id2), {\n relation: relation\n })\n })\n dagre.layout(g)\n g.nodes().forEach(function (v) {\n if (typeof v !== 'undefined' && typeof g.node(v) !== 'undefined') {\n logger.debug('Node ' + v + ': ' + JSON.stringify(g.node(v)))\n d3.select('#' + v).attr(\n 'transform',\n 'translate(' +\n (g.node(v).x - g.node(v).width / 2) +\n ',' +\n (g.node(v).y - g.node(v).height / 2) +\n ' )'\n )\n }\n })\n g.edges().forEach(function (e) {\n if (typeof e !== 'undefined' && typeof g.edge(e) !== 'undefined') {\n logger.debug(\n 'Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(g.edge(e))\n )\n drawEdge(diagram, g.edge(e), g.edge(e).relation)\n }\n })\n\n diagram.attr('height', '100%')\n diagram.attr('width', '100%')\n diagram.attr(\n 'viewBox',\n '0 0 ' + (g.graph().width + 20) + ' ' + (g.graph().height + 20)\n )\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,11],$V1=[1,12],$V2=[1,13],$V3=[1,15],$V4=[1,16],$V5=[1,17],$V6=[6,8],$V7=[1,26],$V8=[1,27],$V9=[1,28],$Va=[1,29],$Vb=[1,30],$Vc=[1,31],$Vd=[6,8,13,17,23,26,27,28,29,30,31],$Ve=[6,8,13,17,23,26,27,28,29,30,31,45,46,47],$Vf=[23,45,46,47],$Vg=[23,30,31,45,46,47],$Vh=[23,26,27,28,29,45,46,47],$Vi=[6,8,13],$Vj=[1,46];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"mermaidDoc\":3,\"graphConfig\":4,\"CLASS_DIAGRAM\":5,\"NEWLINE\":6,\"statements\":7,\"EOF\":8,\"statement\":9,\"className\":10,\"alphaNumToken\":11,\"relationStatement\":12,\"LABEL\":13,\"classStatement\":14,\"methodStatement\":15,\"CLASS\":16,\"STRUCT_START\":17,\"members\":18,\"STRUCT_STOP\":19,\"MEMBER\":20,\"SEPARATOR\":21,\"relation\":22,\"STR\":23,\"relationType\":24,\"lineType\":25,\"AGGREGATION\":26,\"EXTENSION\":27,\"COMPOSITION\":28,\"DEPENDENCY\":29,\"LINE\":30,\"DOTTED_LINE\":31,\"commentToken\":32,\"textToken\":33,\"graphCodeTokens\":34,\"textNoTagsToken\":35,\"TAGSTART\":36,\"TAGEND\":37,\"==\":38,\"--\":39,\"PCT\":40,\"DEFAULT\":41,\"SPACE\":42,\"MINUS\":43,\"keywords\":44,\"UNICODE_TEXT\":45,\"NUM\":46,\"ALPHA\":47,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"CLASS_DIAGRAM\",6:\"NEWLINE\",8:\"EOF\",13:\"LABEL\",16:\"CLASS\",17:\"STRUCT_START\",19:\"STRUCT_STOP\",20:\"MEMBER\",21:\"SEPARATOR\",23:\"STR\",26:\"AGGREGATION\",27:\"EXTENSION\",28:\"COMPOSITION\",29:\"DEPENDENCY\",30:\"LINE\",31:\"DOTTED_LINE\",34:\"graphCodeTokens\",36:\"TAGSTART\",37:\"TAGEND\",38:\"==\",39:\"--\",40:\"PCT\",41:\"DEFAULT\",42:\"SPACE\",43:\"MINUS\",44:\"keywords\",45:\"UNICODE_TEXT\",46:\"NUM\",47:\"ALPHA\"},\nproductions_: [0,[3,1],[4,4],[7,1],[7,2],[7,3],[10,2],[10,1],[9,1],[9,2],[9,1],[9,1],[14,2],[14,5],[18,1],[18,2],[15,1],[15,2],[15,1],[15,1],[12,3],[12,4],[12,4],[12,5],[22,3],[22,2],[22,2],[22,1],[24,1],[24,1],[24,1],[24,1],[25,1],[25,1],[32,1],[32,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[35,1],[35,1],[35,1],[35,1],[11,1],[11,1],[11,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 6:\n this.$=$$[$0-1]+$$[$0]; \nbreak;\ncase 7:\n this.$=$$[$0]; \nbreak;\ncase 8:\n yy.addRelation($$[$0]); \nbreak;\ncase 9:\n $$[$0-1].title = yy.cleanupLabel($$[$0]); yy.addRelation($$[$0-1]); \nbreak;\ncase 12:\nyy.addClass($$[$0]);\nbreak;\ncase 13:\n/*console.log($$[$0-3],JSON.stringify($$[$0-1]));*/yy.addClass($$[$0-3]);yy.addMembers($$[$0-3],$$[$0-1]);\nbreak;\ncase 14:\n this.$ = [$$[$0]]; \nbreak;\ncase 15:\n $$[$0].push($$[$0-1]);this.$=$$[$0];\nbreak;\ncase 16:\n/*console.log('Rel found',$$[$0]);*/\nbreak;\ncase 17:\nyy.addMember($$[$0-1],yy.cleanupLabel($$[$0]));\nbreak;\ncase 18:\nconsole.warn('Member',$$[$0]);\nbreak;\ncase 19:\n/*console.log('sep found',$$[$0]);*/\nbreak;\ncase 20:\n this.$ = {'id1':$$[$0-2],'id2':$$[$0], relation:$$[$0-1], relationTitle1:'none', relationTitle2:'none'}; \nbreak;\ncase 21:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-1], relationTitle1:$$[$0-2], relationTitle2:'none'}\nbreak;\ncase 22:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-2], relationTitle1:'none', relationTitle2:$$[$0-1]}; \nbreak;\ncase 23:\n this.$ = {id1:$$[$0-4], id2:$$[$0], relation:$$[$0-2], relationTitle1:$$[$0-3], relationTitle2:$$[$0-1]} \nbreak;\ncase 24:\n this.$={type1:$$[$0-2],type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 25:\n this.$={type1:'none',type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 26:\n this.$={type1:$$[$0-1],type2:'none',lineType:$$[$0]}; \nbreak;\ncase 27:\n this.$={type1:'none',type2:'none',lineType:$$[$0]}; \nbreak;\ncase 28:\n this.$=yy.relationType.AGGREGATION;\nbreak;\ncase 29:\n this.$=yy.relationType.EXTENSION;\nbreak;\ncase 30:\n this.$=yy.relationType.COMPOSITION;\nbreak;\ncase 31:\n this.$=yy.relationType.DEPENDENCY;\nbreak;\ncase 32:\nthis.$=yy.lineType.LINE;\nbreak;\ncase 33:\nthis.$=yy.lineType.DOTTED_LINE;\nbreak;\n}\n},\ntable: [{3:1,4:2,5:[1,3]},{1:[3]},{1:[2,1]},{6:[1,4]},{7:5,9:6,10:10,11:14,12:7,14:8,15:9,16:$V0,20:$V1,21:$V2,45:$V3,46:$V4,47:$V5},{8:[1,18]},{6:[1,19],8:[2,3]},o($V6,[2,8],{13:[1,20]}),o($V6,[2,10]),o($V6,[2,11]),o($V6,[2,16],{22:21,24:24,25:25,13:[1,23],23:[1,22],26:$V7,27:$V8,28:$V9,29:$Va,30:$Vb,31:$Vc}),{10:32,11:14,45:$V3,46:$V4,47:$V5},o($V6,[2,18]),o($V6,[2,19]),o($Vd,[2,7],{11:14,10:33,45:$V3,46:$V4,47:$V5}),o($Ve,[2,47]),o($Ve,[2,48]),o($Ve,[2,49]),{1:[2,2]},{7:34,8:[2,4],9:6,10:10,11:14,12:7,14:8,15:9,16:$V0,20:$V1,21:$V2,45:$V3,46:$V4,47:$V5},o($V6,[2,9]),{10:35,11:14,23:[1,36],45:$V3,46:$V4,47:$V5},{22:37,24:24,25:25,26:$V7,27:$V8,28:$V9,29:$Va,30:$Vb,31:$Vc},o($V6,[2,17]),{25:38,30:$Vb,31:$Vc},o($Vf,[2,27],{24:39,26:$V7,27:$V8,28:$V9,29:$Va}),o($Vg,[2,28]),o($Vg,[2,29]),o($Vg,[2,30]),o($Vg,[2,31]),o($Vh,[2,32]),o($Vh,[2,33]),o($V6,[2,12],{17:[1,40]}),o($Vd,[2,6]),{8:[2,5]},o($Vi,[2,20]),{10:41,11:14,45:$V3,46:$V4,47:$V5},{10:42,11:14,23:[1,43],45:$V3,46:$V4,47:$V5},o($Vf,[2,26],{24:44,26:$V7,27:$V8,28:$V9,29:$Va}),o($Vf,[2,25]),{18:45,20:$Vj},o($Vi,[2,22]),o($Vi,[2,21]),{10:47,11:14,45:$V3,46:$V4,47:$V5},o($Vf,[2,24]),{19:[1,48]},{18:49,19:[2,14],20:$Vj},o($Vi,[2,23]),o($V6,[2,13]),{19:[2,15]}],\ndefaultActions: {2:[2,1],18:[2,2],34:[2,5],49:[2,15]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* do nothing */\nbreak;\ncase 1:return 6;\nbreak;\ncase 2:/* skip whitespace */\nbreak;\ncase 3:return 5;\nbreak;\ncase 4: this.begin(\"struct\"); /*console.log('Starting struct');*/return 17;\nbreak;\ncase 5: /*console.log('Ending struct');*/this.popState(); return 19;\nbreak;\ncase 6:/* nothing */\nbreak;\ncase 7: /*console.log('lex-member: ' + yy_.yytext);*/ return \"MEMBER\";\nbreak;\ncase 8:return 16;\nbreak;\ncase 9:this.begin(\"string\");\nbreak;\ncase 10:this.popState();\nbreak;\ncase 11:return \"STR\";\nbreak;\ncase 12:return 27;\nbreak;\ncase 13:return 27;\nbreak;\ncase 14:return 29;\nbreak;\ncase 15:return 29;\nbreak;\ncase 16:return 28;\nbreak;\ncase 17:return 26;\nbreak;\ncase 18:return 30;\nbreak;\ncase 19:return 31;\nbreak;\ncase 20:return 13;\nbreak;\ncase 21:return 43;\nbreak;\ncase 22:return 'DOT';\nbreak;\ncase 23:return 'PLUS';\nbreak;\ncase 24:return 40;\nbreak;\ncase 25:return 'EQUALS';\nbreak;\ncase 26:return 'EQUALS';\nbreak;\ncase 27:return 47;\nbreak;\ncase 28:return 'PUNCTUATION';\nbreak;\ncase 29:return 46;\nbreak;\ncase 30:return 45;\nbreak;\ncase 31:return 42;\nbreak;\ncase 32:return 8;\nbreak;\n}\n},\nrules: [/^(?:%%[^\\n]*)/,/^(?:\\n+)/,/^(?:\\s+)/,/^(?:classDiagram\\b)/,/^(?:[\\{])/,/^(?:\\})/,/^(?:[\\n])/,/^(?:[^\\{\\}\\n]*)/,/^(?:class\\b)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:\\s*<\\|)/,/^(?:\\s*\\|>)/,/^(?:\\s*>)/,/^(?:\\s*<)/,/^(?:\\s*\\*)/,/^(?:\\s*o\\b)/,/^(?:--)/,/^(?:\\.\\.)/,/^(?::[^#\\n;]+)/,/^(?:-)/,/^(?:\\.)/,/^(?:\\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!\"#$%&'*+,-.`?\\\\_\\/])/,/^(?:[0-9]+)/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"string\":{\"rules\":[10,11],\"inclusive\":false},\"struct\":{\"rules\":[5,6,7],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import * as d3 from 'd3'\n\nimport { logger } from '../../logger'\nimport utils from '../../utils'\n\nlet vertices = {}\nlet edges = []\nlet classes = []\nlet subGraphs = []\nlet subGraphLookup = {}\nlet tooltips = {}\nlet subCount = 0\nlet direction\n// Functions to be run after graph rendering\nlet funs = []\n/**\n * Function called by parser when a node definition has been found\n * @param id\n * @param text\n * @param type\n * @param style\n * @param classes\n */\nexport const addVertex = function (id, text, type, style, classes) {\n let txt\n\n if (typeof id === 'undefined') {\n return\n }\n if (id.trim().length === 0) {\n return\n }\n\n if (typeof vertices[id] === 'undefined') {\n vertices[id] = { id: id, styles: [], classes: [] }\n }\n if (typeof text !== 'undefined') {\n txt = text.trim()\n\n // strip quotes if string starts and exnds with a quote\n if (txt[0] === '\"' && txt[txt.length - 1] === '\"') {\n txt = txt.substring(1, txt.length - 1)\n }\n\n vertices[id].text = txt\n }\n if (typeof type !== 'undefined') {\n vertices[id].type = type\n }\n if (typeof style !== 'undefined') {\n if (style !== null) {\n style.forEach(function (s) {\n vertices[id].styles.push(s)\n })\n }\n }\n if (typeof classes !== 'undefined') {\n if (classes !== null) {\n classes.forEach(function (s) {\n vertices[id].classes.push(s)\n })\n }\n }\n}\n\n/**\n * Function called by parser when a link/edge definition has been found\n * @param start\n * @param end\n * @param type\n * @param linktext\n */\nexport const addLink = function (start, end, type, linktext) {\n logger.info('Got edge...', start, end)\n const edge = { start: start, end: end, type: undefined, text: '' }\n linktext = type.text\n\n if (typeof linktext !== 'undefined') {\n edge.text = linktext.trim()\n\n // strip quotes if string starts and exnds with a quote\n if (edge.text[0] === '\"' && edge.text[edge.text.length - 1] === '\"') {\n edge.text = edge.text.substring(1, edge.text.length - 1)\n }\n }\n\n if (typeof type !== 'undefined') {\n edge.type = type.type\n edge.stroke = type.stroke\n }\n edges.push(edge)\n}\n\n/**\n * Updates a link's line interpolation algorithm\n * @param pos\n * @param interpolate\n */\nexport const updateLinkInterpolate = function (positions, interp) {\n positions.forEach(function (pos) {\n if (pos === 'default') {\n edges.defaultInterpolate = interp\n } else {\n edges[pos].interpolate = interp\n }\n })\n}\n\n/**\n * Updates a link with a style\n * @param pos\n * @param style\n */\nexport const updateLink = function (positions, style) {\n positions.forEach(function (pos) {\n if (pos === 'default') {\n edges.defaultStyle = style\n } else {\n if (utils.isSubstringInArray('fill', style) === -1) {\n style.push('fill:none')\n }\n edges[pos].style = style\n }\n })\n}\n\nexport const addClass = function (id, style) {\n if (typeof classes[id] === 'undefined') {\n classes[id] = { id: id, styles: [] }\n }\n\n if (typeof style !== 'undefined') {\n if (style !== null) {\n style.forEach(function (s) {\n classes[id].styles.push(s)\n })\n }\n }\n}\n\n/**\n * Called by parser when a graph definition is found, stores the direction of the chart.\n * @param dir\n */\nexport const setDirection = function (dir) {\n direction = dir\n}\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n ids.split(',').forEach(function (id) {\n if (typeof vertices[id] !== 'undefined') {\n vertices[id].classes.push(className)\n }\n\n if (typeof subGraphLookup[id] !== 'undefined') {\n subGraphLookup[id].classes.push(className)\n }\n })\n}\n\nconst setTooltip = function (ids, tooltip) {\n ids.split(',').forEach(function (id) {\n if (typeof tooltip !== 'undefined') {\n tooltips[id] = tooltip\n }\n })\n}\n\nconst setClickFun = function (id, functionName) {\n if (typeof functionName === 'undefined') {\n return\n }\n if (typeof vertices[id] !== 'undefined') {\n funs.push(function (element) {\n const elem = d3.select(element).select(`[id=\"${id}\"]`)\n if (elem !== null) {\n elem.on('click', function () {\n window[functionName](id)\n })\n }\n })\n }\n}\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n * @param ids Comma separated list of ids\n * @param linkStr URL to create a link for\n * @param tooltip Tooltip for the clickable element\n */\nexport const setLink = function (ids, linkStr, tooltip) {\n ids.split(',').forEach(function (id) {\n if (typeof vertices[id] !== 'undefined') {\n vertices[id].link = linkStr\n }\n })\n setTooltip(ids, tooltip)\n setClass(ids, 'clickable')\n}\nexport const getTooltip = function (id) {\n return tooltips[id]\n}\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param tooltip Tooltip for the clickable element\n */\nexport const setClickEvent = function (ids, functionName, tooltip) {\n ids.split(',').forEach(function (id) { setClickFun(id, functionName) })\n setTooltip(ids, tooltip)\n setClass(ids, 'clickable')\n}\n\nexport const bindFunctions = function (element) {\n funs.forEach(function (fun) {\n fun(element)\n })\n}\nexport const getDirection = function () {\n return direction\n}\n/**\n * Retrieval function for fetching the found nodes after parsing has completed.\n * @returns {{}|*|vertices}\n */\nexport const getVertices = function () {\n return vertices\n}\n\n/**\n * Retrieval function for fetching the found links after parsing has completed.\n * @returns {{}|*|edges}\n */\nexport const getEdges = function () {\n return edges\n}\n\n/**\n * Retrieval function for fetching the found class definitions after parsing has completed.\n * @returns {{}|*|classes}\n */\nexport const getClasses = function () {\n return classes\n}\n\nconst setupToolTips = function (element) {\n let tooltipElem = d3.select('.mermaidTooltip')\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = d3.select('body')\n .append('div')\n .attr('class', 'mermaidTooltip')\n .style('opacity', 0)\n }\n\n const svg = d3.select(element).select('svg')\n\n const nodes = svg.selectAll('g.node')\n nodes\n .on('mouseover', function () {\n const el = d3.select(this)\n const title = el.attr('title')\n // Dont try to draw a tooltip if no data is provided\n if (title === null) {\n return\n }\n const rect = this.getBoundingClientRect()\n\n tooltipElem.transition()\n .duration(200)\n .style('opacity', '.9')\n tooltipElem.html(el.attr('title'))\n .style('left', (rect.left + (rect.right - rect.left) / 2) + 'px')\n .style('top', (rect.top - 14 + document.body.scrollTop) + 'px')\n el.classed('hover', true)\n })\n .on('mouseout', function () {\n tooltipElem.transition()\n .duration(500)\n .style('opacity', 0)\n const el = d3.select(this)\n el.classed('hover', false)\n })\n}\nfuns.push(setupToolTips)\n\n/**\n * Clears the internal graph db so that a new graph can be parsed.\n */\nexport const clear = function () {\n vertices = {}\n classes = {}\n edges = []\n funs = []\n funs.push(setupToolTips)\n subGraphs = []\n subGraphLookup = {}\n subCount = 0\n tooltips = []\n}\n/**\n *\n * @returns {string}\n */\nexport const defaultStyle = function () {\n return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'\n}\n\n/**\n * Clears the internal graph db so that a new graph can be parsed.\n */\nexport const addSubGraph = function (id, list, title) {\n function uniq (a) {\n const prims = { 'boolean': {}, 'number': {}, 'string': {} }\n const objs = []\n\n return a.filter(function (item) {\n const type = typeof item\n if (item.trim() === '') {\n return false\n }\n if (type in prims) { return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true) } else { return objs.indexOf(item) >= 0 ? false : objs.push(item) }\n })\n }\n\n let nodeList = []\n\n nodeList = uniq(nodeList.concat.apply(nodeList, list))\n\n id = id || ('subGraph' + subCount)\n title = title || ''\n subCount = subCount + 1\n const subGraph = { id: id, nodes: nodeList, title: title.trim(), classes: [] }\n subGraphs.push(subGraph)\n subGraphLookup[id] = subGraph\n return id\n}\n\nconst getPosForId = function (id) {\n for (let i = 0; i < subGraphs.length; i++) {\n if (subGraphs[i].id === id) {\n return i\n }\n }\n return -1\n}\nlet secCount = -1\nconst posCrossRef = []\nconst indexNodes2 = function (id, pos) {\n const nodes = subGraphs[pos].nodes\n secCount = secCount + 1\n if (secCount > 2000) {\n return\n }\n posCrossRef[secCount] = pos\n // Check if match\n if (subGraphs[pos].id === id) {\n return {\n result: true,\n count: 0\n }\n }\n\n let count = 0\n let posCount = 1\n while (count < nodes.length) {\n const childPos = getPosForId(nodes[count])\n // Ignore regular nodes (pos will be -1)\n if (childPos >= 0) {\n const res = indexNodes2(id, childPos)\n if (res.result) {\n return {\n result: true,\n count: posCount + res.count\n }\n } else {\n posCount = posCount + res.count\n }\n }\n count = count + 1\n }\n\n return {\n result: false,\n count: posCount\n }\n}\n\nexport const getDepthFirstPos = function (pos) {\n return posCrossRef[pos]\n}\nexport const indexNodes = function () {\n secCount = -1\n if (subGraphs.length > 0) {\n indexNodes2('none', subGraphs.length - 1, 0)\n }\n}\n\nexport const getSubGraphs = function () {\n return subGraphs\n}\n\nexport default {\n addVertex,\n addLink,\n updateLinkInterpolate,\n updateLink,\n addClass,\n setDirection,\n setClass,\n getTooltip,\n setClickEvent,\n setLink,\n bindFunctions,\n getDirection,\n getVertices,\n getEdges,\n getClasses,\n clear,\n defaultStyle,\n addSubGraph,\n getDepthFirstPos,\n indexNodes,\n getSubGraphs\n}\n","import graphlib from 'graphlibrary'\nimport * as d3 from 'd3'\n\nimport flowDb from './flowDb'\nimport flow from './parser/flow'\nimport dagreD3 from 'dagre-d3-renderer'\nimport addHtmlLabel from 'dagre-d3-renderer/lib/label/add-html-label.js'\nimport { logger } from '../../logger'\nimport { interpolateToCurve } from '../../utils'\n\nconst conf = {\n}\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n for (let i = 0; i < keys.length; i++) {\n conf[keys[i]] = cnf[keys[i]]\n }\n}\n\n/**\n * Function that adds the vertices found in the graph definition to the graph to be rendered.\n * @param vert Object containing the vertices.\n * @param g The graph that is to be drawn.\n */\nexport const addVertices = function (vert, g, svgId) {\n const svg = d3.select(`[id=\"${svgId}\"]`)\n const keys = Object.keys(vert)\n\n const styleFromStyleArr = function (styleStr, arr) {\n // Create a compound style definition from the style definitions found for the node in the graph definition\n for (let i = 0; i < arr.length; i++) {\n if (typeof arr[i] !== 'undefined') {\n styleStr = styleStr + arr[i] + ';'\n }\n }\n\n return styleStr\n }\n\n // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition\n keys.forEach(function (id) {\n const vertex = vert[id]\n\n /**\n * Variable for storing the classes for the vertex\n * @type {string}\n */\n let classStr = ''\n if (vertex.classes.length > 0) {\n classStr = vertex.classes.join(' ')\n }\n\n /**\n * Variable for storing the extracted style for the vertex\n * @type {string}\n */\n let style = ''\n // Create a compound style definition from the style definitions found for the node in the graph definition\n style = styleFromStyleArr(style, vertex.styles)\n\n // Use vertex id as text in the box if no text is provided by the graph definition\n let vertexText = vertex.text !== undefined ? vertex.text : vertex.id\n\n // We create a SVG label, either by delegating to addHtmlLabel or manually\n let vertexNode\n if (conf.htmlLabels) {\n // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n const node = { label: vertexText.replace(/fa[lrsb]?:fa-[\\w-]+/g, s => `<i class='${s.replace(':', ' ')}'></i>`) }\n vertexNode = addHtmlLabel(svg, node).node()\n vertexNode.parentNode.removeChild(vertexNode)\n } else {\n const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text')\n\n const rows = vertexText.split(/<br[/]{0,1}>/)\n\n for (let j = 0; j < rows.length; j++) {\n const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan')\n tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve')\n tspan.setAttribute('dy', '1em')\n tspan.setAttribute('x', '1')\n tspan.textContent = rows[j]\n svgLabel.appendChild(tspan)\n }\n vertexNode = svgLabel\n }\n\n // If the node has a link, we wrap it in a SVG link\n if (vertex.link) {\n const link = document.createElementNS('http://www.w3.org/2000/svg', 'a')\n link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link)\n link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener')\n link.appendChild(vertexNode)\n vertexNode = link\n }\n\n let radious = 0\n let _shape = ''\n // Set the shape based parameters\n switch (vertex.type) {\n case 'round':\n radious = 5\n _shape = 'rect'\n break\n case 'square':\n _shape = 'rect'\n break\n case 'diamond':\n _shape = 'question'\n break\n case 'odd':\n _shape = 'rect_left_inv_arrow'\n break\n case 'odd_right':\n _shape = 'rect_left_inv_arrow'\n break\n case 'circle':\n _shape = 'circle'\n break\n case 'ellipse':\n _shape = 'ellipse'\n break\n case 'group':\n _shape = 'rect'\n break\n default:\n _shape = 'rect'\n }\n // Add the node\n g.setNode(vertex.id, { labelType: 'svg', shape: _shape, label: vertexNode, rx: radious, ry: radious, 'class': classStr, style: style, id: vertex.id })\n })\n}\n\n/**\n * Add edges to graph based on parsed graph defninition\n * @param {Object} edges The edges to add to the graph\n * @param {Object} g The graph object\n */\nexport const addEdges = function (edges, g) {\n let cnt = 0\n\n let defaultStyle\n if (typeof edges.defaultStyle !== 'undefined') {\n defaultStyle = edges.defaultStyle.toString().replace(/,/g, ';')\n }\n\n edges.forEach(function (edge) {\n cnt++\n const edgeData = {}\n\n // Set link type for rendering\n if (edge.type === 'arrow_open') {\n edgeData.arrowhead = 'none'\n } else {\n edgeData.arrowhead = 'normal'\n }\n\n let style = ''\n if (typeof edge.style !== 'undefined') {\n edge.style.forEach(function (s) {\n style = style + s + ';'\n })\n } else {\n switch (edge.stroke) {\n case 'normal':\n style = 'fill:none'\n if (typeof defaultStyle !== 'undefined') {\n style = defaultStyle\n }\n break\n case 'dotted':\n style = 'stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;'\n break\n case 'thick':\n style = 'stroke: #333; stroke-width: 3.5px;fill:none'\n break\n }\n }\n edgeData.style = style\n\n if (typeof edge.interpolate !== 'undefined') {\n edgeData.curve = interpolateToCurve(edge.interpolate, d3.curveLinear)\n } else if (typeof edges.defaultInterpolate !== 'undefined') {\n edgeData.curve = interpolateToCurve(edges.defaultInterpolate, d3.curveLinear)\n } else {\n edgeData.curve = interpolateToCurve(conf.curve, d3.curveLinear)\n }\n\n if (typeof edge.text === 'undefined') {\n if (typeof edge.style !== 'undefined') {\n edgeData.arrowheadStyle = 'fill: #333'\n }\n } else {\n edgeData.arrowheadStyle = 'fill: #333'\n if (typeof edge.style === 'undefined') {\n edgeData.labelpos = 'c'\n if (conf.htmlLabels) {\n edgeData.labelType = 'html'\n edgeData.label = '<span class=\"edgeLabel\">' + edge.text + '</span>'\n } else {\n edgeData.labelType = 'text'\n edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none'\n edgeData.label = edge.text.replace(/<br>/g, '\\n')\n }\n } else {\n edgeData.label = edge.text.replace(/<br>/g, '\\n')\n }\n }\n // Add the edge to the graph\n g.setEdge(edge.start, edge.end, edgeData, cnt)\n })\n}\n\n/**\n * Returns the all the styles from classDef statements in the graph definition.\n * @returns {object} classDef styles\n */\nexport const getClasses = function (text) {\n flowDb.clear()\n const parser = flow.parser\n parser.yy = flowDb\n\n // Parse the graph definition\n parser.parse(text)\n return flowDb.getClasses()\n}\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n logger.debug('Drawing flowchart')\n flowDb.clear()\n const parser = flow.parser\n parser.yy = flowDb\n\n // Parse the graph definition\n try {\n parser.parse(text)\n } catch (err) {\n logger.debug('Parsing failed')\n }\n\n // Fetch the default direction, use TD if none was found\n let dir = flowDb.getDirection()\n if (typeof dir === 'undefined') {\n dir = 'TD'\n }\n\n // Create the input mermaid.graph\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true\n })\n .setGraph({\n rankdir: dir,\n marginx: 20,\n marginy: 20\n\n })\n .setDefaultEdgeLabel(function () {\n return {}\n })\n\n let subG\n const subGraphs = flowDb.getSubGraphs()\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i]\n flowDb.addVertex(subG.id, subG.title, 'group', undefined, subG.classes)\n }\n\n // Fetch the verices/nodes and edges/links from the parsed graph definition\n const vert = flowDb.getVertices()\n\n const edges = flowDb.getEdges()\n\n let i = 0\n for (i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i]\n\n d3.selectAll('cluster').append('text')\n\n for (let j = 0; j < subG.nodes.length; j++) {\n g.setParent(subG.nodes[j], subG.id)\n }\n }\n addVertices(vert, g, id)\n addEdges(edges, g)\n\n // Create the renderer\n const Render = dagreD3.render\n const render = new Render()\n\n // Add custom shape for rhombus type of boc (decision)\n render.shapes().question = function (parent, bbox, node) {\n const w = bbox.width\n const h = bbox.height\n const s = (w + h) * 0.9\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ]\n const shapeSvg = parent.insert('polygon', ':first-child')\n .attr('points', points.map(function (d) {\n return d.x + ',' + d.y\n }).join(' '))\n .attr('rx', 5)\n .attr('ry', 5)\n .attr('transform', 'translate(' + (-s / 2) + ',' + (s * 2 / 4) + ')')\n node.intersect = function (point) {\n return dagreD3.intersect.polygon(node, points, point)\n }\n return shapeSvg\n }\n\n // Add custom shape for box with inverted arrow on left side\n render.shapes().rect_left_inv_arrow = function (parent, bbox, node) {\n const w = bbox.width\n const h = bbox.height\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ]\n const shapeSvg = parent.insert('polygon', ':first-child')\n .attr('points', points.map(function (d) {\n return d.x + ',' + d.y\n }).join(' '))\n .attr('transform', 'translate(' + (-w / 2) + ',' + (h * 2 / 4) + ')')\n node.intersect = function (point) {\n return dagreD3.intersect.polygon(node, points, point)\n }\n return shapeSvg\n }\n\n // Add custom shape for box with inverted arrow on right side\n render.shapes().rect_right_inv_arrow = function (parent, bbox, node) {\n const w = bbox.width\n const h = bbox.height\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ]\n const shapeSvg = parent.insert('polygon', ':first-child')\n .attr('points', points.map(function (d) {\n return d.x + ',' + d.y\n }).join(' '))\n .attr('transform', 'translate(' + (-w / 2) + ',' + (h * 2 / 4) + ')')\n node.intersect = function (point) {\n return dagreD3.intersect.polygon(node, points, point)\n }\n return shapeSvg\n }\n\n // Add our custom arrow - an empty arrowhead\n render.arrows().none = function normal (parent, id, edge, type) {\n const marker = parent.append('marker')\n .attr('id', id)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'strokeWidth')\n .attr('markerWidth', 8)\n .attr('markerHeight', 6)\n .attr('orient', 'auto')\n\n const path = marker.append('path')\n .attr('d', 'M 0 0 L 0 0 L 0 0 z')\n dagreD3.util.applyStyle(path, edge[type + 'Style'])\n }\n\n // Override normal arrowhead defined in d3. Remove style & add class to allow css styling.\n render.arrows().normal = function normal (parent, id, edge, type) {\n const marker = parent.append('marker')\n .attr('id', id)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'strokeWidth')\n .attr('markerWidth', 8)\n .attr('markerHeight', 6)\n .attr('orient', 'auto')\n\n marker.append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n .attr('class', 'arrowheadPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0')\n }\n\n // Set up an SVG group so that we can translate the final graph.\n const svg = d3.select(`[id=\"${id}\"]`)\n\n // Run the renderer. This is what draws the final graph.\n const element = d3.select('#' + id + ' g')\n render(element, g)\n\n element.selectAll('g.node')\n .attr('title', function () {\n return flowDb.getTooltip(this.id)\n })\n\n const padding = 8\n const width = g.maxX - g.minX + padding * 2\n const height = g.maxY - g.minY + padding * 2\n svg.attr('width', '100%')\n svg.attr('style', `max-width: ${width}px;`)\n svg.attr('viewBox', `0 0 ${width} ${height}`)\n svg.select('g').attr('transform', `translate(${padding - g.minX}, ${padding - g.minY})`)\n\n // Index nodes\n flowDb.indexNodes('subGraph' + i)\n\n // reposition labels\n for (i = 0; i < subGraphs.length; i++) {\n subG = subGraphs[i]\n\n if (subG.title !== 'undefined') {\n const clusterRects = document.querySelectorAll('#' + id + ' #' + subG.id + ' rect')\n const clusterEl = document.querySelectorAll('#' + id + ' #' + subG.id)\n\n const xPos = clusterRects[0].x.baseVal.value\n const yPos = clusterRects[0].y.baseVal.value\n const width = clusterRects[0].width.baseVal.value\n const cluster = d3.select(clusterEl[0])\n const te = cluster.select('.label')\n te.attr('transform', `translate(${xPos + width / 2}, ${yPos + 14})`)\n te.attr('id', id + 'Text')\n }\n }\n\n // Add label rects for non html labels\n if (!conf.htmlLabels) {\n const labels = document.querySelectorAll('#' + id + ' .edgeLabel .label')\n for (let k = 0; k < labels.length; k++) {\n const label = labels[k]\n\n // Get dimensions of label\n const dim = label.getBBox()\n\n const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\n rect.setAttribute('rx', 0)\n rect.setAttribute('ry', 0)\n rect.setAttribute('width', dim.width)\n rect.setAttribute('height', dim.height)\n rect.setAttribute('style', 'fill:#e8e8e8;')\n\n label.insertBefore(rect, label.firstChild)\n }\n }\n}\n\nexport default {\n setConf,\n addVertices,\n addEdges,\n getClasses,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,3],$V2=[1,5],$V3=[1,8,9,10,11,13,18,30,47,71,72,73,74,75,85,86,89,90,92,93,95,96,97,98,99],$V4=[2,2],$V5=[1,12],$V6=[1,13],$V7=[1,14],$V8=[1,15],$V9=[1,31],$Va=[1,33],$Vb=[1,22],$Vc=[1,34],$Vd=[1,24],$Ve=[1,25],$Vf=[1,26],$Vg=[1,27],$Vh=[1,28],$Vi=[1,38],$Vj=[1,40],$Vk=[1,35],$Vl=[1,39],$Vm=[1,45],$Vn=[1,44],$Vo=[1,36],$Vp=[1,37],$Vq=[1,41],$Vr=[1,42],$Vs=[1,43],$Vt=[1,8,9,10,11,13,18,30,35,47,71,72,73,74,75,85,86,89,90,92,93,95,96,97,98,99],$Vu=[1,53],$Vv=[1,52],$Vw=[1,54],$Vx=[8,9,11],$Vy=[8,9,11,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],$Vz=[1,91],$VA=[8,9,10,11,13,15,18,32,39,41,43,47,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,85,86,89,90,92,93,95,96,97,98,99],$VB=[8,9,10,11,12,13,15,16,17,18,30,32,34,35,39,40,41,42,43,44,47,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,71,72,73,74,75,78,84,85,86,89,90,92,93,95,96,97,98,99],$VC=[1,93],$VD=[1,94],$VE=[8,9,10,11,13,18,30,35,47,71,72,73,74,75,85,86,89,90,92,93,95,96,97,98,99],$VF=[13,18,47,85,86,89,90,92,93,95,96,97,98,99],$VG=[1,118],$VH=[1,126],$VI=[1,127],$VJ=[1,112],$VK=[1,111],$VL=[1,131],$VM=[1,130],$VN=[1,128],$VO=[1,129],$VP=[1,109],$VQ=[1,119],$VR=[1,114],$VS=[1,113],$VT=[1,121],$VU=[1,122],$VV=[1,123],$VW=[1,124],$VX=[1,125],$VY=[1,116],$VZ=[1,115],$V_=[13,18,47,50,66,85,86,89,90,92,93,95,96,97,98,99],$V$=[10,12,13,15,16,17,18,30,34,35,40,42,44,47,51,52,53,54,55,57,58,59,60,61,62,63,64,65,66,71,72,73,74,75,78,84,85,86,89,90,92,93,95,96,97,98,99],$V01=[10,86],$V11=[1,198],$V21=[1,195],$V31=[1,202],$V41=[1,199],$V51=[1,203],$V61=[1,196],$V71=[1,193],$V81=[1,194],$V91=[1,197],$Va1=[1,200],$Vb1=[1,201],$Vc1=[1,224],$Vd1=[8,9,11,86],$Ve1=[8,9,10,11,47,71,80,84,85,86,89,90,91,92,93];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"mermaidDoc\":3,\"graphConfig\":4,\"document\":5,\"line\":6,\"statement\":7,\"SEMI\":8,\"NEWLINE\":9,\"SPACE\":10,\"EOF\":11,\"GRAPH\":12,\"DIR\":13,\"FirstStmtSeperator\":14,\"TAGEND\":15,\"TAGSTART\":16,\"UP\":17,\"DOWN\":18,\"ending\":19,\"endToken\":20,\"spaceList\":21,\"spaceListNewline\":22,\"verticeStatement\":23,\"separator\":24,\"styleStatement\":25,\"linkStyleStatement\":26,\"classDefStatement\":27,\"classStatement\":28,\"clickStatement\":29,\"subgraph\":30,\"alphaNum\":31,\"SQS\":32,\"text\":33,\"SQE\":34,\"end\":35,\"STR\":36,\"vertex\":37,\"link\":38,\"PS\":39,\"PE\":40,\"(-\":41,\"-)\":42,\"DIAMOND_START\":43,\"DIAMOND_STOP\":44,\"alphaNumStatement\":45,\"alphaNumToken\":46,\"MINUS\":47,\"linkStatement\":48,\"arrowText\":49,\"TESTSTR\":50,\"--\":51,\"ARROW_POINT\":52,\"ARROW_CIRCLE\":53,\"ARROW_CROSS\":54,\"ARROW_OPEN\":55,\"-.\":56,\"DOTTED_ARROW_POINT\":57,\"DOTTED_ARROW_CIRCLE\":58,\"DOTTED_ARROW_CROSS\":59,\"DOTTED_ARROW_OPEN\":60,\"==\":61,\"THICK_ARROW_POINT\":62,\"THICK_ARROW_CIRCLE\":63,\"THICK_ARROW_CROSS\":64,\"THICK_ARROW_OPEN\":65,\"PIPE\":66,\"textToken\":67,\"commentText\":68,\"commentToken\":69,\"keywords\":70,\"STYLE\":71,\"LINKSTYLE\":72,\"CLASSDEF\":73,\"CLASS\":74,\"CLICK\":75,\"textNoTags\":76,\"textNoTagsToken\":77,\"DEFAULT\":78,\"stylesOpt\":79,\"HEX\":80,\"numList\":81,\"INTERPOLATE\":82,\"commentStatement\":83,\"PCT\":84,\"NUM\":85,\"COMMA\":86,\"style\":87,\"styleComponent\":88,\"ALPHA\":89,\"COLON\":90,\"UNIT\":91,\"BRKT\":92,\"DOT\":93,\"graphCodeTokens\":94,\"PUNCTUATION\":95,\"UNICODE_TEXT\":96,\"PLUS\":97,\"EQUALS\":98,\"MULT\":99,\"TAG_START\":100,\"TAG_END\":101,\"QUOTE\":102,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",8:\"SEMI\",9:\"NEWLINE\",10:\"SPACE\",11:\"EOF\",12:\"GRAPH\",13:\"DIR\",15:\"TAGEND\",16:\"TAGSTART\",17:\"UP\",18:\"DOWN\",30:\"subgraph\",32:\"SQS\",34:\"SQE\",35:\"end\",36:\"STR\",39:\"PS\",40:\"PE\",41:\"(-\",42:\"-)\",43:\"DIAMOND_START\",44:\"DIAMOND_STOP\",47:\"MINUS\",50:\"TESTSTR\",51:\"--\",52:\"ARROW_POINT\",53:\"ARROW_CIRCLE\",54:\"ARROW_CROSS\",55:\"ARROW_OPEN\",56:\"-.\",57:\"DOTTED_ARROW_POINT\",58:\"DOTTED_ARROW_CIRCLE\",59:\"DOTTED_ARROW_CROSS\",60:\"DOTTED_ARROW_OPEN\",61:\"==\",62:\"THICK_ARROW_POINT\",63:\"THICK_ARROW_CIRCLE\",64:\"THICK_ARROW_CROSS\",65:\"THICK_ARROW_OPEN\",66:\"PIPE\",71:\"STYLE\",72:\"LINKSTYLE\",73:\"CLASSDEF\",74:\"CLASS\",75:\"CLICK\",78:\"DEFAULT\",80:\"HEX\",82:\"INTERPOLATE\",84:\"PCT\",85:\"NUM\",86:\"COMMA\",89:\"ALPHA\",90:\"COLON\",91:\"UNIT\",92:\"BRKT\",93:\"DOT\",95:\"PUNCTUATION\",96:\"UNICODE_TEXT\",97:\"PLUS\",98:\"EQUALS\",99:\"MULT\",100:\"TAG_START\",101:\"TAG_END\",102:\"QUOTE\"},\nproductions_: [0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,4],[4,4],[4,4],[4,4],[4,4],[19,2],[19,1],[20,1],[20,1],[20,1],[14,1],[14,1],[14,2],[22,2],[22,2],[22,1],[22,1],[21,2],[21,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,6],[7,4],[24,1],[24,1],[24,1],[23,3],[23,1],[37,4],[37,5],[37,6],[37,7],[37,4],[37,5],[37,4],[37,5],[37,4],[37,5],[37,4],[37,5],[37,1],[37,2],[31,1],[31,2],[45,1],[45,1],[45,1],[45,1],[38,2],[38,3],[38,3],[38,1],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[49,3],[33,1],[33,2],[33,1],[68,1],[68,2],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[76,1],[76,2],[27,5],[27,5],[28,5],[29,5],[29,7],[29,5],[29,7],[25,5],[25,5],[26,5],[26,5],[26,9],[26,9],[26,7],[26,7],[83,3],[81,1],[81,3],[79,1],[79,3],[87,1],[87,2],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[69,1],[69,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[77,1],[77,1],[77,1],[77,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 2:\n this.$ = [];\nbreak;\ncase 3:\n\n\t if($$[$0] !== []){\n\t $$[$0-1].push($$[$0]);\n\t }\n\t this.$=$$[$0-1];\nbreak;\ncase 4: case 59: case 61: case 62: case 94: case 96: case 97: case 110:\nthis.$=$$[$0];\nbreak;\ncase 11:\n yy.setDirection($$[$0-1]);this.$ = $$[$0-1];\nbreak;\ncase 12:\n yy.setDirection(\"LR\");this.$ = $$[$0-1];\nbreak;\ncase 13:\n yy.setDirection(\"RL\");this.$ = $$[$0-1];\nbreak;\ncase 14:\n yy.setDirection(\"BT\");this.$ = $$[$0-1];\nbreak;\ncase 15:\n yy.setDirection(\"TB\");this.$ = $$[$0-1];\nbreak;\ncase 30:\nthis.$=$$[$0-1]\nbreak;\ncase 31: case 32: case 33: case 34: case 35:\nthis.$=[];\nbreak;\ncase 36:\nthis.$=yy.addSubGraph($$[$0-6],$$[$0-1],$$[$0-4]);\nbreak;\ncase 37:\nthis.$=yy.addSubGraph(undefined,$$[$0-1],$$[$0-3]);\nbreak;\ncase 38:\nthis.$=yy.addSubGraph($$[$0-3],$$[$0-1],$$[$0-3]);\nbreak;\ncase 39:\nthis.$=yy.addSubGraph(undefined,$$[$0-1],undefined);\nbreak;\ncase 43:\n yy.addLink($$[$0-2],$$[$0],$$[$0-1]);this.$ = [$$[$0-2],$$[$0]];\nbreak;\ncase 44:\nthis.$ = [$$[$0]];\nbreak;\ncase 45:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square');\nbreak;\ncase 46:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'square');\nbreak;\ncase 47:\nthis.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'circle');\nbreak;\ncase 48:\nthis.$ = $$[$0-6];yy.addVertex($$[$0-6],$$[$0-3],'circle');\nbreak;\ncase 49:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'ellipse');\nbreak;\ncase 50:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'ellipse');\nbreak;\ncase 51:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round');\nbreak;\ncase 52:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'round');\nbreak;\ncase 53:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond');\nbreak;\ncase 54:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'diamond');\nbreak;\ncase 55:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'odd');\nbreak;\ncase 56:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'odd');\nbreak;\ncase 57:\nthis.$ = $$[$0];yy.addVertex($$[$0]);\nbreak;\ncase 58:\nthis.$ = $$[$0-1];yy.addVertex($$[$0-1]);\nbreak;\ncase 60: case 95: case 98: case 111:\nthis.$=$$[$0-1]+''+$$[$0];\nbreak;\ncase 63:\nthis.$='v';\nbreak;\ncase 64:\nthis.$='-';\nbreak;\ncase 65:\n$$[$0-1].text = $$[$0];this.$ = $$[$0-1];\nbreak;\ncase 66: case 67:\n$$[$0-2].text = $$[$0-1];this.$ = $$[$0-2];\nbreak;\ncase 68:\nthis.$ = $$[$0];\nbreak;\ncase 69:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 70:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 71:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 72:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 73:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 74:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 75:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 76:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 77:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 78:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 79:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 80:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 81:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"normal\"};\nbreak;\ncase 82:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"normal\"};\nbreak;\ncase 83:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"normal\"};\nbreak;\ncase 84:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"normal\"};\nbreak;\ncase 85:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"dotted\"};\nbreak;\ncase 86:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"dotted\"};\nbreak;\ncase 87:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"dotted\"};\nbreak;\ncase 88:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"dotted\"};\nbreak;\ncase 89:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"thick\"};\nbreak;\ncase 90:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"thick\"};\nbreak;\ncase 91:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"thick\"};\nbreak;\ncase 92:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"thick\"};\nbreak;\ncase 93:\nthis.$ = $$[$0-1];\nbreak;\ncase 112: case 113:\nthis.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);\nbreak;\ncase 114:\nthis.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]);\nbreak;\ncase 115:\nthis.$ = $$[$0-4];yy.setClickEvent($$[$0-2], $$[$0], undefined);\nbreak;\ncase 116:\nthis.$ = $$[$0-6];yy.setClickEvent($$[$0-4], $$[$0-2], $$[$0]) ;\nbreak;\ncase 117:\nthis.$ = $$[$0-4];yy.setLink($$[$0-2], $$[$0], undefined);\nbreak;\ncase 118:\nthis.$ = $$[$0-6];yy.setLink($$[$0-4], $$[$0-2], $$[$0] );\nbreak;\ncase 119:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]);\nbreak;\ncase 120: case 122:\nthis.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]);\nbreak;\ncase 121:\nthis.$ = $$[$0-4];yy.updateLink([$$[$0-2]],$$[$0]);\nbreak;\ncase 123:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate([$$[$0-6]],$$[$0-2]);yy.updateLink([$$[$0-6]],$$[$0]);\nbreak;\ncase 124:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate($$[$0-6],$$[$0-2]);yy.updateLink($$[$0-6],$$[$0]);\nbreak;\ncase 125:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate([$$[$0-4]],$$[$0]);\nbreak;\ncase 126:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate($$[$0-4],$$[$0]);\nbreak;\ncase 128: case 130:\nthis.$ = [$$[$0]]\nbreak;\ncase 129: case 131:\n$$[$0-2].push($$[$0]);this.$ = $$[$0-2];\nbreak;\ncase 133:\nthis.$ = $$[$0-1] + $$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:2,9:$V0,10:$V1,12:$V2},{1:[3]},o($V3,$V4,{5:6}),{4:7,9:$V0,10:$V1,12:$V2},{4:8,9:$V0,10:$V1,12:$V2},{10:[1,9]},{1:[2,1],6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($V3,[2,9]),o($V3,[2,10]),{13:[1,46],15:[1,47],16:[1,48],17:[1,49],18:[1,50]},o($Vt,[2,3]),o($Vt,[2,4]),o($Vt,[2,5]),o($Vt,[2,6]),o($Vt,[2,7]),o($Vt,[2,8]),{8:$Vu,9:$Vv,11:$Vw,24:51},{8:$Vu,9:$Vv,11:$Vw,24:55},{8:$Vu,9:$Vv,11:$Vw,24:56},{8:$Vu,9:$Vv,11:$Vw,24:57},{8:$Vu,9:$Vv,11:$Vw,24:58},{8:$Vu,9:$Vv,11:$Vw,24:59},{8:$Vu,9:$Vv,10:[1,60],11:$Vw,24:61},o($Vx,[2,44],{38:62,48:63,51:[1,64],52:[1,67],53:[1,68],54:[1,69],55:[1,70],56:[1,65],57:[1,71],58:[1,72],59:[1,73],60:[1,74],61:[1,66],62:[1,75],63:[1,76],64:[1,77],65:[1,78]}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{10:[1,83]},o($Vy,[2,57],{46:32,21:89,45:90,10:$Vz,13:$V9,15:[1,88],18:$Va,32:[1,84],39:[1,85],41:[1,86],43:[1,87],47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($VA,[2,59]),o($VA,[2,61]),o($VA,[2,62]),o($VA,[2,63]),o($VA,[2,64]),o($VB,[2,158]),o($VB,[2,159]),o($VB,[2,160]),o($VB,[2,161]),o($VB,[2,162]),o($VB,[2,163]),o($VB,[2,164]),o($VB,[2,165]),o($VB,[2,166]),o($VB,[2,167]),o($VB,[2,168]),{8:$VC,9:$VD,10:$Vz,14:92,21:95},{8:$VC,9:$VD,10:$Vz,14:96,21:95},{8:$VC,9:$VD,10:$Vz,14:97,21:95},{8:$VC,9:$VD,10:$Vz,14:98,21:95},{8:$VC,9:$VD,10:$Vz,14:99,21:95},o($Vt,[2,30]),o($Vt,[2,40]),o($Vt,[2,41]),o($Vt,[2,42]),o($Vt,[2,31]),o($Vt,[2,32]),o($Vt,[2,33]),o($Vt,[2,34]),o($Vt,[2,35]),{13:$V9,18:$Va,31:100,36:[1,101],45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VE,$V4,{5:102}),{13:$V9,18:$Va,31:29,37:103,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VF,[2,68],{49:104,50:[1,105],66:[1,106]}),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:107,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:132,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:133,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($V_,[2,81]),o($V_,[2,82]),o($V_,[2,83]),o($V_,[2,84]),o($V_,[2,85]),o($V_,[2,86]),o($V_,[2,87]),o($V_,[2,88]),o($V_,[2,89]),o($V_,[2,90]),o($V_,[2,91]),o($V_,[2,92]),{13:$V9,18:$Va,31:134,45:30,46:32,47:$Vc,80:[1,135],85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{78:[1,136],81:137,85:[1,138]},{13:$V9,18:$Va,31:140,45:30,46:32,47:$Vc,78:[1,139],85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:141,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:142,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:143,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:145,35:$VO,36:$VP,39:[1,144],46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:146,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:147,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:148,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,58]),o($VA,[2,60]),o($Vy,[2,29],{21:149,10:$Vz}),o($V3,[2,11]),o($V3,[2,21]),o($V3,[2,22]),{9:[1,150]},o($V3,[2,12]),o($V3,[2,13]),o($V3,[2,14]),o($V3,[2,15]),{8:$Vu,9:$Vv,11:$Vw,13:$V9,18:$Va,24:152,32:[1,151],45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{8:$Vu,9:$Vv,11:$Vw,24:153},{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,154],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vx,[2,43]),o($VF,[2,65],{10:[1,155]}),{10:[1,156]},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:157,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,52:[1,158],53:[1,159],54:[1,160],55:[1,161],61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($V$,[2,94]),o($V$,[2,96]),o($V$,[2,147]),o($V$,[2,148]),o($V$,[2,149]),o($V$,[2,150]),o($V$,[2,151]),o($V$,[2,152]),o($V$,[2,153]),o($V$,[2,154]),o($V$,[2,155]),o($V$,[2,156]),o($V$,[2,157]),o($V$,[2,99]),o($V$,[2,100]),o($V$,[2,101]),o($V$,[2,102]),o($V$,[2,103]),o($V$,[2,104]),o($V$,[2,105]),o($V$,[2,106]),o($V$,[2,107]),o($V$,[2,108]),o($V$,[2,109]),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,57:[1,163],58:[1,164],59:[1,165],60:[1,166],61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,61:$VS,62:[1,167],63:[1,168],64:[1,169],65:[1,170],67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,171],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,172]},{10:[1,173]},{10:[1,174],86:[1,175]},o($V01,[2,128]),{10:[1,176]},{10:[1,177],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,178],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,179],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,34:[1,180],35:$VO,46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:181,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,40:[1,182],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,42:[1,183],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,44:[1,184],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,34:[1,185],35:$VO,46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,28]),o($V3,[2,23]),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:186,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VE,$V4,{5:187}),o($VE,$V4,{5:188}),o($Vt,[2,39]),o($VF,[2,67]),o($VF,[2,66]),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,61:$VS,66:[1,189],67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VF,[2,69]),o($VF,[2,70]),o($VF,[2,71]),o($VF,[2,72]),o($V$,[2,95]),o($VF,[2,73]),o($VF,[2,74]),o($VF,[2,75]),o($VF,[2,76]),o($VF,[2,77]),o($VF,[2,78]),o($VF,[2,79]),o($VF,[2,80]),{10:$V11,47:$V21,71:$V31,79:190,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:204,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:205,80:$V41,82:[1,206],84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:207,80:$V41,82:[1,208],84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{85:[1,209]},{10:$V11,47:$V21,71:$V31,79:210,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:211,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{13:$V9,18:$Va,31:212,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:213,36:[1,214],45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,45],{21:215,10:$Vz}),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,40:[1,216],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,51],{21:217,10:$Vz}),o($Vy,[2,49],{21:218,10:$Vz}),o($Vy,[2,53],{21:219,10:$Vz}),o($Vy,[2,55],{21:220,10:$Vz}),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,34:[1,221],35:$VO,46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,222],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,223],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o([10,13,18,47,85,86,89,90,92,93,95,96,97,98,99],[2,93]),o($Vx,[2,119],{86:$Vc1}),o($Vd1,[2,130],{88:225,10:$V11,47:$V21,71:$V31,80:$V41,84:$V51,85:$V61,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1}),o($Ve1,[2,132]),o($Ve1,[2,134]),o($Ve1,[2,135]),o($Ve1,[2,136]),o($Ve1,[2,137]),o($Ve1,[2,138]),o($Ve1,[2,139]),o($Ve1,[2,140]),o($Ve1,[2,141]),o($Ve1,[2,142]),o($Ve1,[2,143]),o($Ve1,[2,144]),o($Vx,[2,120],{86:$Vc1}),o($Vx,[2,121],{86:$Vc1}),{10:[1,226]},o($Vx,[2,122],{86:$Vc1}),{10:[1,227]},o($V01,[2,129]),o($Vx,[2,112],{86:$Vc1}),o($Vx,[2,113],{86:$Vc1}),o($Vx,[2,114],{46:32,45:90,13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,115],{46:32,45:90,10:[1,228],13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,117],{10:[1,229]}),o($Vy,[2,46]),{40:[1,230]},o($Vy,[2,52]),o($Vy,[2,50]),o($Vy,[2,54]),o($Vy,[2,56]),{8:$Vu,9:$Vv,11:$Vw,24:231},o($Vt,[2,38]),o($Vt,[2,37]),{10:$V11,47:$V21,71:$V31,80:$V41,84:$V51,85:$V61,87:232,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},o($Ve1,[2,133]),{13:$V9,18:$Va,31:233,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:234,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{36:[1,235]},{36:[1,236]},o($Vy,[2,47],{21:237,10:$Vz}),o($VE,$V4,{5:238}),o($Vd1,[2,131],{88:225,10:$V11,47:$V21,71:$V31,80:$V41,84:$V51,85:$V61,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1}),o($Vx,[2,125],{46:32,45:90,10:[1,239],13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,126],{46:32,45:90,10:[1,240],13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,116]),o($Vx,[2,118]),o($Vy,[2,48]),{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,241],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$V11,47:$V21,71:$V31,79:242,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:243,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},o($Vt,[2,36]),o($Vx,[2,123],{86:$Vc1}),o($Vx,[2,124],{86:$Vc1})],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* do nothing */\nbreak;\ncase 1:this.begin(\"string\");\nbreak;\ncase 2:this.popState();\nbreak;\ncase 3:return \"STR\";\nbreak;\ncase 4:return 71;\nbreak;\ncase 5:return 78;\nbreak;\ncase 6:return 72;\nbreak;\ncase 7:return 82;\nbreak;\ncase 8:return 73;\nbreak;\ncase 9:return 74;\nbreak;\ncase 10:return 75;\nbreak;\ncase 11:return 12;\nbreak;\ncase 12:return 30;\nbreak;\ncase 13:return 35;\nbreak;\ncase 14:return 13;\nbreak;\ncase 15:return 13;\nbreak;\ncase 16:return 13;\nbreak;\ncase 17:return 13;\nbreak;\ncase 18:return 13;\nbreak;\ncase 19:return 13;\nbreak;\ncase 20:return 85;\nbreak;\ncase 21:return 92;\nbreak;\ncase 22:return 90;\nbreak;\ncase 23:return 8;\nbreak;\ncase 24:return 86;\nbreak;\ncase 25:return 99;\nbreak;\ncase 26:return 16;\nbreak;\ncase 27:return 15;\nbreak;\ncase 28:return 17;\nbreak;\ncase 29:return 18;\nbreak;\ncase 30:return 54;\nbreak;\ncase 31:return 52;\nbreak;\ncase 32:return 53;\nbreak;\ncase 33:return 55;\nbreak;\ncase 34:return 59;\nbreak;\ncase 35:return 57;\nbreak;\ncase 36:return 58;\nbreak;\ncase 37:return 60;\nbreak;\ncase 38:return 59;\nbreak;\ncase 39:return 57;\nbreak;\ncase 40:return 58;\nbreak;\ncase 41:return 60;\nbreak;\ncase 42:return 64;\nbreak;\ncase 43:return 62;\nbreak;\ncase 44:return 63;\nbreak;\ncase 45:return 65;\nbreak;\ncase 46:return 51;\nbreak;\ncase 47:return 56;\nbreak;\ncase 48:return 61;\nbreak;\ncase 49:return 41;\nbreak;\ncase 50:return 42;\nbreak;\ncase 51:return 47;\nbreak;\ncase 52:return 93;\nbreak;\ncase 53:return 97;\nbreak;\ncase 54:return 84;\nbreak;\ncase 55:return 98;\nbreak;\ncase 56:return 98;\nbreak;\ncase 57:return 89;\nbreak;\ncase 58:return 95;\nbreak;\ncase 59:return 96;\nbreak;\ncase 60:return 66;\nbreak;\ncase 61:return 39;\nbreak;\ncase 62:return 40;\nbreak;\ncase 63:return 32;\nbreak;\ncase 64:return 34;\nbreak;\ncase 65:return 43\nbreak;\ncase 66:return 44\nbreak;\ncase 67:return 102;\nbreak;\ncase 68:return 9;\nbreak;\ncase 69:return 10;\nbreak;\ncase 70:return 11;\nbreak;\n}\n},\nrules: [/^(?:%%[^\\n]*)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:style\\b)/,/^(?:default\\b)/,/^(?:linkStyle\\b)/,/^(?:interpolate\\b)/,/^(?:classDef\\b)/,/^(?:class\\b)/,/^(?:click\\b)/,/^(?:graph\\b)/,/^(?:subgraph\\b)/,/^(?:end\\b\\s*)/,/^(?:LR\\b)/,/^(?:RL\\b)/,/^(?:TB\\b)/,/^(?:BT\\b)/,/^(?:TD\\b)/,/^(?:BR\\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\\*)/,/^(?:<)/,/^(?:>)/,/^(?:\\^)/,/^(?:v\\b)/,/^(?:\\s*--[x]\\s*)/,/^(?:\\s*-->\\s*)/,/^(?:\\s*--[o]\\s*)/,/^(?:\\s*---\\s*)/,/^(?:\\s*-\\.-[x]\\s*)/,/^(?:\\s*-\\.->\\s*)/,/^(?:\\s*-\\.-[o]\\s*)/,/^(?:\\s*-\\.-\\s*)/,/^(?:\\s*.-[x]\\s*)/,/^(?:\\s*\\.->\\s*)/,/^(?:\\s*\\.-[o]\\s*)/,/^(?:\\s*\\.-\\s*)/,/^(?:\\s*==[x]\\s*)/,/^(?:\\s*==>\\s*)/,/^(?:\\s*==[o]\\s*)/,/^(?:\\s*==[\\=]\\s*)/,/^(?:\\s*--\\s*)/,/^(?:\\s*-\\.\\s*)/,/^(?:\\s*==\\s*)/,/^(?:\\(-)/,/^(?:-\\))/,/^(?:-)/,/^(?:\\.)/,/^(?:\\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!\"#$%&'*+,-.`?\\\\_\\/])/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\|)/,/^(?:\\()/,/^(?:\\))/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\{)/,/^(?:\\})/,/^(?:\")/,/^(?:\\n+)/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"string\":{\"rules\":[2,3],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import moment from 'moment-mini'\nimport { logger } from '../../logger'\nimport * as d3 from 'd3'\n\nlet dateFormat = ''\nlet axisFormat = ''\nlet excludes = []\nlet title = ''\nlet sections = []\nlet tasks = []\nlet currentSection = ''\nconst tags = ['active', 'done', 'crit', 'milestone']\nlet funs = []\n\nexport const clear = function () {\n sections = []\n tasks = []\n currentSection = ''\n funs = []\n title = ''\n taskCnt = 0\n lastTask = undefined\n lastTaskID = undefined\n rawTasks = []\n}\n\nexport const setAxisFormat = function (txt) {\n axisFormat = txt\n}\n\nexport const getAxisFormat = function () {\n return axisFormat\n}\n\nexport const setDateFormat = function (txt) {\n dateFormat = txt\n}\n\nexport const setExcludes = function (txt) {\n excludes = txt.toLowerCase().split(/[\\s,]+/)\n}\n\nexport const setTitle = function (txt) {\n title = txt\n}\n\nexport const getTitle = function () {\n return title\n}\n\nexport const addSection = function (txt) {\n currentSection = txt\n sections.push(txt)\n}\n\nexport const getTasks = function () {\n let allItemsPricessed = compileTasks()\n const maxDepth = 10\n let iterationCount = 0\n while (!allItemsPricessed && (iterationCount < maxDepth)) {\n allItemsPricessed = compileTasks()\n iterationCount++\n }\n\n tasks = rawTasks\n\n return tasks\n}\n\nconst isInvalidDate = function (date, dateFormat, excludes) {\n if (date.isoWeekday() >= 6 && excludes.indexOf('weekends') >= 0) {\n return true\n }\n if (excludes.indexOf(date.format('dddd').toLowerCase()) >= 0) {\n return true\n }\n return excludes.indexOf(date.format(dateFormat.trim())) >= 0\n}\n\nconst checkTaskDates = function (task, dateFormat, excludes) {\n if (!excludes.length || task.manualEndTime) return\n let startTime = moment(task.startTime, dateFormat, true)\n startTime.add(1, 'd')\n let endTime = moment(task.endTime, dateFormat, true)\n let renderEndTime = fixTaskDates(startTime, endTime, dateFormat, excludes)\n task.endTime = endTime.toDate()\n task.renderEndTime = renderEndTime\n}\n\nconst fixTaskDates = function (startTime, endTime, dateFormat, excludes) {\n let invalid = false\n let renderEndTime = null\n while (startTime.date() <= endTime.date()) {\n if (!invalid) {\n renderEndTime = endTime.toDate()\n }\n invalid = isInvalidDate(startTime, dateFormat, excludes)\n if (invalid) {\n endTime.add(1, 'd')\n }\n startTime.add(1, 'd')\n }\n return renderEndTime\n}\n\nconst getStartDate = function (prevTime, dateFormat, str) {\n str = str.trim()\n\n // Test for after\n const re = /^after\\s+([\\d\\w-]+)/\n const afterStatement = re.exec(str.trim())\n\n if (afterStatement !== null) {\n const task = findTaskById(afterStatement[1])\n\n if (typeof task === 'undefined') {\n const dt = new Date()\n dt.setHours(0, 0, 0, 0)\n return dt\n }\n return task.endTime\n }\n\n // Check for actual date set\n let mDate = moment(str, dateFormat.trim(), true)\n if (mDate.isValid()) {\n return mDate.toDate()\n } else {\n logger.debug('Invalid date:' + str)\n logger.debug('With date format:' + dateFormat.trim())\n }\n\n // Default date - now\n return new Date()\n}\n\nconst getEndDate = function (prevTime, dateFormat, str) {\n str = str.trim()\n\n // Check for actual date\n let mDate = moment(str, dateFormat.trim(), true)\n if (mDate.isValid()) {\n return mDate.toDate()\n }\n\n const d = moment(prevTime)\n // Check for length\n const re = /^([\\d]+)([wdhms])/\n const durationStatement = re.exec(str.trim())\n\n if (durationStatement !== null) {\n switch (durationStatement[2]) {\n case 's':\n d.add(durationStatement[1], 'seconds')\n break\n case 'm':\n d.add(durationStatement[1], 'minutes')\n break\n case 'h':\n d.add(durationStatement[1], 'hours')\n break\n case 'd':\n d.add(durationStatement[1], 'days')\n break\n case 'w':\n d.add(durationStatement[1], 'weeks')\n break\n }\n }\n // Default date - now\n return d.toDate()\n}\n\nlet taskCnt = 0\nconst parseId = function (idStr) {\n if (typeof idStr === 'undefined') {\n taskCnt = taskCnt + 1\n return 'task' + taskCnt\n }\n return idStr\n}\n// id, startDate, endDate\n// id, startDate, length\n// id, after x, endDate\n// id, after x, length\n// startDate, endDate\n// startDate, length\n// after x, endDate\n// after x, length\n// endDate\n// length\n\nconst compileData = function (prevTask, dataStr) {\n let ds\n\n if (dataStr.substr(0, 1) === ':') {\n ds = dataStr.substr(1, dataStr.length)\n } else {\n ds = dataStr\n }\n\n const data = ds.split(',')\n\n const task = {}\n\n // Get tags like active, done, crit and milestone\n getTaskTags(data, task, tags)\n\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim()\n }\n\n let endTimeData = ''\n switch (data.length) {\n case 1:\n task.id = parseId()\n task.startTime = prevTask.endTime\n endTimeData = data[0]\n break\n case 2:\n task.id = parseId()\n task.startTime = getStartDate(undefined, dateFormat, data[0])\n endTimeData = data[1]\n break\n case 3:\n task.id = parseId(data[0])\n task.startTime = getStartDate(undefined, dateFormat, data[1])\n endTimeData = data[2]\n break\n default:\n }\n\n if (endTimeData) {\n task.endTime = getEndDate(task.startTime, dateFormat, endTimeData)\n task.manualEndTime = endTimeData === moment(task.endTime).format(dateFormat.trim())\n checkTaskDates(task, dateFormat, excludes)\n }\n\n return task\n}\n\nconst parseData = function (prevTaskId, dataStr) {\n let ds\n if (dataStr.substr(0, 1) === ':') {\n ds = dataStr.substr(1, dataStr.length)\n } else {\n ds = dataStr\n }\n\n const data = ds.split(',')\n\n const task = {}\n\n // Get tags like active, done, crit and milestone\n getTaskTags(data, task, tags)\n\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim()\n }\n\n switch (data.length) {\n case 1:\n task.id = parseId()\n task.startTime = {\n type: 'prevTaskEnd',\n id: prevTaskId\n }\n task.endTime = {\n data: data[0]\n }\n break\n case 2:\n task.id = parseId()\n task.startTime = {\n type: 'getStartDate',\n startData: data[0]\n }\n task.endTime = {\n data: data[1]\n }\n break\n case 3:\n task.id = parseId(data[0])\n task.startTime = {\n type: 'getStartDate',\n startData: data[1]\n }\n task.endTime = {\n data: data[2]\n }\n break\n default:\n }\n\n return task\n}\n\nlet lastTask\nlet lastTaskID\nlet rawTasks = []\nconst taskDb = {}\nexport const addTask = function (descr, data) {\n const rawTask = {\n section: currentSection,\n type: currentSection,\n processed: false,\n manualEndTime: false,\n renderEndTime: null,\n raw: { data: data },\n task: descr,\n classes: []\n }\n const taskInfo = parseData(lastTaskID, data)\n rawTask.raw.startTime = taskInfo.startTime\n rawTask.raw.endTime = taskInfo.endTime\n rawTask.id = taskInfo.id\n rawTask.prevTaskId = lastTaskID\n rawTask.active = taskInfo.active\n rawTask.done = taskInfo.done\n rawTask.crit = taskInfo.crit\n rawTask.milestone = taskInfo.milestone\n\n const pos = rawTasks.push(rawTask)\n\n lastTaskID = rawTask.id\n // Store cross ref\n taskDb[rawTask.id] = pos - 1\n}\n\nexport const findTaskById = function (id) {\n const pos = taskDb[id]\n return rawTasks[pos]\n}\n\nexport const addTaskOrg = function (descr, data) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: []\n }\n const taskInfo = compileData(lastTask, data)\n newTask.startTime = taskInfo.startTime\n newTask.endTime = taskInfo.endTime\n newTask.id = taskInfo.id\n newTask.active = taskInfo.active\n newTask.done = taskInfo.done\n newTask.crit = taskInfo.crit\n newTask.milestone = taskInfo.milestone\n lastTask = newTask\n tasks.push(newTask)\n}\n\nconst compileTasks = function () {\n const compileTask = function (pos) {\n const task = rawTasks[pos]\n let startTime = ''\n switch (rawTasks[pos].raw.startTime.type) {\n case 'prevTaskEnd':\n const prevTask = findTaskById(task.prevTaskId)\n task.startTime = prevTask.endTime\n break\n case 'getStartDate':\n startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData)\n if (startTime) {\n rawTasks[pos].startTime = startTime\n }\n break\n }\n\n if (rawTasks[pos].startTime) {\n rawTasks[pos].endTime = getEndDate(rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data)\n if (rawTasks[pos].endTime) {\n rawTasks[pos].processed = true\n rawTasks[pos].manualEndTime = rawTasks[pos].raw.endTime.data === moment(rawTasks[pos].endTime).format(dateFormat.trim())\n checkTaskDates(rawTasks[pos], dateFormat, excludes)\n }\n }\n\n return rawTasks[pos].processed\n }\n\n let allProcessed = true\n for (let i = 0; i < rawTasks.length; i++) {\n compileTask(i)\n\n allProcessed = allProcessed && rawTasks[i].processed\n }\n return allProcessed\n}\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n * @param ids Comma separated list of ids\n * @param linkStr URL to create a link for\n */\nexport const setLink = function (ids, linkStr) {\n ids.split(',').forEach(function (id) {\n let rawTask = findTaskById(id)\n if (typeof rawTask !== 'undefined') {\n pushFun(id, () => { window.open(linkStr, '_self') })\n }\n })\n setClass(ids, 'clickable')\n}\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n ids.split(',').forEach(function (id) {\n let rawTask = findTaskById(id)\n if (typeof rawTask !== 'undefined') {\n rawTask.classes.push(className)\n }\n })\n}\n\nconst setClickFun = function (id, functionName, functionArgs) {\n if (typeof functionName === 'undefined') {\n return\n }\n\n let argList = []\n if (typeof functionArgs === 'string') {\n /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/)\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim()\n /* Removes all double quotes at the start and end of an argument */\n /* This preserves all starting and ending whitespace inside */\n if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n item = item.substr(1, item.length - 2)\n }\n argList[i] = item\n }\n }\n\n let rawTask = findTaskById(id)\n if (typeof rawTask !== 'undefined') {\n pushFun(id, () => { window[functionName](...argList) })\n }\n}\n\n/**\n * The callbackFunction is executed in a click event bound to the task with the specified id or the task's assigned text\n * @param id The task's id\n * @param callbackFunction A function to be executed when clicked on the task or the task's text\n */\nconst pushFun = function (id, callbackFunction) {\n funs.push(function (element) {\n const elem = d3.select(element).select(`[id=\"${id}\"]`)\n if (elem !== null) {\n elem.on('click', function () {\n callbackFunction()\n })\n }\n })\n funs.push(function (element) {\n const elem = d3.select(element).select(`[id=\"${id}-text\"]`)\n if (elem !== null) {\n elem.on('click', function () {\n callbackFunction()\n })\n }\n })\n}\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param functionArgs Function args the function should be called with\n */\nexport const setClickEvent = function (ids, functionName, functionArgs) {\n ids.split(',').forEach(function (id) {\n setClickFun(id, functionName, functionArgs)\n })\n setClass(ids, 'clickable')\n}\n\n/**\n * Binds all functions previously added to fun (specified through click) to the element\n * @param element\n */\nexport const bindFunctions = function (element) {\n funs.forEach(function (fun) {\n fun(element)\n })\n}\n\nexport default {\n clear,\n setDateFormat,\n setAxisFormat,\n getAxisFormat,\n setTitle,\n getTitle,\n addSection,\n getTasks,\n addTask,\n findTaskById,\n addTaskOrg,\n setExcludes,\n setClickEvent,\n setLink,\n bindFunctions\n}\n\nfunction getTaskTags (data, task, tags) {\n let matchFound = true\n while (matchFound) {\n matchFound = false\n tags.forEach(function (t) {\n const pattern = '^\\\\s*' + t + '\\\\s*$'\n const regex = new RegExp(pattern)\n if (data[0].match(regex)) {\n task[t] = true\n data.shift(1)\n matchFound = true\n }\n })\n }\n}\n","import * as d3 from 'd3'\n\nimport { parser } from './parser/gantt'\nimport ganttDb from './ganttDb'\n\nparser.yy = ganttDb\n\nconst conf = {\n titleTopMargin: 25,\n barHeight: 20,\n barGap: 4,\n topPadding: 50,\n rightPadding: 75,\n leftPadding: 75,\n gridLineStartPadding: 35,\n fontSize: 11,\n fontFamily: '\"Open-Sans\", \"sans-serif\"'\n}\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\nlet w\nexport const draw = function (text, id) {\n parser.yy.clear()\n parser.parse(text)\n\n const elem = document.getElementById(id)\n w = elem.parentElement.offsetWidth\n\n if (typeof w === 'undefined') {\n w = 1200\n }\n\n if (typeof conf.useWidth !== 'undefined') {\n w = conf.useWidth\n }\n\n const taskArray = parser.yy.getTasks()\n\n // Set height based on number of tasks\n const h = taskArray.length * (conf.barHeight + conf.barGap) + 2 * conf.topPadding\n\n elem.setAttribute('height', '100%')\n // Set viewBox\n elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h)\n const svg = d3.select(`[id=\"${id}\"]`)\n\n // Set timescale\n const timeScale = d3.scaleTime()\n .domain([d3.min(taskArray, function (d) {\n return d.startTime\n }),\n d3.max(taskArray, function (d) {\n return d.endTime\n })])\n .rangeRound([0, w - conf.leftPadding - conf.rightPadding])\n\n let categories = []\n\n for (let i = 0; i < taskArray.length; i++) {\n categories.push(taskArray[i].type)\n }\n\n const catsUnfiltered = categories // for vert labels\n\n categories = checkUnique(categories)\n\n makeGant(taskArray, w, h)\n if (typeof conf.useWidth !== 'undefined') {\n elem.setAttribute('width', w)\n }\n\n svg.append('text')\n .text(parser.yy.getTitle())\n .attr('x', w / 2)\n .attr('y', conf.titleTopMargin)\n .attr('class', 'titleText')\n\n function makeGant (tasks, pageWidth, pageHeight) {\n const barHeight = conf.barHeight\n const gap = barHeight + conf.barGap\n const topPadding = conf.topPadding\n const leftPadding = conf.leftPadding\n\n const colorScale = d3.scaleLinear()\n .domain([0, categories.length])\n .range(['#00B9FA', '#F95002'])\n .interpolate(d3.interpolateHcl)\n\n makeGrid(leftPadding, topPadding, pageWidth, pageHeight)\n drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight)\n vertLabels(gap, topPadding, leftPadding, barHeight, colorScale)\n drawToday(leftPadding, topPadding, pageWidth, pageHeight)\n }\n\n function drawRects (theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w, h) {\n // Draw background rects covering the entire width of the graph, these form the section rows.\n svg.append('g')\n .selectAll('rect')\n .data(theArray)\n .enter()\n .append('rect')\n .attr('x', 0)\n .attr('y', function (d, i) {\n return i * theGap + theTopPad - 2\n })\n .attr('width', function () {\n return w - conf.rightPadding / 2\n })\n .attr('height', theGap)\n .attr('class', function (d) {\n for (let i = 0; i < categories.length; i++) {\n if (d.type === categories[i]) {\n return 'section section' + (i % conf.numberSectionStyles)\n }\n }\n return 'section section0'\n })\n\n // Draw the rects representing the tasks\n const rectangles = svg.append('g')\n .selectAll('rect')\n .data(theArray)\n .enter()\n\n rectangles.append('rect')\n .attr('id', function (d) { return d.id })\n .attr('rx', 3)\n .attr('ry', 3)\n .attr('x', function (d) {\n if (d.milestone) {\n return timeScale(d.startTime) + theSidePad + (0.5 * (timeScale(d.endTime) - timeScale(d.startTime))) - (0.5 * theBarHeight)\n }\n return timeScale(d.startTime) + theSidePad\n })\n .attr('y', function (d, i) {\n return i * theGap + theTopPad\n })\n .attr('width', function (d) {\n if (d.milestone) {\n return theBarHeight\n }\n return (timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime))\n })\n .attr('height', theBarHeight)\n .attr('transform-origin', function (d, i) {\n return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + 'px ' + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + 'px'\n })\n .attr('class', function (d) {\n const res = 'task'\n\n let classStr = ''\n if (d.classes.length > 0) {\n classStr = d.classes.join(' ')\n }\n\n let secNum = 0\n for (let i = 0; i < categories.length; i++) {\n if (d.type === categories[i]) {\n secNum = (i % conf.numberSectionStyles)\n }\n }\n\n let taskClass = ''\n if (d.active) {\n if (d.crit) {\n taskClass += ' activeCrit'\n } else {\n taskClass = ' active'\n }\n } else if (d.done) {\n if (d.crit) {\n taskClass = ' doneCrit'\n } else {\n taskClass = ' done'\n }\n } else {\n if (d.crit) {\n taskClass += ' crit'\n }\n }\n\n if (taskClass.length === 0) {\n taskClass = ' task'\n }\n\n if (d.milestone) {\n taskClass = ' milestone ' + taskClass\n }\n\n taskClass += secNum\n\n taskClass += ' ' + classStr\n\n return res + taskClass\n })\n\n // Append task labels\n rectangles.append('text')\n .text(function (d) {\n return d.task\n })\n .attr('font-size', conf.fontSize)\n .attr('x', function (d) {\n let startX = timeScale(d.startTime)\n let endX = timeScale(d.renderEndTime || d.endTime)\n if (d.milestone) {\n startX += (0.5 * (timeScale(d.endTime) - timeScale(d.startTime))) - (0.5 * theBarHeight)\n }\n if (d.milestone) {\n endX = startX + theBarHeight\n }\n const textWidth = this.getBBox().width\n\n // Check id text width > width of rectangle\n if (textWidth > (endX - startX)) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n return startX + theSidePad - 5\n } else {\n return endX + theSidePad + 5\n }\n } else {\n return (endX - startX) / 2 + startX + theSidePad\n }\n })\n .attr('y', function (d, i) {\n return i * theGap + (conf.barHeight / 2) + (conf.fontSize / 2 - 2) + theTopPad\n })\n .attr('text-height', theBarHeight)\n .attr('class', function (d) {\n const startX = timeScale(d.startTime)\n let endX = timeScale(d.endTime)\n if (d.milestone) {\n endX = startX + theBarHeight\n }\n const textWidth = this.getBBox().width\n\n let classStr = ''\n if (d.classes.length > 0) {\n classStr = d.classes.join(' ')\n }\n\n let secNum = 0\n for (let i = 0; i < categories.length; i++) {\n if (d.type === categories[i]) {\n secNum = (i % conf.numberSectionStyles)\n }\n }\n\n let taskType = ''\n if (d.active) {\n if (d.crit) {\n taskType = 'activeCritText' + secNum\n } else {\n taskType = 'activeText' + secNum\n }\n }\n\n if (d.done) {\n if (d.crit) {\n taskType = taskType + ' doneCritText' + secNum\n } else {\n taskType = taskType + ' doneText' + secNum\n }\n } else {\n if (d.crit) {\n taskType = taskType + ' critText' + secNum\n }\n }\n\n if (d.milestone) {\n taskType += ' milestoneText'\n }\n\n // Check id text width > width of rectangle\n if (textWidth > (endX - startX)) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n return classStr + ' taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType\n } else {\n return classStr + ' taskTextOutsideRight taskTextOutside' + secNum + ' ' + taskType\n }\n } else {\n return classStr + ' taskText taskText' + secNum + ' ' + taskType\n }\n })\n }\n\n function makeGrid (theSidePad, theTopPad, w, h) {\n let xAxis = d3.axisBottom(timeScale)\n .tickSize(-h + theTopPad + conf.gridLineStartPadding)\n .tickFormat(d3.timeFormat(parser.yy.getAxisFormat() || conf.axisFormat || '%Y-%m-%d'))\n\n svg.append('g')\n .attr('class', 'grid')\n .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')')\n .call(xAxis)\n .selectAll('text')\n .style('text-anchor', 'middle')\n .attr('fill', '#000')\n .attr('stroke', 'none')\n .attr('font-size', 10)\n .attr('dy', '1em')\n }\n\n function vertLabels (theGap, theTopPad) {\n const numOccurances = []\n let prevGap = 0\n\n for (let i = 0; i < categories.length; i++) {\n numOccurances[i] = [categories[i], getCount(categories[i], catsUnfiltered)]\n }\n\n svg.append('g') // without doing this, impossible to put grid lines behind text\n .selectAll('text')\n .data(numOccurances)\n .enter()\n .append('text')\n .text(function (d) {\n return d[0]\n })\n .attr('x', 10)\n .attr('y', function (d, i) {\n if (i > 0) {\n for (let j = 0; j < i; j++) {\n prevGap += numOccurances[i - 1][1]\n return d[1] * theGap / 2 + prevGap * theGap + theTopPad\n }\n } else {\n return d[1] * theGap / 2 + theTopPad\n }\n })\n .attr('class', function (d) {\n for (let i = 0; i < categories.length; i++) {\n if (d[0] === categories[i]) {\n return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles)\n }\n }\n return 'sectionTitle'\n })\n }\n\n function drawToday (theSidePad, theTopPad, w, h) {\n const todayG = svg.append('g')\n .attr('class', 'today')\n\n const today = new Date()\n\n todayG.append('line')\n .attr('x1', timeScale(today) + theSidePad)\n .attr('x2', timeScale(today) + theSidePad)\n .attr('y1', conf.titleTopMargin)\n .attr('y2', h - conf.titleTopMargin)\n .attr('class', 'today')\n }\n\n // from this stackexchange question: http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript\n function checkUnique (arr) {\n const hash = {}\n const result = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (!hash.hasOwnProperty(arr[i])) { // it works with objects! in FF, at least\n hash[arr[i]] = true\n result.push(arr[i])\n }\n }\n return result\n }\n\n // from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array\n function getCounts (arr) {\n let i = arr.length // const to loop over\n const obj = {} // obj to store results\n while (i) {\n obj[arr[--i]] = (obj[arr[i]] || 0) + 1 // count occurrences\n }\n return obj\n }\n\n // get specific from everything\n function getCount (word, arr) {\n return getCounts(arr)[word] || 0\n }\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,12,13,14,15,17,19],$V1=[1,9],$V2=[1,10],$V3=[1,11],$V4=[1,12],$V5=[1,13],$V6=[1,15],$V7=[1,16];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"gantt\":4,\"document\":5,\"EOF\":6,\"line\":7,\"SPACE\":8,\"statement\":9,\"NL\":10,\"dateFormat\":11,\"axisFormat\":12,\"excludes\":13,\"title\":14,\"section\":15,\"clickStatement\":16,\"taskTxt\":17,\"taskData\":18,\"click\":19,\"callbackname\":20,\"callbackargs\":21,\"href\":22,\"clickStatementDebug\":23,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"gantt\",6:\"EOF\",8:\"SPACE\",10:\"NL\",11:\"dateFormat\",12:\"axisFormat\",13:\"excludes\",14:\"title\",15:\"section\",17:\"taskTxt\",18:\"taskData\",19:\"click\",20:\"callbackname\",21:\"callbackargs\",22:\"href\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[16,2],[16,3],[16,3],[16,4],[16,3],[16,4],[16,2],[23,2],[23,3],[23,3],[23,4],[23,3],[23,4],[23,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 2:\n this.$ = [] \nbreak;\ncase 3:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 4: case 5:\n this.$ = $$[$0] \nbreak;\ncase 6: case 7:\n this.$=[];\nbreak;\ncase 8:\nyy.setDateFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 9:\nyy.setAxisFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 10:\nyy.setExcludes($$[$0].substr(9));this.$=$$[$0].substr(9);\nbreak;\ncase 11:\nyy.setTitle($$[$0].substr(6));this.$=$$[$0].substr(6);\nbreak;\ncase 12:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 14:\nyy.addTask($$[$0-1],$$[$0]);this.$='task';\nbreak;\ncase 15:\nthis.$ = $$[$0-1];yy.setClickEvent($$[$0-1], $$[$0], null);\nbreak;\ncase 16:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 17:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], null);yy.setLink($$[$0-2],$$[$0]);\nbreak;\ncase 18:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-2], $$[$0-1]);yy.setLink($$[$0-3],$$[$0]);\nbreak;\ncase 19:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0], null);yy.setLink($$[$0-2],$$[$0-1]);\nbreak;\ncase 20:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-1], $$[$0]);yy.setLink($$[$0-3],$$[$0-2]);\nbreak;\ncase 21:\nthis.$ = $$[$0-1];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 22: case 28:\nthis.$=$$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 23: case 24: case 26:\nthis.$=$$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 25: case 27:\nthis.$=$$[$0-3] + ' ' + $$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:14,17:$V6,19:$V7},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:17,11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:14,17:$V6,19:$V7},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,8]),o($V0,[2,9]),o($V0,[2,10]),o($V0,[2,11]),o($V0,[2,12]),o($V0,[2,13]),{18:[1,18]},{20:[1,19],22:[1,20]},o($V0,[2,4]),o($V0,[2,14]),o($V0,[2,15],{21:[1,21],22:[1,22]}),o($V0,[2,21],{20:[1,23]}),o($V0,[2,16],{22:[1,24]}),o($V0,[2,17]),o($V0,[2,19],{21:[1,25]}),o($V0,[2,18]),o($V0,[2,20])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 10;\nbreak;\ncase 1:/* skip whitespace */\nbreak;\ncase 2:/* skip comments */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:this.begin(\"href\");\nbreak;\ncase 5:this.popState();\nbreak;\ncase 6:return 22;\nbreak;\ncase 7:this.begin(\"callbackname\");\nbreak;\ncase 8:this.popState();\nbreak;\ncase 9:this.popState(); this.begin(\"callbackargs\");\nbreak;\ncase 10:return 20;\nbreak;\ncase 11:this.popState();\nbreak;\ncase 12:return 21;\nbreak;\ncase 13:this.begin(\"click\");\nbreak;\ncase 14:this.popState();\nbreak;\ncase 15:return 19;\nbreak;\ncase 16:return 4;\nbreak;\ncase 17:return 11;\nbreak;\ncase 18:return 12;\nbreak;\ncase 19:return 13;\nbreak;\ncase 20:return 'date';\nbreak;\ncase 21:return 14;\nbreak;\ncase 22:return 15;\nbreak;\ncase 23:return 17;\nbreak;\ncase 24:return 18;\nbreak;\ncase 25:return ':';\nbreak;\ncase 26:return 6;\nbreak;\ncase 27:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:href[\\s]+[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:call[\\s]+)/i,/^(?:\\([\\s]*\\))/i,/^(?:\\()/i,/^(?:[^(]*)/i,/^(?:\\))/i,/^(?:[^)]*)/i,/^(?:click[\\s]+)/i,/^(?:[\\s\\n])/i,/^(?:[^\\s\\n]*)/i,/^(?:gantt\\b)/i,/^(?:dateFormat\\s[^#\\n;]+)/i,/^(?:axisFormat\\s[^#\\n;]+)/i,/^(?:excludes\\s[^#\\n;]+)/i,/^(?:\\d\\d\\d\\d-\\d\\d-\\d\\d\\b)/i,/^(?:title\\s[^#\\n;]+)/i,/^(?:section\\s[^#:\\n;]+)/i,/^(?:[^#:\\n;]+)/i,/^(?::[^#\\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"callbackargs\":{\"rules\":[11,12],\"inclusive\":false},\"callbackname\":{\"rules\":[8,9,10],\"inclusive\":false},\"href\":{\"rules\":[5,6],\"inclusive\":false},\"click\":{\"rules\":[14,15],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,7,13,16,17,18,19,20,21,22,23,24,25,26,27],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import _ from 'lodash'\n\nimport { logger } from '../../logger'\n\nlet commits = {}\nlet head = null\nlet branches = { 'master': head }\nlet curBranch = 'master'\nlet direction = 'LR'\nlet seq = 0\n\nfunction getRandomInt (min, max) {\n return Math.floor(Math.random() * (max - min)) + min\n}\n\nfunction getId () {\n const pool = '0123456789abcdef'\n let id = ''\n for (let i = 0; i < 7; i++) {\n id += pool[getRandomInt(0, 16)]\n }\n return id\n}\n\nfunction isfastforwardable (currentCommit, otherCommit) {\n logger.debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id)\n while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit) {\n // only if other branch has more commits\n if (otherCommit.parent == null) break\n if (Array.isArray(otherCommit.parent)) {\n logger.debug('In merge commit:', otherCommit.parent)\n return isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) ||\n isfastforwardable(currentCommit, commits[otherCommit.parent[1]])\n } else {\n otherCommit = commits[otherCommit.parent]\n }\n }\n logger.debug(currentCommit.id, otherCommit.id)\n return currentCommit.id === otherCommit.id\n}\n\nfunction isReachableFrom (currentCommit, otherCommit) {\n const currentSeq = currentCommit.seq\n const otherSeq = otherCommit.seq\n if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit)\n return false\n}\n\nexport const setDirection = function (dir) {\n direction = dir\n}\nlet options = {}\nexport const setOptions = function (rawOptString) {\n logger.debug('options str', rawOptString)\n rawOptString = rawOptString && rawOptString.trim()\n rawOptString = rawOptString || '{}'\n try {\n options = JSON.parse(rawOptString)\n } catch (e) {\n logger.error('error while parsing gitGraph options', e.message)\n }\n}\n\nexport const getOptions = function () {\n return options\n}\n\nexport const commit = function (msg) {\n const commit = {\n id: getId(),\n message: msg,\n seq: seq++,\n parent: head == null ? null : head.id\n }\n head = commit\n commits[commit.id] = commit\n branches[curBranch] = commit.id\n logger.debug('in pushCommit ' + commit.id)\n}\n\nexport const branch = function (name) {\n branches[name] = head != null ? head.id : null\n logger.debug('in createBranch')\n}\n\nexport const merge = function (otherBranch) {\n const currentCommit = commits[branches[curBranch]]\n const otherCommit = commits[branches[otherBranch]]\n if (isReachableFrom(currentCommit, otherCommit)) {\n logger.debug('Already merged')\n return\n }\n if (isfastforwardable(currentCommit, otherCommit)) {\n branches[curBranch] = branches[otherBranch]\n head = commits[branches[curBranch]]\n } else {\n // create merge commit\n const commit = {\n id: getId(),\n message: 'merged branch ' + otherBranch + ' into ' + curBranch,\n seq: seq++,\n parent: [head == null ? null : head.id, branches[otherBranch]]\n }\n head = commit\n commits[commit.id] = commit\n branches[curBranch] = commit.id\n }\n logger.debug(branches)\n logger.debug('in mergeBranch')\n}\n\nexport const checkout = function (branch) {\n logger.debug('in checkout')\n curBranch = branch\n const id = branches[curBranch]\n head = commits[id]\n}\n\nexport const reset = function (commitRef) {\n logger.debug('in reset', commitRef)\n const ref = commitRef.split(':')[0]\n let parentCount = parseInt(commitRef.split(':')[1])\n let commit = ref === 'HEAD' ? head : commits[branches[ref]]\n logger.debug(commit, parentCount)\n while (parentCount > 0) {\n commit = commits[commit.parent]\n parentCount--\n if (!commit) {\n const err = 'Critical error - unique parent commit not found during reset'\n logger.error(err)\n throw err\n }\n }\n head = commit\n branches[curBranch] = commit.id\n}\n\nfunction upsert (arr, key, newval) {\n const index = arr.indexOf(key)\n if (index === -1) {\n arr.push(newval)\n } else {\n arr.splice(index, 1, newval)\n }\n}\n\nfunction prettyPrintCommitHistory (commitArr) {\n const commit = _.maxBy(commitArr, 'seq')\n let line = ''\n commitArr.forEach(function (c) {\n if (c === commit) {\n line += '\\t*'\n } else {\n line += '\\t|'\n }\n })\n const label = [line, commit.id, commit.seq]\n for (let branch in branches) {\n if (branches[branch] === commit.id) label.push(branch)\n }\n logger.debug(label.join(' '))\n if (Array.isArray(commit.parent)) {\n const newCommit = commits[commit.parent[0]]\n upsert(commitArr, commit, newCommit)\n commitArr.push(commits[commit.parent[1]])\n } else if (commit.parent == null) {\n return\n } else {\n const nextCommit = commits[commit.parent]\n upsert(commitArr, commit, nextCommit)\n }\n commitArr = _.uniqBy(commitArr, 'id')\n prettyPrintCommitHistory(commitArr)\n}\n\nexport const prettyPrint = function () {\n logger.debug(commits)\n const node = getCommitsArray()[0]\n prettyPrintCommitHistory([node])\n}\n\nexport const clear = function () {\n commits = {}\n head = null\n branches = { 'master': head }\n curBranch = 'master'\n seq = 0\n}\n\nexport const getBranchesAsObjArray = function () {\n const branchArr = []\n for (let branch in branches) {\n branchArr.push({ name: branch, commit: commits[branches[branch]] })\n }\n return branchArr\n}\n\nexport const getBranches = function () { return branches }\nexport const getCommits = function () { return commits }\nexport const getCommitsArray = function () {\n const commitArr = Object.keys(commits).map(function (key) {\n return commits[key]\n })\n commitArr.forEach(function (o) { logger.debug(o.id) })\n return _.orderBy(commitArr, ['seq'], ['desc'])\n}\nexport const getCurrentBranch = function () { return curBranch }\nexport const getDirection = function () { return direction }\nexport const getHead = function () { return head }\n\nexport default {\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n checkout,\n reset,\n prettyPrint,\n clear,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead\n}\n","import * as d3 from 'd3'\nimport _ from 'lodash'\n\nimport db from './gitGraphAst'\nimport gitGraphParser from './parser/gitGraph'\nimport { logger } from '../../logger'\nimport { interpolateToCurve } from '../../utils'\n\nlet allCommitsDict = {}\nlet branchNum\nlet config = {\n nodeSpacing: 150,\n nodeFillColor: 'yellow',\n nodeStrokeWidth: 2,\n nodeStrokeColor: 'grey',\n lineStrokeWidth: 4,\n branchOffset: 50,\n lineColor: 'grey',\n leftMargin: 50,\n branchColors: ['#442f74', '#983351', '#609732', '#AA9A39'],\n nodeRadius: 10,\n nodeLabel: {\n width: 75,\n height: 100,\n x: -25,\n y: 0\n }\n}\nlet apiConfig = {}\nexport const setConf = function (c) {\n apiConfig = c\n}\n\nfunction svgCreateDefs (svg) {\n svg\n .append('defs')\n .append('g')\n .attr('id', 'def-commit')\n .append('circle')\n .attr('r', config.nodeRadius)\n .attr('cx', 0)\n .attr('cy', 0)\n svg.select('#def-commit')\n .append('foreignObject')\n .attr('width', config.nodeLabel.width)\n .attr('height', config.nodeLabel.height)\n .attr('x', config.nodeLabel.x)\n .attr('y', config.nodeLabel.y)\n .attr('class', 'node-label')\n .attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility')\n .append('p')\n .html('')\n}\n\nfunction svgDrawLine (svg, points, colorIdx, interpolate) {\n const curve = interpolateToCurve(interpolate, d3.curveBasis)\n const color = config.branchColors[colorIdx % config.branchColors.length]\n const lineGen = d3.line()\n .x(function (d) {\n return Math.round(d.x)\n })\n .y(function (d) {\n return Math.round(d.y)\n })\n .curve(curve)\n\n svg\n .append('svg:path')\n .attr('d', lineGen(points))\n .style('stroke', color)\n .style('stroke-width', config.lineStrokeWidth)\n .style('fill', 'none')\n}\n\n// Pass in the element and its pre-transform coords\nfunction getElementCoords (element, coords) {\n coords = coords || element.node().getBBox()\n const ctm = element.node().getCTM()\n const xn = ctm.e + coords.x * ctm.a\n const yn = ctm.f + coords.y * ctm.d\n return {\n left: xn,\n top: yn,\n width: coords.width,\n height: coords.height\n }\n}\n\nfunction svgDrawLineForCommits (svg, fromId, toId, direction, color) {\n logger.debug('svgDrawLineForCommits: ', fromId, toId)\n const fromBbox = getElementCoords(svg.select('#node-' + fromId + ' circle'))\n const toBbox = getElementCoords(svg.select('#node-' + toId + ' circle'))\n switch (direction) {\n case 'LR':\n // (toBbox)\n // +--------\n // + (fromBbox)\n if (fromBbox.left - toBbox.left > config.nodeSpacing) {\n const lineStart = { x: fromBbox.left - config.nodeSpacing, y: toBbox.top + toBbox.height / 2 }\n const lineEnd = { x: toBbox.left + toBbox.width, y: toBbox.top + toBbox.height / 2 }\n svgDrawLine(svg, [lineStart, lineEnd], color, 'linear')\n svgDrawLine(svg, [\n { x: fromBbox.left, y: fromBbox.top + fromBbox.height / 2 },\n { x: fromBbox.left - config.nodeSpacing / 2, y: fromBbox.top + fromBbox.height / 2 },\n { x: fromBbox.left - config.nodeSpacing / 2, y: lineStart.y },\n lineStart], color)\n } else {\n svgDrawLine(svg, [{\n 'x': fromBbox.left,\n 'y': fromBbox.top + fromBbox.height / 2\n }, {\n 'x': fromBbox.left - config.nodeSpacing / 2,\n 'y': fromBbox.top + fromBbox.height / 2\n }, {\n 'x': fromBbox.left - config.nodeSpacing / 2,\n 'y': toBbox.top + toBbox.height / 2\n }, {\n 'x': toBbox.left + toBbox.width,\n 'y': toBbox.top + toBbox.height / 2\n }], color)\n }\n break\n case 'BT':\n // + (fromBbox)\n // |\n // |\n // + (toBbox)\n if (toBbox.top - fromBbox.top > config.nodeSpacing) {\n const lineStart = { x: toBbox.left + toBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing }\n const lineEnd = { x: toBbox.left + toBbox.width / 2, y: toBbox.top }\n svgDrawLine(svg, [lineStart, lineEnd], color, 'linear')\n svgDrawLine(svg, [\n { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height },\n { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing / 2 },\n { x: toBbox.left + toBbox.width / 2, y: lineStart.y - config.nodeSpacing / 2 },\n lineStart], color)\n } else {\n svgDrawLine(svg, [{\n 'x': fromBbox.left + fromBbox.width / 2,\n 'y': fromBbox.top + fromBbox.height\n }, {\n 'x': fromBbox.left + fromBbox.width / 2,\n 'y': fromBbox.top + config.nodeSpacing / 2\n }, {\n 'x': toBbox.left + toBbox.width / 2,\n 'y': toBbox.top - config.nodeSpacing / 2\n }, {\n 'x': toBbox.left + toBbox.width / 2,\n 'y': toBbox.top\n }], color)\n }\n break\n }\n}\n\nfunction cloneNode (svg, selector) {\n return svg.select(selector).node().cloneNode(true)\n}\n\nfunction renderCommitHistory (svg, commitid, branches, direction) {\n let commit\n const numCommits = Object.keys(allCommitsDict).length\n if (typeof commitid === 'string') {\n do {\n commit = allCommitsDict[commitid]\n logger.debug('in renderCommitHistory', commit.id, commit.seq)\n if (svg.select('#node-' + commitid).size() > 0) {\n return\n }\n svg\n .append(function () {\n return cloneNode(svg, '#def-commit')\n })\n .attr('class', 'commit')\n .attr('id', function () {\n return 'node-' + commit.id\n })\n .attr('transform', function () {\n switch (direction) {\n case 'LR':\n return 'translate(' + (commit.seq * config.nodeSpacing + config.leftMargin) + ', ' +\n (branchNum * config.branchOffset) + ')'\n case 'BT':\n return 'translate(' + (branchNum * config.branchOffset + config.leftMargin) + ', ' +\n ((numCommits - commit.seq) * config.nodeSpacing) + ')'\n }\n })\n .attr('fill', config.nodeFillColor)\n .attr('stroke', config.nodeStrokeColor)\n .attr('stroke-width', config.nodeStrokeWidth)\n\n let branch\n for (let branchName in branches) {\n if (branches[branchName].commit === commit) {\n branch = branches[branchName]\n break\n }\n }\n if (branch) {\n logger.debug('found branch ', branch.name)\n svg.select('#node-' + commit.id + ' p')\n .append('xhtml:span')\n .attr('class', 'branch-label')\n .text(branch.name + ', ')\n }\n svg.select('#node-' + commit.id + ' p')\n .append('xhtml:span')\n .attr('class', 'commit-id')\n .text(commit.id)\n if (commit.message !== '' && direction === 'BT') {\n svg.select('#node-' + commit.id + ' p')\n .append('xhtml:span')\n .attr('class', 'commit-msg')\n .text(', ' + commit.message)\n }\n commitid = commit.parent\n } while (commitid && allCommitsDict[commitid])\n }\n\n if (Array.isArray(commitid)) {\n logger.debug('found merge commmit', commitid)\n renderCommitHistory(svg, commitid[0], branches, direction)\n branchNum++\n renderCommitHistory(svg, commitid[1], branches, direction)\n branchNum--\n }\n}\n\nfunction renderLines (svg, commit, direction, branchColor) {\n branchColor = branchColor || 0\n while (commit.seq > 0 && !commit.lineDrawn) {\n if (typeof commit.parent === 'string') {\n svgDrawLineForCommits(svg, commit.id, commit.parent, direction, branchColor)\n commit.lineDrawn = true\n commit = allCommitsDict[commit.parent]\n } else if (Array.isArray(commit.parent)) {\n svgDrawLineForCommits(svg, commit.id, commit.parent[0], direction, branchColor)\n svgDrawLineForCommits(svg, commit.id, commit.parent[1], direction, branchColor + 1)\n renderLines(svg, allCommitsDict[commit.parent[1]], direction, branchColor + 1)\n commit.lineDrawn = true\n commit = allCommitsDict[commit.parent[0]]\n }\n }\n}\n\nexport const draw = function (txt, id, ver) {\n try {\n const parser = gitGraphParser.parser\n parser.yy = db\n\n logger.debug('in gitgraph renderer', txt, id, ver)\n // Parse the graph definition\n parser.parse(txt + '\\n')\n\n config = _.assign(config, apiConfig, db.getOptions())\n logger.debug('effective options', config)\n const direction = db.getDirection()\n allCommitsDict = db.getCommits()\n const branches = db.getBranchesAsObjArray()\n if (direction === 'BT') {\n config.nodeLabel.x = branches.length * config.branchOffset\n config.nodeLabel.width = '100%'\n config.nodeLabel.y = -1 * 2 * config.nodeRadius\n }\n const svg = d3.select(`[id=\"${id}\"]`)\n svgCreateDefs(svg)\n branchNum = 1\n for (let branch in branches) {\n const v = branches[branch]\n renderCommitHistory(svg, v.commit.id, branches, direction)\n renderLines(svg, v.commit, direction)\n branchNum++\n }\n svg.attr('height', function () {\n if (direction === 'BT') return Object.keys(allCommitsDict).length * config.nodeSpacing\n return (branches.length + 1) * config.branchOffset\n })\n } catch (e) {\n logger.error('Error while rendering gitgraph')\n logger.error(e.message)\n }\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[2,3],$V1=[1,7],$V2=[7,12,15,17,19,20,21],$V3=[7,11,12,15,17,19,20,21],$V4=[2,20],$V5=[1,32];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"GG\":4,\":\":5,\"document\":6,\"EOF\":7,\"DIR\":8,\"options\":9,\"body\":10,\"OPT\":11,\"NL\":12,\"line\":13,\"statement\":14,\"COMMIT\":15,\"commit_arg\":16,\"BRANCH\":17,\"ID\":18,\"CHECKOUT\":19,\"MERGE\":20,\"RESET\":21,\"reset_arg\":22,\"STR\":23,\"HEAD\":24,\"reset_parents\":25,\"CARET\":26,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"GG\",5:\":\",7:\"EOF\",8:\"DIR\",11:\"OPT\",12:\"NL\",15:\"COMMIT\",17:\"BRANCH\",18:\"ID\",19:\"CHECKOUT\",20:\"MERGE\",21:\"RESET\",23:\"STR\",24:\"HEAD\",26:\"CARET\"},\nproductions_: [0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 2:\nyy.setDirection($$[$0-3]); return $$[$0-1];\nbreak;\ncase 4:\n yy.setOptions($$[$0-1]); this.$ = $$[$0]\nbreak;\ncase 5:\n$$[$0-1] +=$$[$0]; this.$=$$[$0-1]\nbreak;\ncase 7:\nthis.$ = []\nbreak;\ncase 8:\n$$[$0-1].push($$[$0]); this.$=$$[$0-1];\nbreak;\ncase 9:\nthis.$ =$$[$0-1]\nbreak;\ncase 11:\nyy.commit($$[$0])\nbreak;\ncase 12:\nyy.branch($$[$0])\nbreak;\ncase 13:\nyy.checkout($$[$0])\nbreak;\ncase 14:\nyy.merge($$[$0])\nbreak;\ncase 15:\nyy.reset($$[$0])\nbreak;\ncase 16:\nthis.$ = \"\"\nbreak;\ncase 17:\nthis.$=$$[$0]\nbreak;\ncase 18:\nthis.$ = $$[$0-1]+ \":\" + $$[$0] \nbreak;\ncase 19:\nthis.$ = $$[$0-1]+ \":\" + yy.count; yy.count = 0\nbreak;\ncase 20:\nyy.count = 0\nbreak;\ncase 21:\n yy.count += 1 \nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:$V0,9:6,12:$V1},{5:[1,8]},{7:[1,9]},o($V2,[2,7],{10:10,11:[1,11]}),o($V3,[2,6]),{6:12,7:$V0,9:6,12:$V1},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},o($V3,[2,5]),{7:[1,21]},o($V2,[2,8]),{12:[1,22]},o($V2,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},o($V2,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:$V4,25:31,26:$V5},{12:$V4,25:33,26:$V5},{12:[2,18]},{12:$V4,25:34,26:$V5},{12:[2,19]},{12:[2,21]}],\ndefaultActions: {9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 12;\nbreak;\ncase 1:/* skip all whitespace */\nbreak;\ncase 2:/* skip comments */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:return 4;\nbreak;\ncase 5:return 15;\nbreak;\ncase 6:return 17;\nbreak;\ncase 7:return 20;\nbreak;\ncase 8:return 21;\nbreak;\ncase 9:return 19;\nbreak;\ncase 10:return 8;\nbreak;\ncase 11:return 8;\nbreak;\ncase 12:return 5;\nbreak;\ncase 13:return 26\nbreak;\ncase 14:this.begin(\"options\");\nbreak;\ncase 15:this.popState();\nbreak;\ncase 16:return 11;\nbreak;\ncase 17:this.begin(\"string\");\nbreak;\ncase 18:this.popState();\nbreak;\ncase 19:return 23;\nbreak;\ncase 20:return 18;\nbreak;\ncase 21:return 7;\nbreak;\n}\n},\nrules: [/^(?:(\\r?\\n)+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:gitGraph\\b)/i,/^(?:commit\\b)/i,/^(?:branch\\b)/i,/^(?:merge\\b)/i,/^(?:reset\\b)/i,/^(?:checkout\\b)/i,/^(?:LR\\b)/i,/^(?:BT\\b)/i,/^(?::)/i,/^(?:\\^)/i,/^(?:options\\r?\\n)/i,/^(?:end\\r?\\n)/i,/^(?:[^\\n]+\\r?\\n)/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[a-zA-Z][a-zA-Z0-9_]+)/i,/^(?:$)/i],\nconditions: {\"options\":{\"rules\":[15,16],\"inclusive\":false},\"string\":{\"rules\":[18,19],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","/**\n * Created by knut on 15-01-14.\n */\nimport { logger } from '../../logger'\n\nvar message = ''\nvar info = false\n\nexport const setMessage = txt => {\n logger.debug('Setting message to: ' + txt)\n message = txt\n}\n\nexport const getMessage = () => {\n return message\n}\n\nexport const setInfo = inf => {\n info = inf\n}\n\nexport const getInfo = () => {\n return info\n}\n\n// export const parseError = (err, hash) => {\n// global.mermaidAPI.parseError(err, hash)\n// }\n\nexport default {\n setMessage,\n getMessage,\n setInfo,\n getInfo\n // parseError\n}\n","/**\n * Created by knut on 14-12-11.\n */\nimport * as d3 from 'd3'\nimport db from './infoDb'\nimport infoParser from './parser/info.js'\nimport { logger } from '../../logger'\n\nconst conf = {\n}\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\n\n/**\n * Draws a an info picture in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = (txt, id, ver) => {\n try {\n const parser = infoParser.parser\n parser.yy = db\n logger.debug('Renering info diagram\\n' + txt)\n // Parse the graph definition\n parser.parse(txt)\n logger.debug('Parsed info diagram')\n // Fetch the default direction, use TD if none was found\n const svg = d3.select('#' + id)\n\n const g = svg.append('g')\n\n g.append('text') // text label for the x axis\n .attr('x', 100)\n .attr('y', 40)\n .attr('class', 'version')\n .attr('font-size', '32px')\n .style('text-anchor', 'middle')\n .text('v ' + ver)\n\n svg.attr('height', 100)\n svg.attr('width', 400)\n // svg.attr('viewBox', '0 0 300 150');\n } catch (e) {\n logger.error('Error while rendering info diagram')\n logger.error(e.message)\n }\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,9,10,12];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"info\":4,\"document\":5,\"EOF\":6,\"line\":7,\"statement\":8,\"NL\":9,\"showInfo\":10,\"message\":11,\"say\":12,\"TXT\":13,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"info\",6:\"EOF\",9:\"NL\",10:\"showInfo\",12:\"say\",13:\"TXT\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1],[8,1],[11,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return yy; \nbreak;\ncase 4:\n \nbreak;\ncase 6:\n yy.setInfo(true); \nbreak;\ncase 7:\n yy.setMessage($$[$0]); \nbreak;\ncase 8:\n this.$ = $$[$0-1].substring(1).trim().replace(/\\\\n/gm, \"\\n\"); \nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8],11:9,12:[1,10]},{1:[2,1]},o($V0,[2,3]),o($V0,[2,4]),o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,7]),{13:[1,11]},o($V0,[2,8])],\ndefaultActions: {4:[2,1]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\t// Pre-lexer code can go here\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 4 ;\nbreak;\ncase 1:return 9 ;\nbreak;\ncase 2:return 'space'\nbreak;\ncase 3:return 10;\nbreak;\ncase 4:return 12 ;\nbreak;\ncase 5:return 6 ;\nbreak;\ncase 6:return 13 ;\nbreak;\n}\n},\nrules: [/^(?:info\\b)/i,/^(?:[\\s\\n\\r]+)/i,/^(?:[\\s]+)/i,/^(?:showInfo\\b)/i,/^(?:say\\b)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,4],$V3=[2,4],$V4=[1,9],$V5=[1,11],$V6=[1,12],$V7=[1,14],$V8=[1,15],$V9=[1,17],$Va=[1,18],$Vb=[1,19],$Vc=[1,20],$Vd=[1,21],$Ve=[1,23],$Vf=[1,24],$Vg=[1,4,5,10,15,16,18,20,21,22,23,25,27,28,29,40],$Vh=[1,32],$Vi=[4,5,10,15,16,18,20,21,22,23,25,29,40],$Vj=[4,5,10,15,16,18,20,21,22,23,25,28,29,40],$Vk=[4,5,10,15,16,18,20,21,22,23,25,27,29,40],$Vl=[38,39,40];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"SPACE\":4,\"NL\":5,\"SD\":6,\"document\":7,\"line\":8,\"statement\":9,\"participant\":10,\"actor\":11,\"AS\":12,\"restOfLine\":13,\"signal\":14,\"activate\":15,\"deactivate\":16,\"note_statement\":17,\"title\":18,\"text2\":19,\"loop\":20,\"end\":21,\"opt\":22,\"alt\":23,\"else_sections\":24,\"par\":25,\"par_sections\":26,\"and\":27,\"else\":28,\"note\":29,\"placement\":30,\"over\":31,\"actor_pair\":32,\"spaceList\":33,\",\":34,\"left_of\":35,\"right_of\":36,\"signaltype\":37,\"+\":38,\"-\":39,\"ACTOR\":40,\"SOLID_OPEN_ARROW\":41,\"DOTTED_OPEN_ARROW\":42,\"SOLID_ARROW\":43,\"DOTTED_ARROW\":44,\"SOLID_CROSS\":45,\"DOTTED_CROSS\":46,\"TXT\":47,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACE\",5:\"NL\",6:\"SD\",10:\"participant\",12:\"AS\",13:\"restOfLine\",15:\"activate\",16:\"deactivate\",18:\"title\",20:\"loop\",21:\"end\",22:\"opt\",23:\"alt\",25:\"par\",27:\"and\",28:\"else\",29:\"note\",31:\"over\",34:\",\",35:\"left_of\",36:\"right_of\",38:\"+\",39:\"-\",40:\"ACTOR\",41:\"SOLID_OPEN_ARROW\",42:\"DOTTED_OPEN_ARROW\",43:\"SOLID_ARROW\",44:\"DOTTED_ARROW\",45:\"SOLID_CROSS\",46:\"DOTTED_CROSS\",47:\"TXT\"},\nproductions_: [0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,5],[9,3],[9,2],[9,3],[9,3],[9,2],[9,3],[9,4],[9,4],[9,4],[9,4],[26,1],[26,4],[24,1],[24,4],[17,4],[17,4],[33,2],[33,1],[32,3],[32,1],[30,1],[30,1],[14,5],[14,5],[14,4],[11,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[19,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 3:\n yy.apply($$[$0]);return $$[$0]; \nbreak;\ncase 4:\n this.$ = [] \nbreak;\ncase 5:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 6: case 7:\n this.$ = $$[$0] \nbreak;\ncase 8:\n this.$=[];\nbreak;\ncase 9:\n$$[$0-3].description=$$[$0-1]; this.$=$$[$0-3];\nbreak;\ncase 10:\nthis.$=$$[$0-1];\nbreak;\ncase 12:\nthis.$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]};\nbreak;\ncase 13:\nthis.$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-1]};\nbreak;\ncase 15:\nthis.$=[{type:'setTitle', text:$$[$0-1]}]\nbreak;\ncase 16:\n\n\t\t$$[$0-1].unshift({type: 'loopStart', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_START});\n\t\t$$[$0-1].push({type: 'loopEnd', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 17:\n\n\t\t$$[$0-1].unshift({type: 'optStart', optText:$$[$0-2], signalType: yy.LINETYPE.OPT_START});\n\t\t$$[$0-1].push({type: 'optEnd', optText:$$[$0-2], signalType: yy.LINETYPE.OPT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 18:\n\n\t\t// Alt start\n\t\t$$[$0-1].unshift({type: 'altStart', altText:$$[$0-2], signalType: yy.LINETYPE.ALT_START});\n\t\t// Content in alt is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 19:\n\n\t\t// Parallel start\n\t\t$$[$0-1].unshift({type: 'parStart', parText:$$[$0-2], signalType: yy.LINETYPE.PAR_START});\n\t\t// Content in par is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 21:\n this.$ = $$[$0-3].concat([{type: 'and', parText:$$[$0-1], signalType: yy.LINETYPE.PAR_AND}, $$[$0]]); \nbreak;\ncase 23:\n this.$ = $$[$0-3].concat([{type: 'else', altText:$$[$0-1], signalType: yy.LINETYPE.ALT_ELSE}, $$[$0]]); \nbreak;\ncase 24:\n\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:$$[$0-2], actor:$$[$0-1].actor, text:$$[$0]}];\nbreak;\ncase 25:\n\n\t\t// Coerce actor_pair into a [to, from, ...] array\n\t\t$$[$0-2] = [].concat($$[$0-1], $$[$0-1]).slice(0, 2);\n\t\t$$[$0-2][0] = $$[$0-2][0].actor;\n\t\t$$[$0-2][1] = $$[$0-2][1].actor;\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$$[$0-2].slice(0, 2), text:$$[$0]}];\nbreak;\ncase 28:\n this.$ = [$$[$0-2], $$[$0]]; \nbreak;\ncase 29:\n this.$ = $$[$0]; \nbreak;\ncase 30:\n this.$ = yy.PLACEMENT.LEFTOF; \nbreak;\ncase 31:\n this.$ = yy.PLACEMENT.RIGHTOF; \nbreak;\ncase 32:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]}\n\t ]\nbreak;\ncase 33:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-4]}\n\t ]\nbreak;\ncase 34:\n this.$ = [$$[$0-3],$$[$0-1],{type: 'addMessage', from:$$[$0-3].actor, to:$$[$0-1].actor, signalType:$$[$0-2], msg:$$[$0]}]\nbreak;\ncase 35:\nthis.$={type: 'addActor', actor:$$[$0]}\nbreak;\ncase 36:\n this.$ = yy.LINETYPE.SOLID_OPEN; \nbreak;\ncase 37:\n this.$ = yy.LINETYPE.DOTTED_OPEN; \nbreak;\ncase 38:\n this.$ = yy.LINETYPE.SOLID; \nbreak;\ncase 39:\n this.$ = yy.LINETYPE.DOTTED; \nbreak;\ncase 40:\n this.$ = yy.LINETYPE.SOLID_CROSS; \nbreak;\ncase 41:\n this.$ = yy.LINETYPE.DOTTED_CROSS; \nbreak;\ncase 42:\nthis.$ = $$[$0].substring(1).trim().replace(/\\\\n/gm, \"\\n\");\nbreak;\n}\n},\ntable: [{3:1,4:$V0,5:$V1,6:$V2},{1:[3]},{3:5,4:$V0,5:$V1,6:$V2},{3:6,4:$V0,5:$V1,6:$V2},o([1,4,5,10,15,16,18,20,22,23,25,29,40],$V3,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},o($Vg,[2,5]),{9:25,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},o($Vg,[2,7]),o($Vg,[2,8]),{11:26,40:$Vf},{5:[1,27]},{11:28,40:$Vf},{11:29,40:$Vf},{5:[1,30]},{19:31,47:$Vh},{13:[1,33]},{13:[1,34]},{13:[1,35]},{13:[1,36]},{37:37,41:[1,38],42:[1,39],43:[1,40],44:[1,41],45:[1,42],46:[1,43]},{30:44,31:[1,45],35:[1,46],36:[1,47]},o([5,12,34,41,42,43,44,45,46,47],[2,35]),o($Vg,[2,6]),{5:[1,49],12:[1,48]},o($Vg,[2,11]),{5:[1,50]},{5:[1,51]},o($Vg,[2,14]),{5:[1,52]},{5:[2,42]},o($Vi,$V3,{7:53}),o($Vi,$V3,{7:54}),o($Vj,$V3,{24:55,7:56}),o($Vk,$V3,{26:57,7:58}),{11:61,38:[1,59],39:[1,60],40:$Vf},o($Vl,[2,36]),o($Vl,[2,37]),o($Vl,[2,38]),o($Vl,[2,39]),o($Vl,[2,40]),o($Vl,[2,41]),{11:62,40:$Vf},{11:64,32:63,40:$Vf},{40:[2,30]},{40:[2,31]},{13:[1,65]},o($Vg,[2,10]),o($Vg,[2,12]),o($Vg,[2,13]),o($Vg,[2,15]),{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[1,66],22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[1,67],22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},{21:[1,68]},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[2,22],22:$Vb,23:$Vc,25:$Vd,28:[1,69],29:$Ve,40:$Vf},{21:[1,70]},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[2,20],22:$Vb,23:$Vc,25:$Vd,27:[1,71],29:$Ve,40:$Vf},{11:72,40:$Vf},{11:73,40:$Vf},{19:74,47:$Vh},{19:75,47:$Vh},{19:76,47:$Vh},{34:[1,77],47:[2,29]},{5:[1,78]},o($Vg,[2,16]),o($Vg,[2,17]),o($Vg,[2,18]),{13:[1,79]},o($Vg,[2,19]),{13:[1,80]},{19:81,47:$Vh},{19:82,47:$Vh},{5:[2,34]},{5:[2,24]},{5:[2,25]},{11:83,40:$Vf},o($Vg,[2,9]),o($Vj,$V3,{7:56,24:84}),o($Vk,$V3,{7:58,26:85}),{5:[2,32]},{5:[2,33]},{47:[2,28]},{21:[2,23]},{21:[2,21]}],\ndefaultActions: {5:[2,1],6:[2,2],32:[2,42],46:[2,30],47:[2,31],74:[2,34],75:[2,24],76:[2,25],81:[2,32],82:[2,33],83:[2,28],84:[2,23],85:[2,21]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 5;\nbreak;\ncase 1:/* skip all whitespace */\nbreak;\ncase 2:/* skip same-line whitespace */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:/* skip comments */\nbreak;\ncase 5: this.begin('ID'); return 10; \nbreak;\ncase 6: this.begin('ALIAS'); return 40; \nbreak;\ncase 7: this.popState(); this.popState(); this.begin('LINE'); return 12; \nbreak;\ncase 8: this.popState(); this.popState(); return 5; \nbreak;\ncase 9: this.begin('LINE'); return 20; \nbreak;\ncase 10: this.begin('LINE'); return 22; \nbreak;\ncase 11: this.begin('LINE'); return 23; \nbreak;\ncase 12: this.begin('LINE'); return 28; \nbreak;\ncase 13: this.begin('LINE'); return 25; \nbreak;\ncase 14: this.begin('LINE'); return 27; \nbreak;\ncase 15: this.popState(); return 13; \nbreak;\ncase 16:return 21;\nbreak;\ncase 17:return 35;\nbreak;\ncase 18:return 36;\nbreak;\ncase 19:return 31;\nbreak;\ncase 20:return 29;\nbreak;\ncase 21: this.begin('ID'); return 15; \nbreak;\ncase 22: this.begin('ID'); return 16; \nbreak;\ncase 23:return 18;\nbreak;\ncase 24:return 6;\nbreak;\ncase 25:return 34;\nbreak;\ncase 26:return 5;\nbreak;\ncase 27: yy_.yytext = yy_.yytext.trim(); return 40; \nbreak;\ncase 28:return 43;\nbreak;\ncase 29:return 44;\nbreak;\ncase 30:return 41;\nbreak;\ncase 31:return 42;\nbreak;\ncase 32:return 45;\nbreak;\ncase 33:return 46;\nbreak;\ncase 34:return 47;\nbreak;\ncase 35:return 38;\nbreak;\ncase 36:return 39;\nbreak;\ncase 37:return 5;\nbreak;\ncase 38:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:((?!\\n)\\s)+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:participant\\b)/i,/^(?:[^\\->:\\n,;]+?(?=((?!\\n)\\s)+as(?!\\n)\\s|[#\\n;]|$))/i,/^(?:as\\b)/i,/^(?:(?:))/i,/^(?:loop\\b)/i,/^(?:opt\\b)/i,/^(?:alt\\b)/i,/^(?:else\\b)/i,/^(?:par\\b)/i,/^(?:and\\b)/i,/^(?:[^#\\n;]*)/i,/^(?:end\\b)/i,/^(?:left of\\b)/i,/^(?:right of\\b)/i,/^(?:over\\b)/i,/^(?:note\\b)/i,/^(?:activate\\b)/i,/^(?:deactivate\\b)/i,/^(?:title\\b)/i,/^(?:sequenceDiagram\\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\\+\\->:\\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\\n;]+)/i,/^(?:\\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"LINE\":{\"rules\":[2,3,15],\"inclusive\":false},\"ALIAS\":{\"rules\":[2,3,7,8],\"inclusive\":false},\"ID\":{\"rules\":[2,3,6],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,3,4,5,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import { logger } from '../../logger'\n\nlet actors = {}\nlet messages = []\nconst notes = []\nlet title = ''\n\nexport const addActor = function (id, name, description) {\n // Don't allow description nulling\n const old = actors[id]\n if (old && name === old.name && description == null) return\n\n // Don't allow null descriptions, either\n if (description == null) description = name\n\n actors[id] = { name: name, description: description }\n}\n\nexport const addMessage = function (idFrom, idTo, message, answer) {\n messages.push({ from: idFrom, to: idTo, message: message, answer: answer })\n}\n\nexport const addSignal = function (idFrom, idTo, message, messageType) {\n logger.debug('Adding message from=' + idFrom + ' to=' + idTo + ' message=' + message + ' type=' + messageType)\n messages.push({ from: idFrom, to: idTo, message: message, type: messageType })\n}\n\nexport const getMessages = function () {\n return messages\n}\n\nexport const getActors = function () {\n return actors\n}\nexport const getActor = function (id) {\n return actors[id]\n}\nexport const getActorKeys = function () {\n return Object.keys(actors)\n}\nexport const getTitle = function () {\n return title\n}\n\nexport const clear = function () {\n actors = {}\n messages = []\n}\n\nexport const LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21\n}\n\nexport const ARROWTYPE = {\n FILLED: 0,\n OPEN: 1\n}\n\nexport const PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2\n}\n\nexport const addNote = function (actor, placement, message) {\n const note = { actor: actor, placement: placement, message: message }\n\n // Coerce actor into a [to, from, ...] array\n const actors = [].concat(actor, actor)\n\n notes.push(note)\n messages.push({ from: actors[0], to: actors[1], message: message, type: LINETYPE.NOTE, placement: placement })\n}\n\nexport const setTitle = function (titleText) {\n title = titleText\n}\n\nexport const apply = function (param) {\n if (param instanceof Array) {\n param.forEach(function (item) {\n apply(item)\n })\n } else {\n switch (param.type) {\n case 'addActor':\n addActor(param.actor, param.actor, param.description)\n break\n case 'activeStart':\n addSignal(param.actor, undefined, undefined, param.signalType)\n break\n case 'activeEnd':\n addSignal(param.actor, undefined, undefined, param.signalType)\n break\n case 'addNote':\n addNote(param.actor, param.placement, param.text)\n break\n case 'addMessage':\n addSignal(param.from, param.to, param.msg, param.signalType)\n break\n case 'loopStart':\n addSignal(undefined, undefined, param.loopText, param.signalType)\n break\n case 'loopEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n case 'optStart':\n addSignal(undefined, undefined, param.optText, param.signalType)\n break\n case 'optEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n case 'altStart':\n addSignal(undefined, undefined, param.altText, param.signalType)\n break\n case 'else':\n addSignal(undefined, undefined, param.altText, param.signalType)\n break\n case 'altEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n case 'setTitle':\n setTitle(param.text)\n break\n case 'parStart':\n addSignal(undefined, undefined, param.parText, param.signalType)\n break\n case 'and':\n addSignal(undefined, undefined, param.parText, param.signalType)\n break\n case 'parEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n }\n }\n}\n\nexport default {\n addActor,\n addMessage,\n addSignal,\n getMessages,\n getActors,\n getActor,\n getActorKeys,\n getTitle,\n clear,\n LINETYPE,\n ARROWTYPE,\n PLACEMENT,\n addNote,\n setTitle,\n apply\n}\n","import * as d3 from 'd3'\n\nimport svgDraw from './svgDraw'\nimport { logger } from '../../logger'\nimport { parser } from './parser/sequenceDiagram'\nimport sequenceDb from './sequenceDb'\n\nparser.yy = sequenceDb\n\nconst conf = {\n\n diagramMarginX: 50,\n diagramMarginY: 30,\n // Margin between actors\n actorMargin: 50,\n // Width of actor boxes\n width: 150,\n // Height of actor boxes\n height: 65,\n actorFontSize: 14,\n actorFontFamily: '\"Open-Sans\", \"sans-serif\"',\n // Margin around loop boxes\n boxMargin: 10,\n boxTextMargin: 5,\n noteMargin: 10,\n // Space between messages\n messageMargin: 35,\n // mirror actors under diagram\n mirrorActors: false,\n // Depending on css styling this might need adjustment\n // Prolongs the edge of the diagram downwards\n bottomMarginAdj: 1,\n\n // width of activation box\n activationWidth: 10,\n\n // text placement as: tspan | fo | old only text as before\n textPlacement: 'tspan'\n}\n\nexport const bounds = {\n data: {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined\n },\n verticalPos: 0,\n\n sequenceItems: [],\n activations: [],\n init: function () {\n this.sequenceItems = []\n this.activations = []\n this.data = {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined\n }\n this.verticalPos = 0\n },\n updateVal: function (obj, key, val, fun) {\n if (typeof obj[key] === 'undefined') {\n obj[key] = val\n } else {\n obj[key] = fun(val, obj[key])\n }\n },\n updateBounds: function (startx, starty, stopx, stopy) {\n const _self = this\n let cnt = 0\n function updateFn (type) {\n return function updateItemBounds (item) {\n cnt++\n // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems\n const n = _self.sequenceItems.length - cnt + 1\n\n _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min)\n _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max)\n\n _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min)\n _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max)\n\n if (!(type === 'activation')) {\n _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min)\n _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max)\n\n _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min)\n _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max)\n }\n }\n }\n\n this.sequenceItems.forEach(updateFn())\n this.activations.forEach(updateFn('activation'))\n },\n insert: function (startx, starty, stopx, stopy) {\n const _startx = Math.min(startx, stopx)\n const _stopx = Math.max(startx, stopx)\n const _starty = Math.min(starty, stopy)\n const _stopy = Math.max(starty, stopy)\n\n this.updateVal(bounds.data, 'startx', _startx, Math.min)\n this.updateVal(bounds.data, 'starty', _starty, Math.min)\n this.updateVal(bounds.data, 'stopx', _stopx, Math.max)\n this.updateVal(bounds.data, 'stopy', _stopy, Math.max)\n\n this.updateBounds(_startx, _starty, _stopx, _stopy)\n },\n newActivation: function (message, diagram) {\n const actorRect = parser.yy.getActors()[message.from.actor]\n const stackedSize = actorActivations(message.from.actor).length\n const x = actorRect.x + conf.width / 2 + (stackedSize - 1) * conf.activationWidth / 2\n this.activations.push({\n startx: x,\n starty: this.verticalPos + 2,\n stopx: x + conf.activationWidth,\n stopy: undefined,\n actor: message.from.actor,\n anchored: svgDraw.anchorElement(diagram)\n })\n },\n endActivation: function (message) {\n // find most recent activation for given actor\n const lastActorActivationIdx = this.activations\n .map(function (activation) { return activation.actor })\n .lastIndexOf(message.from.actor)\n const activation = this.activations.splice(lastActorActivationIdx, 1)[0]\n return activation\n },\n newLoop: function (title) {\n this.sequenceItems.push({ startx: undefined, starty: this.verticalPos, stopx: undefined, stopy: undefined, title: title })\n },\n endLoop: function () {\n const loop = this.sequenceItems.pop()\n return loop\n },\n addSectionToLoop: function (message) {\n const loop = this.sequenceItems.pop()\n loop.sections = loop.sections || []\n loop.sectionTitles = loop.sectionTitles || []\n loop.sections.push(bounds.getVerticalPos())\n loop.sectionTitles.push(message)\n this.sequenceItems.push(loop)\n },\n bumpVerticalPos: function (bump) {\n this.verticalPos = this.verticalPos + bump\n this.data.stopy = this.verticalPos\n },\n getVerticalPos: function () {\n return this.verticalPos\n },\n getBounds: function () {\n return this.data\n }\n}\n\nconst _drawLongText = (text, x, y, g, width) => {\n let textHeight = 0\n const lines = text.split(/<br\\/?>/ig)\n for (const line of lines) {\n const textObj = svgDraw.getTextObj()\n textObj.x = x\n textObj.y = y + textHeight\n textObj.textMargin = conf.noteMargin\n textObj.dy = '1em'\n textObj.text = line\n textObj.class = 'noteText'\n const textElem = svgDraw.drawText(g, textObj, width)\n textHeight += (textElem._groups || textElem)[0][0].getBBox().height\n }\n return textHeight\n}\n\n/**\n * Draws an actor in the diagram with the attaced line\n * @param center - The center of the the actor\n * @param pos The position if the actor in the liost of actors\n * @param description The text in the box\n */\nconst drawNote = function (elem, startx, verticalPos, msg, forceWidth) {\n const rect = svgDraw.getNoteRect()\n rect.x = startx\n rect.y = verticalPos\n rect.width = forceWidth || conf.width\n rect.class = 'note'\n\n let g = elem.append('g')\n const rectElem = svgDraw.drawRect(g, rect)\n\n const textHeight = _drawLongText(msg.message, startx - 4, verticalPos + 24, g, rect.width - conf.noteMargin)\n\n bounds.insert(startx, verticalPos, startx + rect.width, verticalPos + 2 * conf.noteMargin + textHeight)\n rectElem.attr('height', textHeight + 2 * conf.noteMargin)\n bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin)\n}\n\n/**\n * Draws a message\n * @param elem\n * @param startx\n * @param stopx\n * @param verticalPos\n * @param txtCenter\n * @param msg\n */\nconst drawMessage = function (elem, startx, stopx, verticalPos, msg) {\n const g = elem.append('g')\n const txtCenter = startx + (stopx - startx) / 2\n\n const textElem = g.append('text') // text label for the x axis\n .attr('x', txtCenter)\n .attr('y', verticalPos - 7)\n .style('text-anchor', 'middle')\n .attr('class', 'messageText')\n .text(msg.message)\n\n let textWidth = (textElem._groups || textElem)[0][0].getBBox().width\n\n let line\n if (startx === stopx) {\n if (conf.rightAngles) {\n line = g.append('path').attr('d', `M ${startx},${verticalPos} H ${startx + (conf.width / 2)} V ${verticalPos + 25} H ${startx}`)\n } else {\n line = g.append('path')\n .attr('d', 'M ' + startx + ',' + verticalPos + ' C ' + (startx + 60) + ',' + (verticalPos - 10) + ' ' + (startx + 60) + ',' +\n (verticalPos + 30) + ' ' + startx + ',' + (verticalPos + 20))\n }\n\n bounds.bumpVerticalPos(30)\n const dx = Math.max(textWidth / 2, 100)\n bounds.insert(startx - dx, bounds.getVerticalPos() - 10, stopx + dx, bounds.getVerticalPos())\n } else {\n line = g.append('line')\n line.attr('x1', startx)\n line.attr('y1', verticalPos)\n line.attr('x2', stopx)\n line.attr('y2', verticalPos)\n bounds.insert(startx, bounds.getVerticalPos() - 10, stopx, bounds.getVerticalPos())\n }\n // Make an SVG Container\n // Draw the line\n if (msg.type === parser.yy.LINETYPE.DOTTED || msg.type === parser.yy.LINETYPE.DOTTED_CROSS || msg.type === parser.yy.LINETYPE.DOTTED_OPEN) {\n line.style('stroke-dasharray', ('3, 3'))\n line.attr('class', 'messageLine1')\n } else {\n line.attr('class', 'messageLine0')\n }\n\n let url = ''\n if (conf.arrowMarkerAbsolute) {\n url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search\n url = url.replace(/\\(/g, '\\\\(')\n url = url.replace(/\\)/g, '\\\\)')\n }\n\n line.attr('stroke-width', 2)\n line.attr('stroke', 'black')\n line.style('fill', 'none') // remove any fill colour\n if (msg.type === parser.yy.LINETYPE.SOLID || msg.type === parser.yy.LINETYPE.DOTTED) {\n line.attr('marker-end', 'url(' + url + '#arrowhead)')\n }\n\n if (msg.type === parser.yy.LINETYPE.SOLID_CROSS || msg.type === parser.yy.LINETYPE.DOTTED_CROSS) {\n line.attr('marker-end', 'url(' + url + '#crosshead)')\n }\n}\n\nexport const drawActors = function (diagram, actors, actorKeys, verticalPos) {\n // Draw the actors\n for (let i = 0; i < actorKeys.length; i++) {\n const key = actorKeys[i]\n\n // Add some rendering data to the object\n actors[key].x = i * conf.actorMargin + i * conf.width\n actors[key].y = verticalPos\n actors[key].width = conf.diagramMarginX\n actors[key].height = conf.diagramMarginY\n\n // Draw the box with the attached line\n svgDraw.drawActor(diagram, actors[key].x, verticalPos, actors[key].description, conf)\n bounds.insert(actors[key].x, verticalPos, actors[key].x + conf.width, conf.height)\n }\n\n // Add a margin between the actor boxes and the first arrow\n bounds.bumpVerticalPos(conf.height)\n}\n\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\n\nconst actorActivations = function (actor) {\n return bounds.activations.filter(function (activation) {\n return activation.actor === actor\n })\n}\n\nconst actorFlowVerticaBounds = function (actor) {\n // handle multiple stacked activations for same actor\n const actors = parser.yy.getActors()\n const activations = actorActivations(actor)\n\n const left = activations.reduce(function (acc, activation) { return Math.min(acc, activation.startx) }, actors[actor].x + conf.width / 2)\n const right = activations.reduce(function (acc, activation) { return Math.max(acc, activation.stopx) }, actors[actor].x + conf.width / 2)\n return [left, right]\n}\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n parser.yy.clear()\n parser.parse(text + '\\n')\n\n bounds.init()\n const diagram = d3.select(`[id=\"${id}\"]`)\n\n let startx\n let stopx\n let forceWidth\n\n // Fetch data from the parsing\n const actors = parser.yy.getActors()\n const actorKeys = parser.yy.getActorKeys()\n const messages = parser.yy.getMessages()\n const title = parser.yy.getTitle()\n drawActors(diagram, actors, actorKeys, 0)\n\n // The arrow head definition is attached to the svg once\n svgDraw.insertArrowHead(diagram)\n svgDraw.insertArrowCrossHead(diagram)\n\n function activeEnd (msg, verticalPos) {\n const activationData = bounds.endActivation(msg)\n if (activationData.starty + 18 > verticalPos) {\n activationData.starty = verticalPos - 6\n verticalPos += 12\n }\n svgDraw.drawActivation(diagram, activationData, verticalPos, conf, actorActivations(msg.from.actor).length)\n\n bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos)\n }\n\n // const lastMsg\n\n // Draw the messages/signals\n messages.forEach(function (msg) {\n let loopData\n switch (msg.type) {\n case parser.yy.LINETYPE.NOTE:\n bounds.bumpVerticalPos(conf.boxMargin)\n\n startx = actors[msg.from].x\n stopx = actors[msg.to].x\n\n if (msg.placement === parser.yy.PLACEMENT.RIGHTOF) {\n drawNote(diagram, startx + (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg)\n } else if (msg.placement === parser.yy.PLACEMENT.LEFTOF) {\n drawNote(diagram, startx - (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg)\n } else if (msg.to === msg.from) {\n // Single-actor over\n drawNote(diagram, startx, bounds.getVerticalPos(), msg)\n } else {\n // Multi-actor over\n forceWidth = Math.abs(startx - stopx) + conf.actorMargin\n drawNote(diagram, (startx + stopx + conf.width - forceWidth) / 2, bounds.getVerticalPos(), msg,\n forceWidth)\n }\n break\n case parser.yy.LINETYPE.ACTIVE_START:\n bounds.newActivation(msg, diagram)\n break\n case parser.yy.LINETYPE.ACTIVE_END:\n activeEnd(msg, bounds.getVerticalPos())\n break\n case parser.yy.LINETYPE.LOOP_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.LOOP_END:\n loopData = bounds.endLoop()\n\n svgDraw.drawLoop(diagram, loopData, 'loop', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.OPT_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.OPT_END:\n loopData = bounds.endLoop()\n\n svgDraw.drawLoop(diagram, loopData, 'opt', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.ALT_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.ALT_ELSE:\n bounds.bumpVerticalPos(conf.boxMargin)\n loopData = bounds.addSectionToLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.ALT_END:\n loopData = bounds.endLoop()\n\n svgDraw.drawLoop(diagram, loopData, 'alt', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.PAR_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.PAR_AND:\n bounds.bumpVerticalPos(conf.boxMargin)\n loopData = bounds.addSectionToLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.PAR_END:\n loopData = bounds.endLoop()\n svgDraw.drawLoop(diagram, loopData, 'par', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n default:\n try {\n // lastMsg = msg\n bounds.bumpVerticalPos(conf.messageMargin)\n const fromBounds = actorFlowVerticaBounds(msg.from)\n const toBounds = actorFlowVerticaBounds(msg.to)\n const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0\n const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1\n startx = fromBounds[fromIdx]\n stopx = toBounds[toIdx]\n\n const verticalPos = bounds.getVerticalPos()\n drawMessage(diagram, startx, stopx, verticalPos, msg)\n const allBounds = fromBounds.concat(toBounds)\n bounds.insert(Math.min.apply(null, allBounds), verticalPos, Math.max.apply(null, allBounds), verticalPos)\n } catch (e) {\n logger.error('error while drawing message', e)\n }\n }\n })\n\n if (conf.mirrorActors) {\n // Draw actors below diagram\n bounds.bumpVerticalPos(conf.boxMargin * 2)\n drawActors(diagram, actors, actorKeys, bounds.getVerticalPos())\n }\n\n const box = bounds.getBounds()\n\n // Adjust line height of actor lines now that the height of the diagram is known\n logger.debug('For line height fix Querying: #' + id + ' .actor-line')\n const actorLines = d3.selectAll('#' + id + ' .actor-line')\n actorLines.attr('y2', box.stopy)\n\n let height = box.stopy - box.starty + 2 * conf.diagramMarginY\n if (conf.mirrorActors) {\n height = height - conf.boxMargin + conf.bottomMarginAdj\n }\n\n const width = (box.stopx - box.startx) + (2 * conf.diagramMarginX)\n\n if (title) {\n diagram.append('text')\n .text(title)\n .attr('x', ((box.stopx - box.startx) / 2) - (2 * conf.diagramMarginX))\n .attr('y', -25)\n }\n\n if (conf.useMaxWidth) {\n diagram.attr('height', '100%')\n diagram.attr('width', '100%')\n diagram.attr('style', 'max-width:' + (width) + 'px;')\n } else {\n diagram.attr('height', height)\n diagram.attr('width', width)\n }\n const extraVertForTitle = title ? 40 : 0\n diagram.attr('viewBox', (box.startx - conf.diagramMarginX) + ' -' + (conf.diagramMarginY + extraVertForTitle) + ' ' + width + ' ' + (height + extraVertForTitle))\n}\n\nexport default {\n bounds,\n drawActors,\n setConf,\n draw\n}\n","export const drawRect = function (elem, rectData) {\n const rectElem = elem.append('rect')\n rectElem.attr('x', rectData.x)\n rectElem.attr('y', rectData.y)\n rectElem.attr('fill', rectData.fill)\n rectElem.attr('stroke', rectData.stroke)\n rectElem.attr('width', rectData.width)\n rectElem.attr('height', rectData.height)\n rectElem.attr('rx', rectData.rx)\n rectElem.attr('ry', rectData.ry)\n\n if (typeof rectData.class !== 'undefined') {\n rectElem.attr('class', rectData.class)\n }\n\n return rectElem\n}\n\nexport const drawText = function (elem, textData, width) {\n // Remove and ignore br:s\n const nText = textData.text.replace(/<br\\/?>/ig, ' ')\n\n const textElem = elem.append('text')\n textElem.attr('x', textData.x)\n textElem.attr('y', textData.y)\n textElem.style('text-anchor', textData.anchor)\n textElem.attr('fill', textData.fill)\n if (typeof textData.class !== 'undefined') {\n textElem.attr('class', textData.class)\n }\n\n const span = textElem.append('tspan')\n span.attr('x', textData.x + textData.textMargin * 2)\n span.attr('fill', textData.fill)\n span.text(nText)\n\n return textElem\n}\n\nexport const drawLabel = function (elem, txtObject) {\n function genPoints (x, y, width, height, cut) {\n return x + ',' + y + ' ' +\n (x + width) + ',' + y + ' ' +\n (x + width) + ',' + (y + height - cut) + ' ' +\n (x + width - cut * 1.2) + ',' + (y + height) + ' ' +\n (x) + ',' + (y + height)\n }\n const polygon = elem.append('polygon')\n polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7))\n polygon.attr('class', 'labelBox')\n\n txtObject.y = txtObject.y + txtObject.labelMargin\n txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin\n drawText(elem, txtObject)\n}\n\nlet actorCnt = -1\n/**\n * Draws an actor in the diagram with the attaced line\n * @param center - The center of the the actor\n * @param pos The position if the actor in the liost of actors\n * @param description The text in the box\n */\nexport const drawActor = function (elem, left, verticalPos, description, conf) {\n const center = left + (conf.width / 2)\n const g = elem.append('g')\n if (verticalPos === 0) {\n actorCnt++\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', 5)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n }\n\n const rect = getNoteRect()\n rect.x = left\n rect.y = verticalPos\n rect.fill = '#eaeaea'\n rect.width = conf.width\n rect.height = conf.height\n rect.class = 'actor'\n rect.rx = 3\n rect.ry = 3\n drawRect(g, rect)\n\n _drawTextCandidateFunc(conf)(description, g,\n rect.x, rect.y, rect.width, rect.height, { 'class': 'actor' }, conf)\n}\n\nexport const anchorElement = function (elem) {\n return elem.append('g')\n}\n/**\n * Draws an actor in the diagram with the attaced line\n * @param elem - element to append activation rect\n * @param bounds - activation box bounds\n * @param verticalPos - precise y cooridnate of bottom activation box edge\n */\nexport const drawActivation = function (elem, bounds, verticalPos, conf, actorActivations) {\n const rect = getNoteRect()\n const g = bounds.anchored\n rect.x = bounds.startx\n rect.y = bounds.starty\n rect.class = 'activation' + (actorActivations % 3) // Will evaluate to 0, 1 or 2\n rect.width = bounds.stopx - bounds.startx\n rect.height = verticalPos - bounds.starty\n drawRect(g, rect)\n}\n\n/**\n * Draws an actor in the diagram with the attaced line\n * @param center - The center of the the actor\n * @param pos The position if the actor in the list of actors\n * @param description The text in the box\n */\nexport const drawLoop = function (elem, bounds, labelText, conf) {\n const g = elem.append('g')\n const drawLoopLine = function (startx, starty, stopx, stopy) {\n return g.append('line')\n .attr('x1', startx)\n .attr('y1', starty)\n .attr('x2', stopx)\n .attr('y2', stopy)\n .attr('class', 'loopLine')\n }\n drawLoopLine(bounds.startx, bounds.starty, bounds.stopx, bounds.starty)\n drawLoopLine(bounds.stopx, bounds.starty, bounds.stopx, bounds.stopy)\n drawLoopLine(bounds.startx, bounds.stopy, bounds.stopx, bounds.stopy)\n drawLoopLine(bounds.startx, bounds.starty, bounds.startx, bounds.stopy)\n if (typeof bounds.sections !== 'undefined') {\n bounds.sections.forEach(function (item) {\n drawLoopLine(bounds.startx, item, bounds.stopx, item).style('stroke-dasharray', '3, 3')\n })\n }\n\n let txt = getTextObj()\n txt.text = labelText\n txt.x = bounds.startx\n txt.y = bounds.starty\n txt.labelMargin = 1.5 * 10 // This is the small box that says \"loop\"\n txt.class = 'labelText' // Its size & position are fixed.\n\n drawLabel(g, txt)\n\n txt = getTextObj()\n txt.text = '[ ' + bounds.title + ' ]'\n txt.x = bounds.startx + (bounds.stopx - bounds.startx) / 2\n txt.y = bounds.starty + 1.5 * conf.boxMargin\n txt.anchor = 'middle'\n txt.class = 'loopText'\n\n drawText(g, txt)\n\n if (typeof bounds.sectionTitles !== 'undefined') {\n bounds.sectionTitles.forEach(function (item, idx) {\n if (item !== '') {\n txt.text = '[ ' + item + ' ]'\n txt.y = bounds.sections[idx] + 1.5 * conf.boxMargin\n drawText(g, txt)\n }\n })\n }\n}\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\nexport const insertArrowHead = function (elem) {\n elem.append('defs').append('marker')\n .attr('id', 'arrowhead')\n .attr('refX', 5)\n .attr('refY', 2)\n .attr('markerWidth', 6)\n .attr('markerHeight', 4)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0,0 V 4 L6,2 Z') // this is actual shape for arrowhead\n}\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\nexport const insertArrowCrossHead = function (elem) {\n const defs = elem.append('defs')\n const marker = defs.append('marker')\n .attr('id', 'crosshead')\n .attr('markerWidth', 15)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .attr('refX', 16)\n .attr('refY', 4)\n\n // The arrow\n marker.append('path')\n .attr('fill', 'black')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', ('0, 0'))\n .attr('stroke-width', '1px')\n .attr('d', 'M 9,2 V 6 L16,4 Z')\n\n // The cross\n marker.append('path')\n .attr('fill', 'none')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', ('0, 0'))\n .attr('stroke-width', '1px')\n .attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7')\n // this is actual shape for arrowhead\n}\n\nexport const getTextObj = function () {\n const txt = {\n x: 0,\n y: 0,\n 'fill': undefined,\n 'text-anchor': 'start',\n style: '#666',\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0\n }\n return txt\n}\n\nexport const getNoteRect = function () {\n const rect = {\n x: 0,\n y: 0,\n fill: '#EDF2AE',\n stroke: '#666',\n width: 100,\n anchor: 'start',\n height: 100,\n rx: 0,\n ry: 0\n }\n return rect\n}\n\nconst _drawTextCandidateFunc = (function () {\n function byText (content, g, x, y, width, height, textAttrs) {\n const text = g.append('text')\n .attr('x', x + width / 2).attr('y', y + height / 2 + 5)\n .style('text-anchor', 'middle')\n .text(content)\n _setTextAttrs(text, textAttrs)\n }\n\n function byTspan (content, g, x, y, width, height, textAttrs, conf) {\n const { actorFontSize, actorFontFamily } = conf\n\n const lines = content.split(/<br\\/?>/ig)\n for (let i = 0; i < lines.length; i++) {\n const dy = (i * actorFontSize) - (actorFontSize * (lines.length - 1) / 2)\n const text = g.append('text')\n .attr('x', x + width / 2).attr('y', y)\n .style('text-anchor', 'middle')\n .style('font-size', actorFontSize)\n .style('font-family', actorFontFamily)\n text.append('tspan')\n .attr('x', x + width / 2).attr('dy', dy)\n .text(lines[i])\n\n text.attr('y', y + height / 2.0)\n .attr('dominant-baseline', 'central')\n .attr('alignment-baseline', 'central')\n\n _setTextAttrs(text, textAttrs)\n }\n }\n\n function byFo (content, g, x, y, width, height, textAttrs, conf) {\n const s = g.append('switch')\n const f = s.append('foreignObject')\n .attr('x', x).attr('y', y)\n .attr('width', width).attr('height', height)\n\n const text = f.append('div').style('display', 'table')\n .style('height', '100%').style('width', '100%')\n\n text.append('div').style('display', 'table-cell')\n .style('text-align', 'center').style('vertical-align', 'middle')\n .text(content)\n\n byTspan(content, s, x, y, width, height, textAttrs, conf)\n _setTextAttrs(text, textAttrs)\n }\n\n function _setTextAttrs (toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key])\n }\n }\n }\n\n return function (conf) {\n return conf.textPlacement === 'fo' ? byFo : (\n conf.textPlacement === 'old' ? byText : byTspan)\n }\n})()\n\nexport default {\n drawRect,\n drawText,\n drawLabel,\n drawActor,\n anchorElement,\n drawActivation,\n drawLoop,\n insertArrowHead,\n insertArrowCrossHead,\n getTextObj,\n getNoteRect\n}\n","import moment from 'moment-mini'\n\nexport const LEVELS = {\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5\n}\n\nexport const logger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n fatal: () => {}\n}\n\nexport const setLogLevel = function (level) {\n logger.debug = () => {}\n logger.info = () => {}\n logger.warn = () => {}\n logger.error = () => {}\n logger.fatal = () => {}\n if (level <= LEVELS.fatal) {\n logger.fatal = console.log.bind(console, '\\x1b[35m', format('FATAL'))\n }\n if (level <= LEVELS.error) {\n logger.error = console.log.bind(console, '\\x1b[31m', format('ERROR'))\n }\n if (level <= LEVELS.warn) {\n logger.warn = console.log.bind(console, `\\x1b[33m`, format('WARN'))\n }\n if (level <= LEVELS.info) {\n logger.info = console.log.bind(console, '\\x1b[34m', format('INFO'))\n }\n if (level <= LEVELS.debug) {\n logger.debug = console.log.bind(console, '\\x1b[32m', format('DEBUG'))\n }\n}\n\nconst format = (level) => {\n const time = moment().format('HH:mm:ss.SSS')\n return `${time} : ${level} : `\n}\n","/**\n * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid functionality and to render\n * the diagrams to svg code.\n */\nimport he from 'he'\n\nimport mermaidAPI from './mermaidAPI'\nimport { logger } from './logger'\n\n/**\n * ## init\n * Function that goes through the document to find the chart definitions in there and render them.\n *\n * The function tags the processed attributes with the attribute data-processed and ignores found elements with the\n * attribute already set. This way the init function can be triggered several times.\n *\n * Optionally, `init` can accept in the second argument one of the following:\n * - a DOM Node\n * - an array of DOM nodes (as would come from a jQuery selector)\n * - a W3C selector, a la `.mermaid`\n *\n * ```mermaid\n * graph LR;\n * a(Find elements)-->b{Processed}\n * b-->|Yes|c(Leave element)\n * b-->|No |d(Transform)\n * ```\n * Renders the mermaid diagrams\n * @param nodes a css selector or an array of nodes\n */\nconst init = function () {\n const conf = mermaidAPI.getConfig()\n logger.debug('Starting rendering diagrams')\n let nodes\n if (arguments.length >= 2) {\n /*! sequence config was passed as #1 */\n if (typeof arguments[0] !== 'undefined') {\n mermaid.sequenceConfig = arguments[0]\n }\n\n nodes = arguments[1]\n } else {\n nodes = arguments[0]\n }\n\n // if last argument is a function this is the callback function\n let callback\n if (typeof arguments[arguments.length - 1] === 'function') {\n callback = arguments[arguments.length - 1]\n logger.debug('Callback function found')\n } else {\n if (typeof conf.mermaid !== 'undefined') {\n if (typeof conf.mermaid.callback === 'function') {\n callback = conf.mermaid.callback\n logger.debug('Callback function found')\n } else {\n logger.debug('No Callback function found')\n }\n }\n }\n nodes = nodes === undefined ? document.querySelectorAll('.mermaid')\n : typeof nodes === 'string' ? document.querySelectorAll(nodes)\n : nodes instanceof window.Node ? [nodes]\n : nodes // Last case - sequence config was passed pick next\n\n logger.debug('Start On Load before: ' + mermaid.startOnLoad)\n if (typeof mermaid.startOnLoad !== 'undefined') {\n logger.debug('Start On Load inner: ' + mermaid.startOnLoad)\n mermaidAPI.initialize({ startOnLoad: mermaid.startOnLoad })\n }\n\n if (typeof mermaid.ganttConfig !== 'undefined') {\n mermaidAPI.initialize({ gantt: mermaid.ganttConfig })\n }\n\n let txt\n\n for (let i = 0; i < nodes.length; i++) {\n const element = nodes[i]\n\n /*! Check if previously processed */\n if (!element.getAttribute('data-processed')) {\n element.setAttribute('data-processed', true)\n } else {\n continue\n }\n\n const id = `mermaid-${Date.now()}`\n\n // Fetch the graph definition including tags\n txt = element.innerHTML\n\n // transforms the html to pure text\n txt = he.decode(txt).trim().replace(/<br>/ig, '<br/>')\n\n mermaidAPI.render(id, txt, (svgCode, bindFunctions) => {\n element.innerHTML = svgCode\n if (typeof callback !== 'undefined') {\n callback(id)\n }\n bindFunctions(element)\n }, element)\n }\n}\n\nconst initialize = function (config) {\n logger.debug('Initializing mermaid ')\n if (typeof config.mermaid !== 'undefined') {\n if (typeof config.mermaid.startOnLoad !== 'undefined') {\n mermaid.startOnLoad = config.mermaid.startOnLoad\n }\n if (typeof config.mermaid.htmlLabels !== 'undefined') {\n mermaid.htmlLabels = config.mermaid.htmlLabels\n }\n }\n mermaidAPI.initialize(config)\n}\n\n/**\n * ##contentLoaded\n * Callback function that is called when page is loaded. This functions fetches configuration for mermaid rendering and\n * calls init for rendering the mermaid diagrams on the page.\n */\nconst contentLoaded = function () {\n let config\n\n if (mermaid.startOnLoad) {\n // No config found, do check API config\n config = mermaidAPI.getConfig()\n if (config.startOnLoad) {\n mermaid.init()\n }\n } else {\n if (typeof mermaid.startOnLoad === 'undefined') {\n logger.debug('In start, no config')\n config = mermaidAPI.getConfig()\n if (config.startOnLoad) {\n mermaid.init()\n }\n }\n }\n}\n\nif (typeof document !== 'undefined') {\n /*!\n * Wait for document loaded before starting the execution\n */\n window.addEventListener('load', function () {\n contentLoaded()\n }, false)\n}\n\nconst mermaid = {\n startOnLoad: true,\n htmlLabels: true,\n\n mermaidAPI,\n parse: mermaidAPI.parse,\n render: mermaidAPI.render,\n\n init,\n initialize,\n\n contentLoaded\n}\n\nexport default mermaid\n","/**\n * ---\n * title: mermaidAPI\n * order: 5\n * ---\n * # mermaidAPI\n * This is the api to be used when handling the integration with the web page instead of using the default integration\n * (mermaid.js).\n *\n * The core of this api is the **render** function that given a graph definitionas text renders the graph/diagram and\n * returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it\n * somewhere in the page or something completely different.\n*/\nimport * as d3 from 'd3'\nimport scope from 'scope-css'\nimport pkg from '../package.json'\n\nimport { logger, setLogLevel } from './logger'\nimport utils from './utils'\nimport flowRenderer from './diagrams/flowchart/flowRenderer'\nimport flowParser from './diagrams/flowchart/parser/flow'\nimport flowDb from './diagrams/flowchart/flowDb'\nimport sequenceRenderer from './diagrams/sequence/sequenceRenderer'\nimport sequenceParser from './diagrams/sequence/parser/sequenceDiagram'\nimport sequenceDb from './diagrams/sequence/sequenceDb'\nimport ganttRenderer from './diagrams/gantt/ganttRenderer'\nimport ganttParser from './diagrams/gantt/parser/gantt'\nimport ganttDb from './diagrams/gantt/ganttDb'\nimport classRenderer from './diagrams/class/classRenderer'\nimport classParser from './diagrams/class/parser/classDiagram'\nimport classDb from './diagrams/class/classDb'\nimport gitGraphRenderer from './diagrams/git/gitGraphRenderer'\nimport gitGraphParser from './diagrams/git/parser/gitGraph'\nimport gitGraphAst from './diagrams/git/gitGraphAst'\nimport infoRenderer from './diagrams/info/infoRenderer'\nimport infoParser from './diagrams/info/parser/info'\nimport infoDb from './diagrams/info/infoDb'\n\nconst themes = {}\nfor (const themeName of ['default', 'forest', 'dark', 'neutral']) {\n themes[themeName] = require(`./themes/${themeName}/index.scss`)\n}\n\n/**\n * ## Configuration\n * These are the default options which can be overridden with the initialization call as in the example below:\n * ```\n * mermaid.initialize({\n * flowchart:{\n * htmlLabels: false\n * }\n * });\n * ```\n */\nconst config = {\n\n /** theme , the CSS style sheet\n *\n * **theme** - Choose one of the built-in themes: default, forest, dark or neutral. To disable any pre-defined mermaid theme, use \"null\".\n * **themeCSS** - Use your own CSS. This overrides **theme**.\n *```\n * \"theme\": \"forest\",\n * \"themeCSS\": \".node rect { fill: red; }\"\n *```\n */\n\n theme: 'default',\n themeCSS: undefined,\n\n /**\n * logLevel , decides the amount of logging to be used.\n * * debug: 1\n * * info: 2\n * * warn: 3\n * * error: 4\n * * fatal: 5\n */\n logLevel: 5,\n\n /**\n * **startOnLoad** - This options controls whether or mermaid starts when the page loads\n */\n startOnLoad: true,\n\n /**\n * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or\n * an anchor, #. This matters if you are using base tag settings.\n */\n arrowMarkerAbsolute: false,\n\n /**\n * ### flowchart\n * *The object containing configurations specific for flowcharts*\n */\n flowchart: {\n /**\n * **htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels\n * on the edges\n */\n htmlLabels: true,\n\n curve: 'linear'\n },\n\n /**\n * ### sequenceDiagram\n * The object containing configurations specific for sequence diagrams\n */\n sequence: {\n\n /**\n * **diagramMarginX** - margin to the right and left of the sequence diagram\n */\n diagramMarginX: 50,\n\n /**\n * **diagramMarginY** - margin to the over and under the sequence diagram\n */\n diagramMarginY: 10,\n\n /**\n * **actorMargin** - Margin between actors\n */\n actorMargin: 50,\n\n /**\n * **width** - Width of actor boxes\n */\n width: 150,\n\n /**\n * **height** - Height of actor boxes\n */\n height: 65,\n\n /**\n * **boxMargin** - Margin around loop boxes\n */\n boxMargin: 10,\n\n /**\n * **boxTextMargin** - margin around the text in loop/alt/opt boxes\n */\n boxTextMargin: 5,\n\n /**\n * **noteMargin** - margin around notes\n */\n noteMargin: 10,\n\n /**\n * **messageMargin** - Space between messages\n */\n messageMargin: 35,\n\n /**\n * **mirrorActors** - mirror actors under diagram\n */\n mirrorActors: true,\n\n /**\n * **bottomMarginAdj** - Depending on css styling this might need adjustment.\n * Prolongs the edge of the diagram downwards\n */\n bottomMarginAdj: 1,\n\n /**\n * **useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the\n * available space if not the absolute space required is used\n */\n useMaxWidth: true,\n\n /**\n * **rightAngles** - this will display arrows that start and begin at the same node as right angles, rather than a curve\n */\n rightAngles: false\n },\n\n /** ### gantt\n * The object containing configurations specific for gantt diagrams*\n */\n gantt: {\n /**\n * **titleTopMargin** - margin top for the text over the gantt diagram\n */\n titleTopMargin: 25,\n\n /**\n * **barHeight** - the height of the bars in the graph\n */\n barHeight: 20,\n\n /**\n * **barGap** - the margin between the different activities in the gantt diagram\n */\n barGap: 4,\n\n /**\n * **topPadding** - margin between title and gantt diagram and between axis and gantt diagram.\n */\n topPadding: 50,\n\n /**\n * **leftPadding** - the space allocated for the section name to the left of the activities.\n */\n leftPadding: 75,\n\n /**\n * **gridLineStartPadding** - Vertical starting position of the grid lines\n */\n gridLineStartPadding: 35,\n\n /**\n * **fontSize** - font size ...\n */\n fontSize: 11,\n\n /**\n * **fontFamily** - font family ...\n */\n fontFamily: '\"Open-Sans\", \"sans-serif\"',\n\n /**\n * **numberSectionStyles** - the number of alternating section styles\n */\n numberSectionStyles: 4,\n\n /**\n * **axisFormat** - datetime format of the axis, this might need adjustment to match your locale and preferences\n */\n axisFormat: '%Y-%m-%d'\n },\n class: {},\n git: {}\n}\n\nsetLogLevel(config.logLevel)\n\nfunction parse (text) {\n const graphType = utils.detectType(text)\n let parser\n\n logger.debug('Type ' + graphType)\n switch (graphType) {\n case 'git':\n parser = gitGraphParser\n parser.parser.yy = gitGraphAst\n break\n case 'flowchart':\n parser = flowParser\n parser.parser.yy = flowDb\n break\n case 'sequence':\n parser = sequenceParser\n parser.parser.yy = sequenceDb\n break\n case 'gantt':\n parser = ganttParser\n parser.parser.yy = ganttDb\n break\n case 'class':\n parser = classParser\n parser.parser.yy = classDb\n break\n case 'info':\n logger.debug('info info info')\n parser = infoParser\n parser.parser.yy = infoDb\n break\n }\n\n parser.parser.yy.parseError = (str, hash) => {\n const error = { str, hash }\n throw error\n }\n\n parser.parse(text)\n}\n\nexport const encodeEntities = function (text) {\n let txt = text\n\n txt = txt.replace(/style.*:\\S*#.*;/g, function (s) {\n const innerTxt = s.substring(0, s.length - 1)\n return innerTxt\n })\n txt = txt.replace(/classDef.*:\\S*#.*;/g, function (s) {\n const innerTxt = s.substring(0, s.length - 1)\n return innerTxt\n })\n\n txt = txt.replace(/#\\w+;/g, function (s) {\n const innerTxt = s.substring(1, s.length - 1)\n\n const isInt = /^\\+?\\d+$/.test(innerTxt)\n if (isInt) {\n return 'fl°°' + innerTxt + '¶ß'\n } else {\n return 'fl°' + innerTxt + '¶ß'\n }\n })\n\n return txt\n}\n\nexport const decodeEntities = function (text) {\n let txt = text\n\n txt = txt.replace(/fl°°/g, function () {\n return '&#'\n })\n txt = txt.replace(/fl°/g, function () {\n return '&'\n })\n txt = txt.replace(/¶ß/g, function () {\n return ';'\n })\n\n return txt\n}\n/**\n * ##render\n * Function that renders an svg with a graph from a chart definition. Usage example below.\n *\n * ```\n * mermaidAPI.initialize({\n * startOnLoad:true\n * });\n * $(function(){\n * const graphDefinition = 'graph TB\\na-->b';\n * const cb = function(svgGraph){\n * console.log(svgGraph);\n * };\n * mermaidAPI.render('id1',graphDefinition,cb);\n * });\n *```\n * @param id the id of the element to be rendered\n * @param txt the graph definition\n * @param cb callback which is called after rendering is finished with the svg code as inparam.\n * @param container selector to element in which a div with the graph temporarily will be inserted. In one is\n * provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is\n * completed.\n */\nconst render = function (id, txt, cb, container) {\n if (typeof container !== 'undefined') {\n container.innerHTML = ''\n\n d3.select(container).append('div')\n .attr('id', 'd' + id)\n .append('svg')\n .attr('id', id)\n .attr('width', '100%')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .append('g')\n } else {\n const element = document.querySelector('#' + 'd' + id)\n if (element) {\n element.innerHTML = ''\n }\n\n d3.select('body').append('div')\n .attr('id', 'd' + id)\n .append('svg')\n .attr('id', id)\n .attr('width', '100%')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .append('g')\n }\n\n window.txt = txt\n txt = encodeEntities(txt)\n\n const element = d3.select('#d' + id).node()\n const graphType = utils.detectType(txt)\n\n // insert inline style into svg\n const svg = element.firstChild\n const firstChild = svg.firstChild\n\n // pre-defined theme\n let style = themes[config.theme]\n if (style === undefined) {\n style = ''\n }\n\n // user provided theme CSS\n if (config.themeCSS !== undefined) {\n style += `\\n${config.themeCSS}`\n }\n\n // classDef\n if (graphType === 'flowchart') {\n const classes = flowRenderer.getClasses(txt)\n for (const className in classes) {\n style += `\\n.${className} > * { ${classes[className].styles.join(' !important; ')} !important; }`\n }\n }\n\n const style1 = document.createElement('style')\n style1.innerHTML = scope(style, `#${id}`)\n svg.insertBefore(style1, firstChild)\n\n const style2 = document.createElement('style')\n const cs = window.getComputedStyle(svg)\n style2.innerHTML = `#${id} {\n color: ${cs.color};\n font: ${cs.font};\n }`\n svg.insertBefore(style2, firstChild)\n\n switch (graphType) {\n case 'git':\n config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n gitGraphRenderer.setConf(config.git)\n gitGraphRenderer.draw(txt, id, false)\n break\n case 'flowchart':\n config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n flowRenderer.setConf(config.flowchart)\n flowRenderer.draw(txt, id, false)\n break\n case 'sequence':\n config.sequence.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n if (config.sequenceDiagram) { // backwards compatibility\n sequenceRenderer.setConf(Object.assign(config.sequence, config.sequenceDiagram))\n console.error('`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.')\n } else {\n sequenceRenderer.setConf(config.sequence)\n }\n sequenceRenderer.draw(txt, id)\n break\n case 'gantt':\n config.gantt.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n ganttRenderer.setConf(config.gantt)\n ganttRenderer.draw(txt, id)\n break\n case 'class':\n config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n classRenderer.setConf(config.class)\n classRenderer.draw(txt, id)\n break\n case 'info':\n config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n infoRenderer.setConf(config.class)\n infoRenderer.draw(txt, id, pkg.version)\n break\n }\n\n d3.select(`[id=\"${id}\"]`).selectAll('foreignobject > *').attr('xmlns', 'http://www.w3.org/1999/xhtml')\n\n let url = ''\n if (config.arrowMarkerAbsolute) {\n url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search\n url = url.replace(/\\(/g, '\\\\(')\n url = url.replace(/\\)/g, '\\\\)')\n }\n\n // Fix for when the base tag is used\n let svgCode = d3.select('#d' + id).node().innerHTML.replace(/url\\(#arrowhead/g, 'url(' + url + '#arrowhead', 'g')\n\n svgCode = decodeEntities(svgCode)\n\n if (typeof cb !== 'undefined') {\n cb(svgCode, flowDb.bindFunctions)\n cb(svgCode, ganttDb.bindFunctions)\n } else {\n logger.warn('CB = undefined!')\n }\n\n const node = d3.select('#d' + id).node()\n if (node !== null && typeof node.remove === 'function') {\n d3.select('#d' + id).node().remove()\n }\n\n return svgCode\n}\n\nconst setConf = function (cnf) {\n // Top level initially mermaid, gflow, sequenceDiagram and gantt\n const lvl1Keys = Object.keys(cnf)\n for (let i = 0; i < lvl1Keys.length; i++) {\n if (typeof cnf[lvl1Keys[i]] === 'object' && cnf[lvl1Keys[i]] != null) {\n const lvl2Keys = Object.keys(cnf[lvl1Keys[i]])\n\n for (let j = 0; j < lvl2Keys.length; j++) {\n logger.debug('Setting conf ', lvl1Keys[i], '-', lvl2Keys[j])\n if (typeof config[lvl1Keys[i]] === 'undefined') {\n config[lvl1Keys[i]] = {}\n }\n logger.debug('Setting config: ' + lvl1Keys[i] + ' ' + lvl2Keys[j] + ' to ' + cnf[lvl1Keys[i]][lvl2Keys[j]])\n config[lvl1Keys[i]][lvl2Keys[j]] = cnf[lvl1Keys[i]][lvl2Keys[j]]\n }\n } else {\n config[lvl1Keys[i]] = cnf[lvl1Keys[i]]\n }\n }\n}\n\nfunction initialize (options) {\n logger.debug('Initializing mermaidAPI ', pkg.version)\n // Update default config with options supplied at initialization\n if (typeof options === 'object') {\n setConf(options)\n }\n setLogLevel(config.logLevel)\n}\n\nfunction getConfig () {\n return config\n}\n\nconst mermaidAPI = {\n render,\n parse,\n initialize,\n getConfig\n}\n\nexport default mermaidAPI\n","var map = {\n\t\"./dark/index.scss\": \"./src/themes/dark/index.scss\",\n\t\"./default/index.scss\": \"./src/themes/default/index.scss\",\n\t\"./forest/index.scss\": \"./src/themes/forest/index.scss\",\n\t\"./neutral/index.scss\": \"./src/themes/neutral/index.scss\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/themes sync recursive ^\\\\.\\\\/.*\\\\/index\\\\.scss$\";","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","import * as d3 from 'd3'\nimport { logger } from './logger'\n\n/**\n * @function detectType\n * Detects the type of the graph text.\n * ```mermaid\n * graph LR\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * @param {string} text The text defining the graph\n * @returns {string} A graph definition key\n */\nexport const detectType = function (text) {\n text = text.replace(/^\\s*%%.*\\n/g, '\\n')\n logger.debug('Detecting diagram type based on the text ' + text)\n if (text.match(/^\\s*sequenceDiagram/)) {\n return 'sequence'\n }\n\n if (text.match(/^\\s*gantt/)) {\n return 'gantt'\n }\n\n if (text.match(/^\\s*classDiagram/)) {\n return 'class'\n }\n\n if (text.match(/^\\s*gitGraph/)) {\n return 'git'\n }\n\n if (text.match(/^\\s*info/)) {\n return 'info'\n }\n\n return 'flowchart'\n}\n\n/**\n * @function isSubstringInArray\n * Detects whether a substring in present in a given array\n * @param {string} str The substring to detect\n * @param {array} arr The array to search\n * @returns {number} the array index containing the substring or -1 if not present\n **/\nexport const isSubstringInArray = function (str, arr) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i].match(str)) return i\n }\n return -1\n}\n\nexport const interpolateToCurve = (interpolate, defaultCurve) => {\n if (!interpolate) {\n return defaultCurve\n }\n const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`\n return d3[curveName] || defaultCurve\n}\n\nexport default {\n detectType,\n isSubstringInArray,\n interpolateToCurve\n}\n"],"sourceRoot":""}
\No newline at end of file

Build: a7ebffa

© 2023 UNPKG

\ No newline at end of file diff --git a/static/mermaid.min.js b/static/mermaid.min.js new file mode 100644 index 0000000..4e973e5 --- /dev/null +++ b/static/mermaid.min.js @@ -0,0 +1,25 @@ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.mermaid=t()}}(function(){var define,module,exports;return function t(e,n,r){function i(u,o){if(!n[u]){if(!e[u]){var s="function"==typeof require&&require;if(!o&&s)return s(u,!0);if(a)return a(u,!0);var c=new Error("Cannot find module '"+u+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[u]={exports:{}};e[u][0].call(l.exports,function(t){var n=e[u][1][t];return i(n?n:t)},l,l.exports,t,e,n,r)}return n[u].exports}for(var a="function"==typeof require&&require,u=0;u=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!i;a--){var u=a>=0?arguments[a]:t.cwd();if("string"!=typeof u)throw new TypeError("Arguments to path.resolve must be strings");u&&(n=u+"/"+n,i="/"===u.charAt(0))}return n=e(r(n.split("/"),function(t){return!!t}),!i).join("/"),(i?"/":"")+n||"."},n.normalize=function(t){var i=n.isAbsolute(t),a="/"===u(t,-1);return t=e(r(t.split("/"),function(t){return!!t}),!i).join("/"),t||i||(t="."),t&&a&&(t+="/"),(i?"/":"")+t},n.isAbsolute=function(t){return"/"===t.charAt(0)},n.join=function(){var t=Array.prototype.slice.call(arguments,0);return n.normalize(r(t,function(t){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},n.relative=function(t,e){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=n.resolve(t).substr(1),e=n.resolve(e).substr(1);for(var i=r(t.split("/")),a=r(e.split("/")),u=Math.min(i.length,a.length),o=u,s=0;u>s;s++)if(i[s]!==a[s]){o=s;break}for(var c=[],s=o;se&&(e=t.length+e),t.substr(e,n)}}).call(this,t("_process"))},{_process:3}],3:[function(t,e){function n(){}var r=e.exports={};r.nextTick=function(){var t="undefined"!=typeof window&&window.setImmediate,e="undefined"!=typeof window&&window.MutationObserver,n="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(t)return function(t){return window.setImmediate(t)};var r=[];if(e){var i=document.createElement("div"),a=new MutationObserver(function(){var t=r.slice();r.length=0,t.forEach(function(t){t()})});return a.observe(i,{attributes:!0}),function(t){r.length||i.setAttribute("yes","no"),r.push(t)}}return n?(window.addEventListener("message",function(t){var e=t.source;if((e===window||null===e)&&"process-tick"===t.data&&(t.stopPropagation(),r.length>0)){var n=r.shift();n()}},!0),function(t){r.push(t),window.postMessage("process-tick","*")}):function(t){setTimeout(t,0)}}(),r.title="browser",r.browser=!0,r.env={},r.argv=[],r.on=n,r.addListener=n,r.once=n,r.off=n,r.removeListener=n,r.removeAllListeners=n,r.emit=n,r.binding=function(){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(){throw new Error("process.chdir is not supported")}},{}],4:[function(t,e){!function(){function t(t){return t&&(t.ownerDocument||t.document||t).documentElement}function n(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}function r(t,e){return e>t?-1:t>e?1:t>=e?0:0/0}function i(t){return null===t?0/0:+t}function a(t){return!isNaN(t)}function u(t){return{left:function(e,n,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=e.length);i>r;){var a=r+i>>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=e.length);i>r;){var a=r+i>>>1;t(e[a],n)>0?i=a:r=a+1}return r}}}function o(t){return t.length}function s(t){for(var e=1;t*e%1;)e*=10;return e}function c(t,e){for(var n in e)Object.defineProperty(t.prototype,n,{value:e[n],enumerable:!1})}function l(){this._=Object.create(null)}function h(t){return(t+="")===gu||t[0]===mu?mu+t:t}function f(t){return(t+="")[0]===mu?t.slice(1):t}function d(t){return h(t)in this._}function p(t){return(t=h(t))in this._&&delete this._[t]}function g(){var t=[];for(var e in this._)t.push(f(e));return t}function m(){var t=0;for(var e in this._)++t;return t}function y(){for(var t in this._)return!1;return!0}function v(){this._=Object.create(null)}function b(t){return t}function _(t,e,n){return function(){var r=n.apply(e,arguments);return r===e?t:r}}function x(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var n=0,r=yu.length;r>n;++n){var i=yu[n]+e;if(i in t)return i}}function w(){}function A(){}function k(t){function e(){for(var e,r=n,i=-1,a=r.length;++in;n++)for(var i,a=t[n],u=0,o=a.length;o>u;u++)(i=a[u])&&e(i,u,n);return t}function G(t){return bu(t,Eu),t}function z(t){var e,n;return function(r,i,a){var u,o=t[a].update,s=o.length;for(a!=n&&(n=a,e=0),i>=e&&(e=i+1);!(u=o[e])&&++e0&&(t=t.slice(0,o));var c=Du.get(t);return c&&(t=c,s=Z),o?e?i:r:e?w:a}function W(t,e){return function(n){var r=nu.event;nu.event=n,e[0]=this.__data__;try{t.apply(this,e)}finally{nu.event=r}}}function Z(t,e){var n=W(t,e);return function(t){var e=this,r=t.relatedTarget;r&&(r===e||8&r.compareDocumentPosition(e))||n.call(e,t)}}function X(e){var r=".dragsuppress-"+ ++Su,i="click"+r,a=nu.select(n(e)).on("touchmove"+r,E).on("dragstart"+r,E).on("selectstart"+r,E);if(null==Cu&&(Cu="onselectstart"in e?!1:x(e.style,"userSelect")),Cu){var u=t(e).style,o=u[Cu];u[Cu]="none"}return function(t){if(a.on(r,null),Cu&&(u[Cu]=o),t){var e=function(){a.on(i,null)};a.on(i,function(){E(),e()},!0),setTimeout(e,0)}}}function J(t,e){e.changedTouches&&(e=e.changedTouches[0]);var r=t.ownerSVGElement||t;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Mu){var a=n(t);if(a.scrollX||a.scrollY){r=nu.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=r[0][0].getScreenCTM();Mu=!(u.f||u.e),r.remove()}}return Mu?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(t.getScreenCTM().inverse()),[i.x,i.y]}var o=t.getBoundingClientRect();return[e.clientX-o.left-t.clientLeft,e.clientY-o.top-t.clientTop]}function K(){return nu.event.changedTouches[0].identifier}function Q(t){return t>0?1:0>t?-1:0}function tt(t,e,n){return(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0])}function et(t){return t>1?0:-1>t?Bu:Math.acos(t)}function nt(t){return t>1?Ou:-1>t?-Ou:Math.asin(t)}function rt(t){return((t=Math.exp(t))-1/t)/2}function it(t){return((t=Math.exp(t))+1/t)/2}function at(t){return((t=Math.exp(2*t))-1)/(t+1)}function ut(t){return(t=Math.sin(t/2))*t}function ot(){}function st(t,e,n){return this instanceof st?(this.h=+t,this.s=+e,void(this.l=+n)):arguments.length<2?t instanceof st?new st(t.h,t.s,t.l):wt(""+t,At,st):new st(t,e,n)}function ct(t,e,n){function r(t){return t>360?t-=360:0>t&&(t+=360),60>t?a+(u-a)*t/60:180>t?u:240>t?a+(u-a)*(240-t)/60:a}function i(t){return Math.round(255*r(t))}var a,u;return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:0>e?0:e>1?1:e,n=0>n?0:n>1?1:n,u=.5>=n?n*(1+e):n+e-n*e,a=2*n-u,new vt(i(t+120),i(t),i(t-120))}function lt(t,e,n){return this instanceof lt?(this.h=+t,this.c=+e,void(this.l=+n)):arguments.length<2?t instanceof lt?new lt(t.h,t.c,t.l):t instanceof ft?pt(t.l,t.a,t.b):pt((t=kt((t=nu.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new lt(t,e,n)}function ht(t,e,n){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new ft(n,Math.cos(t*=Iu)*e,Math.sin(t)*e)}function ft(t,e,n){return this instanceof ft?(this.l=+t,this.a=+e,void(this.b=+n)):arguments.length<2?t instanceof ft?new ft(t.l,t.a,t.b):t instanceof lt?ht(t.h,t.c,t.l):kt((t=vt(t)).r,t.g,t.b):new ft(t,e,n)}function dt(t,e,n){var r=(t+16)/116,i=r+e/500,a=r-n/200;return i=gt(i)*$u,r=gt(r)*Wu,a=gt(a)*Zu,new vt(yt(3.2404542*i-1.5371385*r-.4985314*a),yt(-.969266*i+1.8760108*r+.041556*a),yt(.0556434*i-.2040259*r+1.0572252*a))}function pt(t,e,n){return t>0?new lt(Math.atan2(n,e)*Ru,Math.sqrt(e*e+n*n),t):new lt(0/0,0/0,t)}function gt(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function mt(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function yt(t){return Math.round(255*(.00304>=t?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function vt(t,e,n){return this instanceof vt?(this.r=~~t,this.g=~~e,void(this.b=~~n)):arguments.length<2?t instanceof vt?new vt(t.r,t.g,t.b):wt(""+t,vt,ct):new vt(t,e,n)}function bt(t){return new vt(t>>16,t>>8&255,255&t)}function _t(t){return bt(t)+""}function xt(t){return 16>t?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function wt(t,e,n){t=t.toLowerCase();var r,i,a,u=0,o=0,s=0;if(r=/([a-z]+)\((.*)\)/.exec(t))switch(i=r[2].split(","),r[1]){case"hsl":return n(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return e(Dt(i[0]),Dt(i[1]),Dt(i[2]))}return(a=Ku.get(t))?e(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(u=(3840&a)>>4,u=u>>4|u,o=240&a,o=o>>4|o,s=15&a,s=s<<4|s):7===t.length&&(u=(16711680&a)>>16,o=(65280&a)>>8,s=255&a)),e(u,o,s))}function At(t,e,n){var r,i,a=Math.min(t/=255,e/=255,n/=255),u=Math.max(t,e,n),o=u-a,s=(u+a)/2;return o?(i=.5>s?o/(u+a):o/(2-u-a),r=t==u?(e-n)/o+(n>e?6:0):e==u?(n-t)/o+2:(t-e)/o+4,r*=60):(r=0/0,i=s>0&&1>s?0:r),new st(r,i,s)}function kt(t,e,n){t=Et(t),e=Et(e),n=Et(n);var r=mt((.4124564*t+.3575761*e+.1804375*n)/$u),i=mt((.2126729*t+.7151522*e+.072175*n)/Wu),a=mt((.0193339*t+.119192*e+.9503041*n)/Zu);return ft(116*i-16,500*(r-i),200*(i-a))}function Et(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Dt(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}function Ct(t){return"function"==typeof t?t:function(){return t}}function St(t){return function(e,n,r){return 2===arguments.length&&"function"==typeof n&&(r=n,n=null),Mt(e,n,t,r)}}function Mt(t,e,n,r){function i(){var t,e=s.status;if(!e&&Ft(s)||e>=200&&300>e||304===e){try{t=n.call(a,s)}catch(r){return void u.error.call(a,r)}u.load.call(a,t)}else u.error.call(a,s)}var a={},u=nu.dispatch("beforesend","progress","load","error"),o={},s=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in s||!/^(http(s)?:)?\/\//.test(t)||(s=new XDomainRequest),"onload"in s?s.onload=s.onerror=i:s.onreadystatechange=function(){s.readyState>3&&i()},s.onprogress=function(t){var e=nu.event;nu.event=t;try{u.progress.call(a,s)}finally{nu.event=e}},a.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?o[t]:(null==e?delete o[t]:o[t]=e+"",a)},a.mimeType=function(t){return arguments.length?(e=null==t?null:t+"",a):e},a.responseType=function(t){return arguments.length?(c=t,a):c},a.response=function(t){return n=t,a},["get","post"].forEach(function(t){a[t]=function(){return a.send.apply(a,[t].concat(iu(arguments)))}}),a.send=function(n,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),s.open(n,t,!0),null==e||"accept"in o||(o.accept=e+",*/*"),s.setRequestHeader)for(var l in o)s.setRequestHeader(l,o[l]);return null!=e&&s.overrideMimeType&&s.overrideMimeType(e),null!=c&&(s.responseType=c),null!=i&&a.on("error",i).on("load",function(t){i(null,t)}),u.beforesend.call(a,s),s.send(null==r?null:r),a},a.abort=function(){return s.abort(),a},nu.rebind(a,u,"on"),null==r?a:a.get(Tt(r))}function Tt(t){return 1===t.length?function(e,n){t(null==e?n:null)}:t}function Ft(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}function Bt(){var t=Lt(),e=Nt()-t;e>24?(isFinite(e)&&(clearTimeout(no),no=setTimeout(Bt,e)),eo=0):(eo=1,io(Bt))}function Lt(){var t=Date.now();for(ro=Qu;ro;)t>=ro.t&&(ro.f=ro.c(t-ro.t)),ro=ro.n;return t}function Nt(){for(var t,e=Qu,n=1/0;e;)e.f?e=t?t.n=e.n:Qu=e.n:(e.t8?function(t){return t/n}:function(t){return t*n},symbol:t}}function Rt(t){var e=t.decimal,n=t.thousands,r=t.grouping,i=t.currency,a=r&&n?function(t,e){for(var i=t.length,a=[],u=0,o=r[0],s=0;i>0&&o>0&&(s+o+1>e&&(o=Math.max(1,e-s)),a.push(t.substring(i-=o,i+o)),!((s+=o+1)>e));)o=r[u=(u+1)%r.length];return a.reverse().join(n)}:b;return function(t){var n=uo.exec(t),r=n[1]||" ",u=n[2]||">",o=n[3]||"-",s=n[4]||"",c=n[5],l=+n[6],h=n[7],f=n[8],d=n[9],p=1,g="",m="",y=!1,v=!0;switch(f&&(f=+f.substring(1)),(c||"0"===r&&"="===u)&&(c=r="0",u="="),d){case"n":h=!0,d="g";break;case"%":p=100,m="%",d="f";break;case"p":p=100,m="%",d="r";break;case"b":case"o":case"x":case"X":"#"===s&&(g="0"+d.toLowerCase());case"c":v=!1;case"d":y=!0,f=0;break;case"s":p=-1,d="r"}"$"===s&&(g=i[0],m=i[1]),"r"!=d||f||(d="g"),null!=f&&("g"==d?f=Math.max(1,Math.min(21,f)):("e"==d||"f"==d)&&(f=Math.max(0,Math.min(20,f)))),d=oo.get(d)||Pt;var b=c&&h;return function(t){var n=m;if(y&&t%1)return"";var i=0>t||0===t&&0>1/t?(t=-t,"-"):"-"===o?"":o;if(0>p){var s=nu.formatPrefix(t,f);t=s.scale(t),n=s.symbol+m}else t*=p;t=d(t,f);var _,x,w=t.lastIndexOf(".");if(0>w){var A=v?t.lastIndexOf("e"):-1;0>A?(_=t,x=""):(_=t.substring(0,A),x=t.substring(A))}else _=t.substring(0,w),x=e+t.substring(w+1);!c&&h&&(_=a(_,1/0));var k=g.length+_.length+x.length+(b?0:i.length),E=l>k?new Array(k=l-k+1).join(r):"";return b&&(_=a(E+_,E.length?l-x.length:1/0)),i+=g,t=_+x,("<"===u?i+t+E:">"===u?E+i+t:"^"===u?E.substring(0,k>>=1)+i+t+E.substring(k):i+(b?t:E+t))+n}}}function Pt(t){return t+""}function qt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function jt(t,e,n){function r(e){var n=t(e),r=a(n,1);return r-e>e-n?n:r}function i(n){return e(n=t(new co(n-1)),1),n}function a(t,n){return e(t=new co(+t),n),t}function u(t,r,a){var u=i(t),o=[];if(a>1)for(;r>u;)n(u)%a||o.push(new Date(+u)),e(u,1);else for(;r>u;)o.push(new Date(+u)),e(u,1);return o}function o(t,e,n){try{co=qt;var r=new qt;return r._=t,u(r,e,n)}finally{co=Date}}t.floor=t,t.round=r,t.ceil=i,t.offset=a,t.range=u;var s=t.utc=Ut(t);return s.floor=s,s.round=Ut(r),s.ceil=Ut(i),s.offset=Ut(a),s.range=o,t}function Ut(t){return function(e,n){try{co=qt;var r=new qt;return r._=e,t(r,n)._}finally{co=Date}}}function Yt(t){function e(t){function e(e){for(var n,i,a,u=[],o=-1,s=0;++oo;){if(r>=c)return-1;if(i=e.charCodeAt(o++),37===i){if(u=e.charAt(o++),a=M[u in ho?e.charAt(o++):u],!a||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}function r(t,e,n){w.lastIndex=0;var r=w.exec(e.slice(n));return r?(t.w=A.get(r[0].toLowerCase()),n+r[0].length):-1}function i(t,e,n){_.lastIndex=0;var r=_.exec(e.slice(n));return r?(t.w=x.get(r[0].toLowerCase()),n+r[0].length):-1}function a(t,e,n){D.lastIndex=0;var r=D.exec(e.slice(n));return r?(t.m=C.get(r[0].toLowerCase()),n+r[0].length):-1}function u(t,e,n){k.lastIndex=0;var r=k.exec(e.slice(n));return r?(t.m=E.get(r[0].toLowerCase()),n+r[0].length):-1}function o(t,e,r){return n(t,S.c.toString(),e,r)}function s(t,e,r){return n(t,S.x.toString(),e,r)}function c(t,e,r){return n(t,S.X.toString(),e,r)}function l(t,e,n){var r=b.get(e.slice(n,n+=2).toLowerCase());return null==r?-1:(t.p=r,n)}var h=t.dateTime,f=t.date,d=t.time,p=t.periods,g=t.days,m=t.shortDays,y=t.months,v=t.shortMonths;e.utc=function(t){function n(t){try{co=qt;var e=new co;return e._=t,r(e)}finally{co=Date}}var r=e(t);return n.parse=function(t){try{co=qt;var e=r.parse(t);return e&&e._}finally{co=Date}},n.toString=r.toString,n},e.multi=e.utc.multi=se;var b=nu.map(),_=Ht(g),x=Gt(g),w=Ht(m),A=Gt(m),k=Ht(y),E=Gt(y),D=Ht(v),C=Gt(v);p.forEach(function(t,e){b.set(t.toLowerCase(),e)});var S={a:function(t){return m[t.getDay()]},A:function(t){return g[t.getDay()]},b:function(t){return v[t.getMonth()]},B:function(t){return y[t.getMonth()]},c:e(h),d:function(t,e){return Vt(t.getDate(),e,2)},e:function(t,e){return Vt(t.getDate(),e,2)},H:function(t,e){return Vt(t.getHours(),e,2)},I:function(t,e){return Vt(t.getHours()%12||12,e,2)},j:function(t,e){return Vt(1+so.dayOfYear(t),e,3)},L:function(t,e){return Vt(t.getMilliseconds(),e,3)},m:function(t,e){return Vt(t.getMonth()+1,e,2)},M:function(t,e){return Vt(t.getMinutes(),e,2)},p:function(t){return p[+(t.getHours()>=12)]},S:function(t,e){return Vt(t.getSeconds(),e,2)},U:function(t,e){return Vt(so.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return Vt(so.mondayOfYear(t),e,2)},x:e(f),X:e(d),y:function(t,e){return Vt(t.getFullYear()%100,e,2)},Y:function(t,e){return Vt(t.getFullYear()%1e4,e,4)},Z:ue,"%":function(){return"%"}},M={a:r,A:i,b:a,B:u,c:o,d:te,e:te,H:ne,I:ne,j:ee,L:ae,m:Qt,M:re,p:l,S:ie,U:$t,w:zt,W:Wt,x:s,X:c,y:Xt,Y:Zt,Z:Jt,"%":oe};return e}function Vt(t,e,n){var r=0>t?"-":"",i=(r?-t:t)+"",a=i.length;return r+(n>a?new Array(n-a+1).join(e)+i:i)}function Ht(t){return new RegExp("^(?:"+t.map(nu.requote).join("|")+")","i")}function Gt(t){for(var e=new l,n=-1,r=t.length;++n68?1900:2e3)}function Qt(t,e,n){fo.lastIndex=0;var r=fo.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function te(t,e,n){fo.lastIndex=0;var r=fo.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function ee(t,e,n){fo.lastIndex=0;var r=fo.exec(e.slice(n,n+3));return r?(t.j=+r[0],n+r[0].length):-1}function ne(t,e,n){fo.lastIndex=0;var r=fo.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function re(t,e,n){fo.lastIndex=0;var r=fo.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function ie(t,e,n){fo.lastIndex=0;var r=fo.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function ae(t,e,n){fo.lastIndex=0;var r=fo.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function ue(t){var e=t.getTimezoneOffset(),n=e>0?"-":"+",r=pu(e)/60|0,i=pu(e)%60;return n+Vt(r,"0",2)+Vt(i,"0",2)}function oe(t,e,n){po.lastIndex=0;var r=po.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function se(t){for(var e=t.length,n=-1;++n=0?1:-1,o=u*n,s=Math.cos(e),c=Math.sin(e),l=a*c,h=i*s+l*Math.cos(o),f=l*u*Math.sin(o);_o.add(Math.atan2(f,h)),r=t,i=s,a=c}var e,n,r,i,a;xo.point=function(u,o){xo.point=t,r=(e=u)*Iu,i=Math.cos(o=(n=o)*Iu/2+Bu/4),a=Math.sin(o)},xo.lineEnd=function(){t(e,n)}}function ge(t){var e=t[0],n=t[1],r=Math.cos(n);return[r*Math.cos(e),r*Math.sin(e),Math.sin(n)]}function me(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ye(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function ve(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function be(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function _e(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function xe(t){return[Math.atan2(t[1],t[0]),nt(t[2])]}function we(t,e){return pu(t[0]-e[0])o;++o)i.point((n=t[o])[0],n[1]);return void i.lineEnd()}var s=new Be(n,t,null,!0),c=new Be(n,null,s,!1);s.o=c,a.push(s),u.push(c),s=new Be(r,t,null,!1),c=new Be(r,null,s,!0),s.o=c,a.push(s),u.push(c)}}),u.sort(e),Fe(a),Fe(u),a.length){for(var o=0,s=n,c=u.length;c>o;++o)u[o].e=s=!s;for(var l,h,f=a[0];;){for(var d=f,p=!0;d.v;)if((d=d.n)===f)return;l=d.z,i.lineStart();do{if(d.v=d.o.v=!0,d.e){if(p)for(var o=0,c=l.length;c>o;++o)i.point((h=l[o])[0],h[1]);else r(d.x,d.n.x,1,i);d=d.n}else{if(p){l=d.p.z;for(var o=l.length-1;o>=0;--o)i.point((h=l[o])[0],h[1])}else r(d.x,d.p.x,-1,i);d=d.p}d=d.o,l=d.z,p=!p}while(!d.v);i.lineEnd()}}}function Fe(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r0){for(x||(a.polygonStart(),x=!0),a.lineStart();++u1&&2&e&&n.push(n.pop().concat(n.shift())),d.push(n.filter(Ne))}var d,p,g,m=e(a),y=i.invert(r[0],r[1]),v={point:u,lineStart:s,lineEnd:c,polygonStart:function(){v.point=l,v.lineStart=h,v.lineEnd=f,d=[],p=[]},polygonEnd:function(){v.point=u,v.lineStart=s,v.lineEnd=c,d=nu.merge(d);var t=je(y,p);d.length?(x||(a.polygonStart(),x=!0),Te(d,Ie,t,n,a)):t&&(x||(a.polygonStart(),x=!0),a.lineStart(),n(null,null,1,a),a.lineEnd()),x&&(a.polygonEnd(),x=!1),d=p=null},sphere:function(){a.polygonStart(),a.lineStart(),n(null,null,1,a),a.lineEnd(),a.polygonEnd()}},b=Oe(),_=e(b),x=!1;return v}}function Ne(t){return t.length>1}function Oe(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,n){t.push([e,n])},lineEnd:w,buffer:function(){var n=e;return e=[],t=null,n},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function Ie(t,e){return((t=t.x)[0]<0?t[1]-Ou-Tu:Ou-t[1])-((e=e.x)[0]<0?e[1]-Ou-Tu:Ou-e[1])}function Re(t){var e,n=0/0,r=0/0,i=0/0;return{lineStart:function(){t.lineStart(),e=1},point:function(a,u){var o=a>0?Bu:-Bu,s=pu(a-n);pu(s-Bu)0?Ou:-Ou),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(o,r),t.point(a,r),e=0):i!==o&&s>=Bu&&(pu(n-i)Tu?Math.atan((Math.sin(e)*(a=Math.cos(r))*Math.sin(n)-Math.sin(r)*(i=Math.cos(e))*Math.sin(t))/(i*a*u)):(e+r)/2}function qe(t,e,n,r){var i;if(null==t)i=n*Ou,r.point(-Bu,i),r.point(0,i),r.point(Bu,i),r.point(Bu,0),r.point(Bu,-i),r.point(0,-i),r.point(-Bu,-i),r.point(-Bu,0),r.point(-Bu,i);else if(pu(t[0]-e[0])>Tu){var a=t[0]o;++o){var c=e[o],l=c.length;if(l)for(var h=c[0],f=h[0],d=h[1]/2+Bu/4,p=Math.sin(d),g=Math.cos(d),m=1;;){m===l&&(m=0),t=c[m];var y=t[0],v=t[1]/2+Bu/4,b=Math.sin(v),_=Math.cos(v),x=y-f,w=x>=0?1:-1,A=w*x,k=A>Bu,E=p*b;if(_o.add(Math.atan2(E*w*Math.sin(A),g*_+E*Math.cos(A))),a+=k?x+w*Lu:x,k^f>=n^y>=n){var D=ye(ge(h),ge(t));_e(D);var C=ye(i,D);_e(C);var S=(k^x>=0?-1:1)*nt(C[2]);(r>S||r===S&&(D[0]||D[1]))&&(u+=k^x>=0?1:-1)}if(!m++)break;f=y,p=b,g=_,h=t}}return(-Tu>a||Tu>a&&0>_o)^1&u}function Ue(t){function e(t,e){return Math.cos(t)*Math.cos(e)>a}function n(t){var n,a,s,c,l;return{lineStart:function(){c=s=!1,l=1},point:function(h,f){var d,p=[h,f],g=e(h,f),m=u?g?0:i(h,f):g?i(h+(0>h?Bu:-Bu),f):0;if(!n&&(c=s=g)&&t.lineStart(),g!==s&&(d=r(n,p),(we(n,d)||we(p,d))&&(p[0]+=Tu,p[1]+=Tu,g=e(p[0],p[1]))),g!==s)l=0,g?(t.lineStart(),d=r(p,n),t.point(d[0],d[1])):(d=r(n,p),t.point(d[0],d[1]),t.lineEnd()),n=d;else if(o&&n&&u^g){var y;m&a||!(y=r(p,n,!0))||(l=0,u?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!g||n&&we(n,p)||t.point(p[0],p[1]),n=p,s=g,a=m},lineEnd:function(){s&&t.lineEnd(),n=null},clean:function(){return l|(c&&s)<<1}}}function r(t,e,n){var r=ge(t),i=ge(e),u=[1,0,0],o=ye(r,i),s=me(o,o),c=o[0],l=s-c*c;if(!l)return!n&&t;var h=a*s/l,f=-a*c/l,d=ye(u,o),p=be(u,h),g=be(o,f);ve(p,g);var m=d,y=me(p,m),v=me(m,m),b=y*y-v*(me(p,p)-1);if(!(0>b)){var _=Math.sqrt(b),x=be(m,(-y-_)/v);if(ve(x,p),x=xe(x),!n)return x;var w,A=t[0],k=e[0],E=t[1],D=e[1];A>k&&(w=A,A=k,k=w);var C=k-A,S=pu(C-Bu)C;if(!S&&E>D&&(w=E,E=D,D=w),M?S?E+D>0^x[1]<(pu(x[0]-A)Bu^(A<=x[0]&&x[0]<=k)){var T=be(m,(-y+_)/v);return ve(T,p),[x,xe(T)]}}}function i(e,n){var r=u?t:Bu-t,i=0;return-r>e?i|=1:e>r&&(i|=2),-r>n?i|=4:n>r&&(i|=8),i}var a=Math.cos(t),u=a>0,o=pu(a)>Tu,s=gn(t,6*Iu);return Le(e,n,s,u?[0,-t]:[-Bu,t-Bu])}function Ye(t,e,n,r){return function(i){var a,u=i.a,o=i.b,s=u.x,c=u.y,l=o.x,h=o.y,f=0,d=1,p=l-s,g=h-c;if(a=t-s,p||!(a>0)){if(a/=p,0>p){if(f>a)return;d>a&&(d=a)}else if(p>0){if(a>d)return;a>f&&(f=a)}if(a=n-s,p||!(0>a)){if(a/=p,0>p){if(a>d)return;a>f&&(f=a)}else if(p>0){if(f>a)return;d>a&&(d=a)}if(a=e-c,g||!(a>0)){if(a/=g,0>g){if(f>a)return;d>a&&(d=a)}else if(g>0){if(a>d)return;a>f&&(f=a)}if(a=r-c,g||!(0>a)){if(a/=g,0>g){if(a>d)return;a>f&&(f=a)}else if(g>0){if(f>a)return;d>a&&(d=a)}return f>0&&(i.a={x:s+f*p,y:c+f*g}),1>d&&(i.b={x:s+d*p,y:c+d*g}),i}}}}}}function Ve(t,e,n,r){function i(r,i){return pu(r[0]-t)0?0:3:pu(r[0]-n)0?2:1:pu(r[1]-e)0?1:0:i>0?3:2}function a(t,e){return u(t.x,e.x)}function u(t,e){var n=i(t,1),r=i(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]; + +}return function(o){function s(t){for(var e=0,n=m.length,r=t[1],i=0;n>i;++i)for(var a,u=1,o=m[i],s=o.length,c=o[0];s>u;++u)a=o[u],c[1]<=r?a[1]>r&&tt(c,a,t)>0&&++e:a[1]<=r&&tt(c,a,t)<0&&--e,c=a;return 0!==e}function c(a,o,s,c){var l=0,h=0;if(null==a||(l=i(a,s))!==(h=i(o,s))||u(a,o)<0^s>0){do c.point(0===l||3===l?t:n,l>1?r:e);while((l=(l+s+4)%4)!==h)}else c.point(o[0],o[1])}function l(i,a){return i>=t&&n>=i&&a>=e&&r>=a}function h(t,e){l(t,e)&&o.point(t,e)}function f(){M.point=p,m&&m.push(y=[]),k=!0,A=!1,x=w=0/0}function d(){g&&(p(v,b),_&&A&&C.rejoin(),g.push(C.buffer())),M.point=h,A&&o.lineEnd()}function p(t,e){t=Math.max(-Oo,Math.min(Oo,t)),e=Math.max(-Oo,Math.min(Oo,e));var n=l(t,e);if(m&&y.push([t,e]),k)v=t,b=e,_=n,k=!1,n&&(o.lineStart(),o.point(t,e));else if(n&&A)o.point(t,e);else{var r={a:{x:x,y:w},b:{x:t,y:e}};S(r)?(A||(o.lineStart(),o.point(r.a.x,r.a.y)),o.point(r.b.x,r.b.y),n||o.lineEnd(),E=!1):n&&(o.lineStart(),o.point(t,e),E=!1)}x=t,w=e,A=n}var g,m,y,v,b,_,x,w,A,k,E,D=o,C=Oe(),S=Ye(t,e,n,r),M={point:h,lineStart:f,lineEnd:d,polygonStart:function(){o=C,g=[],m=[],E=!0},polygonEnd:function(){o=D,g=nu.merge(g);var e=s([t,r]),n=E&&e,i=g.length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),c(null,null,1,o),o.lineEnd()),i&&Te(g,a,e,c,o),o.polygonEnd()),g=m=y=null}};return M}}function He(t){var e=0,n=Bu/3,r=on(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*Bu/180,n=t[1]*Bu/180):[e/Bu*180,n/Bu*180]},i}function Ge(t,e){function n(t,e){var n=Math.sqrt(a-2*i*Math.sin(e))/i;return[n*Math.sin(t*=i),u-n*Math.cos(t)]}var r=Math.sin(t),i=(r+Math.sin(e))/2,a=1+r*(2*i-r),u=Math.sqrt(a)/i;return n.invert=function(t,e){var n=u-e;return[Math.atan2(t,n)/i,nt((a-(t*t+n*n)*i*i)/(2*i))]},n}function ze(){function t(t,e){Ro+=i*t-r*e,r=t,i=e}var e,n,r,i;Yo.point=function(a,u){Yo.point=t,e=r=a,n=i=u},Yo.lineEnd=function(){t(e,n)}}function $e(t,e){Po>t&&(Po=t),t>jo&&(jo=t),qo>e&&(qo=e),e>Uo&&(Uo=e)}function We(){function t(t,e){u.push("M",t,",",e,a)}function e(t,e){u.push("M",t,",",e),o.point=n}function n(t,e){u.push("L",t,",",e)}function r(){o.point=t}function i(){u.push("Z")}var a=Ze(4.5),u=[],o={point:t,lineStart:function(){o.point=e},lineEnd:r,polygonStart:function(){o.lineEnd=i},polygonEnd:function(){o.lineEnd=r,o.point=t},pointRadius:function(t){return a=Ze(t),o},result:function(){if(u.length){var t=u.join("");return u=[],t}}};return o}function Ze(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Xe(t,e){ko+=t,Eo+=e,++Do}function Je(){function t(t,r){var i=t-e,a=r-n,u=Math.sqrt(i*i+a*a);Co+=u*(e+t)/2,So+=u*(n+r)/2,Mo+=u,Xe(e=t,n=r)}var e,n;Ho.point=function(r,i){Ho.point=t,Xe(e=r,n=i)}}function Ke(){Ho.point=Xe}function Qe(){function t(t,e){var n=t-r,a=e-i,u=Math.sqrt(n*n+a*a);Co+=u*(r+t)/2,So+=u*(i+e)/2,Mo+=u,u=i*t-r*e,To+=u*(r+t),Fo+=u*(i+e),Bo+=3*u,Xe(r=t,i=e)}var e,n,r,i;Ho.point=function(a,u){Ho.point=t,Xe(e=r=a,n=i=u)},Ho.lineEnd=function(){t(e,n)}}function tn(t){function e(e,n){t.moveTo(e+u,n),t.arc(e,n,u,0,Lu)}function n(e,n){t.moveTo(e,n),o.point=r}function r(e,n){t.lineTo(e,n)}function i(){o.point=e}function a(){t.closePath()}var u=4.5,o={point:e,lineStart:function(){o.point=n},lineEnd:i,polygonStart:function(){o.lineEnd=a},polygonEnd:function(){o.lineEnd=i,o.point=e},pointRadius:function(t){return u=t,o},result:w};return o}function en(t){function e(t){return(o?r:n)(t)}function n(e){return an(e,function(n,r){n=t(n,r),e.point(n[0],n[1])})}function r(e){function n(n,r){n=t(n,r),e.point(n[0],n[1])}function r(){b=0/0,k.point=a,e.lineStart()}function a(n,r){var a=ge([n,r]),u=t(n,r);i(b,_,v,x,w,A,b=u[0],_=u[1],v=n,x=a[0],w=a[1],A=a[2],o,e),e.point(b,_)}function u(){k.point=n,e.lineEnd()}function s(){r(),k.point=c,k.lineEnd=l}function c(t,e){a(h=t,f=e),d=b,p=_,g=x,m=w,y=A,k.point=a}function l(){i(b,_,v,x,w,A,d,p,h,g,m,y,o,e),k.lineEnd=u,u()}var h,f,d,p,g,m,y,v,b,_,x,w,A,k={point:n,lineStart:r,lineEnd:u,polygonStart:function(){e.polygonStart(),k.lineStart=s},polygonEnd:function(){e.polygonEnd(),k.lineStart=r}};return k}function i(e,n,r,o,s,c,l,h,f,d,p,g,m,y){var v=l-e,b=h-n,_=v*v+b*b;if(_>4*a&&m--){var x=o+d,w=s+p,A=c+g,k=Math.sqrt(x*x+w*w+A*A),E=Math.asin(A/=k),D=pu(pu(A)-1)a||pu((v*T+b*F)/_-.5)>.3||u>o*d+s*p+c*g)&&(i(e,n,r,o,s,c,S,M,D,x/=k,w/=k,A,m,y),y.point(S,M),i(S,M,D,x,w,A,l,h,f,d,p,g,m,y))}}var a=.5,u=Math.cos(30*Iu),o=16;return e.precision=function(t){return arguments.length?(o=(a=t*t)>0&&16,e):Math.sqrt(a)},e}function nn(t){var e=en(function(e,n){return t([e*Ru,n*Ru])});return function(t){return sn(e(t))}}function rn(t){this.stream=t}function an(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function un(t){return on(function(){return t})()}function on(t){function e(t){return t=o(t[0]*Iu,t[1]*Iu),[t[0]*f+s,c-t[1]*f]}function n(t){return t=o.invert((t[0]-s)/f,(c-t[1])/f),t&&[t[0]*Ru,t[1]*Ru]}function r(){o=Se(u=hn(y,v,_),a);var t=a(g,m);return s=d-t[0]*f,c=p+t[1]*f,i()}function i(){return l&&(l.valid=!1,l=null),e}var a,u,o,s,c,l,h=en(function(t,e){return t=a(t,e),[t[0]*f+s,c-t[1]*f]}),f=150,d=480,p=250,g=0,m=0,y=0,v=0,_=0,x=No,w=b,A=null,k=null;return e.stream=function(t){return l&&(l.valid=!1),l=sn(x(u,h(w(t)))),l.valid=!0,l},e.clipAngle=function(t){return arguments.length?(x=null==t?(A=t,No):Ue((A=+t)*Iu),i()):A},e.clipExtent=function(t){return arguments.length?(k=t,w=t?Ve(t[0][0],t[0][1],t[1][0],t[1][1]):b,i()):k},e.scale=function(t){return arguments.length?(f=+t,r()):f},e.translate=function(t){return arguments.length?(d=+t[0],p=+t[1],r()):[d,p]},e.center=function(t){return arguments.length?(g=t[0]%360*Iu,m=t[1]%360*Iu,r()):[g*Ru,m*Ru]},e.rotate=function(t){return arguments.length?(y=t[0]%360*Iu,v=t[1]%360*Iu,_=t.length>2?t[2]%360*Iu:0,r()):[y*Ru,v*Ru,_*Ru]},nu.rebind(e,h,"precision"),function(){return a=t.apply(this,arguments),e.invert=a.invert&&n,r()}}function sn(t){return an(t,function(e,n){t.point(e*Iu,n*Iu)})}function cn(t,e){return[t,e]}function ln(t,e){return[t>Bu?t-Lu:-Bu>t?t+Lu:t,e]}function hn(t,e,n){return t?e||n?Se(dn(t),pn(e,n)):dn(t):e||n?pn(e,n):ln}function fn(t){return function(e,n){return e+=t,[e>Bu?e-Lu:-Bu>e?e+Lu:e,n]}}function dn(t){var e=fn(t);return e.invert=fn(-t),e}function pn(t,e){function n(t,e){var n=Math.cos(e),o=Math.cos(t)*n,s=Math.sin(t)*n,c=Math.sin(e),l=c*r+o*i;return[Math.atan2(s*a-l*u,o*r-c*i),nt(l*a+s*u)]}var r=Math.cos(t),i=Math.sin(t),a=Math.cos(e),u=Math.sin(e);return n.invert=function(t,e){var n=Math.cos(e),o=Math.cos(t)*n,s=Math.sin(t)*n,c=Math.sin(e),l=c*a-s*u;return[Math.atan2(s*a+c*u,o*r+l*i),nt(l*r-o*i)]},n}function gn(t,e){var n=Math.cos(t),r=Math.sin(t);return function(i,a,u,o){var s=u*e;null!=i?(i=mn(n,i),a=mn(n,a),(u>0?a>i:i>a)&&(i+=u*Lu)):(i=t+u*Lu,a=t-.5*s);for(var c,l=i;u>0?l>a:a>l;l-=s)o.point((c=xe([n,-r*Math.cos(l),-r*Math.sin(l)]))[0],c[1])}}function mn(t,e){var n=ge(e);n[0]-=t,_e(n);var r=et(-n[1]);return((-n[2]<0?-r:r)+2*Math.PI-Tu)%(2*Math.PI)}function yn(t,e,n){var r=nu.range(t,e-Tu,n).concat(e);return function(t){return r.map(function(e){return[t,e]})}}function vn(t,e,n){var r=nu.range(t,e-Tu,n).concat(e);return function(t){return r.map(function(e){return[e,t]})}}function bn(t){return t.source}function _n(t){return t.target}function xn(t,e,n,r){var i=Math.cos(e),a=Math.sin(e),u=Math.cos(r),o=Math.sin(r),s=i*Math.cos(t),c=i*Math.sin(t),l=u*Math.cos(n),h=u*Math.sin(n),f=2*Math.asin(Math.sqrt(ut(r-e)+i*u*ut(n-t))),d=1/Math.sin(f),p=f?function(t){var e=Math.sin(t*=f)*d,n=Math.sin(f-t)*d,r=n*s+e*l,i=n*c+e*h,u=n*a+e*o;return[Math.atan2(i,r)*Ru,Math.atan2(u,Math.sqrt(r*r+i*i))*Ru]}:function(){return[t*Ru,e*Ru]};return p.distance=f,p}function wn(){function t(t,i){var a=Math.sin(i*=Iu),u=Math.cos(i),o=pu((t*=Iu)-e),s=Math.cos(o);Go+=Math.atan2(Math.sqrt((o=u*Math.sin(o))*o+(o=r*a-n*u*s)*o),n*a+r*u*s),e=t,n=a,r=u}var e,n,r;zo.point=function(i,a){e=i*Iu,n=Math.sin(a*=Iu),r=Math.cos(a),zo.point=t},zo.lineEnd=function(){zo.point=zo.lineEnd=w}}function An(t,e){function n(e,n){var r=Math.cos(e),i=Math.cos(n),a=t(r*i);return[a*i*Math.sin(e),a*Math.sin(n)]}return n.invert=function(t,n){var r=Math.sqrt(t*t+n*n),i=e(r),a=Math.sin(i),u=Math.cos(i);return[Math.atan2(t*a,r*u),Math.asin(r&&n*a/r)]},n}function kn(t,e){function n(t,e){u>0?-Ou+Tu>e&&(e=-Ou+Tu):e>Ou-Tu&&(e=Ou-Tu);var n=u/Math.pow(i(e),a);return[n*Math.sin(a*t),u-n*Math.cos(a*t)]}var r=Math.cos(t),i=function(t){return Math.tan(Bu/4+t/2)},a=t===e?Math.sin(t):Math.log(r/Math.cos(e))/Math.log(i(e)/i(t)),u=r*Math.pow(i(t),a)/a;return a?(n.invert=function(t,e){var n=u-e,r=Q(a)*Math.sqrt(t*t+n*n);return[Math.atan2(t,n)/a,2*Math.atan(Math.pow(u/r,1/a))-Ou]},n):Dn}function En(t,e){function n(t,e){var n=a-e;return[n*Math.sin(i*t),a-n*Math.cos(i*t)]}var r=Math.cos(t),i=t===e?Math.sin(t):(r-Math.cos(e))/(e-t),a=r/i+t;return pu(i)i;i++){for(;r>1&&tt(t[n[r-2]],t[n[r-1]],t[i])<=0;)--r;n[r++]=i}return n.slice(0,r)}function Bn(t,e){return t[0]-e[0]||t[1]-e[1]}function Ln(t,e,n){return(n[0]-e[0])*(t[1]-e[1])<(n[1]-e[1])*(t[0]-e[0])}function Nn(t,e,n,r){var i=t[0],a=n[0],u=e[0]-i,o=r[0]-a,s=t[1],c=n[1],l=e[1]-s,h=r[1]-c,f=(o*(s-c)-h*(i-a))/(h*u-o*l);return[i+f*u,s+f*l]}function On(t){var e=t[0],n=t[t.length-1];return!(e[0]-n[0]||e[1]-n[1])}function In(){rr(this),this.edge=this.site=this.circle=null}function Rn(t){var e=is.pop()||new In;return e.site=t,e}function Pn(t){Wn(t),es.remove(t),is.push(t),rr(t)}function qn(t){var e=t.circle,n=e.x,r=e.cy,i={x:n,y:r},a=t.P,u=t.N,o=[t];Pn(t);for(var s=a;s.circle&&pu(n-s.circle.x)l;++l)c=o[l],s=o[l-1],tr(c.edge,s.site,c.site,i);s=o[0],c=o[h-1],c.edge=Kn(s.site,c.site,null,i),$n(s),$n(c)}function jn(t){for(var e,n,r,i,a=t.x,u=t.y,o=es._;o;)if(r=Un(o,u)-a,r>Tu)o=o.L;else{if(i=a-Yn(o,u),!(i>Tu)){r>-Tu?(e=o.P,n=o):i>-Tu?(e=o,n=o.N):e=n=o;break}if(!o.R){e=o;break}o=o.R}var s=Rn(t);if(es.insert(e,s),e||n){if(e===n)return Wn(e),n=Rn(e.site),es.insert(s,n),s.edge=n.edge=Kn(e.site,s.site),$n(e),void $n(n);if(!n)return void(s.edge=Kn(e.site,s.site));Wn(e),Wn(n);var c=e.site,l=c.x,h=c.y,f=t.x-l,d=t.y-h,p=n.site,g=p.x-l,m=p.y-h,y=2*(f*m-d*g),v=f*f+d*d,b=g*g+m*m,_={x:(m*v-d*b)/y+l,y:(f*b-g*v)/y+h};tr(n.edge,c,p,_),s.edge=Kn(c,t,null,_),n.edge=Kn(t,p,null,_),$n(e),$n(n)}}function Un(t,e){var n=t.site,r=n.x,i=n.y,a=i-e;if(!a)return r;var u=t.P;if(!u)return-(1/0);n=u.site;var o=n.x,s=n.y,c=s-e;if(!c)return o;var l=o-r,h=1/a-1/c,f=l/c;return h?(-f+Math.sqrt(f*f-2*h*(l*l/(-2*c)-s+c/2+i-a/2)))/h+r:(r+o)/2}function Yn(t,e){var n=t.N;if(n)return Un(n,e);var r=t.site;return r.y===e?r.x:1/0}function Vn(t){this.site=t,this.edges=[]}function Hn(t){for(var e,n,r,i,a,u,o,s,c,l,h=t[0][0],f=t[1][0],d=t[0][1],p=t[1][1],g=ts,m=g.length;m--;)if(a=g[m],a&&a.prepare())for(o=a.edges,s=o.length,u=0;s>u;)l=o[u].end(),r=l.x,i=l.y,c=o[++u%s].start(),e=c.x,n=c.y,(pu(r-e)>Tu||pu(i-n)>Tu)&&(o.splice(u,0,new er(Qn(a.site,l,pu(r-h)Tu?{x:h,y:pu(e-h)Tu?{x:pu(n-p)Tu?{x:f,y:pu(e-f)Tu?{x:pu(n-d)=-Fu)){var d=s*s+c*c,p=l*l+h*h,g=(h*d-c*p)/f,m=(s*p-l*d)/f,h=m+o,y=as.pop()||new zn;y.arc=t,y.site=i,y.x=g+u,y.y=h+Math.sqrt(g*g+m*m),y.cy=h,t.circle=y;for(var v=null,b=rs._;b;)if(y.ym||m>=o)return;if(f>p){if(a){if(a.y>=c)return}else a={x:m,y:s};n={x:m,y:c}}else{if(a){if(a.yr||r>1)if(f>p){if(a){if(a.y>=c)return}else a={x:(s-i)/r,y:s};n={x:(c-i)/r,y:c}}else{if(a){if(a.yd){if(a){if(a.x>=o)return}else a={x:u,y:r*u+i};n={x:o,y:r*o+i}}else{if(a){if(a.xa||h>u||r>f||i>d)){if(p=t.point){var p,g=e-t.x,m=n-t.y,y=g*g+m*m;if(s>y){var v=Math.sqrt(s=y);r=e-v,i=n-v,a=e+v,u=n+v,o=p}}for(var b=t.nodes,_=.5*(l+f),x=.5*(h+d),w=e>=_,A=n>=x,k=A<<1|w,E=k+4;E>k;++k)if(t=b[3&k])switch(3&k){case 0:c(t,l,h,_,x);break;case 1:c(t,_,h,f,x);break;case 2:c(t,l,x,_,d);break;case 3:c(t,_,x,f,d)}}}(t,r,i,a,u),o}function gr(t,e){t=nu.rgb(t),e=nu.rgb(e);var n=t.r,r=t.g,i=t.b,a=e.r-n,u=e.g-r,o=e.b-i;return function(t){return"#"+xt(Math.round(n+a*t))+xt(Math.round(r+u*t))+xt(Math.round(i+o*t))}}function mr(t,e){var n,r={},i={};for(n in t)n in e?r[n]=br(t[n],e[n]):i[n]=t[n];for(n in e)n in t||(i[n]=e[n]);return function(t){for(n in r)i[n]=r[n](t);return i}}function yr(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function vr(t,e){var n,r,i,a=os.lastIndex=ss.lastIndex=0,u=-1,o=[],s=[];for(t+="",e+="";(n=os.exec(t))&&(r=ss.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),o[u]?o[u]+=i:o[++u]=i),(n=n[0])===(r=r[0])?o[u]?o[u]+=r:o[++u]=r:(o[++u]=null,s.push({i:u,x:yr(n,r)})),a=ss.lastIndex;return ar;++r)o[(n=s[r]).i]=n.x(t);return o.join("")})}function br(t,e){for(var n,r=nu.interpolators.length;--r>=0&&!(n=nu.interpolators[r](t,e)););return n}function _r(t,e){var n,r=[],i=[],a=t.length,u=e.length,o=Math.min(t.length,e.length);for(n=0;o>n;++n)r.push(br(t[n],e[n]));for(;a>n;++n)i[n]=t[n];for(;u>n;++n)i[n]=e[n];return function(t){for(n=0;o>n;++n)i[n]=r[n](t);return i}}function xr(t){return function(e){return 0>=e?0:e>=1?1:t(e)}}function wr(t){return function(e){return 1-t(1-e)}}function Ar(t){return function(e){return.5*(.5>e?t(2*e):2-t(2-2*e))}}function kr(t){return t*t}function Er(t){return t*t*t}function Dr(t){if(0>=t)return 0;if(t>=1)return 1;var e=t*t,n=e*t;return 4*(.5>t?n:3*(t-e)+n-.75)}function Cr(t){return function(e){return Math.pow(e,t)}}function Sr(t){return 1-Math.cos(t*Ou)}function Mr(t){return Math.pow(2,10*(t-1))}function Tr(t){return 1-Math.sqrt(1-t*t)}function Fr(t,e){var n;return arguments.length<2&&(e=.45),arguments.length?n=e/Lu*Math.asin(1/t):(t=1,n=e/4),function(r){return 1+t*Math.pow(2,-10*r)*Math.sin((r-n)*Lu/e)}}function Br(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}}function Lr(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function Nr(t,e){t=nu.hcl(t),e=nu.hcl(e);var n=t.h,r=t.c,i=t.l,a=e.h-n,u=e.c-r,o=e.l-i;return isNaN(u)&&(u=0,r=isNaN(r)?e.c:r),isNaN(a)?(a=0,n=isNaN(n)?e.h:n):a>180?a-=360:-180>a&&(a+=360),function(t){return ht(n+a*t,r+u*t,i+o*t)+""}}function Or(t,e){t=nu.hsl(t),e=nu.hsl(e);var n=t.h,r=t.s,i=t.l,a=e.h-n,u=e.s-r,o=e.l-i;return isNaN(u)&&(u=0,r=isNaN(r)?e.s:r),isNaN(a)?(a=0,n=isNaN(n)?e.h:n):a>180?a-=360:-180>a&&(a+=360),function(t){return ct(n+a*t,r+u*t,i+o*t)+""}}function Ir(t,e){t=nu.lab(t),e=nu.lab(e);var n=t.l,r=t.a,i=t.b,a=e.l-n,u=e.a-r,o=e.b-i;return function(t){return dt(n+a*t,r+u*t,i+o*t)+""}}function Rr(t,e){return e-=t,function(n){return Math.round(t+e*n)}}function Pr(t){var e=[t.a,t.b],n=[t.c,t.d],r=jr(e),i=qr(e,n),a=jr(Ur(n,e,-i))||0;e[0]*n[1]180?l+=360:l-c>180&&(c+=360),i.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:yr(c,l)})):l&&r.push(r.pop()+"rotate("+l+")"),h!=f?i.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:yr(h,f)}):f&&r.push(r.pop()+"skewX("+f+")"),d[0]!=p[0]||d[1]!=p[1]?(n=r.push(r.pop()+"scale(",null,",",null,")"),i.push({i:n-4,x:yr(d[0],p[0])},{i:n-2,x:yr(d[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),n=i.length,function(t){for(var e,a=-1;++a=0;)n.push(i[r])}function ei(t,e){for(var n=[t],r=[];null!=(t=n.pop());)if(r.push(t),(a=t.children)&&(i=a.length))for(var i,a,u=-1;++un;++n)(e=t[n][1])>i&&(r=n,i=e);return r}function fi(t){return t.reduce(di,0)}function di(t,e){return t+e[1]}function pi(t,e){return gi(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function gi(t,e){for(var n=-1,r=+t[0],i=(t[1]-r)/e,a=[];++n<=e;)a[n]=i*n+r;return a}function mi(t){return[nu.min(t),nu.max(t)]}function yi(t,e){return t.value-e.value}function vi(t,e){var n=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=n,n._pack_prev=e}function bi(t,e){t._pack_next=e,e._pack_prev=t}function _i(t,e){var n=e.x-t.x,r=e.y-t.y,i=t.r+e.r;return.999*i*i>n*n+r*r}function xi(t){function e(t){l=Math.min(t.x-t.r,l),h=Math.max(t.x+t.r,h),f=Math.min(t.y-t.r,f),d=Math.max(t.y+t.r,d)}if((n=t.children)&&(c=n.length)){var n,r,i,a,u,o,s,c,l=1/0,h=-(1/0),f=1/0,d=-(1/0);if(n.forEach(wi),r=n[0],r.x=-r.r,r.y=0,e(r),c>1&&(i=n[1],i.x=i.r,i.y=0,e(i),c>2))for(a=n[2],Ei(r,i,a),e(a),vi(r,a),r._pack_prev=a,vi(a,i),i=r._pack_next,u=3;c>u;u++){Ei(r,i,a=n[u]);var p=0,g=1,m=1;for(o=i._pack_next;o!==i;o=o._pack_next,g++)if(_i(o,a)){p=1;break}if(1==p)for(s=r._pack_prev;s!==o._pack_prev&&!_i(s,a);s=s._pack_prev,m++);p?(m>g||g==m&&i.ru;u++)a=n[u],a.x-=y,a.y-=v,b=Math.max(b,a.r+Math.sqrt(a.x*a.x+a.y*a.y));t.r=b,n.forEach(Ai)}}function wi(t){t._pack_next=t._pack_prev=t}function Ai(t){delete t._pack_next,delete t._pack_prev}function ki(t,e,n,r){var i=t.children;if(t.x=e+=r*t.x,t.y=n+=r*t.y,t.r*=r,i)for(var a=-1,u=i.length;++a=0;)e=i[a],e.z+=n,e.m+=n,n+=e.s+(r+=e.c)}function Fi(t,e,n){return t.a.parent===e.parent?t.a:n}function Bi(t){return 1+nu.max(t,function(t){return t.y})}function Li(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}function Ni(t){var e=t.children;return e&&e.length?Ni(e[0]):t}function Oi(t){var e,n=t.children;return n&&(e=n.length)?Oi(n[e-1]):t}function Ii(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function Ri(t,e){var n=t.x+e[3],r=t.y+e[0],i=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return 0>i&&(n+=i/2,i=0),0>a&&(r+=a/2,a=0),{x:n,y:r,dx:i,dy:a}}function Pi(t){var e=t[0],n=t[t.length-1];return n>e?[e,n]:[n,e]}function qi(t){return t.rangeExtent?t.rangeExtent():Pi(t.range())}function ji(t,e,n,r){var i=n(t[0],t[1]),a=r(e[0],e[1]);return function(t){return a(i(t))}}function Ui(t,e){var n,r=0,i=t.length-1,a=t[r],u=t[i];return a>u&&(n=r,r=i,i=n,n=a,a=u,u=n),t[r]=e.floor(a),t[i]=e.ceil(u),t}function Yi(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:bs}function Vi(t,e,n,r){var i=[],a=[],u=0,o=Math.min(t.length,e.length)-1;for(t[o]2?Vi:ji,s=r?Hr:Vr;return u=i(t,e,s,n),o=i(e,t,s,br),a}function a(t){return u(t)}var u,o;return a.invert=function(t){return o(t)},a.domain=function(e){return arguments.length?(t=e.map(Number),i()):t},a.range=function(t){return arguments.length?(e=t,i()):e},a.rangeRound=function(t){return a.range(t).interpolate(Rr)},a.clamp=function(t){return arguments.length?(r=t,i()):r},a.interpolate=function(t){return arguments.length?(n=t,i()):n},a.ticks=function(e){return Wi(t,e)},a.tickFormat=function(e,n){return Zi(t,e,n)},a.nice=function(e){return zi(t,e),i()},a.copy=function(){return Hi(t,e,n,r)},i()}function Gi(t,e){return nu.rebind(t,e,"range","rangeRound","interpolate","clamp")}function zi(t,e){return Ui(t,Yi($i(t,e)[2]))}function $i(t,e){null==e&&(e=10);var n=Pi(t),r=n[1]-n[0],i=Math.pow(10,Math.floor(Math.log(r/e)/Math.LN10)),a=e/r*i;return.15>=a?i*=10:.35>=a?i*=5:.75>=a&&(i*=2),n[0]=Math.ceil(n[0]/i)*i,n[1]=Math.floor(n[1]/i)*i+.5*i,n[2]=i,n}function Wi(t,e){return nu.range.apply(nu,$i(t,e))}function Zi(t,e,n){var r=$i(t,e);if(n){var i=uo.exec(n);if(i.shift(),"s"===i[8]){var a=nu.formatPrefix(Math.max(pu(r[0]),pu(r[1])));return i[7]||(i[7]="."+Xi(a.scale(r[2]))),i[8]="f",n=nu.format(i.join("")),function(t){return n(a.scale(t))+a.symbol}}i[7]||(i[7]="."+Ji(i[8],r)),n=i.join("")}else n=",."+Xi(r[2])+"f";return nu.format(n)}function Xi(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}function Ji(t,e){var n=Xi(e[2]);return t in _s?Math.abs(n-Xi(Math.max(pu(e[0]),pu(e[1]))))+ +("e"!==t):n-2*("%"===t)}function Ki(t,e,n,r){function i(t){return(n?Math.log(0>t?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function a(t){return n?Math.pow(e,t):-Math.pow(e,-t)}function u(e){return t(i(e))}return u.invert=function(e){return a(t.invert(e))},u.domain=function(e){return arguments.length?(n=e[0]>=0,t.domain((r=e.map(Number)).map(i)),u):r},u.base=function(n){return arguments.length?(e=+n,t.domain(r.map(i)),u):e},u.nice=function(){var e=Ui(r.map(i),n?Math:ws);return t.domain(e),r=e.map(a),u},u.ticks=function(){var t=Pi(r),u=[],o=t[0],s=t[1],c=Math.floor(i(o)),l=Math.ceil(i(s)),h=e%1?2:e;if(isFinite(l-c)){if(n){for(;l>c;c++)for(var f=1;h>f;f++)u.push(a(c)*f);u.push(a(c))}else for(u.push(a(c));c++0;f--)u.push(a(c)*f);for(c=0;u[c]s;l--);u=u.slice(c,l)}return u},u.tickFormat=function(t,e){if(!arguments.length)return xs;arguments.length<2?e=xs:"function"!=typeof e&&(e=nu.format(e));var r,o=Math.max(.1,t/u.ticks().length),s=n?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(t){return t/a(s(i(t)+r))<=o?e(t):""}},u.copy=function(){return Ki(t.copy(),e,n,r)},Gi(u,t)}function Qi(t,e,n){function r(e){return t(i(e))}var i=ta(e),a=ta(1/e);return r.invert=function(e){return a(t.invert(e))},r.domain=function(e){return arguments.length?(t.domain((n=e.map(Number)).map(i)),r):n},r.ticks=function(t){return Wi(n,t)},r.tickFormat=function(t,e){return Zi(n,t,e)},r.nice=function(t){return r.domain(zi(n,t))},r.exponent=function(u){return arguments.length?(i=ta(e=u),a=ta(1/e),t.domain(n.map(i)),r):e},r.copy=function(){return Qi(t.copy(),e,n)},Gi(r,t)}function ta(t){return function(e){return 0>e?-Math.pow(-e,t):Math.pow(e,t)}}function ea(t,e){function n(n){return a[((i.get(n)||("range"===e.t?i.set(n,t.push(n)):0/0))-1)%a.length]}function r(e,n){return nu.range(t.length).map(function(t){return e+n*t})}var i,a,u;return n.domain=function(r){if(!arguments.length)return t;t=[],i=new l;for(var a,u=-1,o=r.length;++un?[0/0,0/0]:[n>0?o[n-1]:t[0],ne?0/0:e/a+t,[e,e+1/a]},r.copy=function(){return ra(t,e,n)},i()}function ia(t,e){function n(n){return n>=n?e[nu.bisect(t,n)]:void 0}return n.domain=function(e){return arguments.length?(t=e,n):t},n.range=function(t){return arguments.length?(e=t,n):e},n.invertExtent=function(n){return n=e.indexOf(n),[t[n-1],t[n]]},n.copy=function(){return ia(t,e)},n}function aa(t){function e(t){return+t}return e.invert=e,e.domain=e.range=function(n){return arguments.length?(t=n.map(e),e):t},e.ticks=function(e){return Wi(t,e)},e.tickFormat=function(e,n){return Zi(t,e,n)},e.copy=function(){return aa(t)},e}function ua(){return 0}function oa(t){return t.innerRadius}function sa(t){return t.outerRadius}function ca(t){return t.startAngle}function la(t){return t.endAngle}function ha(t){return t&&t.padAngle}function fa(t,e,n,r){return(t-n)*e-(e-r)*t>0?0:1}function da(t,e,n,r,i){var a=t[0]-e[0],u=t[1]-e[1],o=(i?r:-r)/Math.sqrt(a*a+u*u),s=o*u,c=-o*a,l=t[0]+s,h=t[1]+c,f=e[0]+s,d=e[1]+c,p=(l+f)/2,g=(h+d)/2,m=f-l,y=d-h,v=m*m+y*y,b=n-r,_=l*d-f*h,x=(0>y?-1:1)*Math.sqrt(b*b*v-_*_),w=(_*y-m*x)/v,A=(-_*m-y*x)/v,k=(_*y+m*x)/v,E=(-_*m+y*x)/v,D=w-p,C=A-g,S=k-p,M=E-g;return D*D+C*C>S*S+M*M&&(w=k,A=E),[[w-s,A-c],[w*n/b,A*n/b]]}function pa(t){function e(e){function u(){c.push("M",a(t(l),o))}for(var s,c=[],l=[],h=-1,f=e.length,d=Ct(n),p=Ct(r);++h1&&i.push("H",r[0]),i.join("")}function va(t){for(var e=0,n=t.length,r=t[0],i=[r[0],",",r[1]];++e1){o=e[1],a=t[s],s++,r+="C"+(i[0]+u[0])+","+(i[1]+u[1])+","+(a[0]-o[0])+","+(a[1]-o[1])+","+a[0]+","+a[1];for(var c=2;c9&&(i=3*e/Math.sqrt(i),u[o]=i*n,u[o+1]=i*r));for(o=-1;++o<=s;)i=(t[Math.min(s,o+1)][0]-t[Math.max(0,o-1)][0])/(6*(1+u[o]*u[o])),a.push([i||0,u[o]*i||0]);return a}function Na(t){return t.length<3?ga(t):t[0]+Aa(t,La(t))}function Oa(t){for(var e,n,r,i=-1,a=t.length;++ir)return l();var i=a[a.active];i&&(--a.count,delete a[a.active],i.event&&i.event.interrupt.call(t,t.__data__,i.index)),a.active=r,u.event&&u.event.start.call(t,t.__data__,e),u.tween.forEach(function(n,r){(r=r.call(t,t.__data__,e))&&g.push(r)}),f=u.ease,h=u.duration,nu.timer(function(){return p.c=c(n||1)?Me:c,1},0,o)}function c(n){if(a.active!==r)return 1;for(var i=n/h,o=f(i),s=g.length;s>0;)g[--s].call(t,o);return i>=1?(u.event&&u.event.end.call(t,t.__data__,e),l()):void 0}function l(){return--a.count?delete a[r]:delete t[n],1}var h,f,d=u.delay,p=ro,g=[];return p.t=d+o,i>=d?s(i-d):void(p.c=s)},0,o)}}function Za(t,e,n){t.attr("transform",function(t){var r=e(t);return"translate("+(isFinite(r)?r:n(t))+",0)"})}function Xa(t,e,n){t.attr("transform",function(t){var r=e(t);return"translate(0,"+(isFinite(r)?r:n(t))+")"})}function Ja(t){return t.toISOString()}function Ka(t,e,n){function r(e){return t(e)}function i(t,n){var r=t[1]-t[0],i=r/n,a=nu.bisect($s,i);return a==$s.length?[e.year,$i(t.map(function(t){return t/31536e6}),n)[2]]:a?e[i/$s[a-1]<$s[a]/i?a-1:a]:[Xs,$i(t,n)[2]]}return r.invert=function(e){return Qa(t.invert(e))},r.domain=function(e){return arguments.length?(t.domain(e),r):t.domain().map(Qa)},r.nice=function(t,e){function n(n){return!isNaN(n)&&!t.range(n,Qa(+n+1),e).length}var a=r.domain(),u=Pi(a),o=null==t?i(u,10):"number"==typeof t&&i(u,t);return o&&(t=o[0],e=o[1]),r.domain(Ui(a,e>1?{floor:function(e){for(;n(e=t.floor(e));)e=Qa(e-1);return e},ceil:function(e){for(;n(e=t.ceil(e));)e=Qa(+e+1);return e}}:t))},r.ticks=function(t,e){var n=Pi(r.domain()),a=null==t?i(n,10):"number"==typeof t?i(n,t):!t.range&&[{range:t},e];return a&&(t=a[0],e=a[1]),t.range(n[0],Qa(+n[1]+1),1>e?1:e)},r.tickFormat=function(){return n},r.copy=function(){return Ka(t.copy(),e,n)},Gi(r,t)}function Qa(t){return new Date(t)}function tu(t){return JSON.parse(t.responseText)}function eu(t){var e=au.createRange();return e.selectNode(au.body),e.createContextualFragment(t.responseText)}var nu={version:"3.5.6"},ru=[].slice,iu=function(t){return ru.call(t)},au=this.document;if(au)try{iu(au.documentElement.childNodes)[0].nodeType}catch(uu){iu=function(t){for(var e=t.length,n=new Array(e);e--;)n[e]=t[e];return n}}if(Date.now||(Date.now=function(){return+new Date}),au)try{au.createElement("DIV").style.setProperty("opacity",0,"")}catch(ou){var su=this.Element.prototype,cu=su.setAttribute,lu=su.setAttributeNS,hu=this.CSSStyleDeclaration.prototype,fu=hu.setProperty;su.setAttribute=function(t,e){cu.call(this,t,e+"")},su.setAttributeNS=function(t,e,n){lu.call(this,t,e,n+"")},hu.setProperty=function(t,e,n){fu.call(this,t,e+"",n)}}nu.ascending=r,nu.descending=function(t,e){return t>e?-1:e>t?1:e>=t?0:0/0},nu.min=function(t,e){var n,r,i=-1,a=t.length;if(1===arguments.length){for(;++i=r){n=r;break}for(;++ir&&(n=r)}else{for(;++i=r){n=r;break}for(;++ir&&(n=r)}return n},nu.max=function(t,e){var n,r,i=-1,a=t.length;if(1===arguments.length){for(;++i=r){n=r;break}for(;++in&&(n=r)}else{for(;++i=r){n=r;break}for(;++in&&(n=r)}return n},nu.extent=function(t,e){var n,r,i,a=-1,u=t.length;if(1===arguments.length){for(;++a=r){n=i=r;break}for(;++ar&&(n=r),r>i&&(i=r))}else{for(;++a=r){n=i=r;break}for(;++ar&&(n=r),r>i&&(i=r))}return[n,i]},nu.sum=function(t,e){var n,r=0,i=t.length,u=-1;if(1===arguments.length)for(;++u1?s/(l-1):void 0},nu.deviation=function(){var t=nu.variance.apply(this,arguments);return t?Math.sqrt(t):t};var du=u(r);nu.bisectLeft=du.left,nu.bisect=nu.bisectRight=du.right,nu.bisector=function(t){return u(1===t.length?function(e,n){return r(t(e),n)}:t)},nu.shuffle=function(t,e,n){(a=arguments.length)<3&&(n=t.length,2>a&&(e=0));for(var r,i,a=n-e;a;)i=Math.random()*a--|0,r=t[a+e],t[a+e]=t[i+e],t[i+e]=r;return t},nu.permute=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},nu.pairs=function(t){for(var e,n=0,r=t.length-1,i=t[0],a=new Array(0>r?0:r);r>n;)a[n]=[e=i,i=t[++n]];return a},nu.zip=function(){if(!(r=arguments.length))return[];for(var t=-1,e=nu.min(arguments,o),n=new Array(e);++t=0;)for(r=t[i],e=r.length;--e>=0;)n[--u]=r[e];return n};var pu=Math.abs;nu.range=function(t,e,n){if(arguments.length<3&&(n=1,arguments.length<2&&(e=t,t=0)),(e-t)/n===1/0)throw new Error("infinite range");var r,i=[],a=s(pu(n)),u=-1;if(t*=a,e*=a,n*=a,0>n)for(;(r=t+n*++u)>e;)i.push(r/a);else for(;(r=t+n*++u)=a.length)return r?r.call(i,u):n?u.sort(n):u;for(var s,c,h,f,d=-1,p=u.length,g=a[o++],m=new l;++d=a.length)return t;var r=[],i=u[n++];return t.forEach(function(t,i){r.push({key:t,values:e(i,n)})}),i?r.sort(function(t,e){return i(t.key,e.key)}):r}var n,r,i={},a=[],u=[];return i.map=function(e,n){return t(n,e,0)},i.entries=function(n){return e(t(nu.map,n,0),0)},i.key=function(t){return a.push(t),i},i.sortKeys=function(t){return u[a.length-1]=t,i},i.sortValues=function(t){return n=t,i},i.rollup=function(t){return r=t,i},i},nu.set=function(t){var e=new v;if(t)for(var n=0,r=t.length;r>n;++n)e.add(t[n]);return e},c(v,{has:d,add:function(t){return this._[h(t+="")]=!0,t},remove:p,values:g,size:m,empty:y,forEach:function(t){for(var e in this._)t.call(this,f(e))}}),nu.behavior={},nu.rebind=function(t,e){for(var n,r=1,i=arguments.length;++r=0&&(r=t.slice(n+1),t=t.slice(0,n)),t)return arguments.length<2?this[t].on(r):this[t].on(r,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(r,null);return this}},nu.event=null,nu.requote=function(t){return t.replace(vu,"\\$&")};var vu=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,bu={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var n in e)t[n]=e[n]},_u=function(t,e){return e.querySelector(t)},xu=function(t,e){return e.querySelectorAll(t)},wu=function(t,e){var n=t.matches||t[x(t,"matchesSelector")];return(wu=function(t,e){return n.call(t,e)})(t,e)};"function"==typeof Sizzle&&(_u=function(t,e){return Sizzle(t,e)[0]||null},xu=Sizzle,wu=Sizzle.matchesSelector),nu.selection=function(){return nu.select(au.documentElement)};var Au=nu.selection.prototype=[];Au.select=function(t){var e,n,r,i,a=[];t=M(t);for(var u=-1,o=this.length;++u=0&&(n=t.slice(0,e),t=t.slice(e+1)),ku.hasOwnProperty(n)?{space:ku[n],local:t}:t}},Au.attr=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node();return t=nu.ns.qualify(t),t.local?n.getAttributeNS(t.space,t.local):n.getAttribute(t)}for(e in t)this.each(F(e,t[e]));return this}return this.each(F(t,e))},Au.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node(),r=(t=N(t)).length,i=-1;if(e=n.classList){for(;++ii){if("string"!=typeof t){2>i&&(e="");for(r in t)this.each(R(r,t[r],e));return this}if(2>i){var a=this.node();return n(a).getComputedStyle(a,null).getPropertyValue(t)}r=""}return this.each(R(t,e,r))},Au.property=function(t,e){if(arguments.length<2){if("string"==typeof t)return this.node()[t];for(e in t)this.each(P(e,t[e]));return this}return this.each(P(t,e))},Au.text=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}:null==t?function(){this.textContent=""}:function(){this.textContent=t}):this.node().textContent},Au.html=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}:null==t?function(){this.innerHTML=""}:function(){this.innerHTML=t}):this.node().innerHTML},Au.append=function(t){return t=q(t),this.select(function(){return this.appendChild(t.apply(this,arguments))})},Au.insert=function(t,e){return t=q(t),e=M(e),this.select(function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)})},Au.remove=function(){return this.each(j)},Au.data=function(t,e){function n(t,n){var r,i,a,u=t.length,h=n.length,f=Math.min(u,h),d=new Array(h),p=new Array(h),g=new Array(u);if(e){var m,y=new l,v=new Array(u);for(r=-1;++rr;++r)p[r]=U(n[r]);for(;u>r;++r)g[r]=t[r]}p.update=d,p.parentNode=d.parentNode=g.parentNode=t.parentNode,o.push(p),s.push(d),c.push(g)}var r,i,a=-1,u=this.length;if(!arguments.length){for(t=new Array(u=(r=this[0]).length);++aa;a++){i.push(e=[]),e.parentNode=(n=this[a]).parentNode;for(var o=0,s=n.length;s>o;o++)(r=n[o])&&t.call(r,r.__data__,o,a)&&e.push(r)}return S(i)},Au.order=function(){for(var t=-1,e=this.length;++t=0;)(n=r[i])&&(a&&a!==n.nextSibling&&a.parentNode.insertBefore(n,a),a=n);return this},Au.sort=function(t){t=V.apply(this,arguments);for(var e=-1,n=this.length;++et;t++)for(var n=this[t],r=0,i=n.length;i>r;r++){var a=n[r];if(a)return a}return null},Au.size=function(){var t=0;return H(this,function(){++t}),t};var Eu=[];nu.selection.enter=G,nu.selection.enter.prototype=Eu,Eu.append=Au.append,Eu.empty=Au.empty,Eu.node=Au.node,Eu.call=Au.call,Eu.size=Au.size,Eu.select=function(t){for(var e,n,r,i,a,u=[],o=-1,s=this.length;++or){if("string"!=typeof t){2>r&&(e=!1);for(n in t)this.each($(n,t[n],e));return this}if(2>r)return(r=this.node()["__on"+t])&&r._;n=!1}return this.each($(t,e,n))};var Du=nu.map({mouseenter:"mouseover",mouseleave:"mouseout"});au&&Du.forEach(function(t){"on"+t in au&&Du.remove(t)});var Cu,Su=0;nu.mouse=function(t){return J(t,D())};var Mu=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;nu.touch=function(t,e,n){if(arguments.length<3&&(n=e,e=D().changedTouches),e)for(var r,i=0,a=e.length;a>i;++i)if((r=e[i]).identifier===n)return J(t,r)},nu.behavior.drag=function(){function t(){this.on("mousedown.drag",a).on("touchstart.drag",u)}function e(t,e,n,a,u){return function(){function o(){var t,n,r=e(f,g);r&&(t=r[0]-b[0],n=r[1]-b[1],p|=t|n,b=r,d({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:t,dy:n}))}function s(){e(f,g)&&(y.on(a+m,null).on(u+m,null),v(p&&nu.event.target===h),d({type:"dragend"}))}var c,l=this,h=nu.event.target,f=l.parentNode,d=r.of(l,arguments),p=0,g=t(),m=".drag"+(null==g?"":"-"+g),y=nu.select(n(h)).on(a+m,o).on(u+m,s),v=X(h),b=e(f,g);i?(c=i.apply(l,arguments),c=[c.x-b[0],c.y-b[1]]):c=[0,0],d({type:"dragstart"})}}var r=C(t,"drag","dragstart","dragend"),i=null,a=e(w,nu.mouse,n,"mousemove","mouseup"),u=e(K,nu.touch,b,"touchmove","touchend");return t.origin=function(e){return arguments.length?(i=e,t):i},nu.rebind(t,r,"on")},nu.touches=function(t,e){return arguments.length<2&&(e=D().touches),e?iu(e).map(function(e){var n=J(t,e);return n.identifier=e.identifier,n}):[]};var Tu=1e-6,Fu=Tu*Tu,Bu=Math.PI,Lu=2*Bu,Nu=Lu-Tu,Ou=Bu/2,Iu=Bu/180,Ru=180/Bu,Pu=Math.SQRT2,qu=2,ju=4;nu.interpolateZoom=function(t,e){function n(t){var e=t*v;if(y){var n=it(g),u=a/(qu*f)*(n*at(Pu*e+g)-rt(g));return[r+u*c,i+u*l,a*n/it(Pu*e+g)]}return[r+t*c,i+t*l,a*Math.exp(Pu*e)]}var r=t[0],i=t[1],a=t[2],u=e[0],o=e[1],s=e[2],c=u-r,l=o-i,h=c*c+l*l,f=Math.sqrt(h),d=(s*s-a*a+ju*h)/(2*a*qu*f),p=(s*s-a*a-ju*h)/(2*s*qu*f),g=Math.log(Math.sqrt(d*d+1)-d),m=Math.log(Math.sqrt(p*p+1)-p),y=m-g,v=(y||Math.log(s/a))/Pu;return n.duration=1e3*v,n},nu.behavior.zoom=function(){function t(t){t.on(F,h).on(Yu+".zoom",d).on("dblclick.zoom",p).on(N,f)}function e(t){return[(t[0]-k.x)/k.k,(t[1]-k.y)/k.k]}function r(t){return[t[0]*k.k+k.x,t[1]*k.k+k.y]}function i(t){k.k=Math.max(S[0],Math.min(S[1],t))}function a(t,e){e=r(e),k.x+=t[0]-e[0],k.y+=t[1]-e[1]}function u(e,n,r,u){e.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,u)),a(m=n,r),e=nu.select(e),M>0&&(e=e.transition().duration(M)),e.call(t.event)}function o(){x&&x.domain(_.range().map(function(t){return(t-k.x)/k.k}).map(_.invert)),A&&A.domain(w.range().map(function(t){return(t-k.y)/k.k}).map(w.invert))}function s(t){T++||t({type:"zoomstart"})}function c(t){o(),t({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function l(t){--T||(t({type:"zoomend"}),m=null)}function h(){function t(){h=1,a(nu.mouse(i),d),c(o)}function r(){f.on(B,null).on(L,null),p(h&&nu.event.target===u),l(o)}var i=this,u=nu.event.target,o=O.of(i,arguments),h=0,f=nu.select(n(i)).on(B,t).on(L,r),d=e(nu.mouse(i)),p=X(i);Rs.call(i),s(o)}function f(){function t(){var t=nu.touches(p);return d=k.k,t.forEach(function(t){t.identifier in m&&(m[t.identifier]=e(t))}),t}function n(){var e=nu.event.target;nu.select(e).on(_,r).on(x,o),w.push(e);for(var n=nu.event.changedTouches,i=0,a=n.length;a>i;++i)m[n[i].identifier]=null;var s=t(),c=Date.now();if(1===s.length){if(500>c-b){var l=s[0];u(p,l,m[l.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),E()}b=c}else if(s.length>1){var l=s[0],h=s[1],f=l[0]-h[0],d=l[1]-h[1];y=f*f+d*d}}function r(){var t,e,n,r,u=nu.touches(p);Rs.call(p);for(var o=0,s=u.length;s>o;++o,r=null)if(n=u[o],r=m[n.identifier]){if(e)break;t=n,e=r}if(r){var l=(l=n[0]-t[0])*l+(l=n[1]-t[1])*l,h=y&&Math.sqrt(l/y);t=[(t[0]+n[0])/2,(t[1]+n[1])/2],e=[(e[0]+r[0])/2,(e[1]+r[1])/2],i(h*d)}b=null,a(t,e),c(g)}function o(){if(nu.event.touches.length){for(var e=nu.event.changedTouches,n=0,r=e.length;r>n;++n)delete m[e[n].identifier];for(var i in m)return void t()}nu.selectAll(w).on(v,null),A.on(F,h).on(N,f),D(),l(g)}var d,p=this,g=O.of(p,arguments),m={},y=0,v=".zoom-"+nu.event.changedTouches[0].identifier,_="touchmove"+v,x="touchend"+v,w=[],A=nu.select(p),D=X(p);n(),s(g),A.on(F,null).on(N,n)}function d(){var t=O.of(this,arguments);v?clearTimeout(v):(Rs.call(this),g=e(m=y||nu.mouse(this)),s(t)),v=setTimeout(function(){v=null,l(t)},50),E(),i(Math.pow(2,.002*Uu())*k.k),a(m,g),c(t)}function p(){var t=nu.mouse(this),n=Math.log(k.k)/Math.LN2;u(this,t,e(t),nu.event.shiftKey?Math.ceil(n)-1:Math.floor(n)+1)}var g,m,y,v,b,_,x,w,A,k={x:0,y:0,k:1},D=[960,500],S=Vu,M=250,T=0,F="mousedown.zoom",B="mousemove.zoom",L="mouseup.zoom",N="touchstart.zoom",O=C(t,"zoomstart","zoom","zoomend");return Yu||(Yu="onwheel"in au?(Uu=function(){return-nu.event.deltaY*(nu.event.deltaMode?120:1)},"wheel"):"onmousewheel"in au?(Uu=function(){return nu.event.wheelDelta},"mousewheel"):(Uu=function(){return-nu.event.detail},"MozMousePixelScroll")),t.event=function(t){t.each(function(){var t=O.of(this,arguments),e=k;Os?nu.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},s(t)}).tween("zoom:zoom",function(){var n=D[0],r=D[1],i=m?m[0]:n/2,a=m?m[1]:r/2,u=nu.interpolateZoom([(i-k.x)/k.k,(a-k.y)/k.k,n/k.k],[(i-e.x)/e.k,(a-e.y)/e.k,n/e.k]);return function(e){var r=u(e),o=n/r[2];this.__chart__=k={x:i-r[0]*o,y:a-r[1]*o,k:o},c(t)}}).each("interrupt.zoom",function(){l(t)}).each("end.zoom",function(){l(t)}):(this.__chart__=k,s(t),c(t),l(t))})},t.translate=function(e){return arguments.length?(k={x:+e[0],y:+e[1],k:k.k},o(),t):[k.x,k.y]},t.scale=function(e){return arguments.length?(k={x:k.x,y:k.y,k:+e},o(),t):k.k},t.scaleExtent=function(e){return arguments.length?(S=null==e?Vu:[+e[0],+e[1]],t):S},t.center=function(e){return arguments.length?(y=e&&[+e[0],+e[1]],t):y},t.size=function(e){return arguments.length?(D=e&&[+e[0],+e[1]],t):D},t.duration=function(e){return arguments.length?(M=+e,t):M},t.x=function(e){return arguments.length?(x=e,_=e.copy(),k={x:0,y:0,k:1},t):x},t.y=function(e){return arguments.length?(A=e,w=e.copy(),k={x:0,y:0,k:1},t):A},nu.rebind(t,O,"on")};var Uu,Yu,Vu=[0,1/0];nu.color=ot,ot.prototype.toString=function(){return this.rgb()+""},nu.hsl=st;var Hu=st.prototype=new ot;Hu.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new st(this.h,this.s,this.l/t)},Hu.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new st(this.h,this.s,t*this.l)},Hu.rgb=function(){return ct(this.h,this.s,this.l)},nu.hcl=lt;var Gu=lt.prototype=new ot;Gu.brighter=function(t){return new lt(this.h,this.c,Math.min(100,this.l+zu*(arguments.length?t:1)))},Gu.darker=function(t){return new lt(this.h,this.c,Math.max(0,this.l-zu*(arguments.length?t:1)))},Gu.rgb=function(){return ht(this.h,this.c,this.l).rgb()},nu.lab=ft;var zu=18,$u=.95047,Wu=1,Zu=1.08883,Xu=ft.prototype=new ot;Xu.brighter=function(t){return new ft(Math.min(100,this.l+zu*(arguments.length?t:1)),this.a,this.b)},Xu.darker=function(t){return new ft(Math.max(0,this.l-zu*(arguments.length?t:1)),this.a,this.b)},Xu.rgb=function(){return dt(this.l,this.a,this.b)},nu.rgb=vt;var Ju=vt.prototype=new ot;Ju.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,n=this.g,r=this.b,i=30;return e||n||r?(e&&i>e&&(e=i),n&&i>n&&(n=i),r&&i>r&&(r=i),new vt(Math.min(255,e/t),Math.min(255,n/t),Math.min(255,r/t))):new vt(i,i,i)},Ju.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new vt(t*this.r,t*this.g,t*this.b)},Ju.hsl=function(){return At(this.r,this.g,this.b)},Ju.toString=function(){return"#"+xt(this.r)+xt(this.g)+xt(this.b)};var Ku=nu.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Ku.forEach(function(t,e){Ku.set(t,bt(e))}),nu.functor=Ct,nu.xhr=St(b),nu.dsv=function(t,e){function n(t,n,a){arguments.length<3&&(a=n,n=null);var u=Mt(t,e,null==n?r:i(n),a);return u.row=function(t){return arguments.length?u.response(null==(n=t)?r:i(t)):n},u}function r(t){return n.parse(t.responseText)}function i(t){return function(e){return n.parse(e.responseText,t)}}function a(e){return e.map(u).join(t)}function u(t){return o.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}var o=new RegExp('["'+t+"\n]"),s=t.charCodeAt(0);return n.parse=function(t,e){var r;return n.parseRows(t,function(t,n){if(r)return r(t,n-1);var i=new Function("d","return {"+t.map(function(t,e){return JSON.stringify(t)+": d["+e+"]"}).join(",")+"}");r=e?function(t,n){return e(i(t),n)}:i})},n.parseRows=function(t,e){function n(){if(l>=c)return u;if(i)return i=!1,a;var e=l;if(34===t.charCodeAt(e)){for(var n=e;n++l;){var r=t.charCodeAt(l++),o=1;if(10===r)i=!0;else if(13===r)i=!0,10===t.charCodeAt(l)&&(++l,++o);else if(r!==s)continue;return t.slice(e,l-o)}return t.slice(e)}for(var r,i,a={},u={},o=[],c=t.length,l=0,h=0;(r=n())!==u;){for(var f=[];r!==a&&r!==u;)f.push(r),r=n();e&&null==(f=e(f,h++))||o.push(f)}return o},n.format=function(e){if(Array.isArray(e[0]))return n.formatRows(e);var r=new v,i=[];return e.forEach(function(t){for(var e in t)r.has(e)||i.push(r.add(e))}),[i.map(u).join(t)].concat(e.map(function(e){return i.map(function(t){return u(e[t])}).join(t)})).join("\n")},n.formatRows=function(t){return t.map(a).join("\n")},n},nu.csv=nu.dsv(",","text/csv"),nu.tsv=nu.dsv(" ","text/tab-separated-values");var Qu,to,eo,no,ro,io=this[x(this,"requestAnimationFrame")]||function(t){setTimeout(t,17)};nu.timer=function(t,e,n){var r=arguments.length;2>r&&(e=0),3>r&&(n=Date.now());var i=n+e,a={c:t,t:i,f:!1,n:null};to?to.n=a:Qu=a, +to=a,eo||(no=clearTimeout(no),eo=1,io(Bt))},nu.timer.flush=function(){Lt(),Nt()},nu.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)};var ao=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"].map(It);nu.formatPrefix=function(t,e){var n=0;return t&&(0>t&&(t*=-1),e&&(t=nu.round(t,Ot(t,e))),n=1+Math.floor(1e-12+Math.log(t)/Math.LN10),n=Math.max(-24,Math.min(24,3*Math.floor((n-1)/3)))),ao[8+n/3]};var uo=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,oo=nu.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(t,e){return(t=nu.round(t,Ot(t,e))).toFixed(Math.max(0,Math.min(20,Ot(t*(1+1e-15),e))))}}),so=nu.time={},co=Date;qt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){lo.setUTCDate.apply(this._,arguments)},setDay:function(){lo.setUTCDay.apply(this._,arguments)},setFullYear:function(){lo.setUTCFullYear.apply(this._,arguments)},setHours:function(){lo.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){lo.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){lo.setUTCMinutes.apply(this._,arguments)},setMonth:function(){lo.setUTCMonth.apply(this._,arguments)},setSeconds:function(){lo.setUTCSeconds.apply(this._,arguments)},setTime:function(){lo.setTime.apply(this._,arguments)}};var lo=Date.prototype;so.year=jt(function(t){return t=so.day(t),t.setMonth(0,1),t},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t){return t.getFullYear()}),so.years=so.year.range,so.years.utc=so.year.utc.range,so.day=jt(function(t){var e=new co(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e},function(t,e){t.setDate(t.getDate()+e)},function(t){return t.getDate()-1}),so.days=so.day.range,so.days.utc=so.day.utc.range,so.dayOfYear=function(t){var e=so.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(t,e){e=7-e;var n=so[t]=jt(function(t){return(t=so.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t},function(t,e){t.setDate(t.getDate()+7*Math.floor(e))},function(t){var n=so.year(t).getDay();return Math.floor((so.dayOfYear(t)+(n+e)%7)/7)-(n!==e)});so[t+"s"]=n.range,so[t+"s"].utc=n.utc.range,so[t+"OfYear"]=function(t){var n=so.year(t).getDay();return Math.floor((so.dayOfYear(t)+(n+e)%7)/7)}}),so.week=so.sunday,so.weeks=so.sunday.range,so.weeks.utc=so.sunday.utc.range,so.weekOfYear=so.sundayOfYear;var ho={"-":"",_:" ",0:"0"},fo=/^\s*\d+/,po=/^%/;nu.locale=function(t){return{numberFormat:Rt(t),timeFormat:Yt(t)}};var go=nu.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});nu.format=go.numberFormat,nu.geo={},ce.prototype={s:0,t:0,add:function(t){le(t,this.t,mo),le(mo.s,this.s,this),this.s?this.t+=mo.t:this.s=mo.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var mo=new ce;nu.geo.stream=function(t,e){t&&yo.hasOwnProperty(t.type)?yo[t.type](t,e):he(t,e)};var yo={Feature:function(t,e){he(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++rt?4*Bu+t:t,xo.lineStart=xo.lineEnd=xo.point=w}};nu.geo.bounds=function(){function t(t,e){b.push(_=[l=t,f=t]),h>e&&(h=e),e>d&&(d=e)}function e(e,n){var r=ge([e*Iu,n*Iu]);if(y){var i=ye(y,r),a=[i[1],-i[0],0],u=ye(a,i);_e(u),u=xe(u);var s=e-p,c=s>0?1:-1,g=u[0]*Ru*c,m=pu(s)>180;if(m^(g>c*p&&c*e>g)){var v=u[1]*Ru;v>d&&(d=v)}else if(g=(g+360)%360-180,m^(g>c*p&&c*e>g)){var v=-u[1]*Ru;h>v&&(h=v)}else h>n&&(h=n),n>d&&(d=n);m?p>e?o(l,e)>o(l,f)&&(f=e):o(e,f)>o(l,f)&&(l=e):f>=l?(l>e&&(l=e),e>f&&(f=e)):e>p?o(l,e)>o(l,f)&&(f=e):o(e,f)>o(l,f)&&(l=e)}else t(e,n);y=r,p=e}function n(){x.point=e}function r(){_[0]=l,_[1]=f,x.point=t,y=null}function i(t,n){if(y){var r=t-p;v+=pu(r)>180?r+(r>0?360:-360):r}else g=t,m=n;xo.point(t,n),e(t,n)}function a(){xo.lineStart()}function u(){i(g,m),xo.lineEnd(),pu(v)>Tu&&(l=-(f=180)),_[0]=l,_[1]=f,y=null}function o(t,e){return(e-=t)<0?e+360:e}function s(t,e){return t[0]-e[0]}function c(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:t_o?(l=-(f=180),h=-(d=90)):v>Tu?d=90:-Tu>v&&(h=-90),_[0]=l,_[1]=f}};return function(t){d=f=-(l=h=1/0),b=[],nu.geo.stream(t,x);var e=b.length;if(e){b.sort(s);for(var n,r=1,i=b[0],a=[i];e>r;++r)n=b[r],c(n[0],i)||c(n[1],i)?(o(i[0],n[1])>o(i[0],i[1])&&(i[1]=n[1]),o(n[0],i[1])>o(i[0],i[1])&&(i[0]=n[0])):a.push(i=n);for(var u,n,p=-(1/0),e=a.length-1,r=0,i=a[e];e>=r;i=n,++r)n=a[r],(u=o(i[1],n[0]))>p&&(p=u,l=n[0],f=i[1])}return b=_=null,l===1/0||h===1/0?[[0/0,0/0],[0/0,0/0]]:[[l,h],[f,d]]}}(),nu.geo.centroid=function(t){wo=Ao=ko=Eo=Do=Co=So=Mo=To=Fo=Bo=0,nu.geo.stream(t,Lo);var e=To,n=Fo,r=Bo,i=e*e+n*n+r*r;return Fu>i&&(e=Co,n=So,r=Mo,Tu>Ao&&(e=ko,n=Eo,r=Do),i=e*e+n*n+r*r,Fu>i)?[0/0,0/0]:[Math.atan2(n,e)*Ru,nt(r/Math.sqrt(i))*Ru]};var wo,Ao,ko,Eo,Do,Co,So,Mo,To,Fo,Bo,Lo={sphere:w,point:Ae,lineStart:Ee,lineEnd:De,polygonStart:function(){Lo.lineStart=Ce},polygonEnd:function(){Lo.lineStart=Ee}},No=Le(Me,Re,qe,[-Bu,-Bu/2]),Oo=1e9;nu.geo.clipExtent=function(){var t,e,n,r,i,a,u={stream:function(t){return i&&(i.valid=!1),i=a(t),i.valid=!0,i},extent:function(o){return arguments.length?(a=Ve(t=+o[0][0],e=+o[0][1],n=+o[1][0],r=+o[1][1]),i&&(i.valid=!1,i=null),u):[[t,e],[n,r]]}};return u.extent([[0,0],[960,500]])},(nu.geo.conicEqualArea=function(){return He(Ge)}).raw=Ge,nu.geo.albers=function(){return nu.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},nu.geo.albersUsa=function(){function t(t){var a=t[0],u=t[1];return e=null,n(a,u),e||(r(a,u),e)||i(a,u),e}var e,n,r,i,a=nu.geo.albers(),u=nu.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),o=nu.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),s={point:function(t,n){e=[t,n]}};return t.invert=function(t){var e=a.scale(),n=a.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?u:i>=.166&&.234>i&&r>=-.214&&-.115>r?o:a).invert(t)},t.stream=function(t){var e=a.stream(t),n=u.stream(t),r=o.stream(t);return{point:function(t,i){e.point(t,i),n.point(t,i),r.point(t,i)},sphere:function(){e.sphere(),n.sphere(),r.sphere()},lineStart:function(){e.lineStart(),n.lineStart(),r.lineStart()},lineEnd:function(){e.lineEnd(),n.lineEnd(),r.lineEnd()},polygonStart:function(){e.polygonStart(),n.polygonStart(),r.polygonStart()},polygonEnd:function(){e.polygonEnd(),n.polygonEnd(),r.polygonEnd()}}},t.precision=function(e){return arguments.length?(a.precision(e),u.precision(e),o.precision(e),t):a.precision()},t.scale=function(e){return arguments.length?(a.scale(e),u.scale(.35*e),o.scale(e),t.translate(a.translate())):a.scale()},t.translate=function(e){if(!arguments.length)return a.translate();var c=a.scale(),l=+e[0],h=+e[1];return n=a.translate(e).clipExtent([[l-.455*c,h-.238*c],[l+.455*c,h+.238*c]]).stream(s).point,r=u.translate([l-.307*c,h+.201*c]).clipExtent([[l-.425*c+Tu,h+.12*c+Tu],[l-.214*c-Tu,h+.234*c-Tu]]).stream(s).point,i=o.translate([l-.205*c,h+.212*c]).clipExtent([[l-.214*c+Tu,h+.166*c+Tu],[l-.115*c-Tu,h+.234*c-Tu]]).stream(s).point,t},t.scale(1070)};var Io,Ro,Po,qo,jo,Uo,Yo={point:w,lineStart:w,lineEnd:w,polygonStart:function(){Ro=0,Yo.lineStart=ze},polygonEnd:function(){Yo.lineStart=Yo.lineEnd=Yo.point=w,Io+=pu(Ro/2)}},Vo={point:$e,lineStart:w,lineEnd:w,polygonStart:w,polygonEnd:w},Ho={point:Xe,lineStart:Je,lineEnd:Ke,polygonStart:function(){Ho.lineStart=Qe},polygonEnd:function(){Ho.point=Xe,Ho.lineStart=Je,Ho.lineEnd=Ke}};nu.geo.path=function(){function t(t){return t&&("function"==typeof o&&a.pointRadius(+o.apply(this,arguments)),u&&u.valid||(u=i(a)),nu.geo.stream(t,u)),a.result()}function e(){return u=null,t}var n,r,i,a,u,o=4.5;return t.area=function(t){return Io=0,nu.geo.stream(t,i(Yo)),Io},t.centroid=function(t){return ko=Eo=Do=Co=So=Mo=To=Fo=Bo=0,nu.geo.stream(t,i(Ho)),Bo?[To/Bo,Fo/Bo]:Mo?[Co/Mo,So/Mo]:Do?[ko/Do,Eo/Do]:[0/0,0/0]},t.bounds=function(t){return jo=Uo=-(Po=qo=1/0),nu.geo.stream(t,i(Vo)),[[Po,qo],[jo,Uo]]},t.projection=function(t){return arguments.length?(i=(n=t)?t.stream||nn(t):b,e()):n},t.context=function(t){return arguments.length?(a=null==(r=t)?new We:new tn(t),"function"!=typeof o&&a.pointRadius(o),e()):r},t.pointRadius=function(e){return arguments.length?(o="function"==typeof e?e:(a.pointRadius(+e),+e),t):o},t.projection(nu.geo.albersUsa()).context(null)},nu.geo.transform=function(t){return{stream:function(e){var n=new rn(e);for(var r in t)n[r]=t[r];return n}}},rn.prototype={point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},nu.geo.projection=un,nu.geo.projectionMutator=on,(nu.geo.equirectangular=function(){return un(cn)}).raw=cn.invert=cn,nu.geo.rotation=function(t){function e(e){return e=t(e[0]*Iu,e[1]*Iu),e[0]*=Ru,e[1]*=Ru,e}return t=hn(t[0]%360*Iu,t[1]*Iu,t.length>2?t[2]*Iu:0),e.invert=function(e){return e=t.invert(e[0]*Iu,e[1]*Iu),e[0]*=Ru,e[1]*=Ru,e},e},ln.invert=cn,nu.geo.circle=function(){function t(){var t="function"==typeof r?r.apply(this,arguments):r,e=hn(-t[0]*Iu,-t[1]*Iu,0).invert,i=[];return n(null,null,1,{point:function(t,n){i.push(t=e(t,n)),t[0]*=Ru,t[1]*=Ru}}),{type:"Polygon",coordinates:[i]}}var e,n,r=[0,0],i=6;return t.origin=function(e){return arguments.length?(r=e,t):r},t.angle=function(r){return arguments.length?(n=gn((e=+r)*Iu,i*Iu),t):e},t.precision=function(r){return arguments.length?(n=gn(e*Iu,(i=+r)*Iu),t):i},t.angle(90)},nu.geo.distance=function(t,e){var n,r=(e[0]-t[0])*Iu,i=t[1]*Iu,a=e[1]*Iu,u=Math.sin(r),o=Math.cos(r),s=Math.sin(i),c=Math.cos(i),l=Math.sin(a),h=Math.cos(a);return Math.atan2(Math.sqrt((n=h*u)*n+(n=c*l-s*h*o)*n),s*l+c*h*o)},nu.geo.graticule=function(){function t(){return{type:"MultiLineString",coordinates:e()}}function e(){return nu.range(Math.ceil(a/m)*m,i,m).map(f).concat(nu.range(Math.ceil(c/y)*y,s,y).map(d)).concat(nu.range(Math.ceil(r/p)*p,n,p).filter(function(t){return pu(t%m)>Tu}).map(l)).concat(nu.range(Math.ceil(o/g)*g,u,g).filter(function(t){return pu(t%y)>Tu}).map(h))}var n,r,i,a,u,o,s,c,l,h,f,d,p=10,g=p,m=90,y=360,v=2.5;return t.lines=function(){return e().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[f(a).concat(d(s).slice(1),f(i).reverse().slice(1),d(c).reverse().slice(1))]}},t.extent=function(e){return arguments.length?t.majorExtent(e).minorExtent(e):t.minorExtent()},t.majorExtent=function(e){return arguments.length?(a=+e[0][0],i=+e[1][0],c=+e[0][1],s=+e[1][1],a>i&&(e=a,a=i,i=e),c>s&&(e=c,c=s,s=e),t.precision(v)):[[a,c],[i,s]]},t.minorExtent=function(e){return arguments.length?(r=+e[0][0],n=+e[1][0],o=+e[0][1],u=+e[1][1],r>n&&(e=r,r=n,n=e),o>u&&(e=o,o=u,u=e),t.precision(v)):[[r,o],[n,u]]},t.step=function(e){return arguments.length?t.majorStep(e).minorStep(e):t.minorStep()},t.majorStep=function(e){return arguments.length?(m=+e[0],y=+e[1],t):[m,y]},t.minorStep=function(e){return arguments.length?(p=+e[0],g=+e[1],t):[p,g]},t.precision=function(e){return arguments.length?(v=+e,l=yn(o,u,90),h=vn(r,n,v),f=yn(c,s,90),d=vn(a,i,v),t):v},t.majorExtent([[-180,-90+Tu],[180,90-Tu]]).minorExtent([[-180,-80-Tu],[180,80+Tu]])},nu.geo.greatArc=function(){function t(){return{type:"LineString",coordinates:[e||r.apply(this,arguments),n||i.apply(this,arguments)]}}var e,n,r=bn,i=_n;return t.distance=function(){return nu.geo.distance(e||r.apply(this,arguments),n||i.apply(this,arguments))},t.source=function(n){return arguments.length?(r=n,e="function"==typeof n?null:n,t):r},t.target=function(e){return arguments.length?(i=e,n="function"==typeof e?null:e,t):i},t.precision=function(){return arguments.length?t:0},t},nu.geo.interpolate=function(t,e){return xn(t[0]*Iu,t[1]*Iu,e[0]*Iu,e[1]*Iu)},nu.geo.length=function(t){return Go=0,nu.geo.stream(t,zo),Go};var Go,zo={sphere:w,point:w,lineStart:wn,lineEnd:w,polygonStart:w,polygonEnd:w},$o=An(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(nu.geo.azimuthalEqualArea=function(){return un($o)}).raw=$o;var Wo=An(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},b);(nu.geo.azimuthalEquidistant=function(){return un(Wo)}).raw=Wo,(nu.geo.conicConformal=function(){return He(kn)}).raw=kn,(nu.geo.conicEquidistant=function(){return He(En)}).raw=En;var Zo=An(function(t){return 1/t},Math.atan);(nu.geo.gnomonic=function(){return un(Zo)}).raw=Zo,Dn.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-Ou]},(nu.geo.mercator=function(){return Cn(Dn)}).raw=Dn;var Xo=An(function(){return 1},Math.asin);(nu.geo.orthographic=function(){return un(Xo)}).raw=Xo;var Jo=An(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});(nu.geo.stereographic=function(){return un(Jo)}).raw=Jo,Sn.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-Ou]},(nu.geo.transverseMercator=function(){var t=Cn(Sn),e=t.center,n=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):(t=e(),[t[1],-t[0]])},t.rotate=function(t){return t?n([t[0],t[1],t.length>2?t[2]+90:90]):(t=n(),[t[0],t[1],t[2]-90])},n([0,0,90])}).raw=Sn,nu.geom={},nu.geom.hull=function(t){function e(t){if(t.length<3)return[];var e,i=Ct(n),a=Ct(r),u=t.length,o=[],s=[];for(e=0;u>e;e++)o.push([+i.call(this,t[e],e),+a.call(this,t[e],e),e]);for(o.sort(Bn),e=0;u>e;e++)s.push([o[e][0],-o[e][1]]);var c=Fn(o),l=Fn(s),h=l[0]===c[0],f=l[l.length-1]===c[c.length-1],d=[];for(e=c.length-1;e>=0;--e)d.push(t[o[c[e]][2]]);for(e=+h;e=r&&c.x<=a&&c.y>=i&&c.y<=u?[[r,u],[a,u],[a,i],[r,i]]:[];l.point=t[o]}),e}function n(t){return t.map(function(t,e){return{x:Math.round(a(t,e)/Tu)*Tu,y:Math.round(u(t,e)/Tu)*Tu,i:e}})}var r=Mn,i=Tn,a=r,u=i,o=us;return t?e(t):(e.links=function(t){return or(n(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},e.triangles=function(t){var e=[];return or(n(t)).cells.forEach(function(n,r){for(var i,a,u=n.site,o=n.edges.sort(Gn),s=-1,c=o.length,l=o[c-1].edge,h=l.l===u?l.r:l.l;++s=c,f=r>=l,d=f<<1|h;t.leaf=!1,t=t.nodes[d]||(t.nodes[d]=fr()),h?i=c:o=c,f?u=l:s=l,a(t,e,n,r,i,u,o,s)}var l,h,f,d,p,g,m,y,v,b=Ct(o),_=Ct(s);if(null!=e)g=e,m=n,y=r,v=i;else if(y=v=-(g=m=1/0),h=[],f=[],p=t.length,u)for(d=0;p>d;++d)l=t[d],l.xy&&(y=l.x),l.y>v&&(v=l.y),h.push(l.x),f.push(l.y);else for(d=0;p>d;++d){var x=+b(l=t[d],d),w=+_(l,d);g>x&&(g=x),m>w&&(m=w),x>y&&(y=x),w>v&&(v=w),h.push(x),f.push(w)}var A=y-g,k=v-m;A>k?v=m+A:y=g+k;var E=fr();if(E.add=function(t){a(E,t,+b(t,++d),+_(t,d),g,m,y,v)},E.visit=function(t){dr(t,E,g,m,y,v)},E.find=function(t){return pr(E,t[0],t[1],g,m,y,v)},d=-1,null==e){for(;++d=0?t.slice(0,e):t,r=e>=0?t.slice(e+1):"in";return n=ls.get(n)||cs,r=hs.get(r)||b,xr(r(n.apply(null,ru.call(arguments,1))))},nu.interpolateHcl=Nr,nu.interpolateHsl=Or,nu.interpolateLab=Ir,nu.interpolateRound=Rr,nu.transform=function(t){var e=au.createElementNS(nu.ns.prefix.svg,"g");return(nu.transform=function(t){if(null!=t){e.setAttribute("transform",t);var n=e.transform.baseVal.consolidate()}return new Pr(n?n.matrix:fs)})(t)},Pr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var fs={a:1,b:0,c:0,d:1,e:0,f:0};nu.interpolateTransform=Yr,nu.layout={},nu.layout.bundle=function(){return function(t){for(var e=[],n=-1,r=t.length;++no*o/m){if(p>s){var c=e.charge/s;t.px-=a*c,t.py-=u*c}return!0}if(e.point&&s&&p>s){var c=e.pointCharge/s;t.px-=a*c,t.py-=u*c}}return!e.charge}}function e(t){t.px=nu.event.x,t.py=nu.event.y,o.resume()}var n,r,i,a,u,o={},s=nu.dispatch("start","tick","end"),c=[1,1],l=.9,h=ds,f=ps,d=-30,p=gs,g=.1,m=.64,y=[],v=[];return o.tick=function(){if((r*=.99)<.005)return s.end({type:"end",alpha:r=0}),!0;var e,n,o,h,f,p,m,b,_,x=y.length,w=v.length;for(n=0;w>n;++n)o=v[n],h=o.source,f=o.target,b=f.x-h.x,_=f.y-h.y,(p=b*b+_*_)&&(p=r*a[n]*((p=Math.sqrt(p))-i[n])/p,b*=p,_*=p,f.x-=b*(m=h.weight/(f.weight+h.weight)),f.y-=_*m,h.x+=b*(m=1-m),h.y+=_*m);if((m=r*g)&&(b=c[0]/2,_=c[1]/2,n=-1,m))for(;++n0?t:0:t>0&&(s.start({type:"start",alpha:r=t}),nu.timer(o.tick)),o):r},o.start=function(){function t(t,r){if(!n){for(n=new Array(s),o=0;s>o;++o)n[o]=[];for(o=0;l>o;++o){var i=v[o];n[i.source.index].push(i.target),n[i.target.index].push(i.source)}}for(var a,u=n[e],o=-1,c=u.length;++oe;++e)(r=y[e]).index=e,r.weight=0;for(e=0;l>e;++e)r=v[e],"number"==typeof r.source&&(r.source=y[r.source]),"number"==typeof r.target&&(r.target=y[r.target]),++r.source.weight,++r.target.weight;for(e=0;s>e;++e)r=y[e],isNaN(r.x)&&(r.x=t("x",p)),isNaN(r.y)&&(r.y=t("y",g)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(i=[],"function"==typeof h)for(e=0;l>e;++e)i[e]=+h.call(this,v[e],e);else for(e=0;l>e;++e)i[e]=h;if(a=[],"function"==typeof f)for(e=0;l>e;++e)a[e]=+f.call(this,v[e],e);else for(e=0;l>e;++e)a[e]=f;if(u=[],"function"==typeof d)for(e=0;s>e;++e)u[e]=+d.call(this,y[e],e);else for(e=0;s>e;++e)u[e]=d;return o.resume()},o.resume=function(){return o.alpha(.1)},o.stop=function(){return o.alpha(0)},o.drag=function(){return n||(n=nu.behavior.drag().origin(b).on("dragstart.force",Wr).on("drag.force",e).on("dragend.force",Zr)),arguments.length?void this.on("mouseover.force",Xr).on("mouseout.force",Jr).call(n):n},nu.rebind(o,s,"on")};var ds=20,ps=1,gs=1/0;nu.layout.hierarchy=function(){function t(i){var a,u=[i],o=[];for(i.depth=0;null!=(a=u.pop());)if(o.push(a),(c=n.call(t,a,a.depth))&&(s=c.length)){for(var s,c,l;--s>=0;)u.push(l=c[s]),l.parent=a,l.depth=a.depth+1;r&&(a.value=0),a.children=c}else r&&(a.value=+r.call(t,a,a.depth)||0),delete a.children;return ei(i,function(t){var n,i;e&&(n=t.children)&&n.sort(e),r&&(i=t.parent)&&(i.value+=t.value)}),o}var e=ii,n=ni,r=ri;return t.sort=function(n){return arguments.length?(e=n,t):e},t.children=function(e){return arguments.length?(n=e,t):n},t.value=function(e){return arguments.length?(r=e,t):r},t.revalue=function(e){return r&&(ti(e,function(t){t.children&&(t.value=0)}),ei(e,function(e){var n;e.children||(e.value=+r.call(t,e,e.depth)||0),(n=e.parent)&&(n.value+=e.value)})),e},t},nu.layout.partition=function(){function t(e,n,r,i){var a=e.children;if(e.x=n,e.y=e.depth*i,e.dx=r,e.dy=i,a&&(u=a.length)){var u,o,s,c=-1;for(r=e.value?r/e.value:0;++ch?-1:1),p=(h-s*d)/nu.sum(c),g=nu.range(s),m=[];return null!=n&&g.sort(n===ms?function(t,e){return c[e]-c[t]}:function(t,e){return n(u[t],u[e])}),g.forEach(function(t){m[t]={data:u[t],value:o=c[t],startAngle:l,endAngle:l+=o*p+d,padAngle:f}}),m}var e=Number,n=ms,r=0,i=Lu,a=0;return t.value=function(n){return arguments.length?(e=n,t):e},t.sort=function(e){return arguments.length?(n=e,t):n},t.startAngle=function(e){return arguments.length?(r=e,t):r},t.endAngle=function(e){return arguments.length?(i=e,t):i},t.padAngle=function(e){return arguments.length?(a=e,t):a},t};var ms={};nu.layout.stack=function(){function t(o,s){if(!(f=o.length))return o;var c=o.map(function(n,r){return e.call(t,n,r)}),l=c.map(function(e){return e.map(function(e,n){return[a.call(t,e,n),u.call(t,e,n)]})}),h=n.call(t,l,s);c=nu.permute(c,h),l=nu.permute(l,h);var f,d,p,g,m=r.call(t,l,s),y=c[0].length;for(p=0;y>p;++p)for(i.call(t,c[0][p],g=m[p],l[0][p][1]),d=1;f>d;++d)i.call(t,c[d][p],g+=l[d-1][p][1],l[d][p][1]);return o}var e=b,n=ci,r=li,i=si,a=ui,u=oi;return t.values=function(n){return arguments.length?(e=n,t):e},t.order=function(e){return arguments.length?(n="function"==typeof e?e:ys.get(e)||ci,t):n},t.offset=function(e){return arguments.length?(r="function"==typeof e?e:vs.get(e)||li,t):r},t.x=function(e){return arguments.length?(a=e,t):a},t.y=function(e){return arguments.length?(u=e,t):u},t.out=function(e){return arguments.length?(i=e,t):i},t};var ys=nu.map({"inside-out":function(t){var e,n,r=t.length,i=t.map(hi),a=t.map(fi),u=nu.range(r).sort(function(t,e){return i[t]-i[e]}),o=0,s=0,c=[],l=[];for(e=0;r>e;++e)n=u[e],s>o?(o+=a[n],c.push(n)):(s+=a[n],l.push(n));return l.reverse().concat(c)},reverse:function(t){return nu.range(t.length).reverse()},"default":ci}),vs=nu.map({silhouette:function(t){var e,n,r,i=t.length,a=t[0].length,u=[],o=0,s=[];for(n=0;a>n;++n){for(e=0,r=0;i>e;e++)r+=t[e][n][1];r>o&&(o=r),u.push(r)}for(n=0;a>n;++n)s[n]=(o-u[n])/2;return s},wiggle:function(t){var e,n,r,i,a,u,o,s,c,l=t.length,h=t[0],f=h.length,d=[];for(d[0]=s=c=0,n=1;f>n;++n){for(e=0,i=0;l>e;++e)i+=t[e][n][1];for(e=0,a=0,o=h[n][0]-h[n-1][0];l>e;++e){for(r=0,u=(t[e][n][1]-t[e][n-1][1])/(2*o);e>r;++r)u+=(t[r][n][1]-t[r][n-1][1])/o;a+=u*t[e][n][1]}d[n]=s-=i?a/i*o:0,c>s&&(c=s)}for(n=0;f>n;++n)d[n]-=c;return d},expand:function(t){var e,n,r,i=t.length,a=t[0].length,u=1/i,o=[];for(n=0;a>n;++n){for(e=0,r=0;i>e;e++)r+=t[e][n][1];if(r)for(e=0;i>e;e++)t[e][n][1]/=r;else for(e=0;i>e;e++)t[e][n][1]=u}for(n=0;a>n;++n)o[n]=0;return o},zero:li});nu.layout.histogram=function(){function t(t,a){for(var u,o,s=[],c=t.map(n,this),l=r.call(this,c,a),h=i.call(this,l,c,a),a=-1,f=c.length,d=h.length-1,p=e?1:1/f;++a0)for(a=-1;++a=l[0]&&o<=l[1]&&(u=s[nu.bisect(h,o,1,d)-1],u.y+=p,u.push(t[a]));return s}var e=!0,n=Number,r=mi,i=pi;return t.value=function(e){return arguments.length?(n=e,t):n},t.range=function(e){return arguments.length?(r=Ct(e),t):r},t.bins=function(e){return arguments.length?(i="number"==typeof e?function(t){return gi(t,e)}:Ct(e),t):i},t.frequency=function(n){return arguments.length?(e=!!n,t):e},t},nu.layout.pack=function(){function t(t,a){var u=n.call(this,t,a),o=u[0],s=i[0],c=i[1],l=null==e?Math.sqrt:"function"==typeof e?e:function(){return e};if(o.x=o.y=0,ei(o,function(t){t.r=+l(t.value)}),ei(o,xi),r){var h=r*(e?1:Math.max(2*o.r/s,2*o.r/c))/2;ei(o,function(t){t.r+=h; + +}),ei(o,xi),ei(o,function(t){t.r-=h})}return ki(o,s/2,c/2,e?1:1/Math.max(2*o.r/s,2*o.r/c)),u}var e,n=nu.layout.hierarchy().sort(yi),r=0,i=[1,1];return t.size=function(e){return arguments.length?(i=e,t):i},t.radius=function(n){return arguments.length?(e=null==n||"function"==typeof n?n:+n,t):e},t.padding=function(e){return arguments.length?(r=+e,t):r},Qr(t,n)},nu.layout.tree=function(){function t(t,i){var l=u.call(this,t,i),h=l[0],f=e(h);if(ei(f,n),f.parent.m=-f.z,ti(f,r),c)ti(h,a);else{var d=h,p=h,g=h;ti(h,function(t){t.xp.x&&(p=t),t.depth>g.depth&&(g=t)});var m=o(d,p)/2-d.x,y=s[0]/(p.x+o(p,d)/2+m),v=s[1]/(g.depth||1);ti(h,function(t){t.x=(t.x+m)*y,t.y=t.depth*v})}return l}function e(t){for(var e,n={A:null,children:[t]},r=[n];null!=(e=r.pop());)for(var i,a=e.children,u=0,o=a.length;o>u;++u)r.push((a[u]=i={_:a[u],parent:e,children:(i=a[u].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:u}).a=i);return n.children[0]}function n(t){var e=t.children,n=t.parent.children,r=t.i?n[t.i-1]:null;if(e.length){Ti(t);var a=(e[0].z+e[e.length-1].z)/2;r?(t.z=r.z+o(t._,r._),t.m=t.z-a):t.z=a}else r&&(t.z=r.z+o(t._,r._));t.parent.A=i(t,r,t.parent.A||n[0])}function r(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function i(t,e,n){if(e){for(var r,i=t,a=t,u=e,s=i.parent.children[0],c=i.m,l=a.m,h=u.m,f=s.m;u=Si(u),i=Ci(i),u&&i;)s=Ci(s),a=Si(a),a.a=t,r=u.z+h-i.z-c+o(u._,i._),r>0&&(Mi(Fi(u,t,n),t,r),c+=r,l+=r),h+=u.m,c+=i.m,f+=s.m,l+=a.m;u&&!Si(a)&&(a.t=u,a.m+=h-l),i&&!Ci(s)&&(s.t=i,s.m+=c-f,n=t)}return n}function a(t){t.x*=s[0],t.y=t.depth*s[1]}var u=nu.layout.hierarchy().sort(null).value(null),o=Di,s=[1,1],c=null;return t.separation=function(e){return arguments.length?(o=e,t):o},t.size=function(e){return arguments.length?(c=null==(s=e)?a:null,t):c?null:s},t.nodeSize=function(e){return arguments.length?(c=null==(s=e)?null:a,t):c?s:null},Qr(t,u)},nu.layout.cluster=function(){function t(t,a){var u,o=e.call(this,t,a),s=o[0],c=0;ei(s,function(t){var e=t.children;e&&e.length?(t.x=Li(e),t.y=Bi(e)):(t.x=u?c+=n(t,u):0,t.y=0,u=t)});var l=Ni(s),h=Oi(s),f=l.x-n(l,h)/2,d=h.x+n(h,l)/2;return ei(s,i?function(t){t.x=(t.x-s.x)*r[0],t.y=(s.y-t.y)*r[1]}:function(t){t.x=(t.x-f)/(d-f)*r[0],t.y=(1-(s.y?t.y/s.y:1))*r[1]}),o}var e=nu.layout.hierarchy().sort(null).value(null),n=Di,r=[1,1],i=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(e){return arguments.length?(i=null==(r=e),t):i?null:r},t.nodeSize=function(e){return arguments.length?(i=null!=(r=e),t):i?r:null},Qr(t,e)},nu.layout.treemap=function(){function t(t,e){for(var n,r,i=-1,a=t.length;++ie?0:e),n.area=isNaN(r)||0>=r?0:r}function e(n){var a=n.children;if(a&&a.length){var u,o,s,c=h(n),l=[],f=a.slice(),p=1/0,g="slice"===d?c.dx:"dice"===d?c.dy:"slice-dice"===d?1&n.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(t(f,c.dx*c.dy/n.value),l.area=0;(s=f.length)>0;)l.push(u=f[s-1]),l.area+=u.area,"squarify"!==d||(o=r(l,g))<=p?(f.pop(),p=o):(l.area-=l.pop().area,i(l,g,c,!1),g=Math.min(c.dx,c.dy),l.length=l.area=0,p=1/0);l.length&&(i(l,g,c,!0),l.length=l.area=0),a.forEach(e)}}function n(e){var r=e.children;if(r&&r.length){var a,u=h(e),o=r.slice(),s=[];for(t(o,u.dx*u.dy/e.value),s.area=0;a=o.pop();)s.push(a),s.area+=a.area,null!=a.z&&(i(s,a.z?u.dx:u.dy,u,!o.length),s.length=s.area=0);r.forEach(n)}}function r(t,e){for(var n,r=t.area,i=0,a=1/0,u=-1,o=t.length;++un&&(a=n),n>i&&(i=n));return r*=r,e*=e,r?Math.max(e*i*p/r,r/(e*a*p)):1/0}function i(t,e,n,r){var i,a=-1,u=t.length,o=n.x,c=n.y,l=e?s(t.area/e):0;if(e==n.dx){for((r||l>n.dy)&&(l=n.dy);++an.dx)&&(l=n.dx);++an&&(e=1),1>n&&(t=0),function(){var n,r,i;do n=2*Math.random()-1,r=2*Math.random()-1,i=n*n+r*r;while(!i||i>1);return t+e*n*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var t=nu.random.normal.apply(nu,arguments);return function(){return Math.exp(t())}},bates:function(t){var e=nu.random.irwinHall(t);return function(){return e()/t}},irwinHall:function(t){return function(){for(var e=0,n=0;t>n;n++)e+=Math.random();return e}}},nu.scale={};var bs={floor:b,ceil:b};nu.scale.linear=function(){return Hi([0,1],[0,1],br,!1)};var _s={s:1,g:1,p:1,r:1,e:1};nu.scale.log=function(){return Ki(nu.scale.linear().domain([0,1]),10,!0,[1,10])};var xs=nu.format(".0e"),ws={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};nu.scale.pow=function(){return Qi(nu.scale.linear(),1,[0,1])},nu.scale.sqrt=function(){return nu.scale.pow().exponent(.5)},nu.scale.ordinal=function(){return ea([],{t:"range",a:[[]]})},nu.scale.category10=function(){return nu.scale.ordinal().range(As)},nu.scale.category20=function(){return nu.scale.ordinal().range(ks)},nu.scale.category20b=function(){return nu.scale.ordinal().range(Es)},nu.scale.category20c=function(){return nu.scale.ordinal().range(Ds)};var As=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(_t),ks=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(_t),Es=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(_t),Ds=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(_t);nu.scale.quantile=function(){return na([],[])},nu.scale.quantize=function(){return ra(0,1,[0,1])},nu.scale.threshold=function(){return ia([.5],[0,1])},nu.scale.identity=function(){return aa([0,1])},nu.svg={},nu.svg.arc=function(){function t(){var t=Math.max(0,+n.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),l=u.apply(this,arguments)-Ou,h=o.apply(this,arguments)-Ou,f=Math.abs(h-l),d=l>h?0:1;if(t>c&&(p=c,c=t,t=p),f>=Nu)return e(c,d)+(t?e(t,1-d):"")+"Z";var p,g,m,y,v,b,_,x,w,A,k,E,D=0,C=0,S=[];if((y=(+s.apply(this,arguments)||0)/2)&&(m=a===Cs?Math.sqrt(t*t+c*c):+a.apply(this,arguments),d||(C*=-1),c&&(C=nt(m/c*Math.sin(y))),t&&(D=nt(m/t*Math.sin(y)))),c){v=c*Math.cos(l+C),b=c*Math.sin(l+C),_=c*Math.cos(h-C),x=c*Math.sin(h-C);var M=Math.abs(h-l-2*C)<=Bu?0:1;if(C&&fa(v,b,_,x)===d^M){var T=(l+h)/2;v=c*Math.cos(T),b=c*Math.sin(T),_=x=null}}else v=b=0;if(t){w=t*Math.cos(h-D),A=t*Math.sin(h-D),k=t*Math.cos(l+D),E=t*Math.sin(l+D);var F=Math.abs(l-h+2*D)<=Bu?0:1;if(D&&fa(w,A,k,E)===1-d^F){var B=(l+h)/2;w=t*Math.cos(B),A=t*Math.sin(B),k=E=null}}else w=A=0;if((p=Math.min(Math.abs(c-t)/2,+i.apply(this,arguments)))>.001){g=c>t^d?0:1;var L=null==k?[w,A]:null==_?[v,b]:Nn([v,b],[k,E],[_,x],[w,A]),N=v-L[0],O=b-L[1],I=_-L[0],R=x-L[1],P=1/Math.sin(Math.acos((N*I+O*R)/(Math.sqrt(N*N+O*O)*Math.sqrt(I*I+R*R)))/2),q=Math.sqrt(L[0]*L[0]+L[1]*L[1]);if(null!=_){var j=Math.min(p,(c-q)/(P+1)),U=da(null==k?[w,A]:[k,E],[v,b],c,j,d),Y=da([_,x],[w,A],c,j,d);p===j?S.push("M",U[0],"A",j,",",j," 0 0,",g," ",U[1],"A",c,",",c," 0 ",1-d^fa(U[1][0],U[1][1],Y[1][0],Y[1][1]),",",d," ",Y[1],"A",j,",",j," 0 0,",g," ",Y[0]):S.push("M",U[0],"A",j,",",j," 0 1,",g," ",Y[0])}else S.push("M",v,",",b);if(null!=k){var V=Math.min(p,(t-q)/(P-1)),H=da([v,b],[k,E],t,-V,d),G=da([w,A],null==_?[v,b]:[_,x],t,-V,d);p===V?S.push("L",G[0],"A",V,",",V," 0 0,",g," ",G[1],"A",t,",",t," 0 ",d^fa(G[1][0],G[1][1],H[1][0],H[1][1]),",",1-d," ",H[1],"A",V,",",V," 0 0,",g," ",H[0]):S.push("L",G[0],"A",V,",",V," 0 0,",g," ",H[0])}else S.push("L",w,",",A)}else S.push("M",v,",",b),null!=_&&S.push("A",c,",",c," 0 ",M,",",d," ",_,",",x),S.push("L",w,",",A),null!=k&&S.push("A",t,",",t," 0 ",F,",",1-d," ",k,",",E);return S.push("Z"),S.join("")}function e(t,e){return"M0,"+t+"A"+t+","+t+" 0 1,"+e+" 0,"+-t+"A"+t+","+t+" 0 1,"+e+" 0,"+t}var n=oa,r=sa,i=ua,a=Cs,u=ca,o=la,s=ha;return t.innerRadius=function(e){return arguments.length?(n=Ct(e),t):n},t.outerRadius=function(e){return arguments.length?(r=Ct(e),t):r},t.cornerRadius=function(e){return arguments.length?(i=Ct(e),t):i},t.padRadius=function(e){return arguments.length?(a=e==Cs?Cs:Ct(e),t):a},t.startAngle=function(e){return arguments.length?(u=Ct(e),t):u},t.endAngle=function(e){return arguments.length?(o=Ct(e),t):o},t.padAngle=function(e){return arguments.length?(s=Ct(e),t):s},t.centroid=function(){var t=(+n.apply(this,arguments)+ +r.apply(this,arguments))/2,e=(+u.apply(this,arguments)+ +o.apply(this,arguments))/2-Ou;return[Math.cos(e)*t,Math.sin(e)*t]},t};var Cs="auto";nu.svg.line=function(){return pa(b)};var Ss=nu.map({linear:ga,"linear-closed":ma,step:ya,"step-before":va,"step-after":ba,basis:Ea,"basis-open":Da,"basis-closed":Ca,bundle:Sa,cardinal:wa,"cardinal-open":_a,"cardinal-closed":xa,monotone:Na});Ss.forEach(function(t,e){e.key=t,e.closed=/-closed$/.test(t)});var Ms=[0,2/3,1/3,0],Ts=[0,1/3,2/3,0],Fs=[0,1/6,2/3,1/6];nu.svg.line.radial=function(){var t=pa(Oa);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},va.reverse=ba,ba.reverse=va,nu.svg.area=function(){return Ia(b)},nu.svg.area.radial=function(){var t=Ia(Oa);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},nu.svg.chord=function(){function t(t,o){var s=e(this,a,t,o),c=e(this,u,t,o);return"M"+s.p0+r(s.r,s.p1,s.a1-s.a0)+(n(s,c)?i(s.r,s.p1,s.r,s.p0):i(s.r,s.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,s.r,s.p0))+"Z"}function e(t,e,n,r){var i=e.call(t,n,r),a=o.call(t,i,r),u=s.call(t,i,r)-Ou,l=c.call(t,i,r)-Ou;return{r:a,a0:u,a1:l,p0:[a*Math.cos(u),a*Math.sin(u)],p1:[a*Math.cos(l),a*Math.sin(l)]}}function n(t,e){return t.a0==e.a0&&t.a1==e.a1}function r(t,e,n){return"A"+t+","+t+" 0 "+ +(n>Bu)+",1 "+e}function i(t,e,n,r){return"Q 0,0 "+r}var a=bn,u=_n,o=Ra,s=ca,c=la;return t.radius=function(e){return arguments.length?(o=Ct(e),t):o},t.source=function(e){return arguments.length?(a=Ct(e),t):a},t.target=function(e){return arguments.length?(u=Ct(e),t):u},t.startAngle=function(e){return arguments.length?(s=Ct(e),t):s},t.endAngle=function(e){return arguments.length?(c=Ct(e),t):c},t},nu.svg.diagonal=function(){function t(t,i){var a=e.call(this,t,i),u=n.call(this,t,i),o=(a.y+u.y)/2,s=[a,{x:a.x,y:o},{x:u.x,y:o},u];return s=s.map(r),"M"+s[0]+"C"+s[1]+" "+s[2]+" "+s[3]}var e=bn,n=_n,r=Pa;return t.source=function(n){return arguments.length?(e=Ct(n),t):e},t.target=function(e){return arguments.length?(n=Ct(e),t):n},t.projection=function(e){return arguments.length?(r=e,t):r},t},nu.svg.diagonal.radial=function(){var t=nu.svg.diagonal(),e=Pa,n=t.projection;return t.projection=function(t){return arguments.length?n(qa(e=t)):e},t},nu.svg.symbol=function(){function t(t,r){return(Bs.get(e.call(this,t,r))||Ya)(n.call(this,t,r))}var e=Ua,n=ja;return t.type=function(n){return arguments.length?(e=Ct(n),t):e},t.size=function(e){return arguments.length?(n=Ct(e),t):n},t};var Bs=nu.map({circle:Ya,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*Ns)),n=e*Ns;return"M0,"+-e+"L"+n+",0 0,"+e+" "+-n+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/Ls),n=e*Ls/2;return"M0,"+n+"L"+e+","+-n+" "+-e+","+-n+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/Ls),n=e*Ls/2;return"M0,"+-n+"L"+e+","+n+" "+-e+","+n+"Z"}});nu.svg.symbolTypes=Bs.keys();var Ls=Math.sqrt(3),Ns=Math.tan(30*Iu);Au.transition=function(t){for(var e,n,r=Os||++qs,i=$a(t),a=[],u=Is||{time:Date.now(),ease:Dr,delay:0,duration:250},o=-1,s=this.length;++oa;a++){i.push(e=[]);for(var n=this[a],o=0,s=n.length;s>o;o++)(r=n[o])&&t.call(r,r.__data__,o,a)&&e.push(r)}return Ha(i,this.namespace,this.id)},Ps.tween=function(t,e){var n=this.id,r=this.namespace;return arguments.length<2?this.node()[r][n].tween.get(t):H(this,null==e?function(e){e[r][n].tween.remove(t)}:function(i){i[r][n].tween.set(t,e)})},Ps.attr=function(t,e){function n(){this.removeAttribute(o)}function r(){this.removeAttributeNS(o.space,o.local)}function i(t){return null==t?n:(t+="",function(){var e,n=this.getAttribute(o);return n!==t&&(e=u(n,t),function(t){this.setAttribute(o,e(t))})})}function a(t){return null==t?r:(t+="",function(){var e,n=this.getAttributeNS(o.space,o.local);return n!==t&&(e=u(n,t),function(t){this.setAttributeNS(o.space,o.local,e(t))})})}if(arguments.length<2){for(e in t)this.attr(e,t[e]);return this}var u="transform"==t?Yr:br,o=nu.ns.qualify(t);return Ga(this,"attr."+t,e,o.local?a:i)},Ps.attrTween=function(t,e){function n(t,n){var r=e.call(this,t,n,this.getAttribute(i));return r&&function(t){this.setAttribute(i,r(t))}}function r(t,n){var r=e.call(this,t,n,this.getAttributeNS(i.space,i.local));return r&&function(t){this.setAttributeNS(i.space,i.local,r(t))}}var i=nu.ns.qualify(t);return this.tween("attr."+t,i.local?r:n)},Ps.style=function(t,e,r){function i(){this.style.removeProperty(t)}function a(e){return null==e?i:(e+="",function(){var i,a=n(this).getComputedStyle(this,null).getPropertyValue(t);return a!==e&&(i=br(a,e),function(e){this.style.setProperty(t,i(e),r)})})}var u=arguments.length;if(3>u){if("string"!=typeof t){2>u&&(e="");for(r in t)this.style(r,t[r],e);return this}r=""}return Ga(this,"style."+t,e,a)},Ps.styleTween=function(t,e,r){function i(i,a){var u=e.call(this,i,a,n(this).getComputedStyle(this,null).getPropertyValue(t));return u&&function(e){this.style.setProperty(t,u(e),r)}}return arguments.length<3&&(r=""),this.tween("style."+t,i)},Ps.text=function(t){return Ga(this,"text",t,za)},Ps.remove=function(){var t=this.namespace;return this.each("end.transition",function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)})},Ps.ease=function(t){var e=this.id,n=this.namespace;return arguments.length<1?this.node()[n][e].ease:("function"!=typeof t&&(t=nu.ease.apply(nu,arguments)),H(this,function(r){r[n][e].ease=t}))},Ps.delay=function(t){var e=this.id,n=this.namespace;return arguments.length<1?this.node()[n][e].delay:H(this,"function"==typeof t?function(r,i,a){r[n][e].delay=+t.call(r,r.__data__,i,a)}:(t=+t,function(r){r[n][e].delay=t}))},Ps.duration=function(t){var e=this.id,n=this.namespace;return arguments.length<1?this.node()[n][e].duration:H(this,"function"==typeof t?function(r,i,a){r[n][e].duration=Math.max(1,t.call(r,r.__data__,i,a))}:(t=Math.max(1,t),function(r){r[n][e].duration=t}))},Ps.each=function(t,e){var n=this.id,r=this.namespace;if(arguments.length<2){var i=Is,a=Os;try{Os=n,H(this,function(e,i,a){Is=e[r][n],t.call(e,e.__data__,i,a)})}finally{Is=i,Os=a}}else H(this,function(i){var a=i[r][n];(a.event||(a.event=nu.dispatch("start","end","interrupt"))).on(t,e)});return this},Ps.transition=function(){for(var t,e,n,r,i=this.id,a=++qs,u=this.namespace,o=[],s=0,c=this.length;c>s;s++){o.push(t=[]);for(var e=this[s],l=0,h=e.length;h>l;l++)(n=e[l])&&(r=n[u][i],Wa(n,l,u,a,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),t.push(n)}return Ha(o,u,a)},nu.svg.axis=function(){function t(t){t.each(function(){var t,c=nu.select(this),l=this.__chart__||n,h=this.__chart__=n.copy(),f=null==s?h.ticks?h.ticks.apply(h,o):h.domain():s,d=null==e?h.tickFormat?h.tickFormat.apply(h,o):b:e,p=c.selectAll(".tick").data(f,h),g=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Tu),m=nu.transition(p.exit()).style("opacity",Tu).remove(),y=nu.transition(p.order()).style("opacity",1),v=Math.max(i,0)+u,_=qi(h),x=c.selectAll(".domain").data([0]),w=(x.enter().append("path").attr("class","domain"),nu.transition(x));g.append("line"),g.append("text");var A,k,E,D,C=g.select("line"),S=y.select("line"),M=p.select("text").text(d),T=g.select("text"),F=y.select("text"),B="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(t=Za,A="x",E="y",k="x2",D="y2",M.attr("dy",0>B?"0em":".71em").style("text-anchor","middle"),w.attr("d","M"+_[0]+","+B*a+"V0H"+_[1]+"V"+B*a)):(t=Xa,A="y",E="x",k="y2",D="x2",M.attr("dy",".32em").style("text-anchor",0>B?"end":"start"),w.attr("d","M"+B*a+","+_[0]+"H0V"+_[1]+"H"+B*a)),C.attr(D,B*i),T.attr(E,B*v),S.attr(k,0).attr(D,B*i),F.attr(A,0).attr(E,B*v),h.rangeBand){var L=h,N=L.rangeBand()/2;l=h=function(t){return L(t)+N}}else l.rangeBand?l=h:m.call(t,h,l);g.call(t,l,h),y.call(t,h,h)})}var e,n=nu.scale.linear(),r=js,i=6,a=6,u=3,o=[10],s=null;return t.scale=function(e){return arguments.length?(n=e,t):n},t.orient=function(e){return arguments.length?(r=e in Us?e+"":js,t):r},t.ticks=function(){return arguments.length?(o=arguments,t):o},t.tickValues=function(e){return arguments.length?(s=e,t):s},t.tickFormat=function(n){return arguments.length?(e=n,t):e},t.tickSize=function(e){var n=arguments.length;return n?(i=+e,a=+arguments[n-1],t):i},t.innerTickSize=function(e){return arguments.length?(i=+e,t):i},t.outerTickSize=function(e){return arguments.length?(a=+e,t):a},t.tickPadding=function(e){return arguments.length?(u=+e,t):u},t.tickSubdivide=function(){return arguments.length&&t},t};var js="bottom",Us={top:1,right:1,bottom:1,left:1};nu.svg.brush=function(){function t(n){n.each(function(){var n=nu.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",a).on("touchstart.brush",a),u=n.selectAll(".background").data([0]);u.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),n.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var o=n.selectAll(".resize").data(g,b);o.exit().remove(),o.enter().append("g").attr("class",function(t){return"resize "+t}).style("cursor",function(t){return Ys[t]}).append("rect").attr("x",function(t){return/[ew]$/.test(t)?-3:null}).attr("y",function(t){return/^[ns]/.test(t)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),o.style("display",t.empty()?"none":null);var s,h=nu.transition(n),f=nu.transition(u);c&&(s=qi(c),f.attr("x",s[0]).attr("width",s[1]-s[0]),r(h)),l&&(s=qi(l),f.attr("y",s[0]).attr("height",s[1]-s[0]),i(h)),e(h)})}function e(t){t.selectAll(".resize").attr("transform",function(t){return"translate("+h[+/e$/.test(t)]+","+f[+/^s/.test(t)]+")"})}function r(t){t.select(".extent").attr("x",h[0]),t.selectAll(".extent,.n>rect,.s>rect").attr("width",h[1]-h[0])}function i(t){t.select(".extent").attr("y",f[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function a(){function a(){32==nu.event.keyCode&&(M||(b=null,F[0]-=h[1],F[1]-=f[1],M=2),E())}function g(){32==nu.event.keyCode&&2==M&&(F[0]+=h[1],F[1]+=f[1],M=0,E())}function m(){var t=nu.mouse(x),n=!1;_&&(t[0]+=_[0],t[1]+=_[1]),M||(nu.event.altKey?(b||(b=[(h[0]+h[1])/2,(f[0]+f[1])/2]),F[0]=h[+(t[0]l?(i=r,r=l):i=l),g[0]!=r||g[1]!=i?(n?o=null:u=null,g[0]=r,g[1]=i,!0):void 0}function v(){m(),k.style("pointer-events","all").selectAll(".resize").style("display",t.empty()?"none":null),nu.select("body").style("cursor",null),B.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),T(),A({type:"brushend"})}var b,_,x=this,w=nu.select(nu.event.target),A=s.of(x,arguments),k=nu.select(x),D=w.datum(),C=!/^(n|s)$/.test(D)&&c,S=!/^(e|w)$/.test(D)&&l,M=w.classed("extent"),T=X(x),F=nu.mouse(x),B=nu.select(n(x)).on("keydown.brush",a).on("keyup.brush",g);if(nu.event.changedTouches?B.on("touchmove.brush",m).on("touchend.brush",v):B.on("mousemove.brush",m).on("mouseup.brush",v),k.interrupt().selectAll("*").interrupt(),M)F[0]=h[0]-F[0],F[1]=f[0]-F[1];else if(D){var L=+/w$/.test(D),N=+/^n/.test(D);_=[h[1-L]-F[0],f[1-N]-F[1]],F[0]=h[L],F[1]=f[N]}else nu.event.altKey&&(b=F.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),nu.select("body").style("cursor",w.style("cursor")),A({type:"brushstart"}),m()}var u,o,s=C(t,"brushstart","brush","brushend"),c=null,l=null,h=[0,0],f=[0,0],d=!0,p=!0,g=Vs[0];return t.event=function(t){t.each(function(){var t=s.of(this,arguments),e={x:h,y:f,i:u,j:o},n=this.__chart__||e;this.__chart__=e,Os?nu.select(this).transition().each("start.brush",function(){u=n.i,o=n.j,h=n.x,f=n.y,t({type:"brushstart"})}).tween("brush:brush",function(){var n=_r(h,e.x),r=_r(f,e.y);return u=o=null,function(i){h=e.x=n(i),f=e.y=r(i),t({type:"brush",mode:"resize"})}}).each("end.brush",function(){u=e.i,o=e.j,t({type:"brush",mode:"resize"}),t({type:"brushend"})}):(t({type:"brushstart"}),t({type:"brush",mode:"resize"}),t({type:"brushend"}))})},t.x=function(e){return arguments.length?(c=e,g=Vs[!c<<1|!l],t):c},t.y=function(e){return arguments.length?(l=e,g=Vs[!c<<1|!l],t):l},t.clamp=function(e){return arguments.length?(c&&l?(d=!!e[0],p=!!e[1]):c?d=!!e:l&&(p=!!e),t):c&&l?[d,p]:c?d:l?p:null},t.extent=function(e){var n,r,i,a,s;return arguments.length?(c&&(n=e[0],r=e[1],l&&(n=n[0],r=r[0]),u=[n,r],c.invert&&(n=c(n),r=c(r)),n>r&&(s=n,n=r,r=s),(n!=h[0]||r!=h[1])&&(h=[n,r])),l&&(i=e[0],a=e[1],c&&(i=i[1],a=a[1]),o=[i,a],l.invert&&(i=l(i),a=l(a)),i>a&&(s=i,i=a,a=s),(i!=f[0]||a!=f[1])&&(f=[i,a])),t):(c&&(u?(n=u[0],r=u[1]):(n=h[0],r=h[1],c.invert&&(n=c.invert(n),r=c.invert(r)),n>r&&(s=n,n=r,r=s))),l&&(o?(i=o[0],a=o[1]):(i=f[0],a=f[1],l.invert&&(i=l.invert(i),a=l.invert(a)),i>a&&(s=i,i=a,a=s))),c&&l?[[n,i],[r,a]]:c?[n,r]:l&&[i,a])},t.clear=function(){return t.empty()||(h=[0,0],f=[0,0],u=o=null),t},t.empty=function(){return!!c&&h[0]==h[1]||!!l&&f[0]==f[1]},nu.rebind(t,s,"on")};var Ys={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Vs=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Hs=so.format=go.timeFormat,Gs=Hs.utc,zs=Gs("%Y-%m-%dT%H:%M:%S.%LZ");Hs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Ja:zs,Ja.parse=function(t){var e=new Date(t);return isNaN(e)?null:e},Ja.toString=zs.toString,so.second=jt(function(t){return new co(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(t.getTime()+1e3*Math.floor(e))},function(t){return t.getSeconds()}),so.seconds=so.second.range,so.seconds.utc=so.second.utc.range,so.minute=jt(function(t){return new co(6e4*Math.floor(t/6e4))},function(t,e){t.setTime(t.getTime()+6e4*Math.floor(e))},function(t){return t.getMinutes()}),so.minutes=so.minute.range,so.minutes.utc=so.minute.utc.range,so.hour=jt(function(t){var e=t.getTimezoneOffset()/60;return new co(36e5*(Math.floor(t/36e5-e)+e))},function(t,e){t.setTime(t.getTime()+36e5*Math.floor(e))},function(t){return t.getHours()}),so.hours=so.hour.range,so.hours.utc=so.hour.utc.range,so.month=jt(function(t){return t=so.day(t),t.setDate(1),t},function(t,e){t.setMonth(t.getMonth()+e)},function(t){return t.getMonth()}),so.months=so.month.range,so.months.utc=so.month.utc.range;var $s=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ws=[[so.second,1],[so.second,5],[so.second,15],[so.second,30],[so.minute,1],[so.minute,5],[so.minute,15],[so.minute,30],[so.hour,1],[so.hour,3],[so.hour,6],[so.hour,12],[so.day,1],[so.day,2],[so.week,1],[so.month,1],[so.month,3],[so.year,1]],Zs=Hs.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",Me]]),Xs={range:function(t,e,n){return nu.range(Math.ceil(t/n)*n,+e,n).map(Qa)},floor:b,ceil:b};Ws.year=so.year,so.scale=function(){return Ka(nu.scale.linear(),Ws,Zs)};var Js=Ws.map(function(t){return[t[0].utc,t[1]]}),Ks=Gs.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",Me]]);Js.year=so.year.utc,so.scale.utc=function(){return Ka(nu.scale.linear(),Js,Ks)},nu.text=St(function(t){return t.responseText}),nu.json=function(t,e){return Mt(t,"application/json",tu,e)},nu.html=function(t,e){return Mt(t,"text/html",eu,e)},nu.xml=St(function(t){return t.responseXML}),"function"==typeof define&&define.amd?define(nu):"object"==typeof e&&e.exports&&(e.exports=nu),this.d3=nu}()},{}],5:[function(t,e){e.exports={graphlib:t("./lib/graphlib"),dagre:t("./lib/dagre"),intersect:t("./lib/intersect"),render:t("./lib/render"),util:t("./lib/util"),version:t("./lib/version")}},{"./lib/dagre":12,"./lib/graphlib":13,"./lib/intersect":14,"./lib/render":29,"./lib/util":31,"./lib/version":32}],6:[function(t,e){function n(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),u=i.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");a.applyStyle(u,n[r+"Style"])}function r(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),u=i.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");a.applyStyle(u,n[r+"Style"])}function i(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),u=i.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");a.applyStyle(u,n[r+"Style"])}var a=t("./util");e.exports={"default":n,normal:n,vee:r,undirected:i}},{"./util":31}],7:[function(t,e){function n(t,e){var n=e.nodes().filter(function(t){return r.isSubgraph(e,t)}),a=t.selectAll("g.cluster").data(n,function(t){return t});return a.selectAll("*").remove(),a.enter().append("g").attr("class","cluster").attr("id",function(t){var n=e.node(t);return n.id}).style("opacity",0),r.applyTransition(a,e).style("opacity",1),a.each(function(t){var n=e.node(t),r=d3.select(this);d3.select(this).append("rect");var a=r.append("g").attr("class","label");i(a,n,n.clusterLabelPos)}),a.selectAll("rect").each(function(t){var n=e.node(t),i=d3.select(this);r.applyStyle(i,n.style)}),r.applyTransition(a.exit(),e).style("opacity",0).remove(),a}var r=t("./util"),i=t("./label/add-label");e.exports=n},{"./label/add-label":22,"./util":31}],8:[function(t,e){"use strict";function n(t,e){var n=t.selectAll("g.edgeLabel").data(e.edges(),function(t){return a.edgeToId(t)}).classed("update",!0);return n.selectAll("*").remove(),n.enter().append("g").classed("edgeLabel",!0).style("opacity",0),n.each(function(t){var n=e.edge(t),a=i(u.select(this),e.edge(t),0,0).classed("label",!0),o=a.node().getBBox();n.labelId&&a.attr("id",n.labelId),r.has(n,"width")||(n.width=o.width),r.has(n,"height")||(n.height=o.height)}),a.applyTransition(n.exit(),e).style("opacity",0).remove(),n}var r=t("./lodash"),i=t("./label/add-label"),a=t("./util"),u=t("./d3");e.exports=n},{"./d3":11,"./label/add-label":22,"./lodash":25,"./util":31}],9:[function(t,e){"use strict";function n(t,e,n){var i=t.selectAll("g.edgePath").data(e.edges(),function(t){return l.edgeToId(t)}).classed("update",!0);return u(i,e),o(i,e),l.applyTransition(i,e).style("opacity",1),i.each(function(t){var n=h.select(this),r=e.edge(t);r.elem=this,r.id&&n.attr("id",r.id),l.applyClass(n,r["class"],(n.classed("update")?"update ":"")+"edgePath")}),i.selectAll("path.path").each(function(t){var n=e.edge(t);n.arrowheadId=s.uniqueId("arrowhead");var i=h.select(this).attr("marker-end",function(){return"url(#"+n.arrowheadId+")"}).style("fill","none");l.applyTransition(i,e).attr("d",function(t){return r(e,t)}),l.applyStyle(i,n.style)}),i.selectAll("defs *").remove(),i.selectAll("defs").each(function(t){var r=e.edge(t),i=n[r.arrowhead];i(h.select(this),r.arrowheadId,r,"arrowhead")}),i}function r(t,e){var n=t.edge(e),r=t.node(e.v),a=t.node(e.w),u=n.points.slice(1,n.points.length-1);return u.unshift(c(r,u[0])),u.push(c(a,u[u.length-1])),i(n,u)}function i(t,e){var n=h.svg.line().x(function(t){return t.x}).y(function(t){return t.y});return s.has(t,"lineInterpolate")&&n.interpolate(t.lineInterpolate),s.has(t,"lineTension")&&n.tension(Number(t.lineTension)),n(e)}function a(t){var e=t.getBBox(),n=t.getTransformToElement(t.ownerSVGElement).translate(e.width/2,e.height/2);return{x:n.e,y:n.f}}function u(t,e){var n=t.enter().append("g").attr("class","edgePath").style("opacity",0);n.append("path").attr("class","path").attr("d",function(t){var n=e.edge(t),r=e.node(t.v).elem,u=s.range(n.points.length).map(function(){return a(r)});return i(n,u)}),n.append("defs")}function o(t,e){var n=t.exit();l.applyTransition(n,e).style("opacity",0).remove(),l.applyTransition(n.select("path.path"),e).attr("d",function(t){var n=e.node(t.v);if(n){var r=s.range(this.pathSegList.length).map(function(){return n});return i({},r)}return h.select(this).attr("d")})}var s=t("./lodash"),c=t("./intersect/intersect-node"),l=t("./util"),h=t("./d3");e.exports=n},{"./d3":11,"./intersect/intersect-node":18,"./lodash":25,"./util":31}],10:[function(t,e){"use strict"; + +function n(t,e,n){var o=e.nodes().filter(function(t){return!a.isSubgraph(e,t)}),s=t.selectAll("g.node").data(o,function(t){return t}).classed("update",!0);return s.selectAll("*").remove(),s.enter().append("g").attr("class","node").style("opacity",0),s.each(function(t){var o=e.node(t),s=u.select(this),c=s.append("g").attr("class","label"),l=i(c,o),h=n[o.shape],f=r.pick(l.node().getBBox(),"width","height");o.elem=this,o.id&&s.attr("id",o.id),o.labelId&&c.attr("id",o.labelId),a.applyClass(s,o["class"],(s.classed("update")?"update ":"")+"node"),r.has(o,"width")&&(f.width=o.width),r.has(o,"height")&&(f.height=o.height),f.width+=o.paddingLeft+o.paddingRight,f.height+=o.paddingTop+o.paddingBottom,c.attr("transform","translate("+(o.paddingLeft-o.paddingRight)/2+","+(o.paddingTop-o.paddingBottom)/2+")");var d=h(u.select(this),f,o);a.applyStyle(d,o.style);var p=d.node().getBBox();o.width=p.width,o.height=p.height}),a.applyTransition(s.exit(),e).style("opacity",0).remove(),s}var r=t("./lodash"),i=t("./label/add-label"),a=t("./util"),u=t("./d3");e.exports=n},{"./d3":11,"./label/add-label":22,"./lodash":25,"./util":31}],11:[function(t,e){e.exports=window.d3},{}],12:[function(t,e){var n;if(t)try{n=t("dagre")}catch(r){}n||(n=window.dagre),e.exports=n},{dagre:54}],13:[function(t,e){var n;if(t)try{n=t("graphlib")}catch(r){}n||(n=window.graphlib),e.exports=n},{graphlib:33}],14:[function(t,e){e.exports={node:t("./intersect-node"),circle:t("./intersect-circle"),ellipse:t("./intersect-ellipse"),polygon:t("./intersect-polygon"),rect:t("./intersect-rect")}},{"./intersect-circle":15,"./intersect-ellipse":16,"./intersect-node":18,"./intersect-polygon":19,"./intersect-rect":20}],15:[function(t,e){function n(t,e,n){return r(t,e,e,n)}var r=t("./intersect-ellipse");e.exports=n},{"./intersect-ellipse":16}],16:[function(t,e){function n(t,e,n,r){var i=t.x,a=t.y,u=i-r.x,o=a-r.y,s=Math.sqrt(e*e*o*o+n*n*u*u),c=Math.abs(e*n*u/s);r.xy?(y-m)/g:(y+m)/g,y=u*c-a*l,b=0>y?(y-m)/g:(y+m)/g,{x:v,y:b})}function r(t,e){return t*e>0}e.exports=n},{}],18:[function(t,e){function n(t,e){return t.intersect(e)}e.exports=n},{}],19:[function(t,e){function n(t,e,n){var i=t.x,a=t.y,u=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;e.forEach(function(t){o=Math.min(o,t.x),s=Math.min(s,t.y)});for(var c=i-t.width/2-o,l=a-t.height/2-s,h=0;h1&&u.sort(function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),u=e.x-n.x,o=e.y-n.y,s=Math.sqrt(u*u+o*o);return s>a?-1:a===s?0:1}),u[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}var r=t("./intersect-line");e.exports=n},{"./intersect-line":17}],20:[function(t,e){function n(t,e){var n,r,i=t.x,a=t.y,u=e.x-i,o=e.y-a,s=t.width/2,c=t.height/2;return Math.abs(o)*s>Math.abs(u)*c?(0>o&&(c=-c),n=0===o?0:c*u/o,r=c):(0>u&&(s=-s),n=s,r=0===u?0:s*o/u),{x:i+n,y:a+r}}e.exports=n},{}],21:[function(t,e){function n(t,e){var n=t.append("foreignObject").attr("width","100000"),i=n.append("xhtml:div"),a=e.label;switch(typeof a){case"function":i.insert(a);break;case"object":i.insert(function(){return a});break;default:i.html(a)}r.applyStyle(i,e.labelStyle),i.style("display","inline-block"),i.style("white-space","nowrap");var u,o;return i.each(function(){u=this.clientWidth,o=this.clientHeight}),n.attr("width",u).attr("height",o),n}var r=t("../util");e.exports=n},{"../util":31}],22:[function(t,e){function n(t,e,n){var u=e.label,o=t.append("g");"svg"===e.labelType?a(o,e):"string"!=typeof u||"html"===e.labelType?i(o,e):r(o,e);var s,c=o.node().getBBox();switch(n){case"top":s=-e.height/2;break;case"bottom":s=e.height/2-c.height;break;default:s=-c.height/2}return o.attr("transform","translate("+-c.width/2+","+s+")"),o}var r=t("./add-text-label"),i=t("./add-html-label"),a=t("./add-svg-label");e.exports=n},{"./add-html-label":21,"./add-svg-label":23,"./add-text-label":24}],23:[function(t,e){function n(t,e){var n=t;return n.node().appendChild(e.label),r.applyStyle(n,e.labelStyle),n}var r=t("../util");e.exports=n},{"../util":31}],24:[function(t,e){function n(t,e){for(var n=t.append("text"),a=r(e.label).split("\n"),u=0;ua)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+t+" Weight: "+a);c0&&(i=s.removeMin(),u=o[i],u.distance!==Number.POSITIVE_INFINITY);)r(i).forEach(c);return o}var i=t("../lodash"),a=t("../data/priority-queue");e.exports=n;var u=i.constant(1)},{"../data/priority-queue":47,"../lodash":51}],38:[function(t,e){function n(t){return r.filter(i(t),function(e){return e.length>1||1===e.length&&t.hasEdge(e[0],e[0])})}var r=t("../lodash"),i=t("./tarjan");e.exports=n},{"../lodash":51,"./tarjan":45}],39:[function(t,e){function n(t,e,n){return r(t,e||a,n||function(e){return t.outEdges(e)})}function r(t,e,n){var r={},i=t.nodes();return i.forEach(function(t){r[t]={},r[t][t]={distance:0},i.forEach(function(e){t!==e&&(r[t][e]={distance:Number.POSITIVE_INFINITY})}),n(t).forEach(function(n){var i=n.v===t?n.w:n.v,a=e(n);r[t][i]={distance:a,predecessor:t}})}),i.forEach(function(t){var e=r[t];i.forEach(function(n){var a=r[n];i.forEach(function(n){var r=a[t],i=e[n],u=a[n],o=r.distance+i.distance;oi&&(s[n]=u,c.decrease(n,i))}}var u,o=new i,s={},c=new a;if(0===t.nodeCount())return o;r.each(t.nodes(),function(t){c.add(t,Number.POSITIVE_INFINITY),o.setNode(t)}),c.decrease(t.nodes()[0],0);for(var l=!1;c.size()>0;){if(u=c.removeMin(),r.has(s,u))o.setEdge(u,s[u]);else{if(l)throw new Error("Input graph is not connected: "+t);l=!0}t.nodeEdges(u).forEach(n)}return o}var r=t("../lodash"),i=t("../graph"),a=t("../data/priority-queue");e.exports=n},{"../data/priority-queue":47,"../graph":48,"../lodash":51}],45:[function(t,e){function n(t){function e(o){var s=a[o]={onStack:!0,lowlink:n,index:n++};if(i.push(o),t.successors(o).forEach(function(t){r.has(a,t)?a[t].onStack&&(s.lowlink=Math.min(s.lowlink,a[t].index)):(e(t),s.lowlink=Math.min(s.lowlink,a[t].lowlink))}),s.lowlink===s.index){var c,l=[];do c=i.pop(),a[c].onStack=!1,l.push(c);while(o!==c);u.push(l)}}var n=0,i=[],a={},u=[];return t.nodes().forEach(function(t){r.has(a,t)||e(t)}),u}var r=t("../lodash");e.exports=n},{"../lodash":51}],46:[function(t,e){function n(t){function e(o){if(i.has(a,o))throw new r;i.has(n,o)||(a[o]=!0,n[o]=!0,i.each(t.predecessors(o),e),delete a[o],u.push(o))}var n={},a={},u=[];if(i.each(t.sinks(),e),i.size(n)!==t.nodeCount())throw new r;return u}function r(){}var i=t("../lodash");e.exports=n,n.CycleException=r},{"../lodash":51}],47:[function(t,e){function n(){this._arr=[],this._keyIndices={}}var r=t("../lodash");e.exports=n,n.prototype.size=function(){return this._arr.length},n.prototype.keys=function(){return this._arr.map(function(t){return t.key})},n.prototype.has=function(t){return r.has(this._keyIndices,t)},n.prototype.priority=function(t){var e=this._keyIndices[t];return void 0!==e?this._arr[e].priority:void 0},n.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},n.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,a=i.length;return n[t]=a,i.push({key:t,priority:e}),this._decrease(a),!0}return!1},n.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},n.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},n.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n>1,!(n[e].prioritya){var u=i;i=a,a=u}return i+h+a+h+(s.isUndefined(r)?c:r)}function u(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var u=i;i=a,a=u}var o={v:i,w:a};return r&&(o.name=r),o}function o(t,e){return a(t,e.v,e.w,e.name)}var s=t("./lodash");e.exports=n;var c="\x00",l="\x00",h="";n.prototype._nodeCount=0,n.prototype._edgeCount=0,n.prototype.isDirected=function(){return this._isDirected},n.prototype.isMultigraph=function(){return this._isMultigraph},n.prototype.isCompound=function(){return this._isCompound},n.prototype.setGraph=function(t){return this._label=t,this},n.prototype.graph=function(){return this._label},n.prototype.setDefaultNodeLabel=function(t){return s.isFunction(t)||(t=s.constant(t)),this._defaultNodeLabelFn=t,this},n.prototype.nodeCount=function(){return this._nodeCount},n.prototype.nodes=function(){return s.keys(this._nodes)},n.prototype.sources=function(){return s.filter(this.nodes(),function(t){return s.isEmpty(this._in[t])},this)},n.prototype.sinks=function(){return s.filter(this.nodes(),function(t){return s.isEmpty(this._out[t])},this)},n.prototype.setNodes=function(t,e){var n=arguments;return s.each(t,function(t){n.length>1?this.setNode(t,e):this.setNode(t)},this),this},n.prototype.setNode=function(t,e){return s.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=l,this._children[t]={},this._children[l][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},n.prototype.node=function(t){return this._nodes[t]},n.prototype.hasNode=function(t){return s.has(this._nodes,t)},n.prototype.removeNode=function(t){var e=this;if(s.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],s.each(this.children(t),function(t){this.setParent(t)},this),delete this._children[t]),s.each(s.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],s.each(s.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},n.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(s.isUndefined(e))e=l;else{e+="";for(var n=e;!s.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},n.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},n.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if(e!==l)return e}},n.prototype.children=function(t){if(s.isUndefined(t)&&(t=l),this._isCompound){var e=this._children[t];if(e)return s.keys(e)}else{if(t===l)return this.nodes();if(this.hasNode(t))return[]}},n.prototype.predecessors=function(t){var e=this._preds[t];return e?s.keys(e):void 0},n.prototype.successors=function(t){var e=this._sucs[t];return e?s.keys(e):void 0},n.prototype.neighbors=function(t){var e=this.predecessors(t);return e?s.union(e,this.successors(t)):void 0},n.prototype.filterNodes=function(t){function e(t){var a=r.parent(t);return void 0===a||n.hasNode(a)?(i[t]=a,a):a in i?i[a]:e(a)}var n=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});n.setGraph(this.graph()),s.each(this._nodes,function(e,r){t(r)&&n.setNode(r,e)},this),s.each(this._edgeObjs,function(t){n.hasNode(t.v)&&n.hasNode(t.w)&&n.setEdge(t,this.edge(t))},this);var r=this,i={};return this._isCompound&&s.each(n.nodes(),function(t){n.setParent(t,e(t))}),n},n.prototype.setDefaultEdgeLabel=function(t){return s.isFunction(t)||(t=s.constant(t)),this._defaultEdgeLabelFn=t,this},n.prototype.edgeCount=function(){return this._edgeCount},n.prototype.edges=function(){return s.values(this._edgeObjs)},n.prototype.setPath=function(t,e){var n=this,r=arguments;return s.reduce(t,function(t,i){return r.length>1?n.setEdge(t,i,e):n.setEdge(t,i),i}),this},n.prototype.setEdge=function(){var t,e,n,i,o=!1,c=arguments[0];"object"==typeof c&&null!==c&&"v"in c?(t=c.v,e=c.w,n=c.name,2===arguments.length&&(i=arguments[1],o=!0)):(t=c,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,e=""+e,s.isUndefined(n)||(n=""+n);var l=a(this._isDirected,t,e,n);if(s.has(this._edgeLabels,l))return o&&(this._edgeLabels[l]=i),this;if(!s.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=o?i:this._defaultEdgeLabelFn(t,e,n);var h=u(this._isDirected,t,e,n);return t=h.v,e=h.w,Object.freeze(h),this._edgeObjs[l]=h,r(this._preds[e],t),r(this._sucs[t],e),this._in[e][l]=h,this._out[t][l]=h,this._edgeCount++,this},n.prototype.edge=function(t,e,n){var r=1===arguments.length?o(this._isDirected,arguments[0]):a(this._isDirected,t,e,n);return this._edgeLabels[r]},n.prototype.hasEdge=function(t,e,n){var r=1===arguments.length?o(this._isDirected,arguments[0]):a(this._isDirected,t,e,n);return s.has(this._edgeLabels,r)},n.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?o(this._isDirected,arguments[0]):a(this._isDirected,t,e,n),u=this._edgeObjs[r];return u&&(t=u.v,e=u.w,delete this._edgeLabels[r],delete this._edgeObjs[r],i(this._preds[e],t),i(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},n.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var r=s.values(n);return e?s.filter(r,function(t){return t.v===e}):r}},n.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var r=s.values(n);return e?s.filter(r,function(t){return t.w===e}):r}},n.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);return n?n.concat(this.outEdges(t,e)):void 0}},{"./lodash":51}],49:[function(t,e){e.exports={Graph:t("./graph"),version:t("./version")}},{"./graph":48,"./version":52}],50:[function(t,e){function n(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:r(t),edges:i(t)};return u.isUndefined(t.graph())||(e.value=u.clone(t.graph())),e}function r(t){return u.map(t.nodes(),function(e){var n=t.node(e),r=t.parent(e),i={v:e};return u.isUndefined(n)||(i.value=n),u.isUndefined(r)||(i.parent=r),i})}function i(t){return u.map(t.edges(),function(e){var n=t.edge(e),r={v:e.v,w:e.w};return u.isUndefined(e.name)||(r.name=e.name),u.isUndefined(n)||(r.value=n),r})}function a(t){var e=new o(t.options).setGraph(t.value);return u.each(t.nodes,function(t){e.setNode(t.v,t.value),t.parent&&e.setParent(t.v,t.parent)}),u.each(t.edges,function(t){e.setEdge({v:t.v,w:t.w,name:t.name},t.value)}),e}var u=t("./lodash"),o=t("./graph");e.exports={write:n,read:a}},{"./graph":48,"./lodash":51}],51:[function(t,e){var n;if("function"==typeof t)try{n=t("lodash")}catch(r){}n||(n=window._),e.exports=n},{lodash:53}],52:[function(t,e){e.exports="1.0.7"},{}],53:[function(t,e,n){(function(t){(function(){function r(t,e){if(t!==e){var n=null===t,r=t===E,i=t===t,a=null===e,u=e===E,o=e===e;if(t>e&&!a||!i||n&&!u&&o||r&&o)return 1;if(e>t&&!n||!o||a&&!r&&i||u&&i)return-1}return 0}function i(t,e,n){for(var r=t.length,i=n?r:-1;n?i--:++i-1;);return n}function c(t,e){for(var n=t.length;n--&&e.indexOf(t.charAt(n))>-1;);return n}function l(t,e){return r(t.criteria,e.criteria)||t.index-e.index}function h(t,e,n){for(var i=-1,a=t.criteria,u=e.criteria,o=a.length,s=n.length;++i=s)return c;var l=n[i];return c*("asc"===l||l===!0?1:-1)}}return t.index-e.index}function f(t){return Ht[t]}function d(t){return Gt[t]}function p(t,e,n){return e?t=Wt[t]:n&&(t=Zt[t]),"\\"+t}function g(t){return"\\"+Zt[t]}function m(t,e,n){for(var r=t.length,i=e+(n?0:-1);n?i--:++i=t&&t>=9&&13>=t||32==t||160==t||5760==t||6158==t||t>=8192&&(8202>=t||8232==t||8233==t||8239==t||8287==t||12288==t||65279==t)}function b(t,e){for(var n=-1,r=t.length,i=-1,a=[];++ne,i=n?t.length:0,a=zn(0,i,this.__views__),u=a.start,o=a.end,s=o-u,c=r?o:u-1,l=this.__iteratees__,h=l.length,f=0,d=wu(s,this.__takeCount__);if(!n||j>i||i==s&&d==s)return nn(r&&n?t.reverse():t,this.__actions__);var p=[];t:for(;s--&&d>f;){c+=e;for(var g=-1,m=t[c];++g=j?gn(e):null,c=e.length;s&&(u=Jt,o=!1,e=s);t:for(;++in&&(n=-n>i?0:i+n),r=r===E||r>i?i:+r||0,0>r&&(r+=i),i=n>r?0:r>>>0,n>>>=0;i>n;)t[n++]=e;return t}function Ce(t,e){var n=[];return Ou(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function Se(t,e,n,r){var i;return n(t,function(t,n,a){return e(t,n,a)?(i=r?n:t,!1):void 0}),i}function Me(t,e,n,r){r||(r=[]);for(var i=-1,a=t.length;++ir;)t=t[e[r++]];return r&&r==i?t:E}}function Oe(t,e,n,r,i,a){return t===e?!0:null==t||null==e||!Ni(t)&&!y(e)?t!==t&&e!==e:Ie(t,e,Oe,n,r,i,a)}function Ie(t,e,n,r,i,a,u){var o=Mo(t),s=Mo(e),c=z,l=z;o||(c=nu.call(t),c==G?c=Q:c!=Q&&(o=Vi(t))),s||(l=nu.call(e),l==G?l=Q:l!=Q&&(s=Vi(e)));var h=c==Q,f=l==Q,d=c==l;if(d&&!o&&!h)return qn(t,e,c);if(!i){var p=h&&tu.call(t,"__wrapped__"),g=f&&tu.call(e,"__wrapped__");if(p||g)return n(p?t.value():t,g?e.value():e,r,i,a,u)}if(!d)return!1;a||(a=[]),u||(u=[]);for(var m=a.length;m--;)if(a[m]==t)return u[m]==e;a.push(t),u.push(e); + +var y=(o?Pn:jn)(t,e,n,r,i,a,u);return a.pop(),u.pop(),y}function Re(t,e,n){var r=e.length,i=r,a=!n;if(null==t)return!i;for(t=hr(t);r--;){var u=e[r];if(a&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++re&&(e=-e>i?0:i+e),n=n===E||n>i?i:+n||0,0>n&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=ja(i);++r=j,s=o?gn():null,c=[];s?(r=Jt,u=!1):(o=!1,s=e?[]:c);t:for(;++n=i){for(;i>r;){var a=r+i>>>1,u=t[a];(n?e>=u:e>u)&&null!==u?r=a+1:i=a}return i}return an(t,e,Ca,n)}function an(t,e,n,r){e=n(e);for(var i=0,a=t?t.length:0,u=e!==e,o=null===e,s=e===E;a>i;){var c=yu((i+a)/2),l=n(t[c]),h=l!==E,f=l===l;if(u)var d=f||r;else d=o?f&&h&&(r||null!=l):s?f&&(r||h):null==l?!1:r?e>=l:e>l;d?i=c+1:a=c}return wu(a,Mu)}function un(t,e,n){if("function"!=typeof t)return Ca;if(e===E)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,a){return t.call(e,n,r,i,a)};case 5:return function(n,r,i,a,u){return t.call(e,n,r,i,a,u)}}return function(){return t.apply(e,arguments)}}function on(t){var e=new au(t.byteLength),n=new du(e);return n.set(new du(t)),e}function sn(t,e,n){for(var r=n.length,i=-1,a=xu(t.length-r,0),u=-1,o=e.length,s=ja(o+a);++u2?n[i-2]:E,u=i>2?n[2]:E,o=i>1?n[i-1]:E;for("function"==typeof a?(a=un(a,o,5),i-=2):(a="function"==typeof o?o:E,i-=a?1:0),u&&Qn(n[0],n[1],u)&&(a=3>i?E:a,i=1);++r-1?n[u]:E}return Se(n,r,t)}}function wn(t){return function(e,n,r){return e&&e.length?(n=Un(n,r,3),i(e,n,t)):-1}}function An(t){return function(e,n,r){return n=Un(n,r,3),Se(e,n,t,!0)}}function kn(t){return function(){for(var e,n=arguments.length,r=t?n:-1,i=0,a=ja(n);t?r--:++r=j)return e.plant(r).value();for(var i=0,u=n?a[i].apply(this,t):r;++iv){var k=o?te(o):E,D=xu(c-v,0),M=p?A:E,T=p?E:A,F=p?x:E,N=p?E:x;e|=p?B:L,e&=~(p?L:B),g||(e&=~(C|S));var O=[t,e,n,F,M,N,T,k,s,D],I=Bn.apply(E,O);return er(t)&&Yu(I,O),I.placeholder=w,I}}var R=f?n:this,P=d?R[t]:t;return o&&(x=sr(x,o)),h&&s=e||!bu(e))return"";var i=e-r;return n=null==n?" ":n+"",ma(n,gu(i/n.length)).slice(0,i)}function Nn(t,e,n,r){function i(){for(var e=-1,o=arguments.length,s=-1,c=r.length,l=ja(c+o);++ss))return!1;for(;++o-1&&t%1==0&&e>t}function Qn(t,e,n){if(!Ni(n))return!1;var r=typeof e;if("number"==r?Jn(n)&&Kn(e,n.length):"string"==r&&e in n){var i=n[e];return t===t?t===i:i!==i}return!1}function tr(t,e){var n=typeof t;if("string"==n&&Et.test(t)||"number"==n)return!0;if(Mo(t))return!1;var r=!kt.test(t);return r||null!=e&&t in hr(e)}function er(t){var n=Yn(t);if(!(n in J.prototype))return!1;var r=e[n];if(t===r)return!0;var i=ju(r);return!!i&&t===i[0]}function nr(t){return"number"==typeof t&&t>-1&&t%1==0&&Fu>=t}function rr(t){return t===t&&!Ni(t)}function ir(t,e){var n=t[1],r=e[1],i=n|r,a=N>i,u=r==N&&n==T||r==N&&n==O&&t[7].length<=e[8]||r==(N|O)&&n==T;if(!a&&!u)return t;r&C&&(t[2]=e[2],i|=n&C?0:M);var o=e[3];if(o){var s=t[3];t[3]=s?sn(s,o,e[4]):te(o),t[4]=s?b(t[3],H):te(e[4])}return o=e[5],o&&(s=t[5],t[5]=s?cn(s,o,e[6]):te(o),t[6]=s?b(t[5],H):te(e[6])),o=e[7],o&&(t[7]=te(o)),r&N&&(t[8]=null==t[8]?e[8]:wu(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function ar(t,e){return t===E?e:To(t,e,ar)}function ur(t,e){t=hr(t);for(var n=-1,r=e.length,i={};++nr;)u[++a]=We(t,r,r+=e);return u}function gr(t){for(var e=-1,n=t?t.length:0,r=-1,i=[];++ee?0:e)):[]}function yr(t,e,n){var r=t?t.length:0;return r?((n?Qn(t,e,n):null==e)&&(e=1),e=r-(+e||0),We(t,0,0>e?0:e)):[]}function vr(t,e,n){return t&&t.length?en(t,Un(e,n,3),!0,!0):[]}function br(t,e,n){return t&&t.length?en(t,Un(e,n,3),!0):[]}function _r(t,e,n,r){var i=t?t.length:0;return i?(n&&"number"!=typeof n&&Qn(t,e,n)&&(n=0,r=i),De(t,e,n,r)):[]}function xr(t){return t?t[0]:E}function wr(t,e,n){var r=t?t.length:0;return n&&Qn(t,e,n)&&(e=!1),r?Me(t,e):[]}function Ar(t){var e=t?t.length:0;return e?Me(t,!0):[]}function kr(t,e,n){var r=t?t.length:0;if(!r)return-1;if("number"==typeof n)n=0>n?xu(r+n,0):n;else if(n){var i=rn(t,e);return r>i&&(e===e?e===t[i]:t[i]!==t[i])?i:-1}return a(t,e,n||0)}function Er(t){return yr(t,1)}function Dr(t){var e=t?t.length:0;return e?t[e-1]:E}function Cr(t,e,n){var r=t?t.length:0;if(!r)return-1;var i=r;if("number"==typeof n)i=(0>n?xu(r+n,0):wu(n||0,r-1))+1;else if(n){i=rn(t,e,!0)-1;var a=t[i];return(e===e?e===a:a!==a)?i:-1}if(e!==e)return m(t,i,!0);for(;i--;)if(t[i]===e)return i;return-1}function Sr(){var t=arguments,e=t[0];if(!e||!e.length)return e;for(var n=0,r=Vn(),i=t.length;++n-1;)fu.call(e,a,1);return e}function Mr(t,e,n){var r=[];if(!t||!t.length)return r;var i=-1,a=[],u=t.length;for(e=Un(e,n,3);++ie?0:e)):[]}function Lr(t,e,n){var r=t?t.length:0;return r?((n?Qn(t,e,n):null==e)&&(e=1),e=r-(+e||0),We(t,0>e?0:e)):[]}function Nr(t,e,n){return t&&t.length?en(t,Un(e,n,3),!1,!0):[]}function Or(t,e,n){return t&&t.length?en(t,Un(e,n,3)):[]}function Ir(t,e,n,r){var i=t?t.length:0;if(!i)return[];null!=e&&"boolean"!=typeof e&&(r=n,n=Qn(t,e,r)?E:e,e=!1);var u=Un();return(null!=n||u!==_e)&&(n=u(n,r,3)),e&&Vn()==a?_(t,n):Qe(t,n)}function Rr(t){if(!t||!t.length)return[];var e=-1,n=0;t=oe(t,function(t){return Jn(t)?(n=xu(t.length,n),!0):void 0});for(var r=ja(n);++en?xu(i+n,0):n||0,"string"==typeof t||!Mo(t)&&Yi(t)?i>=n&&t.indexOf(e,n)>-1:!!i&&Vn(t,e,n)>-1}function ti(t,e,n){var r=Mo(t)?se:Pe;return e=Un(e,n,3),r(t,e)}function ei(t,e){return ti(t,La(e))}function ni(t,e,n){var r=Mo(t)?oe:Ce;return e=Un(e,n,3),r(t,function(t,n,r){return!e(t,n,r)})}function ri(t,e,n){if(n?Qn(t,e,n):null==e){t=lr(t);var r=t.length;return r>0?t[ze(0,r-1)]:E}var i=-1,a=$i(t),r=a.length,u=r-1;for(e=wu(0>e?0:+e||0,r);++i0&&(n=e.apply(this,arguments)),1>=t&&(e=E),n}}function di(t,e,n){function r(){d&&uu(d),c&&uu(c),g=0,c=d=p=E}function i(e,n){n&&uu(n),c=d=p=E,e&&(g=go(),l=t.apply(f,s),d||c||(s=f=E))}function a(){var t=e-(go()-h);0>=t||t>e?i(p,c):d=hu(a,t)}function u(){i(y,d)}function o(){if(s=arguments,h=go(),f=this,p=y&&(d||!v),m===!1)var n=v&&!d;else{c||v||(g=h);var r=m-(h-g),i=0>=r||r>m;i?(c&&(c=uu(c)),g=h,l=t.apply(f,s)):c||(c=hu(u,r))}return i&&d?d=uu(d):d||e===m||(d=hu(a,e)),n&&(i=!0,l=t.apply(f,s)),!i||d||c||(s=f=E),l}var s,c,l,h,f,d,p,g=0,m=!1,y=!0;if("function"!=typeof t)throw new Za(V);if(e=0>e?0:+e||0,n===!0){var v=!0;y=!1}else Ni(n)&&(v=!!n.leading,m="maxWait"in n&&xu(+n.maxWait||0,e),y="trailing"in n?!!n.trailing:y);return o.cancel=r,o}function pi(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new Za(V);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var u=t.apply(this,r);return n.cache=a.set(i,u),u};return n.cache=new pi.Cache,n}function gi(t){if("function"!=typeof t)throw new Za(V);return function(){return!t.apply(this,arguments)}}function mi(t){return fi(2,t)}function yi(t,e){if("function"!=typeof t)throw new Za(V);return e=xu(e===E?t.length-1:+e||0,0),function(){for(var n=arguments,r=-1,i=xu(n.length-e,0),a=ja(i);++re}function ki(t,e){return t>=e}function Ei(t){return y(t)&&Jn(t)&&tu.call(t,"callee")&&!cu.call(t,"callee")}function Di(t){return t===!0||t===!1||y(t)&&nu.call(t)==$}function Ci(t){return y(t)&&nu.call(t)==W}function Si(t){return!!t&&1===t.nodeType&&y(t)&&!ji(t)}function Mi(t){return null==t?!0:Jn(t)&&(Mo(t)||Yi(t)||Ei(t)||y(t)&&Li(t.splice))?!t.length:!jo(t).length}function Ti(t,e,n,r){n="function"==typeof n?un(n,r,3):E;var i=n?n(t,e):E;return i===E?Oe(t,e,n):!!i}function Fi(t){return y(t)&&"string"==typeof t.message&&nu.call(t)==Z}function Bi(t){return"number"==typeof t&&bu(t)}function Li(t){return Ni(t)&&nu.call(t)==X}function Ni(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Oi(t,e,n,r){return n="function"==typeof n?un(n,r,3):E,Re(t,Hn(e),n)}function Ii(t){return qi(t)&&t!=+t}function Ri(t){return null==t?!1:Li(t)?iu.test(Qa.call(t)):y(t)&&Nt.test(t)}function Pi(t){return null===t}function qi(t){return"number"==typeof t||y(t)&&nu.call(t)==K}function ji(t){var e;if(!y(t)||nu.call(t)!=Q||Ei(t)||!tu.call(t,"constructor")&&(e=t.constructor,"function"==typeof e&&!(e instanceof e)))return!1;var n;return Te(t,function(t,e){n=e}),n===E||tu.call(t,n)}function Ui(t){return Ni(t)&&nu.call(t)==tt}function Yi(t){return"string"==typeof t||y(t)&&nu.call(t)==nt}function Vi(t){return y(t)&&nr(t.length)&&!!Yt[nu.call(t)]}function Hi(t){return t===E}function Gi(t,e){return e>t}function zi(t,e){return e>=t}function $i(t){var e=t?Uu(t):0;return nr(e)?e?te(t):[]:aa(t)}function Wi(t){return be(t,ta(t))}function Zi(t,e,n){var r=Nu(t);return n&&Qn(t,e,n)&&(e=E),e?ye(r,e):r}function Xi(t){return Le(t,ta(t))}function Ji(t,e,n){var r=null==t?E:Ne(t,fr(e),e+"");return r===E?n:r}function Ki(t,e){if(null==t)return!1;var n=tu.call(t,e);if(!n&&!tr(e)){if(e=fr(e),t=1==e.length?t:Ne(t,We(e,0,-1)),null==t)return!1;e=Dr(e),n=tu.call(t,e)}return n||nr(t.length)&&Kn(e,t.length)&&(Mo(t)||Ei(t))}function Qi(t,e,n){n&&Qn(t,e,n)&&(e=E);for(var r=-1,i=jo(t),a=i.length,u={};++r0;++r=wu(e,n)&&tn?0:+n||0,r),n-=e.length,n>=0&&t.indexOf(e,n)==n}function fa(t){return t=o(t),t&&_t.test(t)?t.replace(vt,d):t}function da(t){return t=o(t),t&&St.test(t)?t.replace(Ct,p):t||"(?:)"}function pa(t,e,n){t=o(t),e=+e;var r=t.length;if(r>=e||!bu(e))return t;var i=(e-r)/2,a=yu(i),u=gu(i);return n=Ln("",u,n),n.slice(0,a)+t+n}function ga(t,e,n){return(n?Qn(t,e,n):null==e)?e=0:e&&(e=+e),t=ba(t),ku(t,e||(Lt.test(t)?16:10))}function ma(t,e){var n="";if(t=o(t),e=+e,1>e||!t||!bu(e))return n;do e%2&&(n+=t),e=yu(e/2),t+=t;while(e);return n}function ya(t,e,n){return t=o(t),n=null==n?0:wu(0>n?0:+n||0,t.length),t.lastIndexOf(e,n)==n}function va(t,n,r){var i=e.templateSettings;r&&Qn(t,n,r)&&(n=r=E),t=o(t),n=me(ye({},r||n),i,ge);var a,u,s=me(ye({},n.imports),i.imports,ge),c=jo(s),l=tn(s,c),h=0,f=n.interpolate||Rt,d="__p += '",p=$a((n.escape||Rt).source+"|"+f.source+"|"+(f===At?Ft:Rt).source+"|"+(n.evaluate||Rt).source+"|$","g"),m="//# sourceURL="+("sourceURL"in n?n.sourceURL:"lodash.templateSources["+ ++Ut+"]")+"\n";t.replace(p,function(e,n,r,i,o,s){return r||(r=i),d+=t.slice(h,s).replace(Pt,g),n&&(a=!0,d+="' +\n__e("+n+") +\n'"),o&&(u=!0,d+="';\n"+o+";\n__p += '"),r&&(d+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),h=s+e.length,e}),d+="';\n";var y=n.variable;y||(d="with (obj) {\n"+d+"\n}\n"),d=(u?d.replace(pt,""):d).replace(gt,"$1").replace(mt,"$1;"),d="function("+(y||"obj")+") {\n"+(y?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(u?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+d+"return __p\n}";var v=Jo(function(){return Va(c,m+"return "+d).apply(E,l)});if(v.source=d,Fi(v))throw v;return v}function ba(t,e,n){var r=t;return(t=o(t))?(n?Qn(r,e,n):null==e)?t.slice(x(t),w(t)+1):(e+="",t.slice(s(t,e),c(t,e)+1)):t}function _a(t,e,n){var r=t;return t=o(t),t?t.slice((n?Qn(r,e,n):null==e)?x(t):s(t,e+"")):t}function xa(t,e,n){var r=t;return t=o(t),t?(n?Qn(r,e,n):null==e)?t.slice(0,w(t)+1):t.slice(0,c(t,e+"")+1):t}function wa(t,e,n){n&&Qn(t,e,n)&&(e=E);var r=I,i=R;if(null!=e)if(Ni(e)){var a="separator"in e?e.separator:a;r="length"in e?+e.length||0:r,i="omission"in e?o(e.omission):i}else r=+e||0;if(t=o(t),r>=t.length)return t;var u=r-i.length;if(1>u)return i;var s=t.slice(0,u);if(null==a)return s+i;if(Ui(a)){if(t.slice(u).search(a)){var c,l,h=t.slice(0,u);for(a.global||(a=$a(a.source,(Bt.exec(a)||"")+"g")),a.lastIndex=0;c=a.exec(h);)l=c.index;s=s.slice(0,null==l?u:l)}}else if(t.indexOf(a,u)!=u){var f=s.lastIndexOf(a);f>-1&&(s=s.slice(0,f))}return s+i}function Aa(t){return t=o(t),t&&bt.test(t)?t.replace(yt,A):t}function ka(t,e,n){return n&&Qn(t,e,n)&&(e=E),t=o(t),t.match(e||qt)||[]}function Ea(t,e,n){return n&&Qn(t,e,n)&&(e=E),y(t)?Sa(t):_e(t,e)}function Da(t){return function(){return t}}function Ca(t){return t}function Sa(t){return qe(xe(t,!0))}function Ma(t,e){return je(t,xe(e,!0))}function Ta(t,e,n){if(null==n){var r=Ni(e),i=r?jo(e):E,a=i&&i.length?Le(e,i):E;(a?a.length:r)||(a=!1,n=e,e=t,t=this)}a||(a=Le(e,jo(e)));var u=!0,o=-1,s=Li(t),c=a.length;n===!1?u=!1:Ni(n)&&"chain"in n&&(u=n.chain);for(;++ot||!bu(t))return[];var r=-1,i=ja(wu(t,Su));for(e=un(e,n,1);++rr?i[r]=e(r):e(r);return i}function Ra(t){var e=++eu;return o(t)+e}function Pa(t,e){return(+t||0)+(+e||0)}function qa(t,e,n){return n&&Qn(t,e,n)&&(e=E),e=Un(e,n,3),1==e.length?de(Mo(t)?t:lr(t),e):Ke(t,e)}t=t?re.defaults(ne.Object(),t,re.pick(ne,jt)):ne;{var ja=t.Array,Ua=t.Date,Ya=t.Error,Va=t.Function,Ha=t.Math,Ga=t.Number,za=t.Object,$a=t.RegExp,Wa=t.String,Za=t.TypeError,Xa=ja.prototype,Ja=za.prototype,Ka=Wa.prototype,Qa=Va.prototype.toString,tu=Ja.hasOwnProperty,eu=0,nu=Ja.toString,ru=ne._,iu=$a("^"+Qa.call(tu).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),au=t.ArrayBuffer,uu=t.clearTimeout,ou=t.parseFloat,su=Ha.pow,cu=Ja.propertyIsEnumerable,lu=Gn(t,"Set"),hu=t.setTimeout,fu=Xa.splice,du=t.Uint8Array,pu=Gn(t,"WeakMap"),gu=Ha.ceil,mu=Gn(za,"create"),yu=Ha.floor,vu=Gn(ja,"isArray"),bu=t.isFinite,_u=Gn(za,"keys"),xu=Ha.max,wu=Ha.min,Au=Gn(Ua,"now"),ku=t.parseInt,Eu=Ha.random,Du=Ga.NEGATIVE_INFINITY,Cu=Ga.POSITIVE_INFINITY,Su=4294967295,Mu=Su-1,Tu=Su>>>1,Fu=9007199254740991,Bu=pu&&new pu,Lu={};e.support={}}e.templateSettings={escape:xt,evaluate:wt,interpolate:At,variable:"",imports:{_:e}};var Nu=function(){function t(){}return function(e){if(Ni(e)){t.prototype=e;var n=new t;t.prototype=E}return n||{}}}(),Ou=fn(Fe),Iu=fn(Be,!0),Ru=dn(),Pu=dn(!0),qu=Bu?function(t,e){return Bu.set(t,e),t}:Ca,ju=Bu?function(t){return Bu.get(t)}:Ba,Uu=Ve("length"),Yu=function(){var t=0,e=0;return function(n,r){var i=go(),a=q-(i-e);if(e=i,a>0){if(++t>=P)return n}else t=0;return qu(n,r)}}(),Vu=yi(function(t,e){return y(t)&&Jn(t)?Ae(t,Me(e,!1,!0)):[]}),Hu=wn(),Gu=wn(!0),zu=yi(function(t){for(var e=t.length,n=e,r=ja(h),i=Vn(),u=i==a,o=[];n--;){var s=t[n]=Jn(s=t[n])?s:[];r[n]=u&&s.length>=120?gn(n&&s):null}var c=t[0],l=-1,h=c?c.length:0,f=r[0];t:for(;++l2?t[e-2]:E,r=e>1?t[e-1]:E;return e>2&&"function"==typeof n?e-=2:(n=e>1&&"function"==typeof r?(--e,r):E,r=E),t.length=e,Pr(t,n,r)}),to=yi(function(t){return t=Me(t),this.thru(function(e){return Qt(Mo(e)?e:[hr(e)],t)})}),eo=yi(function(t,e){return ve(t,Me(e))}),no=ln(function(t,e,n){tu.call(t,n)?++t[n]:t[n]=1}),ro=xn(Ou),io=xn(Iu,!0),ao=En(ee,Ou),uo=En(ie,Iu),oo=ln(function(t,e,n){tu.call(t,n)?t[n].push(e):t[n]=[e]}),so=ln(function(t,e,n){t[n]=e}),co=yi(function(t,e,n){var r=-1,i="function"==typeof e,a=tr(e),u=Jn(t)?ja(t.length):[];return Ou(t,function(t){var o=i?e:a&&null!=t?t[e]:E;u[++r]=o?o.apply(t,n):Xn(t,e,n)}),u}),lo=ln(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),ho=Fn(le,Ou),fo=Fn(he,Iu),po=yi(function(t,e){if(null==t)return[];var n=e[2];return n&&Qn(e[0],e[1],n)&&(e.length=1),Je(t,Me(e),[])}),go=Au||function(){return(new Ua).getTime()},mo=yi(function(t,e,n){var r=C;if(n.length){var i=b(n,mo.placeholder);r|=B}return Rn(t,r,e,n,i)}),yo=yi(function(t,e){e=e.length?Me(e):Xi(t);for(var n=-1,r=e.length;++n0||0>e)?new J(n):(0>t?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==E&&(e=+e||0,n=0>e?n.dropRight(-e):n.take(e-t)),n)},J.prototype.takeRightWhile=function(t,e){return this.reverse().takeWhile(t,e).reverse()},J.prototype.toArray=function(){return this.take(Cu)},Fe(J.prototype,function(t,n){var r=/^(?:filter|map|reject)|While$/.test(n),i=/^(?:first|last)$/.test(n),a=e[i?"take"+("last"==n?"Right":""):n];a&&(e.prototype[n]=function(){var e=i?[1]:arguments,n=this.__chain__,u=this.__wrapped__,o=!!this.__actions__.length,s=u instanceof J,c=e[0],l=s||Mo(u);l&&r&&"function"==typeof c&&1!=c.length&&(s=l=!1);var h=function(t){return i&&n?a(t,1)[0]:a.apply(E,ce([t],e))},f={func:Vr,args:[h],thisArg:E},d=s&&!o;if(i&&!n)return d?(u=u.clone(),u.__actions__.push(f),t.call(u)):a.call(E,this.value())[0];if(!i&&l){u=d?u:new J(this);var p=t.apply(u,e);return p.__actions__.push(f),new v(p,n)}return this.thru(h)})}),ee(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(t){var n=(/^(?:replace|split)$/.test(t)?Ka:Xa)[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:join|pop|replace|shift)$/.test(t);e.prototype[t]=function(){var t=arguments;return i&&!this.__chain__?n.apply(this.value(),t):this[r](function(e){return n.apply(e,t)})}}),Fe(J.prototype,function(t,n){var r=e[n];if(r){var i=r.name,a=Lu[i]||(Lu[i]=[]);a.push({name:n,func:r})}}),Lu[Bn(E,S).name]=[{name:"wrapper",func:E}],J.prototype.clone=et,J.prototype.reverse=rt,J.prototype.value=Ht,e.prototype.chain=Hr,e.prototype.commit=Gr,e.prototype.concat=to,e.prototype.plant=zr,e.prototype.reverse=$r,e.prototype.toString=Wr,e.prototype.run=e.prototype.toJSON=e.prototype.valueOf=e.prototype.value=Zr,e.prototype.collect=e.prototype.map,e.prototype.head=e.prototype.first,e.prototype.select=e.prototype.filter,e.prototype.tail=e.prototype.rest,e}var E,D="3.10.1",C=1,S=2,M=4,T=8,F=16,B=32,L=64,N=128,O=256,I=30,R="...",P=150,q=16,j=200,U=1,Y=2,V="Expected a function",H="__lodash_placeholder__",G="[object Arguments]",z="[object Array]",$="[object Boolean]",W="[object Date]",Z="[object Error]",X="[object Function]",J="[object Map]",K="[object Number]",Q="[object Object]",tt="[object RegExp]",et="[object Set]",nt="[object String]",rt="[object WeakMap]",it="[object ArrayBuffer]",at="[object Float32Array]",ut="[object Float64Array]",ot="[object Int8Array]",st="[object Int16Array]",ct="[object Int32Array]",lt="[object Uint8Array]",ht="[object Uint8ClampedArray]",ft="[object Uint16Array]",dt="[object Uint32Array]",pt=/\b__p \+= '';/g,gt=/\b(__p \+=) '' \+/g,mt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,yt=/&(?:amp|lt|gt|quot|#39|#96);/g,vt=/[&<>"'`]/g,bt=RegExp(yt.source),_t=RegExp(vt.source),xt=/<%-([\s\S]+?)%>/g,wt=/<%([\s\S]+?)%>/g,At=/<%=([\s\S]+?)%>/g,kt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,Et=/^\w*$/,Dt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,Ct=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,St=RegExp(Ct.source),Mt=/[\u0300-\u036f\ufe20-\ufe23]/g,Tt=/\\(\\)?/g,Ft=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Bt=/\w*$/,Lt=/^0[xX]/,Nt=/^\[object .+?Constructor\]$/,Ot=/^\d+$/,It=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Rt=/($^)/,Pt=/['\n\r\u2028\u2029\\]/g,qt=function(){var t="[A-Z\\xc0-\\xd6\\xd8-\\xde]",e="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(t+"+(?="+t+e+")|"+t+"?"+e+"|"+t+"+|[0-9]+","g")}(),jt=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"],Ut=-1,Yt={};Yt[at]=Yt[ut]=Yt[ot]=Yt[st]=Yt[ct]=Yt[lt]=Yt[ht]=Yt[ft]=Yt[dt]=!0,Yt[G]=Yt[z]=Yt[it]=Yt[$]=Yt[W]=Yt[Z]=Yt[X]=Yt[J]=Yt[K]=Yt[Q]=Yt[tt]=Yt[et]=Yt[nt]=Yt[rt]=!1;var Vt={};Vt[G]=Vt[z]=Vt[it]=Vt[$]=Vt[W]=Vt[at]=Vt[ut]=Vt[ot]=Vt[st]=Vt[ct]=Vt[K]=Vt[Q]=Vt[tt]=Vt[nt]=Vt[lt]=Vt[ht]=Vt[ft]=Vt[dt]=!0,Vt[Z]=Vt[X]=Vt[J]=Vt[et]=Vt[rt]=!1;var Ht={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Gt={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},zt={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},$t={"function":!0,object:!0},Wt={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Zt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Xt=$t[typeof n]&&n&&!n.nodeType&&n,Jt=$t[typeof e]&&e&&!e.nodeType&&e,Kt=Xt&&Jt&&"object"==typeof t&&t&&t.Object&&t,Qt=$t[typeof self]&&self&&self.Object&&self,te=$t[typeof window]&&window&&window.Object&&window,ee=Jt&&Jt.exports===Xt&&Xt,ne=Kt||te!==(this&&this.window)&&te||Qt||this,re=k();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(ne._=re,define(function(){return re})):Xt&&Jt?ee?(Jt.exports=re)._=re:Xt._=re:ne._=re}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],54:[function(t,e){e.exports={graphlib:t("./lib/graphlib"),layout:t("./lib/layout"),debug:t("./lib/debug"),util:{time:t("./lib/util").time,notime:t("./lib/util").notime},version:t("./lib/version")}},{"./lib/debug":59,"./lib/graphlib":60,"./lib/layout":62,"./lib/util":82,"./lib/version":83}],55:[function(t,e){"use strict";function n(t){function e(t){return function(e){return t.edge(e).weight}}var n="greedy"===t.graph().acyclicer?u(t,e(t)):r(t);a.each(n,function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,a.uniqueId("rev"))})}function r(t){function e(u){a.has(i,u)||(i[u]=!0,r[u]=!0,a.each(t.outEdges(u),function(t){a.has(r,t.w)?n.push(t):e(t.w)}),delete r[u])}var n=[],r={},i={};return a.each(t.nodes(),e),n}function i(t){a.each(t.edges(),function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var r=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,r)}})}var a=t("./lodash"),u=t("./greedy-fas");e.exports={run:n,undo:i}},{"./greedy-fas":61,"./lodash":63}],56:[function(t,e){function n(t){function e(n){var a=t.children(n),u=t.node(n);if(a.length&&i.each(a,e),i.has(u,"minRank")){u.borderLeft=[],u.borderRight=[];for(var o=u.minRank,s=u.maxRank+1;s>o;++o)r(t,"borderLeft","_bl",n,u,o),r(t,"borderRight","_br",n,u,o)}}i.each(t.children(),e)}function r(t,e,n,r,i,u){var o={width:0,height:0,rank:u,borderType:e},s=i[e][u-1],c=a.addDummyNode(t,"border",o,n);i[e][u]=c,t.setParent(c,r),s&&t.setEdge(s,c,{weight:1})}var i=t("./lodash"),a=t("./util");e.exports=n},{"./lodash":63,"./util":82}],57:[function(t,e){"use strict";function n(t){var e=t.graph().rankdir.toLowerCase();("lr"===e||"rl"===e)&&i(t)}function r(t){var e=t.graph().rankdir.toLowerCase();("bt"===e||"rl"===e)&&u(t),("lr"===e||"rl"===e)&&(s(t),i(t))}function i(t){l.each(t.nodes(),function(e){a(t.node(e))}),l.each(t.edges(),function(e){a(t.edge(e))})}function a(t){var e=t.width;t.width=t.height,t.height=e}function u(t){l.each(t.nodes(),function(e){o(t.node(e))}),l.each(t.edges(),function(e){var n=t.edge(e);l.each(n.points,o),l.has(n,"y")&&o(n)})}function o(t){t.y=-t.y}function s(t){l.each(t.nodes(),function(e){c(t.node(e))}),l.each(t.edges(),function(e){var n=t.edge(e);l.each(n.points,c),l.has(n,"x")&&c(n)})}function c(t){var e=t.x;t.x=t.y,t.y=e}var l=t("./lodash");e.exports={adjust:n,undo:r}},{"./lodash":63}],58:[function(t,e){function n(){var t={};t._next=t._prev=t,this._sentinel=t}function r(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function i(t,e){return"_next"!==t&&"_prev"!==t?e:void 0}e.exports=n,n.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;return e!==t?(r(e),e):void 0},n.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&r(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},n.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,i)),n=n._prev;return"["+t.join(", ")+"]"}},{}],59:[function(t,e){function n(t){var e=i.buildLayerMatrix(t),n=new a({compound:!0,multigraph:!0}).setGraph({});return r.each(t.nodes(),function(e){n.setNode(e,{label:e}),n.setParent(e,"layer"+t.node(e).rank)}),r.each(t.edges(),function(t){n.setEdge(t.v,t.w,{},t.name)}),r.each(e,function(t,e){var i="layer"+e;n.setNode(i,{rank:"same"}),r.reduce(t,function(t,e){return n.setEdge(t,e,{style:"invis"}),e})}),n}var r=t("./lodash"),i=t("./util"),a=t("./graphlib").Graph;e.exports={debugOrdering:n}},{"./graphlib":60,"./lodash":63,"./util":82}],60:[function(t,e){var n;if("function"==typeof t)try{n=t("graphlib")}catch(r){}n||(n=window.graphlib),e.exports=n},{graphlib:84}],61:[function(t,e){function n(t,e){if(t.nodeCount()<=1)return[];var n=a(t,e||l),i=r(n.graph,n.buckets,n.zeroIdx);return o.flatten(o.map(i,function(e){return t.outEdges(e.v,e.w)}),!0)}function r(t,e,n){for(var r,a=[],u=e[e.length-1],o=e[0];t.nodeCount();){for(;r=o.dequeue();)i(t,e,n,r);for(;r=u.dequeue();)i(t,e,n,r);if(t.nodeCount())for(var s=e.length-2;s>0;--s)if(r=e[s].dequeue()){a=a.concat(i(t,e,n,r,!0));break}}return a}function i(t,e,n,r,i){var a=i?[]:void 0;return o.each(t.inEdges(r.v),function(r){var o=t.edge(r),s=t.node(r.v);i&&a.push({v:r.v,w:r.w}),s.out-=o,u(e,n,s)}),o.each(t.outEdges(r.v),function(r){var i=t.edge(r),a=r.w,o=t.node(a);o["in"]-=i,u(e,n,o)}),t.removeNode(r.v),a}function a(t,e){var n=new s,r=0,i=0;o.each(t.nodes(),function(t){n.setNode(t,{v:t,"in":0,out:0})}),o.each(t.edges(),function(t){var a=n.edge(t.v,t.w)||0,u=e(t),o=a+u;n.setEdge(t.v,t.w,o),i=Math.max(i,n.node(t.v).out+=u),r=Math.max(r,n.node(t.w)["in"]+=u)});var a=o.range(i+r+3).map(function(){return new c}),l=r+1;return o.each(n.nodes(),function(t){u(a,l,n.node(t))}),{graph:n,buckets:a,zeroIdx:l}}function u(t,e,n){n.out?n["in"]?t[n.out-n["in"]+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}var o=t("./lodash"),s=t("./graphlib").Graph,c=t("./data/list");e.exports=n;var l=o.constant(1)},{"./data/list":58,"./graphlib":60,"./lodash":63}],62:[function(t,e){"use strict";function n(t,e){var n=e&&e.debugTiming?B.time:B.notime;n("layout",function(){var e=n(" buildLayoutGraph",function(){return a(t)});n(" runLayout",function(){r(e,n)}),n(" updateInputGraph",function(){i(t,e)})})}function r(t,e){e(" makeSpaceForEdgeLabels",function(){u(t)}),e(" removeSelfEdges",function(){g(t)}),e(" acyclic",function(){x.run(t)}),e(" nestingGraph.run",function(){C.run(t)}),e(" rank",function(){A(B.asNonCompoundGraph(t))}),e(" injectEdgeLabelProxies",function(){o(t)}),e(" removeEmptyRanks",function(){D(t)}),e(" nestingGraph.cleanup",function(){C.cleanup(t)}),e(" normalizeRanks",function(){k(t)}),e(" assignRankMinMax",function(){s(t)}),e(" removeEdgeLabelProxies",function(){c(t)}),e(" normalize.run",function(){w.run(t)}),e(" parentDummyChains",function(){E(t)}),e(" addBorderSegments",function(){S(t)}),e(" order",function(){T(t)}),e(" insertSelfEdges",function(){m(t)}),e(" adjustCoordinateSystem",function(){M.adjust(t)}),e(" position",function(){F(t)}),e(" positionSelfEdges",function(){y(t)}),e(" removeBorderNodes",function(){p(t)}),e(" normalize.undo",function(){w.undo(t)}),e(" fixupEdgeLabelCoords",function(){f(t)}),e(" undoCoordinateSystem",function(){M.undo(t)}),e(" translateGraph",function(){l(t)}),e(" assignNodeIntersects",function(){h(t)}),e(" reversePoints",function(){d(t)}),e(" acyclic.undo",function(){x.undo(t)})}function i(t,e){_.each(t.nodes(),function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))}),_.each(t.edges(),function(n){var r=t.edge(n),i=e.edge(n);r.points=i.points,_.has(i,"x")&&(r.x=i.x,r.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function a(t){var e=new L({multigraph:!0,compound:!0}),n=b(t.graph());return e.setGraph(_.merge({},O,v(n,N),_.pick(n,I))),_.each(t.nodes(),function(n){var r=b(t.node(n));e.setNode(n,_.defaults(v(r,R),P)),e.setParent(n,t.parent(n))}),_.each(t.edges(),function(n){var r=b(t.edge(n));e.setEdge(n,_.merge({},j,v(r,q),_.pick(r,U)))}),e}function u(t){var e=t.graph();e.ranksep/=2,_.each(t.edges(),function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)})}function o(t){_.each(t.edges(),function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-r.rank)/2+r.rank,e:e};B.addDummyNode(t,"edge-proxy",a,"_ep")}})}function s(t){var e=0;_.each(t.nodes(),function(n){var r=t.node(n);r.borderTop&&(r.minRank=t.node(r.borderTop).rank,r.maxRank=t.node(r.borderBottom).rank,e=_.max(e,r.maxRank))}),t.graph().maxRank=e}function c(t){_.each(t.nodes(),function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))})}function l(t){function e(t){var e=t.x,u=t.y,o=t.width,s=t.height;n=Math.min(n,e-o/2),r=Math.max(r,e+o/2),i=Math.min(i,u-s/2),a=Math.max(a,u+s/2)}var n=Number.POSITIVE_INFINITY,r=0,i=Number.POSITIVE_INFINITY,a=0,u=t.graph(),o=u.marginx||0,s=u.marginy||0;_.each(t.nodes(),function(n){e(t.node(n))}),_.each(t.edges(),function(n){var r=t.edge(n);_.has(r,"x")&&e(r)}),n-=o,i-=s,_.each(t.nodes(),function(e){var r=t.node(e);r.x-=n,r.y-=i}),_.each(t.edges(),function(e){var r=t.edge(e);_.each(r.points,function(t){t.x-=n,t.y-=i}),_.has(r,"x")&&(r.x-=n),_.has(r,"y")&&(r.y-=i)}),u.width=r-n+o,u.height=a-i+s}function h(t){_.each(t.edges(),function(e){var n,r,i=t.edge(e),a=t.node(e.v),u=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=u,r=a),i.points.unshift(B.intersectRect(a,n)),i.points.push(B.intersectRect(u,r))})}function f(t){_.each(t.edges(),function(e){var n=t.edge(e);if(_.has(n,"x"))switch(("l"===n.labelpos||"r"===n.labelpos)&&(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}})}function d(t){_.each(t.edges(),function(e){var n=t.edge(e);n.reversed&&n.points.reverse()})}function p(t){_.each(t.nodes(),function(e){if(t.children(e).length){var n=t.node(e),r=t.node(n.borderTop),i=t.node(n.borderBottom),a=t.node(_.last(n.borderLeft)),u=t.node(_.last(n.borderRight));n.width=Math.abs(u.x-a.x),n.height=Math.abs(i.y-r.y),n.x=a.x+n.width/2,n.y=r.y+n.height/2}}),_.each(t.nodes(),function(e){"border"===t.node(e).dummy&&t.removeNode(e)})}function g(t){_.each(t.edges(),function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}})}function m(t){var e=B.buildLayerMatrix(t);_.each(e,function(e){var n=0;_.each(e,function(e,r){var i=t.node(e);i.order=r+n,_.each(i.selfEdges,function(e){B.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:i.rank,order:r+ ++n,e:e.e,label:e.label},"_se")}),delete i.selfEdges})})}function y(t){_.each(t.nodes(),function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,u=n.x-i,o=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*u/3,y:a-o},{x:i+5*u/6,y:a-o},{x:i+u,y:a},{x:i+5*u/6,y:a+o},{x:i+2*u/3,y:a+o}],n.label.x=n.x,n.label.y=n.y}})}function v(t,e){return _.mapValues(_.pick(t,e),Number)}function b(t){var e={};return _.each(t,function(t,n){e[n.toLowerCase()]=t}),e}var _=t("./lodash"),x=t("./acyclic"),w=t("./normalize"),A=t("./rank"),k=t("./util").normalizeRanks,E=t("./parent-dummy-chains"),D=t("./util").removeEmptyRanks,C=t("./nesting-graph"),S=t("./add-border-segments"),M=t("./coordinate-system"),T=t("./order"),F=t("./position"),B=t("./util"),L=t("./graphlib").Graph;e.exports=n;var N=["nodesep","edgesep","ranksep","marginx","marginy"],O={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},I=["acyclicer","ranker","rankdir","align"],R=["width","height"],P={width:0,height:0},q=["minlen","weight","width","height","labeloffset"],j={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},U=["labelpos"]},{"./acyclic":55,"./add-border-segments":56,"./coordinate-system":57,"./graphlib":60,"./lodash":63,"./nesting-graph":64,"./normalize":65,"./order":70,"./parent-dummy-chains":75,"./position":77,"./rank":79,"./util":82}],63:[function(t,e){e.exports=t(51)},{"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/lodash.js":51,lodash:104}],64:[function(t,e){function n(t){var e=s.addDummyNode(t,"root",{},"_root"),n=i(t),u=o.max(n)-1,c=2*u+1;t.graph().nestingRoot=e,o.each(t.edges(),function(e){t.edge(e).minlen*=c});var l=a(t)+1;o.each(t.children(),function(i){r(t,e,c,l,u,n,i)}),t.graph().nodeRankFactor=c}function r(t,e,n,i,a,u,c){var l=t.children(c);if(!l.length)return void(c!==e&&t.setEdge(e,c,{weight:0,minlen:n}));var h=s.addBorderNode(t,"_bt"),f=s.addBorderNode(t,"_bb"),d=t.node(c);t.setParent(h,c),d.borderTop=h,t.setParent(f,c),d.borderBottom=f,o.each(l,function(o){r(t,e,n,i,a,u,o);var s=t.node(o),l=s.borderTop?s.borderTop:o,d=s.borderBottom?s.borderBottom:o,p=s.borderTop?i:2*i,g=l!==d?1:a-u[c]+1;t.setEdge(h,l,{weight:p,minlen:g,nestingEdge:!0}),t.setEdge(d,f,{weight:p,minlen:g,nestingEdge:!0})}),t.parent(c)||t.setEdge(e,h,{weight:0,minlen:a+u[c]})}function i(t){function e(r,i){var a=t.children(r);a&&a.length&&o.each(a,function(t){e(t,i+1)}),n[r]=i}var n={};return o.each(t.children(),function(t){e(t,1)}),n}function a(t){return o.reduce(t.edges(),function(e,n){return e+t.edge(n).weight},0)}function u(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,o.each(t.edges(),function(e){var n=t.edge(e);n.nestingEdge&&t.removeEdge(e)})}var o=t("./lodash"),s=t("./util");e.exports={run:n,cleanup:u}},{"./lodash":63,"./util":82}],65:[function(t,e){"use strict";function n(t){t.graph().dummyChains=[],a.each(t.edges(),function(e){r(t,e)})}function r(t,e){var n=e.v,r=t.node(n).rank,i=e.w,a=t.node(i).rank,o=e.name,s=t.edge(e),c=s.labelRank;if(a!==r+1){t.removeEdge(e);var l,h,f;for(f=0,++r;a>r;++f,++r)s.points=[],h={width:0,height:0,edgeLabel:s,edgeObj:e,rank:r},l=u.addDummyNode(t,"edge",h,"_d"),r===c&&(h.width=s.width,h.height=s.height,h.dummy="edge-label",h.labelpos=s.labelpos),t.setEdge(n,l,{weight:s.weight},o),0===f&&t.graph().dummyChains.push(l),n=l;t.setEdge(n,i,{weight:s.weight},o)}}function i(t){a.each(t.graph().dummyChains,function(e){var n,r=t.node(e),i=r.edgeLabel;for(t.setEdge(r.edgeObj,i);r.dummy;)n=t.successors(e)[0],t.removeNode(e),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),e=n,r=t.node(e)})}var a=t("./lodash"),u=t("./util");e.exports={run:n,undo:i}},{"./lodash":63,"./util":82}],66:[function(t,e){function n(t,e,n){var i,a={};r.each(n,function(n){for(var r,u,o=t.parent(n);o;){if(r=t.parent(o),r?(u=a[r],a[r]=o):(u=i,i=o),u&&u!==o)return void e.setEdge(u,o);o=r}})}var r=t("../lodash");e.exports=n},{"../lodash":63}],67:[function(t,e){function n(t,e){return r.map(e,function(e){var n=t.inEdges(e);if(n.length){var i=r.reduce(n,function(e,n){var r=t.edge(n),i=t.node(n.v);return{sum:e.sum+r.weight*i.order,weight:e.weight+r.weight}},{sum:0,weight:0});return{v:e,barycenter:i.sum/i.weight,weight:i.weight}}return{v:e}})}var r=t("../lodash");e.exports=n},{"../lodash":63}],68:[function(t,e){function n(t,e,n){var u=r(t),o=new a({compound:!0}).setGraph({root:u}).setDefaultNodeLabel(function(e){return t.node(e)});return i.each(t.nodes(),function(r){var a=t.node(r),s=t.parent(r);(a.rank===e||a.minRank<=e&&e<=a.maxRank)&&(o.setNode(r),o.setParent(r,s||u),i.each(t[n](r),function(e){var n=e.v===r?e.w:e.v,a=o.edge(n,r),u=i.isUndefined(a)?0:a.weight;o.setEdge(n,r,{weight:t.edge(e).weight+u})}),i.has(a,"minRank")&&o.setNode(r,{borderLeft:a.borderLeft[e],borderRight:a.borderRight[e]}))}),o}function r(t){for(var e;t.hasNode(e=i.uniqueId("_root")););return e}var i=t("../lodash"),a=t("../graphlib").Graph;e.exports=n},{"../graphlib":60,"../lodash":63}],69:[function(t,e){"use strict";function n(t,e){for(var n=0,i=1;i0;)e%2&&(n+=s[e+1]),e=e-1>>1,s[e]+=t.weight;c+=t.weight*n})),c}var i=t("../lodash");e.exports=n},{"../lodash":63}],70:[function(t,e){"use strict";function n(t){var e=d.maxRank(t),n=r(t,u.range(1,e+1),"inEdges"),c=r(t,u.range(e-1,-1,-1),"outEdges"),l=o(t);a(t,l);for(var h,f=Number.POSITIVE_INFINITY,p=0,g=0;4>g;++p,++g){i(p%2?n:c,p%4>=2),l=d.buildLayerMatrix(t);var m=s(t,l);f>m&&(g=0,h=u.cloneDeep(l),f=m)}a(t,h)}function r(t,e,n){return u.map(e,function(e){return l(t,e,n)})}function i(t,e){var n=new f;u.each(t,function(t){var r=t.graph().root,i=c(t,r,n,e);u.each(i.vs,function(e,n){t.node(e).order=n}),h(t,n,i.vs)})}function a(t,e){u.each(e,function(e){u.each(e,function(e,n){t.node(e).order=n})})}var u=t("../lodash"),o=t("./init-order"),s=t("./cross-count"),c=t("./sort-subgraph"),l=t("./build-layer-graph"),h=t("./add-subgraph-constraints"),f=t("../graphlib").Graph,d=t("../util");e.exports=n},{"../graphlib":60,"../lodash":63,"../util":82,"./add-subgraph-constraints":66,"./build-layer-graph":68,"./cross-count":69,"./init-order":71,"./sort-subgraph":73}],71:[function(t,e){"use strict";function n(t){function e(i){if(!r.has(n,i)){n[i]=!0;var a=t.node(i);u[a.rank].push(i),r.each(t.successors(i),e)}}var n={},i=r.filter(t.nodes(),function(e){return!t.children(e).length}),a=r.max(r.map(i,function(e){return t.node(e).rank})),u=r.map(r.range(a+1),function(){return[]}),o=r.sortBy(i,function(e){return t.node(e).rank});return r.each(o,e),u}var r=t("../lodash");e.exports=n},{"../lodash":63}],72:[function(t,e){"use strict";function n(t,e){var n={};a.each(t,function(t,e){var r=n[t.v]={indegree:0,"in":[],out:[],vs:[t.v],i:e};a.isUndefined(t.barycenter)||(r.barycenter=t.barycenter,r.weight=t.weight)}),a.each(e.edges(),function(t){var e=n[t.v],r=n[t.w];a.isUndefined(e)||a.isUndefined(r)||(r.indegree++,e.out.push(n[t.w]))});var i=a.filter(n,function(t){return!t.indegree});return r(i)}function r(t){function e(t){return function(e){e.merged||(a.isUndefined(e.barycenter)||a.isUndefined(t.barycenter)||e.barycenter>=t.barycenter)&&i(t,e)}}function n(e){return function(n){n["in"].push(e),0===--n.indegree&&t.push(n)}}for(var r=[];t.length;){var u=t.pop();r.push(u),a.each(u["in"].reverse(),e(u)),a.each(u.out,n(u))}return a.chain(r).filter(function(t){return!t.merged}).map(function(t){return a.pick(t,["vs","i","barycenter","weight"])}).value()}function i(t,e){var n=0,r=0;t.weight&&(n+=t.barycenter*t.weight,r+=t.weight),e.weight&&(n+=e.barycenter*e.weight,r+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=n/r,t.weight=r,t.i=Math.min(e.i,t.i),e.merged=!0}var a=t("../lodash");e.exports=n},{"../lodash":63}],73:[function(t,e){function n(t,e,c,l){var h=t.children(e),f=t.node(e),d=f?f.borderLeft:void 0,p=f?f.borderRight:void 0,g={};d&&(h=a.filter(h,function(t){return t!==d&&t!==p}));var m=u(t,h);a.each(m,function(e){if(t.children(e.v).length){var r=n(t,e.v,c,l);g[e.v]=r,a.has(r,"barycenter")&&i(e,r)}});var y=o(m,c);r(y,g);var v=s(y,l);if(d&&(v.vs=a.flatten([d,v.vs,p],!0),t.predecessors(d).length)){var b=t.node(t.predecessors(d)[0]),_=t.node(t.predecessors(p)[0]);a.has(v,"barycenter")||(v.barycenter=0,v.weight=0),v.barycenter=(v.barycenter*v.weight+b.order+_.order)/(v.weight+2),v.weight+=2}return v}function r(t,e){a.each(t,function(t){t.vs=a.flatten(t.vs.map(function(t){return e[t]?e[t].vs:t}),!0)})}function i(t,e){a.isUndefined(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var a=t("../lodash"),u=t("./barycenter"),o=t("./resolve-conflicts"),s=t("./sort");e.exports=n},{"../lodash":63,"./barycenter":67,"./resolve-conflicts":72,"./sort":74}],74:[function(t,e){function n(t,e){var n=u.partition(t,function(t){return a.has(t,"barycenter")}),o=n.lhs,s=a.sortBy(n.rhs,function(t){return-t.i}),c=[],l=0,h=0,f=0;o.sort(i(!!e)),f=r(c,s,f),a.each(o,function(t){f+=t.vs.length,c.push(t.vs),l+=t.barycenter*t.weight,h+=t.weight,f=r(c,s,f)});var d={vs:a.flatten(c,!0)};return h&&(d.barycenter=l/h,d.weight=h),d}function r(t,e,n){for(var r;e.length&&(r=a.last(e)).i<=n;)e.pop(),t.push(r.vs),n++;return n}function i(t){return function(e,n){return e.barycentern.barycenter?1:t?n.i-e.i:e.i-n.i}}var a=t("../lodash"),u=t("../util");e.exports=n},{"../lodash":63,"../util":82}],75:[function(t,e){function n(t){var e=i(t);a.each(t.graph().dummyChains,function(n){for(var i=t.node(n),a=i.edgeObj,u=r(t,e,a.v,a.w),o=u.path,s=u.lca,c=0,l=o[c],h=!0;n!==a.w;){if(i=t.node(n),h){for(;(l=o[c])!==s&&t.node(l).maxRanks||c>e[i].lim));for(a=i,i=r;(i=t.parent(i))!==a;)o.push(i);return{path:u.concat(o.reverse()),lca:a}}function i(t){function e(i){var u=r;a.each(t.children(i),e),n[i]={low:u,lim:r++}}var n={},r=0;return a.each(t.children(),e),n}var a=t("./lodash");e.exports=n},{"./lodash":63}],76:[function(t,e){"use strict";function n(t,e){function n(e,n){ +var u=0,o=0,s=e.length,c=m.last(n);return m.each(n,function(e,l){var h=i(t,e),f=h?t.node(h).order:s;(h||e===c)&&(m.each(n.slice(o,l+1),function(e){m.each(t.predecessors(e),function(n){var i=t.node(n),o=i.order;!(u>o||o>f)||i.dummy&&t.node(e).dummy||a(r,n,e)})}),o=l+1,u=f)}),n}var r={};return m.reduce(e,n),r}function r(t,e){function n(e,n,r,u,o){var s;m.each(m.range(n,r),function(n){s=e[n],t.node(s).dummy&&m.each(t.predecessors(s),function(e){var n=t.node(e);n.dummy&&(n.ordero)&&a(i,e,s)})})}function r(e,r){var i,a=-1,u=0;return m.each(r,function(o,s){if("border"===t.node(o).dummy){var c=t.predecessors(o);c.length&&(i=t.node(c[0]).order,n(r,u,s,a,i),u=s,a=i)}n(r,u,r.length,i,e.length)}),r}var i={};return m.reduce(e,r),i}function i(t,e){return t.node(e).dummy?m.find(t.predecessors(e),function(e){return t.node(e).dummy}):void 0}function a(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function u(t,e,n){if(e>n){var r=e;e=n,n=r}return m.has(t[e],n)}function o(t,e,n,r){var i={},a={},o={};return m.each(e,function(t){m.each(t,function(t,e){i[t]=t,a[t]=t,o[t]=e})}),m.each(e,function(t){var e=-1;m.each(t,function(t){var s=r(t);if(s.length){s=m.sortBy(s,function(t){return o[t]});for(var c=(s.length-1)/2,l=Math.floor(c),h=Math.ceil(c);h>=l;++l){var f=s[l];a[t]===t&&eu.lim&&(o=u,s=!0);var c=p.filter(e.edges(),function(e){return s===d(t,t.node(e.v),o)&&s!==d(t,t.node(e.w),o)});return p.min(c,function(t){return m(e,t)})}function l(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),u(t),r(t,e),h(t,e)}function h(t,e){var n=p.find(t.nodes(),function(t){return!e.node(t).parent}),r=v(t,n);r=r.slice(1),p.each(r,function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)})}function f(t,e,n){return t.hasEdge(e,n)}function d(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}var p=t("../lodash"),g=t("./feasible-tree"),m=t("./util").slack,y=t("./util").longestPath,v=t("../graphlib").alg.preorder,b=t("../graphlib").alg.postorder,_=t("../util").simplify;e.exports=n,n.initLowLimValues=u,n.initCutValues=r,n.calcCutValue=a,n.leaveEdge=s,n.enterEdge=c,n.exchangeEdges=l},{"../graphlib":60,"../lodash":63,"../util":82,"./feasible-tree":78,"./util":81}],81:[function(t,e){"use strict";function n(t){function e(r){var a=t.node(r);if(i.has(n,r))return a.rank;n[r]=!0;var u=i.min(i.map(t.outEdges(r),function(n){return e(n.w)-t.edge(n).minlen}));return u===Number.POSITIVE_INFINITY&&(u=0),a.rank=u}var n={};i.each(t.sources(),e)}function r(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var i=t("../lodash");e.exports={longestPath:n,slack:r}},{"../lodash":63}],82:[function(t,e){"use strict";function n(t,e,n,r){var i;do i=m.uniqueId(r);while(t.hasNode(i));return n.dummy=e,t.setNode(i,n),i}function r(t){var e=(new y).setGraph(t.graph());return m.each(t.nodes(),function(n){e.setNode(n,t.node(n))}),m.each(t.edges(),function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})}),e}function i(t){var e=new y({multigraph:t.isMultigraph()}).setGraph(t.graph());return m.each(t.nodes(),function(n){t.children(n).length||e.setNode(n,t.node(n))}),m.each(t.edges(),function(n){e.setEdge(n,t.edge(n))}),e}function a(t){var e=m.map(t.nodes(),function(e){var n={};return m.each(t.outEdges(e),function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight}),n});return m.zipObject(t.nodes(),e)}function u(t){var e=m.map(t.nodes(),function(e){var n={};return m.each(t.inEdges(e),function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight}),n});return m.zipObject(t.nodes(),e)}function o(t,e){var n=t.x,r=t.y,i=e.x-n,a=e.y-r,u=t.width/2,o=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var s,c;return Math.abs(a)*u>Math.abs(i)*o?(0>a&&(o=-o),s=o*i/a,c=o):(0>i&&(u=-u),s=u,c=u*a/i),{x:n+s,y:r+c}}function s(t){var e=m.map(m.range(f(t)+1),function(){return[]});return m.each(t.nodes(),function(n){var r=t.node(n),i=r.rank;m.isUndefined(i)||(e[i][r.order]=n)}),e}function c(t){var e=m.min(m.map(t.nodes(),function(e){return t.node(e).rank}));m.each(t.nodes(),function(n){var r=t.node(n);m.has(r,"rank")&&(r.rank-=e)})}function l(t){var e=m.min(m.map(t.nodes(),function(e){return t.node(e).rank})),n=[];m.each(t.nodes(),function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)});var r=0,i=t.graph().nodeRankFactor;m.each(n,function(e,n){m.isUndefined(e)&&n%i!==0?--r:r&&m.each(e,function(e){t.node(e).rank+=r})})}function h(t,e,r,i){var a={width:0,height:0};return arguments.length>=4&&(a.rank=r,a.order=i),n(t,"border",a,e)}function f(t){return m.max(m.map(t.nodes(),function(e){var n=t.node(e).rank;return m.isUndefined(n)?void 0:n}))}function d(t,e){var n={lhs:[],rhs:[]};return m.each(t,function(t){e(t)?n.lhs.push(t):n.rhs.push(t)}),n}function p(t,e){var n=m.now();try{return e()}finally{console.log(t+" time: "+(m.now()-n)+"ms")}}function g(t,e){return e()}var m=t("./lodash"),y=t("./graphlib").Graph;e.exports={addDummyNode:n,simplify:r,asNonCompoundGraph:i,successorWeights:a,predecessorWeights:u,intersectRect:o,buildLayerMatrix:s,normalizeRanks:c,removeEmptyRanks:l,addBorderNode:h,maxRank:f,partition:d,time:p,notime:g}},{"./graphlib":60,"./lodash":63}],83:[function(t,e){e.exports="0.7.4"},{}],84:[function(t,e){e.exports=t(33)},{"./lib":100,"./lib/alg":91,"./lib/json":101,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/index.js":33}],85:[function(t,e){e.exports=t(34)},{"../lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/components.js":34}],86:[function(t,e){e.exports=t(35)},{"../lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/dfs.js":35}],87:[function(t,e){e.exports=t(36)},{"../lodash":102,"./dijkstra":88,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/dijkstra-all.js":36}],88:[function(t,e){e.exports=t(37)},{"../data/priority-queue":98,"../lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/dijkstra.js":37}],89:[function(t,e){e.exports=t(38)},{"../lodash":102,"./tarjan":96,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/find-cycles.js":38}],90:[function(t,e){e.exports=t(39)},{"../lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/floyd-warshall.js":39}],91:[function(t,e){e.exports=t(40)},{"./components":85,"./dijkstra":88,"./dijkstra-all":87,"./find-cycles":89,"./floyd-warshall":90,"./is-acyclic":92,"./postorder":93,"./preorder":94,"./prim":95,"./tarjan":96,"./topsort":97,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/index.js":40}],92:[function(t,e){e.exports=t(41)},{"./topsort":97,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/is-acyclic.js":41}],93:[function(t,e){e.exports=t(42)},{"./dfs":86,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/postorder.js":42}],94:[function(t,e){e.exports=t(43)},{"./dfs":86,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/preorder.js":43}],95:[function(t,e){e.exports=t(44)},{"../data/priority-queue":98,"../graph":99,"../lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/prim.js":44}],96:[function(t,e){e.exports=t(45)},{"../lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/tarjan.js":45}],97:[function(t,e){e.exports=t(46)},{"../lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/alg/topsort.js":46}],98:[function(t,e){e.exports=t(47)},{"../lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/data/priority-queue.js":47}],99:[function(t,e){e.exports=t(48)},{"./lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/graph.js":48}],100:[function(t,e){e.exports=t(49)},{"./graph":99,"./version":103,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/index.js":49}],101:[function(t,e){e.exports=t(50)},{"./graph":99,"./lodash":102,"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/json.js":50}],102:[function(t,e){e.exports=t(51)},{"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/lodash.js":51,lodash:104}],103:[function(t,e){e.exports=t(52)},{"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/graphlib/lib/version.js":52}],104:[function(t,e){e.exports=t(53)},{"/Users/knuts/source/GitHub/mermaid/mermaid/node_modules/dagre-d3/node_modules/lodash/index.js":53}],105:[function(t,e,n){(function(t){!function(r){var i="object"==typeof n&&n,a="object"==typeof e&&e&&e.exports==i&&e,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(r=u);var o=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,s=/[\x01-\x7F]/g,c=/[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,l=/<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g,h={"Á":"Aacute","á":"aacute","Ă":"Abreve","ă":"abreve","∾":"ac","∿":"acd","∾̳":"acE","Â":"Acirc","â":"acirc","´":"acute","А":"Acy","а":"acy","Æ":"AElig","æ":"aelig","⁡":"af","𝔄":"Afr","𝔞":"afr","À":"Agrave","à":"agrave","ℵ":"aleph","Α":"Alpha","α":"alpha","Ā":"Amacr","ā":"amacr","⨿":"amalg","&":"amp","⩕":"andand","⩓":"And","∧":"and","⩜":"andd","⩘":"andslope","⩚":"andv","∠":"ang","⦤":"ange","⦨":"angmsdaa","⦩":"angmsdab","⦪":"angmsdac","⦫":"angmsdad","⦬":"angmsdae","⦭":"angmsdaf","⦮":"angmsdag","⦯":"angmsdah","∡":"angmsd","∟":"angrt","⊾":"angrtvb","⦝":"angrtvbd","∢":"angsph","Å":"angst","⍼":"angzarr","Ą":"Aogon","ą":"aogon","𝔸":"Aopf","𝕒":"aopf","⩯":"apacir","≈":"ap","⩰":"apE","≊":"ape","≋":"apid","'":"apos","å":"aring","𝒜":"Ascr","𝒶":"ascr","≔":"colone","*":"ast","≍":"CupCap","Ã":"Atilde","ã":"atilde","Ä":"Auml","ä":"auml","∳":"awconint","⨑":"awint","≌":"bcong","϶":"bepsi","‵":"bprime","∽":"bsim","⋍":"bsime","∖":"setmn","⫧":"Barv","⊽":"barvee","⌅":"barwed","⌆":"Barwed","⎵":"bbrk","⎶":"bbrktbrk","Б":"Bcy","б":"bcy","„":"bdquo","∵":"becaus","⦰":"bemptyv","ℬ":"Bscr","Β":"Beta","β":"beta","ℶ":"beth","≬":"twixt","𝔅":"Bfr","𝔟":"bfr","⋂":"xcap","◯":"xcirc","⋃":"xcup","⨀":"xodot","⨁":"xoplus","⨂":"xotime","⨆":"xsqcup","★":"starf","▽":"xdtri","△":"xutri","⨄":"xuplus","⋁":"Vee","⋀":"Wedge","⤍":"rbarr","⧫":"lozf","▪":"squf","▴":"utrif","▾":"dtrif","◂":"ltrif","▸":"rtrif","␣":"blank","▒":"blk12","░":"blk14","▓":"blk34","█":"block","=⃥":"bne","≡⃥":"bnequiv","⫭":"bNot","⌐":"bnot","𝔹":"Bopf","𝕓":"bopf","⊥":"bot","⋈":"bowtie","⧉":"boxbox","┐":"boxdl","╕":"boxdL","╖":"boxDl","╗":"boxDL","┌":"boxdr","╒":"boxdR","╓":"boxDr","╔":"boxDR","─":"boxh","═":"boxH","┬":"boxhd","╤":"boxHd","╥":"boxhD","╦":"boxHD","┴":"boxhu","╧":"boxHu","╨":"boxhU","╩":"boxHU","⊟":"minusb","⊞":"plusb","⊠":"timesb","┘":"boxul","╛":"boxuL","╜":"boxUl","╝":"boxUL","└":"boxur","╘":"boxuR","╙":"boxUr","╚":"boxUR","│":"boxv","║":"boxV","┼":"boxvh","╪":"boxvH","╫":"boxVh","╬":"boxVH","┤":"boxvl","╡":"boxvL","╢":"boxVl","╣":"boxVL","├":"boxvr","╞":"boxvR","╟":"boxVr","╠":"boxVR","˘":"breve","¦":"brvbar","𝒷":"bscr","⁏":"bsemi","⧅":"bsolb","\\":"bsol","⟈":"bsolhsub","•":"bull","≎":"bump","⪮":"bumpE","≏":"bumpe","Ć":"Cacute","ć":"cacute","⩄":"capand","⩉":"capbrcup","⩋":"capcap","∩":"cap","⋒":"Cap","⩇":"capcup","⩀":"capdot","ⅅ":"DD","∩︀":"caps","⁁":"caret","ˇ":"caron","ℭ":"Cfr","⩍":"ccaps","Č":"Ccaron","č":"ccaron","Ç":"Ccedil","ç":"ccedil","Ĉ":"Ccirc","ĉ":"ccirc","∰":"Cconint","⩌":"ccups","⩐":"ccupssm","Ċ":"Cdot","ċ":"cdot","¸":"cedil","⦲":"cemptyv","¢":"cent","·":"middot","𝔠":"cfr","Ч":"CHcy","ч":"chcy","✓":"check","Χ":"Chi","χ":"chi","ˆ":"circ","≗":"cire","↺":"olarr","↻":"orarr","⊛":"oast","⊚":"ocir","⊝":"odash","⊙":"odot","®":"reg","Ⓢ":"oS","⊖":"ominus","⊕":"oplus","⊗":"otimes","○":"cir","⧃":"cirE","⨐":"cirfnint","⫯":"cirmid","⧂":"cirscir","∲":"cwconint","”":"rdquo","’":"rsquo","♣":"clubs",":":"colon","∷":"Colon","⩴":"Colone",",":"comma","@":"commat","∁":"comp","∘":"compfn","ℂ":"Copf","≅":"cong","⩭":"congdot","≡":"equiv","∮":"oint","∯":"Conint","𝕔":"copf","∐":"coprod","©":"copy","℗":"copysr","↵":"crarr","✗":"cross","⨯":"Cross","𝒞":"Cscr","𝒸":"cscr","⫏":"csub","⫑":"csube","⫐":"csup","⫒":"csupe","⋯":"ctdot","⤸":"cudarrl","⤵":"cudarrr","⋞":"cuepr","⋟":"cuesc","↶":"cularr","⤽":"cularrp","⩈":"cupbrcap","⩆":"cupcap","∪":"cup","⋓":"Cup","⩊":"cupcup","⊍":"cupdot","⩅":"cupor","∪︀":"cups","↷":"curarr","⤼":"curarrm","⋎":"cuvee","⋏":"cuwed","¤":"curren","∱":"cwint","⌭":"cylcty","†":"dagger","‡":"Dagger","ℸ":"daleth","↓":"darr","↡":"Darr","⇓":"dArr","‐":"dash","⫤":"Dashv","⊣":"dashv","⤏":"rBarr","˝":"dblac","Ď":"Dcaron","ď":"dcaron","Д":"Dcy","д":"dcy","⇊":"ddarr","ⅆ":"dd","⤑":"DDotrahd","⩷":"eDDot","°":"deg","∇":"Del","Δ":"Delta","δ":"delta","⦱":"demptyv","⥿":"dfisht","𝔇":"Dfr","𝔡":"dfr","⥥":"dHar","⇃":"dharl","⇂":"dharr","˙":"dot","`":"grave","˜":"tilde","⋄":"diam","♦":"diams","¨":"die","ϝ":"gammad","⋲":"disin","÷":"div","⋇":"divonx","Ђ":"DJcy","ђ":"djcy","⌞":"dlcorn","⌍":"dlcrop",$:"dollar","𝔻":"Dopf","𝕕":"dopf","⃜":"DotDot","≐":"doteq","≑":"eDot","∸":"minusd","∔":"plusdo","⊡":"sdotb","⇐":"lArr","⇔":"iff","⟸":"xlArr","⟺":"xhArr","⟹":"xrArr","⇒":"rArr","⊨":"vDash","⇑":"uArr","⇕":"vArr","∥":"par","⤓":"DownArrowBar","⇵":"duarr","̑":"DownBreve","⥐":"DownLeftRightVector","⥞":"DownLeftTeeVector","⥖":"DownLeftVectorBar","↽":"lhard","⥟":"DownRightTeeVector","⥗":"DownRightVectorBar","⇁":"rhard","↧":"mapstodown","⊤":"top","⤐":"RBarr","⌟":"drcorn","⌌":"drcrop","𝒟":"Dscr","𝒹":"dscr","Ѕ":"DScy","ѕ":"dscy","⧶":"dsol","Đ":"Dstrok","đ":"dstrok","⋱":"dtdot","▿":"dtri","⥯":"duhar","⦦":"dwangle","Џ":"DZcy","џ":"dzcy","⟿":"dzigrarr","É":"Eacute","é":"eacute","⩮":"easter","Ě":"Ecaron","ě":"ecaron","Ê":"Ecirc","ê":"ecirc","≖":"ecir","≕":"ecolon","Э":"Ecy","э":"ecy","Ė":"Edot","ė":"edot","ⅇ":"ee","≒":"efDot","𝔈":"Efr","𝔢":"efr","⪚":"eg","È":"Egrave","è":"egrave","⪖":"egs","⪘":"egsdot","⪙":"el","∈":"in","⏧":"elinters","ℓ":"ell","⪕":"els","⪗":"elsdot","Ē":"Emacr","ē":"emacr","∅":"empty","◻":"EmptySmallSquare","▫":"EmptyVerySmallSquare"," ":"emsp13"," ":"emsp14"," ":"emsp","Ŋ":"ENG","ŋ":"eng"," ":"ensp","Ę":"Eogon","ę":"eogon","𝔼":"Eopf","𝕖":"eopf","⋕":"epar","⧣":"eparsl","⩱":"eplus","ε":"epsi","Ε":"Epsilon","ϵ":"epsiv","≂":"esim","⩵":"Equal","=":"equals","≟":"equest","⇌":"rlhar","⩸":"equivDD","⧥":"eqvparsl","⥱":"erarr","≓":"erDot","ℯ":"escr","ℰ":"Escr","⩳":"Esim","Η":"Eta","η":"eta","Ð":"ETH","ð":"eth","Ë":"Euml","ë":"euml","€":"euro","!":"excl","∃":"exist","Ф":"Fcy","ф":"fcy","♀":"female","ffi":"ffilig","ff":"fflig","ffl":"ffllig","𝔉":"Ffr","𝔣":"ffr","fi":"filig","◼":"FilledSmallSquare",fj:"fjlig","♭":"flat","fl":"fllig","▱":"fltns","ƒ":"fnof","𝔽":"Fopf","𝕗":"fopf","∀":"forall","⋔":"fork","⫙":"forkv","ℱ":"Fscr","⨍":"fpartint","½":"half","⅓":"frac13","¼":"frac14","⅕":"frac15","⅙":"frac16","⅛":"frac18","⅔":"frac23","⅖":"frac25","¾":"frac34","⅗":"frac35","⅜":"frac38","⅘":"frac45","⅚":"frac56","⅝":"frac58","⅞":"frac78","⁄":"frasl","⌢":"frown","𝒻":"fscr","ǵ":"gacute","Γ":"Gamma","γ":"gamma","Ϝ":"Gammad","⪆":"gap","Ğ":"Gbreve","ğ":"gbreve","Ģ":"Gcedil","Ĝ":"Gcirc","ĝ":"gcirc","Г":"Gcy","г":"gcy","Ġ":"Gdot","ġ":"gdot","≥":"ge","≧":"gE","⪌":"gEl","⋛":"gel","⩾":"ges","⪩":"gescc","⪀":"gesdot","⪂":"gesdoto","⪄":"gesdotol","⋛︀":"gesl","⪔":"gesles","𝔊":"Gfr","𝔤":"gfr","≫":"gg","⋙":"Gg","ℷ":"gimel","Ѓ":"GJcy","ѓ":"gjcy","⪥":"gla","≷":"gl","⪒":"glE","⪤":"glj","⪊":"gnap","⪈":"gne","≩":"gnE","⋧":"gnsim","𝔾":"Gopf","𝕘":"gopf","⪢":"GreaterGreater","≳":"gsim","𝒢":"Gscr","ℊ":"gscr","⪎":"gsime","⪐":"gsiml","⪧":"gtcc","⩺":"gtcir",">":"gt","⋗":"gtdot","⦕":"gtlPar","⩼":"gtquest","⥸":"gtrarr","≩︀":"gvnE"," ":"hairsp","ℋ":"Hscr","Ъ":"HARDcy","ъ":"hardcy","⥈":"harrcir","↔":"harr","↭":"harrw","^":"Hat","ℏ":"hbar","Ĥ":"Hcirc","ĥ":"hcirc","♥":"hearts","…":"mldr","⊹":"hercon","𝔥":"hfr","ℌ":"Hfr","⤥":"searhk","⤦":"swarhk","⇿":"hoarr","∻":"homtht","↩":"larrhk","↪":"rarrhk","𝕙":"hopf","ℍ":"Hopf","―":"horbar","𝒽":"hscr","Ħ":"Hstrok","ħ":"hstrok","⁃":"hybull","Í":"Iacute","í":"iacute","⁣":"ic","Î":"Icirc","î":"icirc","И":"Icy","и":"icy","İ":"Idot","Е":"IEcy","е":"iecy","¡":"iexcl","𝔦":"ifr","ℑ":"Im","Ì":"Igrave","ì":"igrave","ⅈ":"ii","⨌":"qint","∭":"tint","⧜":"iinfin","℩":"iiota","IJ":"IJlig","ij":"ijlig","Ī":"Imacr","ī":"imacr","ℐ":"Iscr","ı":"imath","⊷":"imof","Ƶ":"imped","℅":"incare","∞":"infin","⧝":"infintie","⊺":"intcal","∫":"int","∬":"Int","ℤ":"Zopf","⨗":"intlarhk","⨼":"iprod","⁢":"it","Ё":"IOcy","ё":"iocy","Į":"Iogon","į":"iogon","𝕀":"Iopf","𝕚":"iopf","Ι":"Iota","ι":"iota","¿":"iquest","𝒾":"iscr","⋵":"isindot","⋹":"isinE","⋴":"isins","⋳":"isinsv","Ĩ":"Itilde","ĩ":"itilde","І":"Iukcy","і":"iukcy","Ï":"Iuml","ï":"iuml","Ĵ":"Jcirc","ĵ":"jcirc","Й":"Jcy","й":"jcy","𝔍":"Jfr","𝔧":"jfr","ȷ":"jmath","𝕁":"Jopf","𝕛":"jopf","𝒥":"Jscr","𝒿":"jscr","Ј":"Jsercy","ј":"jsercy","Є":"Jukcy","є":"jukcy","Κ":"Kappa","κ":"kappa","ϰ":"kappav","Ķ":"Kcedil","ķ":"kcedil","К":"Kcy","к":"kcy","𝔎":"Kfr","𝔨":"kfr","ĸ":"kgreen","Х":"KHcy","х":"khcy","Ќ":"KJcy","ќ":"kjcy","𝕂":"Kopf","𝕜":"kopf","𝒦":"Kscr","𝓀":"kscr","⇚":"lAarr","Ĺ":"Lacute","ĺ":"lacute","⦴":"laemptyv","ℒ":"Lscr","Λ":"Lambda","λ":"lambda","⟨":"lang","⟪":"Lang","⦑":"langd","⪅":"lap","«":"laquo","⇤":"larrb","⤟":"larrbfs","←":"larr","↞":"Larr","⤝":"larrfs","↫":"larrlp","⤹":"larrpl","⥳":"larrsim","↢":"larrtl","⤙":"latail","⤛":"lAtail","⪫":"lat","⪭":"late","⪭︀":"lates","⤌":"lbarr","⤎":"lBarr","❲":"lbbrk","{":"lcub","[":"lsqb","⦋":"lbrke","⦏":"lbrksld","⦍":"lbrkslu","Ľ":"Lcaron","ľ":"lcaron","Ļ":"Lcedil","ļ":"lcedil","⌈":"lceil","Л":"Lcy","л":"lcy","⤶":"ldca","“":"ldquo","⥧":"ldrdhar","⥋":"ldrushar","↲":"ldsh","≤":"le","≦":"lE","⇆":"lrarr","⟦":"lobrk","⥡":"LeftDownTeeVector","⥙":"LeftDownVectorBar","⌊":"lfloor","↼":"lharu","⇇":"llarr","⇋":"lrhar","⥎":"LeftRightVector","↤":"mapstoleft","⥚":"LeftTeeVector","⋋":"lthree","⧏":"LeftTriangleBar","⊲":"vltri","⊴":"ltrie","⥑":"LeftUpDownVector","⥠":"LeftUpTeeVector","⥘":"LeftUpVectorBar","↿":"uharl","⥒":"LeftVectorBar","⪋":"lEg","⋚":"leg","⩽":"les","⪨":"lescc","⩿":"lesdot","⪁":"lesdoto","⪃":"lesdotor","⋚︀":"lesg","⪓":"lesges","⋖":"ltdot","≶":"lg","⪡":"LessLess","≲":"lsim","⥼":"lfisht","𝔏":"Lfr","𝔩":"lfr","⪑":"lgE","⥢":"lHar","⥪":"lharul","▄":"lhblk","Љ":"LJcy","љ":"ljcy","≪":"ll","⋘":"Ll","⥫":"llhard","◺":"lltri","Ŀ":"Lmidot","ŀ":"lmidot","⎰":"lmoust","⪉":"lnap","⪇":"lne","≨":"lnE","⋦":"lnsim","⟬":"loang","⇽":"loarr","⟵":"xlarr","⟷":"xharr","⟼":"xmap","⟶":"xrarr","↬":"rarrlp","⦅":"lopar","𝕃":"Lopf","𝕝":"lopf","⨭":"loplus","⨴":"lotimes","∗":"lowast",_:"lowbar","↙":"swarr","↘":"searr","◊":"loz","(":"lpar","⦓":"lparlt","⥭":"lrhard","‎":"lrm","⊿":"lrtri","‹":"lsaquo","𝓁":"lscr","↰":"lsh","⪍":"lsime","⪏":"lsimg","‘":"lsquo","‚":"sbquo","Ł":"Lstrok","ł":"lstrok","⪦":"ltcc","⩹":"ltcir","<":"lt","⋉":"ltimes","⥶":"ltlarr","⩻":"ltquest","◃":"ltri","⦖":"ltrPar","⥊":"lurdshar","⥦":"luruhar","≨︀":"lvnE","¯":"macr","♂":"male","✠":"malt","⤅":"Map","↦":"map","↥":"mapstoup","▮":"marker","⨩":"mcomma","М":"Mcy","м":"mcy","—":"mdash","∺":"mDDot"," ":"MediumSpace","ℳ":"Mscr","𝔐":"Mfr","𝔪":"mfr","℧":"mho","µ":"micro","⫰":"midcir","∣":"mid","−":"minus","⨪":"minusdu","∓":"mp","⫛":"mlcp","⊧":"models","𝕄":"Mopf","𝕞":"mopf","𝓂":"mscr","Μ":"Mu","μ":"mu","⊸":"mumap","Ń":"Nacute","ń":"nacute","∠⃒":"nang","≉":"nap","⩰̸":"napE","≋̸":"napid","ʼn":"napos","♮":"natur","ℕ":"Nopf"," ":"nbsp","≎̸":"nbump","≏̸":"nbumpe","⩃":"ncap","Ň":"Ncaron","ň":"ncaron","Ņ":"Ncedil","ņ":"ncedil","≇":"ncong","⩭̸":"ncongdot","⩂":"ncup","Н":"Ncy","н":"ncy","–":"ndash","⤤":"nearhk","↗":"nearr","⇗":"neArr","≠":"ne","≐̸":"nedot","​":"ZeroWidthSpace","≢":"nequiv","⤨":"toea","≂̸":"nesim","\n":"NewLine","∄":"nexist","𝔑":"Nfr","𝔫":"nfr","≧̸":"ngE","≱":"nge","⩾̸":"nges","⋙̸":"nGg","≵":"ngsim","≫⃒":"nGt","≯":"ngt","≫̸":"nGtv","↮":"nharr","⇎":"nhArr","⫲":"nhpar","∋":"ni","⋼":"nis","⋺":"nisd","Њ":"NJcy","њ":"njcy","↚":"nlarr","⇍":"nlArr","‥":"nldr","≦̸":"nlE","≰":"nle","⩽̸":"nles","≮":"nlt","⋘̸":"nLl","≴":"nlsim","≪⃒":"nLt","⋪":"nltri","⋬":"nltrie","≪̸":"nLtv","∤":"nmid","⁠":"NoBreak","𝕟":"nopf","⫬":"Not","¬":"not","≭":"NotCupCap","∦":"npar","∉":"notin","≹":"ntgl","⋵̸":"notindot","⋹̸":"notinE","⋷":"notinvb","⋶":"notinvc","⧏̸":"NotLeftTriangleBar","≸":"ntlg","⪢̸":"NotNestedGreaterGreater","⪡̸":"NotNestedLessLess","∌":"notni","⋾":"notnivb","⋽":"notnivc","⊀":"npr","⪯̸":"npre","⋠":"nprcue","⧐̸":"NotRightTriangleBar","⋫":"nrtri","⋭":"nrtrie","⊏̸":"NotSquareSubset","⋢":"nsqsube","⊐̸":"NotSquareSuperset","⋣":"nsqsupe","⊂⃒":"vnsub","⊈":"nsube","⊁":"nsc","⪰̸":"nsce","⋡":"nsccue","≿̸":"NotSucceedsTilde","⊃⃒":"vnsup","⊉":"nsupe","≁":"nsim","≄":"nsime","⫽⃥":"nparsl","∂̸":"npart","⨔":"npolint","⤳̸":"nrarrc","↛":"nrarr","⇏":"nrArr","↝̸":"nrarrw","𝒩":"Nscr","𝓃":"nscr","⊄":"nsub","⫅̸":"nsubE","⊅":"nsup","⫆̸":"nsupE","Ñ":"Ntilde","ñ":"ntilde","Ν":"Nu","ν":"nu","#":"num","№":"numero"," ":"numsp","≍⃒":"nvap","⊬":"nvdash","⊭":"nvDash","⊮":"nVdash","⊯":"nVDash","≥⃒":"nvge",">⃒":"nvgt","⤄":"nvHarr","⧞":"nvinfin","⤂":"nvlArr","≤⃒":"nvle","<⃒":"nvlt","⊴⃒":"nvltrie","⤃":"nvrArr","⊵⃒":"nvrtrie","∼⃒":"nvsim","⤣":"nwarhk","↖":"nwarr","⇖":"nwArr","⤧":"nwnear","Ó":"Oacute","ó":"oacute","Ô":"Ocirc","ô":"ocirc","О":"Ocy","о":"ocy","Ő":"Odblac","ő":"odblac","⨸":"odiv","⦼":"odsold","Œ":"OElig","œ":"oelig","⦿":"ofcir","𝔒":"Ofr","𝔬":"ofr","˛":"ogon","Ò":"Ograve","ò":"ograve","⧁":"ogt","⦵":"ohbar","Ω":"ohm","⦾":"olcir","⦻":"olcross","‾":"oline","⧀":"olt","Ō":"Omacr","ō":"omacr","ω":"omega","Ο":"Omicron","ο":"omicron","⦶":"omid","𝕆":"Oopf","𝕠":"oopf","⦷":"opar","⦹":"operp","⩔":"Or","∨":"or","⩝":"ord","ℴ":"oscr","ª":"ordf","º":"ordm","⊶":"origof","⩖":"oror","⩗":"orslope","⩛":"orv","𝒪":"Oscr","Ø":"Oslash","ø":"oslash","⊘":"osol","Õ":"Otilde","õ":"otilde","⨶":"otimesas","⨷":"Otimes","Ö":"Ouml","ö":"ouml","⌽":"ovbar","⏞":"OverBrace","⎴":"tbrk","⏜":"OverParenthesis","¶":"para","⫳":"parsim","⫽":"parsl","∂":"part","П":"Pcy","п":"pcy","%":"percnt",".":"period","‰":"permil","‱":"pertenk","𝔓":"Pfr","𝔭":"pfr","Φ":"Phi","φ":"phi","ϕ":"phiv","☎":"phone","Π":"Pi","π":"pi","ϖ":"piv","ℎ":"planckh","⨣":"plusacir","⨢":"pluscir","+":"plus","⨥":"plusdu","⩲":"pluse","±":"pm","⨦":"plussim","⨧":"plustwo","⨕":"pointint","𝕡":"popf","ℙ":"Popf","£":"pound","⪷":"prap","⪻":"Pr","≺":"pr","≼":"prcue","⪯":"pre","≾":"prsim","⪹":"prnap","⪵":"prnE","⋨":"prnsim","⪳":"prE","′":"prime","″":"Prime","∏":"prod","⌮":"profalar","⌒":"profline","⌓":"profsurf","∝":"prop","⊰":"prurel","𝒫":"Pscr","𝓅":"pscr","Ψ":"Psi","ψ":"psi"," ":"puncsp","𝔔":"Qfr","𝔮":"qfr","𝕢":"qopf","ℚ":"Qopf","⁗":"qprime","𝒬":"Qscr","𝓆":"qscr","⨖":"quatint","?":"quest",'"':"quot","⇛":"rAarr","∽̱":"race","Ŕ":"Racute","ŕ":"racute","√":"Sqrt","⦳":"raemptyv","⟩":"rang","⟫":"Rang","⦒":"rangd","⦥":"range","»":"raquo","⥵":"rarrap","⇥":"rarrb","⤠":"rarrbfs","⤳":"rarrc","→":"rarr","↠":"Rarr","⤞":"rarrfs","⥅":"rarrpl","⥴":"rarrsim","⤖":"Rarrtl","↣":"rarrtl","↝":"rarrw","⤚":"ratail","⤜":"rAtail","∶":"ratio","❳":"rbbrk","}":"rcub","]":"rsqb","⦌":"rbrke","⦎":"rbrksld","⦐":"rbrkslu","Ř":"Rcaron","ř":"rcaron","Ŗ":"Rcedil","ŗ":"rcedil","⌉":"rceil","Р":"Rcy","р":"rcy","⤷":"rdca","⥩":"rdldhar","↳":"rdsh","ℜ":"Re","ℛ":"Rscr","ℝ":"Ropf","▭":"rect","⥽":"rfisht","⌋":"rfloor","𝔯":"rfr","⥤":"rHar","⇀":"rharu","⥬":"rharul","Ρ":"Rho","ρ":"rho","ϱ":"rhov","⇄":"rlarr","⟧":"robrk","⥝":"RightDownTeeVector","⥕":"RightDownVectorBar","⇉":"rrarr","⊢":"vdash","⥛":"RightTeeVector","⋌":"rthree","⧐":"RightTriangleBar","⊳":"vrtri","⊵":"rtrie","⥏":"RightUpDownVector","⥜":"RightUpTeeVector","⥔":"RightUpVectorBar","↾":"uharr", +"⥓":"RightVectorBar","˚":"ring","‏":"rlm","⎱":"rmoust","⫮":"rnmid","⟭":"roang","⇾":"roarr","⦆":"ropar","𝕣":"ropf","⨮":"roplus","⨵":"rotimes","⥰":"RoundImplies",")":"rpar","⦔":"rpargt","⨒":"rppolint","›":"rsaquo","𝓇":"rscr","↱":"rsh","⋊":"rtimes","▹":"rtri","⧎":"rtriltri","⧴":"RuleDelayed","⥨":"ruluhar","℞":"rx","Ś":"Sacute","ś":"sacute","⪸":"scap","Š":"Scaron","š":"scaron","⪼":"Sc","≻":"sc","≽":"sccue","⪰":"sce","⪴":"scE","Ş":"Scedil","ş":"scedil","Ŝ":"Scirc","ŝ":"scirc","⪺":"scnap","⪶":"scnE","⋩":"scnsim","⨓":"scpolint","≿":"scsim","С":"Scy","с":"scy","⋅":"sdot","⩦":"sdote","⇘":"seArr","§":"sect",";":"semi","⤩":"tosa","✶":"sext","𝔖":"Sfr","𝔰":"sfr","♯":"sharp","Щ":"SHCHcy","щ":"shchcy","Ш":"SHcy","ш":"shcy","↑":"uarr","­":"shy","Σ":"Sigma","σ":"sigma","ς":"sigmaf","∼":"sim","⩪":"simdot","≃":"sime","⪞":"simg","⪠":"simgE","⪝":"siml","⪟":"simlE","≆":"simne","⨤":"simplus","⥲":"simrarr","⨳":"smashp","⧤":"smeparsl","⌣":"smile","⪪":"smt","⪬":"smte","⪬︀":"smtes","Ь":"SOFTcy","ь":"softcy","⌿":"solbar","⧄":"solb","/":"sol","𝕊":"Sopf","𝕤":"sopf","♠":"spades","⊓":"sqcap","⊓︀":"sqcaps","⊔":"sqcup","⊔︀":"sqcups","⊏":"sqsub","⊑":"sqsube","⊐":"sqsup","⊒":"sqsupe","□":"squ","𝒮":"Sscr","𝓈":"sscr","⋆":"Star","☆":"star","⊂":"sub","⋐":"Sub","⪽":"subdot","⫅":"subE","⊆":"sube","⫃":"subedot","⫁":"submult","⫋":"subnE","⊊":"subne","⪿":"subplus","⥹":"subrarr","⫇":"subsim","⫕":"subsub","⫓":"subsup","∑":"sum","♪":"sung","¹":"sup1","²":"sup2","³":"sup3","⊃":"sup","⋑":"Sup","⪾":"supdot","⫘":"supdsub","⫆":"supE","⊇":"supe","⫄":"supedot","⟉":"suphsol","⫗":"suphsub","⥻":"suplarr","⫂":"supmult","⫌":"supnE","⊋":"supne","⫀":"supplus","⫈":"supsim","⫔":"supsub","⫖":"supsup","⇙":"swArr","⤪":"swnwar","ß":"szlig"," ":"Tab","⌖":"target","Τ":"Tau","τ":"tau","Ť":"Tcaron","ť":"tcaron","Ţ":"Tcedil","ţ":"tcedil","Т":"Tcy","т":"tcy","⃛":"tdot","⌕":"telrec","𝔗":"Tfr","𝔱":"tfr","∴":"there4","Θ":"Theta","θ":"theta","ϑ":"thetav","  ":"ThickSpace"," ":"thinsp","Þ":"THORN","þ":"thorn","⨱":"timesbar","×":"times","⨰":"timesd","⌶":"topbot","⫱":"topcir","𝕋":"Topf","𝕥":"topf","⫚":"topfork","‴":"tprime","™":"trade","▵":"utri","≜":"trie","◬":"tridot","⨺":"triminus","⨹":"triplus","⧍":"trisb","⨻":"tritime","⏢":"trpezium","𝒯":"Tscr","𝓉":"tscr","Ц":"TScy","ц":"tscy","Ћ":"TSHcy","ћ":"tshcy","Ŧ":"Tstrok","ŧ":"tstrok","Ú":"Uacute","ú":"uacute","↟":"Uarr","⥉":"Uarrocir","Ў":"Ubrcy","ў":"ubrcy","Ŭ":"Ubreve","ŭ":"ubreve","Û":"Ucirc","û":"ucirc","У":"Ucy","у":"ucy","⇅":"udarr","Ű":"Udblac","ű":"udblac","⥮":"udhar","⥾":"ufisht","𝔘":"Ufr","𝔲":"ufr","Ù":"Ugrave","ù":"ugrave","⥣":"uHar","▀":"uhblk","⌜":"ulcorn","⌏":"ulcrop","◸":"ultri","Ū":"Umacr","ū":"umacr","⏟":"UnderBrace","⏝":"UnderParenthesis","⊎":"uplus","Ų":"Uogon","ų":"uogon","𝕌":"Uopf","𝕦":"uopf","⤒":"UpArrowBar","↕":"varr","υ":"upsi","ϒ":"Upsi","Υ":"Upsilon","⇈":"uuarr","⌝":"urcorn","⌎":"urcrop","Ů":"Uring","ů":"uring","◹":"urtri","𝒰":"Uscr","𝓊":"uscr","⋰":"utdot","Ũ":"Utilde","ũ":"utilde","Ü":"Uuml","ü":"uuml","⦧":"uwangle","⦜":"vangrt","⊊︀":"vsubne","⫋︀":"vsubnE","⊋︀":"vsupne","⫌︀":"vsupnE","⫨":"vBar","⫫":"Vbar","⫩":"vBarv","В":"Vcy","в":"vcy","⊩":"Vdash","⊫":"VDash","⫦":"Vdashl","⊻":"veebar","≚":"veeeq","⋮":"vellip","|":"vert","‖":"Vert","❘":"VerticalSeparator","≀":"wr","𝔙":"Vfr","𝔳":"vfr","𝕍":"Vopf","𝕧":"vopf","𝒱":"Vscr","𝓋":"vscr","⊪":"Vvdash","⦚":"vzigzag","Ŵ":"Wcirc","ŵ":"wcirc","⩟":"wedbar","≙":"wedgeq","℘":"wp","𝔚":"Wfr","𝔴":"wfr","𝕎":"Wopf","𝕨":"wopf","𝒲":"Wscr","𝓌":"wscr","𝔛":"Xfr","𝔵":"xfr","Ξ":"Xi","ξ":"xi","⋻":"xnis","𝕏":"Xopf","𝕩":"xopf","𝒳":"Xscr","𝓍":"xscr","Ý":"Yacute","ý":"yacute","Я":"YAcy","я":"yacy","Ŷ":"Ycirc","ŷ":"ycirc","Ы":"Ycy","ы":"ycy","¥":"yen","𝔜":"Yfr","𝔶":"yfr","Ї":"YIcy","ї":"yicy","𝕐":"Yopf","𝕪":"yopf","𝒴":"Yscr","𝓎":"yscr","Ю":"YUcy","ю":"yucy","ÿ":"yuml","Ÿ":"Yuml","Ź":"Zacute","ź":"zacute","Ž":"Zcaron","ž":"zcaron","З":"Zcy","з":"zcy","Ż":"Zdot","ż":"zdot","ℨ":"Zfr","Ζ":"Zeta","ζ":"zeta","𝔷":"zfr","Ж":"ZHcy","ж":"zhcy","⇝":"zigrarr","𝕫":"zopf","𝒵":"Zscr","𝓏":"zscr","‍":"zwj","‌":"zwnj"},f=/["&'<>`]/g,d={'"':""","&":"&","'":"'","<":"<",">":">","`":"`"},p=/&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/,g=/[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,m=/&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egrave|egrave|ugrave|frac12|frac14|frac34|Ugrave|Oacute|Iacute|ntilde|Ntilde|uacute|middot|Igrave|igrave|iquest|aacute|laquo|THORN|micro|iexcl|icirc|Icirc|Acirc|ucirc|ecirc|Ocirc|ocirc|Ecirc|Ucirc|aring|Aring|aelig|AElig|acute|pound|raquo|acirc|times|thorn|szlig|cedil|COPY|Auml|ordf|ordm|uuml|macr|Uuml|auml|Ouml|ouml|para|nbsp|Euml|quot|QUOT|euml|yuml|cent|sect|copy|sup1|sup2|sup3|Iuml|iuml|shy|eth|reg|not|yen|amp|AMP|REG|uml|ETH|deg|gt|GT|LT|lt)([=a-zA-Z0-9])?/g,y={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",amp:"&",AMP:"&",andand:"⩕",And:"⩓",and:"∧",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angmsd:"∡",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",apacir:"⩯",ap:"≈",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxHd:"╤",boxhD:"╥",boxHD:"╦",boxhu:"┴",boxHu:"╧",boxhU:"╨",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsolb:"⧅",bsol:"\\",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",capand:"⩄",capbrcup:"⩉",capcap:"⩋",cap:"∩",Cap:"⋒",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cir:"○",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cup:"∪",Cup:"⋓",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",Darr:"↡",dArr:"⇓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",ddagger:"‡",ddarr:"⇊",DD:"ⅅ",dd:"ⅆ",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrowBar:"⤓",downarrow:"↓",DownArrow:"↓",Downarrow:"⇓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVectorBar:"⥖",DownLeftVector:"↽",DownRightTeeVector:"⥟",DownRightVectorBar:"⥗",DownRightVector:"⇁",DownTeeArrow:"↧",DownTee:"⊤",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",Ecirc:"Ê",ecirc:"ê",ecir:"≖",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",edot:"ė",eDot:"≑",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp13:" ",emsp14:" ",emsp:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",ge:"≥",gE:"≧",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",gescc:"⪩",ges:"⩾",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gla:"⪥",gl:"≷",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gtcc:"⪧",gtcir:"⩺",gt:">",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅","in":"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺","int":"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:" ",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"},v={Aacute:"Á",aacute:"á",Acirc:"Â",acirc:"â",acute:"´",AElig:"Æ",aelig:"æ",Agrave:"À",agrave:"à",amp:"&",AMP:"&",Aring:"Å",aring:"å",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",brvbar:"¦",Ccedil:"Ç",ccedil:"ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",Eacute:"É",eacute:"é",Ecirc:"Ê",ecirc:"ê",Egrave:"È",egrave:"è",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",Iacute:"Í",iacute:"í",Icirc:"Î",icirc:"î",iexcl:"¡",Igrave:"Ì",igrave:"ì",iquest:"¿",Iuml:"Ï",iuml:"ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",Ntilde:"Ñ",ntilde:"ñ",Oacute:"Ó",oacute:"ó",Ocirc:"Ô",ocirc:"ô",Ograve:"Ò",ograve:"ò",ordf:"ª",ordm:"º",Oslash:"Ø",oslash:"ø",Otilde:"Õ",otilde:"õ",Ouml:"Ö",ouml:"ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",THORN:"Þ",thorn:"þ",times:"×",Uacute:"Ú",uacute:"ú",Ucirc:"Û",ucirc:"û",Ugrave:"Ù",ugrave:"ù",uml:"¨",Uuml:"Ü",uuml:"ü",Yacute:"Ý",yacute:"ý",yen:"¥",yuml:"ÿ"},b={0:"�",128:"€",130:"‚",131:"ƒ",132:"„",133:"…",134:"†",135:"‡",136:"ˆ",137:"‰",138:"Š",139:"‹",140:"Œ",142:"Ž",145:"‘",146:"’",147:"“",148:"”",149:"•",150:"–",151:"—",152:"˜",153:"™",154:"š",155:"›",156:"œ",158:"ž",159:"Ÿ"},_=[1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65e3,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111],x=String.fromCharCode,w={},A=w.hasOwnProperty,k=function(t,e){return A.call(t,e)},E=function(t,e){for(var n=-1,r=t.length;++n=55296&&57343>=t||t>1114111?(e&&M("character reference outside the permissible Unicode range"),"�"):k(b,t)?(e&&M("disallowed character reference"),b[t]):(e&&E(_,t)&&M("disallowed character reference"),t>65535&&(t-=65536,n+=x(t>>>10&1023|55296),t=56320|1023&t),n+=x(t))},S=function(t){return"&#x"+t.charCodeAt(0).toString(16).toUpperCase()+";"},M=function(t){throw Error("Parse error: "+t)},T=function(t,e){e=D(e,T.options);var n=e.strict;n&&g.test(t)&&M("forbidden code point");var r=e.encodeEverything,i=e.useNamedReferences,a=e.allowUnsafeSymbols;return r?(t=t.replace(s,function(t){return i&&k(h,t)?"&"+h[t]+";":S(t)}),i&&(t=t.replace(/>\u20D2/g,">⃒").replace(/<\u20D2/g,"<⃒").replace(/fj/g,"fj")),i&&(t=t.replace(l,function(t){return"&"+h[t]+";"}))):i?(a||(t=t.replace(f,function(t){return"&"+h[t]+";"})),t=t.replace(/>\u20D2/g,">⃒").replace(/<\u20D2/g,"<⃒"),t=t.replace(l,function(t){return"&"+h[t]+";"})):a||(t=t.replace(f,S)),t.replace(o,function(t){var e=t.charCodeAt(0),n=t.charCodeAt(1),r=1024*(e-55296)+n-56320+65536;return"&#x"+r.toString(16).toUpperCase()+";"}).replace(c,S)};T.options={allowUnsafeSymbols:!1,encodeEverything:!1,strict:!1,useNamedReferences:!1};var F=function(t,e){e=D(e,F.options);var n=e.strict;return n&&p.test(t)&&M("malformed character reference"),t.replace(m,function(t,r,i,a,u,o,s,c){var l,h,f,d,p;return r?(l=r,h=i,n&&!h&&M("character reference was not terminated by a semicolon"),C(l,n)):a?(f=a,h=u,n&&!h&&M("character reference was not terminated by a semicolon"),l=parseInt(f,16),C(l,n)):o?(d=o,k(y,d)?y[d]:(n&&M("named character reference was not terminated by a semicolon"),t)):(d=s,p=c,p&&e.isAttributeValue?(n&&"="==p&&M("`&` did not start a character reference"),t):(n&&M("named character reference was not terminated by a semicolon"),v[d]+(p||"")))})};F.options={isAttributeValue:!1,strict:!1};var B=function(t){return t.replace(f,function(t){return d[t]})},L={version:"0.5.0",encode:T,decode:F,escape:B,unescape:F};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return L});else if(i&&!i.nodeType)if(a)a.exports=L;else for(var N in L)k(L,N)&&(i[N]=L[N]);else r.he=L}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],106:[function(t,e,n){!function(t,r){"object"==typeof n&&"undefined"!=typeof e?e.exports=r():"function"==typeof define&&define.amd?define(r):t.moment=r()}(this,function(){"use strict";function n(){return Zn.apply(null,arguments)}function r(t){Zn=t}function i(t){return"[object Array]"===Object.prototype.toString.call(t)}function a(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function u(t,e){var n,r=[];for(n=0;n0)for(n in Jn)r=Jn[n],i=e[r],p(i)||(t[r]=i);return t}function m(t){g(this,t),this._d=new Date(null!=t._d?t._d.getTime():0/0),Kn===!1&&(Kn=!0,n.updateOffset(this),Kn=!1)}function y(t){return t instanceof m||null!=t&&null!=t._isAMomentObject}function v(t){return 0>t?Math.ceil(t):Math.floor(t)}function b(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=v(e)),n}function _(t,e,n){var r,i=Math.min(t.length,e.length),a=Math.abs(t.length-e.length),u=0;for(r=0;i>r;r++)(n&&t[r]!==e[r]||!n&&b(t[r])!==b(e[r]))&&u++;return u+a}function x(){}function w(t){return t?t.toLowerCase().replace("_","-"):t}function A(t){for(var e,n,r,i,a=0;a0;){if(r=k(i.slice(0,e).join("-")))return r;if(n&&n.length>=e&&_(i,n,!0)>=e-1)break;e--}a++}return null}function k(n){var r=null;if(!Qn[n]&&"undefined"!=typeof e&&e&&e.exports)try{r=Xn._abbr,t("./locale/"+n),E(r)}catch(i){}return Qn[n]}function E(t,e){var n;return t&&(n=p(e)?C(t):D(t,e),n&&(Xn=n)),Xn._abbr}function D(t,e){return null!==e?(e.abbr=t,Qn[t]=Qn[t]||new x,Qn[t].set(e),E(t),Qn[t]):(delete Qn[t],null)}function C(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Xn;if(!i(t)){if(e=k(t))return e;t=[t]}return A(t)}function S(t,e){var n=t.toLowerCase();tr[n]=tr[n+"s"]=tr[e]=t}function M(t){return"string"==typeof t?tr[t]||tr[t.toLowerCase()]:void 0}function T(t){var e,n,r={};for(n in t)o(t,n)&&(e=M(n),e&&(r[e]=t[n]));return r}function F(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function B(t,e){return function(r){return null!=r?(N(this,t,r),n.updateOffset(this,e),this):L(this,t)}}function L(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():0/0}function N(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function O(t,e){var n;if("object"==typeof t)for(n in t)this.set(n,t[n]);else if(t=M(t),F(this[t]))return this[t](e);return this}function I(t,e,n){var r=""+Math.abs(t),i=e-r.length,a=t>=0;return(a?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}function R(t,e,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),t&&(ir[t]=i),e&&(ir[e[0]]=function(){return I(i.apply(this,arguments),e[1],e[2])}),n&&(ir[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),t)})}function P(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function q(t){var e,n,r=t.match(er);for(e=0,n=r.length;n>e;e++)r[e]=ir[r[e]]?ir[r[e]]:P(r[e]);return function(i){var a="";for(e=0;n>e;e++)a+=r[e]instanceof Function?r[e].call(i,t):r[e];return a}}function j(t,e){return t.isValid()?(e=U(e,t.localeData()),rr[e]=rr[e]||q(e),rr[e](t)):t.localeData().invalidDate()}function U(t,e){function n(t){return e.longDateFormat(t)||t}var r=5;for(nr.lastIndex=0;r>=0&&nr.test(t);)t=t.replace(nr,n),nr.lastIndex=0,r-=1;return t}function Y(t,e,n){wr[t]=F(e)?e:function(t){return t&&n?n:e}}function V(t,e){return o(wr,t)?wr[t](e._strict,e._locale):new RegExp(H(t))}function H(t){return G(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,r,i){return e||n||r||i}))}function G(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function z(t,e){var n,r=e;for("string"==typeof t&&(t=[t]),"number"==typeof e&&(r=function(t,n){n[e]=b(t)}),n=0;nr;r++){if(i=c([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(a="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(a.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[r].test(t))return r;if(n&&"MMM"===e&&this._shortMonthsParse[r].test(t))return r;if(!n&&this._monthsParse[r].test(t))return r}}function Q(t,e){var n;return t.isValid()?"string"==typeof e&&(e=t.localeData().monthsParse(e),"number"!=typeof e)?t:(n=Math.min(t.date(),Z(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t):t}function tt(t){return null!=t?(Q(this,t),n.updateOffset(this,!0),this):L(this,"Month")}function et(){return Z(this.year(),this.month())}function nt(t){return this._monthsParseExact?(o(this,"_monthsRegex")||it.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex}function rt(t){return this._monthsParseExact?(o(this,"_monthsRegex")||it.call(this),t?this._monthsStrictRegex:this._monthsRegex):this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex}function it(){function t(t,e){return e.length-t.length}var e,n,r=[],i=[],a=[];for(e=0;12>e;e++)n=c([2e3,e]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),a.push(this.months(n,"")),a.push(this.monthsShort(n,""));for(r.sort(t),i.sort(t),a.sort(t),e=0;12>e;e++)r[e]=G(r[e]),i[e]=G(i[e]),a[e]=G(a[e]);this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")$","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")$","i")}function at(t){var e,n=t._a;return n&&-2===h(t).overflow&&(e=n[Er]<0||n[Er]>11?Er:n[Dr]<1||n[Dr]>Z(n[kr],n[Er])?Dr:n[Cr]<0||n[Cr]>24||24===n[Cr]&&(0!==n[Sr]||0!==n[Mr]||0!==n[Tr])?Cr:n[Sr]<0||n[Sr]>59?Sr:n[Mr]<0||n[Mr]>59?Mr:n[Tr]<0||n[Tr]>999?Tr:-1,h(t)._overflowDayOfYear&&(kr>e||e>Dr)&&(e=Dr),h(t)._overflowWeeks&&-1===e&&(e=Fr),h(t)._overflowWeekday&&-1===e&&(e=Br),h(t).overflow=e),t}function ut(t){n.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function ot(t,e){var n=!0;return s(function(){return n&&(ut(t+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),n=!1),e.apply(this,arguments)},e)}function st(t,e){Pr[t]||(ut(e),Pr[t]=!0)}function ct(t){var e,n,r,i,a,u,o=t._i,s=qr.exec(o)||jr.exec(o);if(s){for(h(t).iso=!0,e=0,n=Yr.length;n>e;e++)if(Yr[e][1].exec(s[1])){i=Yr[e][0],r=Yr[e][2]!==!1;break}if(null==i)return void(t._isValid=!1);if(s[3]){for(e=0,n=Vr.length;n>e;e++)if(Vr[e][1].exec(s[3])){a=(s[2]||" ")+Vr[e][0];break}if(null==a)return void(t._isValid=!1)}if(!r&&null!=a)return void(t._isValid=!1);if(s[4]){if(!Ur.exec(s[4]))return void(t._isValid=!1);u="Z"}t._f=i+(a||"")+(u||""),kt(t)}else t._isValid=!1}function lt(t){var e=Hr.exec(t._i);return null!==e?void(t._d=new Date(+e[1])):(ct(t),void(t._isValid===!1&&(delete t._isValid,n.createFromInputFallback(t))))}function ht(t,e,n,r,i,a,u){var o=new Date(t,e,n,r,i,a,u);return 100>t&&t>=0&&isFinite(o.getFullYear())&&o.setFullYear(t),o}function ft(t){var e=new Date(Date.UTC.apply(null,arguments));return 100>t&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function dt(t){return pt(t)?366:365}function pt(t){return t%4===0&&t%100!==0||t%400===0}function gt(){return pt(this.year())}function mt(t,e,n){var r=7+e-n,i=(7+ft(t,0,r).getUTCDay()-e)%7;return-i+r-1}function yt(t,e,n,r,i){var a,u,o=(7+n-r)%7,s=mt(t,r,i),c=1+7*(e-1)+o+s;return 0>=c?(a=t-1,u=dt(a)+c):c>dt(t)?(a=t+1,u=c-dt(t)):(a=t,u=c),{year:a,dayOfYear:u}}function vt(t,e,n){var r,i,a=mt(t.year(),e,n),u=Math.floor((t.dayOfYear()-a-1)/7)+1;return 1>u?(i=t.year()-1,r=u+bt(i,e,n)):u>bt(t.year(),e,n)?(r=u-bt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=u),{week:r,year:i}}function bt(t,e,n){var r=mt(t,e,n),i=mt(t+1,e,n);return(dt(t)-r+i)/7}function _t(t,e,n){return null!=t?t:null!=e?e:n}function xt(t){var e=new Date(n.now());return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function wt(t){var e,n,r,i,a=[];if(!t._d){for(r=xt(t),t._w&&null==t._a[Dr]&&null==t._a[Er]&&At(t),t._dayOfYear&&(i=_t(t._a[kr],r[kr]),t._dayOfYear>dt(i)&&(h(t)._overflowDayOfYear=!0),n=ft(i,0,t._dayOfYear),t._a[Er]=n.getUTCMonth(),t._a[Dr]=n.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=a[e]=r[e];for(;7>e;e++)t._a[e]=a[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Cr]&&0===t._a[Sr]&&0===t._a[Mr]&&0===t._a[Tr]&&(t._nextDay=!0,t._a[Cr]=0),t._d=(t._useUTC?ft:ht).apply(null,a),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Cr]=24)}}function At(t){var e,n,r,i,a,u,o,s;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(a=1,u=4,n=_t(e.GG,t._a[kr],vt(Bt(),1,4).year),r=_t(e.W,1),i=_t(e.E,1),(1>i||i>7)&&(s=!0)):(a=t._locale._week.dow,u=t._locale._week.doy,n=_t(e.gg,t._a[kr],vt(Bt(),a,u).year),r=_t(e.w,1),null!=e.d?(i=e.d,(0>i||i>6)&&(s=!0)):null!=e.e?(i=e.e+a,(e.e<0||e.e>6)&&(s=!0)):i=a),1>r||r>bt(n,a,u)?h(t)._overflowWeeks=!0:null!=s?h(t)._overflowWeekday=!0:(o=yt(n,r,i,a,u),t._a[kr]=o.year,t._dayOfYear=o.dayOfYear)}function kt(t){if(t._f===n.ISO_8601)return void ct(t);t._a=[],h(t).empty=!0;var e,r,i,a,u,o=""+t._i,s=o.length,c=0;for(i=U(t._f,t._locale).match(er)||[],e=0;e0&&h(t).unusedInput.push(u),o=o.slice(o.indexOf(r)+r.length),c+=r.length),ir[a]?(r?h(t).empty=!1:h(t).unusedTokens.push(a),W(a,r,t)):t._strict&&!r&&h(t).unusedTokens.push(a);h(t).charsLeftOver=s-c,o.length>0&&h(t).unusedInput.push(o),h(t).bigHour===!0&&t._a[Cr]<=12&&t._a[Cr]>0&&(h(t).bigHour=void 0),t._a[Cr]=Et(t._locale,t._a[Cr],t._meridiem),wt(t),at(t)}function Et(t,e,n){var r;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(r=t.isPM(n),r&&12>e&&(e+=12),r||12!==e||(e=0),e):e}function Dt(t){var e,n,r,i,a;if(0===t._f.length)return h(t).invalidFormat=!0,void(t._d=new Date(0/0));for(i=0;ia)&&(r=a,n=e));s(t,n||e)}function Ct(t){if(!t._d){var e=T(t._i);t._a=u([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),wt(t)}}function St(t){var e=new m(at(Mt(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function Mt(t){var e=t._i,n=t._f;return t._locale=t._locale||C(t._l),null===e||void 0===n&&""===e?d({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),y(e)?new m(at(e)):(i(n)?Dt(t):n?kt(t):a(e)?t._d=e:Tt(t),f(t)||(t._d=null),t))}function Tt(t){var e=t._i;void 0===e?t._d=new Date(n.now()):a(e)?t._d=new Date(+e):"string"==typeof e?lt(t):i(e)?(t._a=u(e.slice(0),function(t){return parseInt(t,10)}),wt(t)):"object"==typeof e?Ct(t):"number"==typeof e?t._d=new Date(e):n.createFromInputFallback(t)}function Ft(t,e,n,r,i){var a={};return"boolean"==typeof n&&(r=n,n=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=i,a._l=n,a._i=t,a._f=e,a._strict=r,St(a)}function Bt(t,e,n,r){return Ft(t,e,n,r,!1)}function Lt(t,e){var n,r;if(1===e.length&&i(e[0])&&(e=e[0]),!e.length)return Bt();for(n=e[0],r=1;rt&&(t=-t,n="-"),n+I(~~(t/60),2)+e+I(~~t%60,2)})}function qt(t,e){var n=(e||"").match(t)||[],r=n[n.length-1]||[],i=(r+"").match(Zr)||["-",0,0],a=+(60*i[1])+b(i[2]);return"+"===i[0]?a:-a}function jt(t,e){var r,i;return e._isUTC?(r=e.clone(),i=(y(t)||a(t)?+t:+Bt(t))-+r,r._d.setTime(+r._d+i),n.updateOffset(r,!1),r):Bt(t).local()}function Ut(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Yt(t,e){var r,i=this._offset||0;return this.isValid()?null!=t?("string"==typeof t?t=qt(br,t):Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(r=Ut(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==t&&(!e||this._changeInProgress?ie(this,Qt(t-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,n.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?i:Ut(this):null!=t?this:0/0}function Vt(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Ht(t){return this.utcOffset(0,t)}function Gt(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Ut(this),"m")),this}function zt(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(qt(vr,this._i)),this}function $t(t){return this.isValid()?(t=t?Bt(t).utcOffset():0,(this.utcOffset()-t)%60===0):!1}function Wt(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Zt(){if(!p(this._isDSTShifted))return this._isDSTShifted;var t={};if(g(t,this),t=Mt(t),t._a){var e=t._isUTC?c(t._a):Bt(t._a);this._isDSTShifted=this.isValid()&&_(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Xt(){return this.isValid()?!this._isUTC:!1}function Jt(){return this.isValid()?this._isUTC:!1}function Kt(){return this.isValid()?this._isUTC&&0===this._offset:!1}function Qt(t,e){var n,r,i,a=t,u=null;return Rt(t)?a={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(a={},e?a[e]=t:a.milliseconds=t):(u=Xr.exec(t))?(n="-"===u[1]?-1:1,a={y:0,d:b(u[Dr])*n,h:b(u[Cr])*n,m:b(u[Sr])*n,s:b(u[Mr])*n,ms:b(u[Tr])*n}):(u=Jr.exec(t))?(n="-"===u[1]?-1:1,a={y:te(u[2],n),M:te(u[3],n),d:te(u[4],n),h:te(u[5],n),m:te(u[6],n),s:te(u[7],n),w:te(u[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(i=ne(Bt(a.from),Bt(a.to)),a={},a.ms=i.milliseconds,a.M=i.months),r=new It(a),Rt(t)&&o(t,"_locale")&&(r._locale=t._locale),r}function te(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function ee(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function ne(t,e){var n;return t.isValid()&&e.isValid()?(e=jt(e,t),t.isBefore(e)?n=ee(t,e):(n=ee(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function re(t,e){return function(n,r){var i,a;return null===r||isNaN(+r)||(st(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period)."),a=n,n=r,r=a),n="string"==typeof n?+n:n,i=Qt(n,r),ie(this,i,t),this}}function ie(t,e,r,i){var a=e._milliseconds,u=e._days,o=e._months;t.isValid()&&(i=null==i?!0:i,a&&t._d.setTime(+t._d+a*r),u&&N(t,"Date",L(t,"Date")+u*r),o&&Q(t,L(t,"Month")+o*r),i&&n.updateOffset(t,u||o))}function ae(t,e){var n=t||Bt(),r=jt(n,this).startOf("day"),i=this.diff(r,"days",!0),a=-6>i?"sameElse":-1>i?"lastWeek":0>i?"lastDay":1>i?"sameDay":2>i?"nextDay":7>i?"nextWeek":"sameElse",u=e&&(F(e[a])?e[a]():e[a]);return this.format(u||this.localeData().calendar(a,this,Bt(n)))}function ue(){return new m(this)}function oe(t,e){var n=y(t)?t:Bt(t);return this.isValid()&&n.isValid()?(e=M(p(e)?"millisecond":e),"millisecond"===e?+this>+n:+n<+this.clone().startOf(e)):!1}function se(t,e){var n=y(t)?t:Bt(t);return this.isValid()&&n.isValid()?(e=M(p(e)?"millisecond":e),"millisecond"===e?+n>+this:+this.clone().endOf(e)<+n):!1}function ce(t,e,n){return this.isAfter(t,n)&&this.isBefore(e,n)}function le(t,e){var n,r=y(t)?t:Bt(t);return this.isValid()&&r.isValid()?(e=M(e||"millisecond"),"millisecond"===e?+this===+r:(n=+r,+this.clone().startOf(e)<=n&&n<=+this.clone().endOf(e))):!1}function he(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function fe(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function de(t,e,n){var r,i,a,u;return this.isValid()?(r=jt(t,this),r.isValid()?(i=6e4*(r.utcOffset()-this.utcOffset()),e=M(e),"year"===e||"month"===e||"quarter"===e?(u=pe(this,r),"quarter"===e?u/=3:"year"===e&&(u/=12)):(a=this-r,u="second"===e?a/1e3:"minute"===e?a/6e4:"hour"===e?a/36e5:"day"===e?(a-i)/864e5:"week"===e?(a-i)/6048e5:a),n?u:v(u)):0/0):0/0}function pe(t,e){var n,r,i=12*(e.year()-t.year())+(e.month()-t.month()),a=t.clone().add(i,"months");return 0>e-a?(n=t.clone().add(i-1,"months"),r=(e-a)/(a-n)):(n=t.clone().add(i+1,"months"),r=(e-a)/(n-a)),-(i+r)}function ge(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function me(){var t=this.clone().utc();return 0a&&(e=a),Ye.call(this,t,e,n,r,i))}function Ye(t,e,n,r,i){var a=yt(t,e,n,r,i),u=ft(a.year,0,a.dayOfYear);return this.year(u.getUTCFullYear()),this.month(u.getUTCMonth()),this.date(u.getUTCDate()),this}function Ve(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function He(t){return vt(t,this._week.dow,this._week.doy).week}function Ge(){return this._week.dow}function ze(){return this._week.doy}function $e(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function We(t){var e=vt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Ze(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Xe(t,e){return i(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]}function Je(t){return this._weekdaysShort[t.day()]}function Ke(t){return this._weekdaysMin[t.day()]}function Qe(t,e,n){var r,i,a;for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;7>r;r++){if(i=Bt([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(a="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[r].test(t))return r;if(n&&"ddd"===e&&this._shortWeekdaysParse[r].test(t))return r;if(n&&"dd"===e&&this._minWeekdaysParse[r].test(t))return r;if(!n&&this._weekdaysParse[r].test(t))return r}}function tn(t){if(!this.isValid())return null!=t?this:0/0;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Ze(t,this.localeData()),this.add(t-e,"d")):e}function en(t){if(!this.isValid())return null!=t?this:0/0;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function nn(t){return this.isValid()?null==t?this.day()||7:this.day(this.day()%7?t:t-7):null!=t?this:0/0}function rn(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function an(){return this.hours()%12||12}function un(t,e){R(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function on(t,e){return e._meridiemParse}function sn(t){return"p"===(t+"").toLowerCase().charAt(0)}function cn(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function ln(t,e){e[Tr]=b(1e3*("0."+t))}function hn(){return this._isUTC?"UTC":""}function fn(){return this._isUTC?"Coordinated Universal Time":""}function dn(t){return Bt(1e3*t)}function pn(){return Bt.apply(null,arguments).parseZone()}function gn(t,e,n){var r=this._calendar[t];return F(r)?r.call(e,n):r}function mn(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function yn(){return this._invalidDate}function vn(t){return this._ordinal.replace("%d",t)}function bn(t){return t}function _n(t,e,n,r){var i=this._relativeTime[n];return F(i)?i(t,e,n,r):i.replace(/%d/i,t)}function xn(t,e){var n=this._relativeTime[t>0?"future":"past"];return F(n)?n(e):n.replace(/%s/i,e)}function wn(t){var e,n;for(n in t)e=t[n],F(e)?this[n]=e:this["_"+n]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function An(t,e,n,r){var i=C(),a=c().set(r,e);return i[n](a,t)}function kn(t,e,n,r,i){if("number"==typeof t&&(e=t,t=void 0),t=t||"",null!=e)return An(t,e,n,i);var a,u=[];for(a=0;r>a;a++)u[a]=An(t,a,n,i);return u}function En(t,e){return kn(t,e,"months",12,"month")}function Dn(t,e){return kn(t,e,"monthsShort",12,"month")}function Cn(t,e){return kn(t,e,"weekdays",7,"day")}function Sn(t,e){return kn(t,e,"weekdaysShort",7,"day")}function Mn(t,e){return kn(t,e,"weekdaysMin",7,"day")}function Tn(){var t=this._data;return this._milliseconds=xi(this._milliseconds),this._days=xi(this._days),this._months=xi(this._months),t.milliseconds=xi(t.milliseconds),t.seconds=xi(t.seconds),t.minutes=xi(t.minutes),t.hours=xi(t.hours),t.months=xi(t.months),t.years=xi(t.years),this}function Fn(t,e,n,r){var i=Qt(e,n);return t._milliseconds+=r*i._milliseconds,t._days+=r*i._days,t._months+=r*i._months,t._bubble()}function Bn(t,e){return Fn(this,t,e,1)}function Ln(t,e){return Fn(this,t,e,-1)}function Nn(t){return 0>t?Math.floor(t):Math.ceil(t)}function On(){var t,e,n,r,i,a=this._milliseconds,u=this._days,o=this._months,s=this._data;return a>=0&&u>=0&&o>=0||0>=a&&0>=u&&0>=o||(a+=864e5*Nn(Rn(o)+u),u=0,o=0),s.milliseconds=a%1e3,t=v(a/1e3),s.seconds=t%60,e=v(t/60),s.minutes=e%60,n=v(e/60),s.hours=n%24,u+=v(n/24),i=v(In(u)),o+=i,u-=Nn(Rn(i)),r=v(o/12),o%=12,s.days=u,s.months=o,s.years=r,this}function In(t){return 4800*t/146097}function Rn(t){return 146097*t/4800}function Pn(t){var e,n,r=this._milliseconds;if(t=M(t),"month"===t||"year"===t)return e=this._days+r/864e5,n=this._months+In(e),"month"===t?n:n/12;switch(e=this._days+Math.round(Rn(this._months)),t){case"week":return e/7+r/6048e5;case"day":return e+r/864e5;case"hour":return 24*e+r/36e5;case"minute":return 1440*e+r/6e4;case"second":return 86400*e+r/1e3;case"millisecond":return Math.floor(864e5*e)+r;default:throw new Error("Unknown unit "+t)}}function qn(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*b(this._months/12)}function jn(t){return function(){return this.as(t)}}function Un(t){return t=M(t),this[t+"s"]()}function Yn(t){return function(){return this._data[t]}}function Vn(){return v(this.days()/7)}function Hn(t,e,n,r,i){return i.relativeTime(e||1,!!n,t,r)}function Gn(t,e,n){var r=Qt(t).abs(),i=Ri(r.as("s")),a=Ri(r.as("m")),u=Ri(r.as("h")),o=Ri(r.as("d")),s=Ri(r.as("M")),c=Ri(r.as("y")),l=i=a&&["m"]||a=u&&["h"]||u=o&&["d"]||o=s&&["M"]||s=c&&["y"]||["yy",c];return l[2]=e,l[3]=+t>0,l[4]=n,Hn.apply(null,l)}function zn(t,e){return void 0===Pi[t]?!1:void 0===e?Pi[t]:(Pi[t]=e,!0)}function $n(t){var e=this.localeData(),n=Gn(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function Wn(){var t,e,n,r=qi(this._milliseconds)/1e3,i=qi(this._days),a=qi(this._months);t=v(r/60),e=v(t/60),r%=60,t%=60,n=v(a/12),a%=12;var u=n,o=a,s=i,c=e,l=t,h=r,f=this.asSeconds();return f?(0>f?"-":"")+"P"+(u?u+"Y":"")+(o?o+"M":"")+(s?s+"D":"")+(c||l||h?"T":"")+(c?c+"H":"")+(l?l+"M":"")+(h?h+"S":""):"P0D"}var Zn,Xn,Jn=n.momentProperties=[],Kn=!1,Qn={},tr={},er=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,nr=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,rr={},ir={},ar=/\d/,ur=/\d\d/,or=/\d{3}/,sr=/\d{4}/,cr=/[+-]?\d{6}/,lr=/\d\d?/,hr=/\d\d\d\d?/,fr=/\d\d\d\d\d\d?/,dr=/\d{1,3}/,pr=/\d{1,4}/,gr=/[+-]?\d{1,6}/,mr=/\d+/,yr=/[+-]?\d+/,vr=/Z|[+-]\d\d:?\d\d/gi,br=/Z|[+-]\d\d(?::?\d\d)?/gi,_r=/[+-]?\d+(\.\d{1,3})?/,xr=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,wr={},Ar={},kr=0,Er=1,Dr=2,Cr=3,Sr=4,Mr=5,Tr=6,Fr=7,Br=8;R("M",["MM",2],"Mo",function(){return this.month()+1}),R("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),R("MMMM",0,0,function(t){return this.localeData().months(this,t)}),S("month","M"),Y("M",lr),Y("MM",lr,ur),Y("MMM",function(t,e){return e.monthsShortRegex(t)}),Y("MMMM",function(t,e){return e.monthsRegex(t)}),z(["M","MM"],function(t,e){e[Er]=b(t)-1}),z(["MMM","MMMM"],function(t,e,n,r){var i=n._locale.monthsParse(t,r,n._strict);null!=i?e[Er]=i:h(n).invalidMonth=t});var Lr=/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/,Nr="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Or="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ir=xr,Rr=xr,Pr={};n.suppressDeprecationWarnings=!1;var qr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,jr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/,Ur=/Z|[+-]\d\d(?::?\d\d)?/,Yr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Vr=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Hr=/^\/?Date\((\-?\d+)/i; + +n.createFromInputFallback=ot("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),R("Y",0,0,function(){var t=this.year();return 9999>=t?""+t:"+"+t}),R(0,["YY",2],0,function(){return this.year()%100}),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),S("year","y"),Y("Y",yr),Y("YY",lr,ur),Y("YYYY",pr,sr),Y("YYYYY",gr,cr),Y("YYYYYY",gr,cr),z(["YYYYY","YYYYYY"],kr),z("YYYY",function(t,e){e[kr]=2===t.length?n.parseTwoDigitYear(t):b(t)}),z("YY",function(t,e){e[kr]=n.parseTwoDigitYear(t)}),z("Y",function(t,e){e[kr]=parseInt(t,10)}),n.parseTwoDigitYear=function(t){return b(t)+(b(t)>68?1900:2e3)};var Gr=B("FullYear",!1);n.ISO_8601=function(){};var zr=ot("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var t=Bt.apply(null,arguments);return this.isValid()&&t.isValid()?this>t?this:t:d()}),$r=ot("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var t=Bt.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:d()}),Wr=function(){return Date.now?Date.now():+new Date};Pt("Z",":"),Pt("ZZ",""),Y("Z",br),Y("ZZ",br),z(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=qt(br,t)});var Zr=/([\+\-]|\d\d)/gi;n.updateOffset=function(){};var Xr=/(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Jr=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Qt.fn=It.prototype;var Kr=re(1,"add"),Qr=re(-1,"subtract");n.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var ti=ot("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});R(0,["gg",2],0,function(){return this.weekYear()%100}),R(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ie("gggg","weekYear"),Ie("ggggg","weekYear"),Ie("GGGG","isoWeekYear"),Ie("GGGGG","isoWeekYear"),S("weekYear","gg"),S("isoWeekYear","GG"),Y("G",yr),Y("g",yr),Y("GG",lr,ur),Y("gg",lr,ur),Y("GGGG",pr,sr),Y("gggg",pr,sr),Y("GGGGG",gr,cr),Y("ggggg",gr,cr),$(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,r){e[r.substr(0,2)]=b(t)}),$(["gg","GG"],function(t,e,r,i){e[i]=n.parseTwoDigitYear(t)}),R("Q",0,"Qo","quarter"),S("quarter","Q"),Y("Q",ar),z("Q",function(t,e){e[Er]=3*(b(t)-1)}),R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),S("week","w"),S("isoWeek","W"),Y("w",lr),Y("ww",lr,ur),Y("W",lr),Y("WW",lr,ur),$(["w","ww","W","WW"],function(t,e,n,r){e[r.substr(0,1)]=b(t)});var ei={dow:0,doy:6};R("D",["DD",2],"Do","date"),S("date","D"),Y("D",lr),Y("DD",lr,ur),Y("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),z(["D","DD"],Dr),z("Do",function(t,e){e[Dr]=b(t.match(lr)[0],10)});var ni=B("Date",!0);R("d",0,"do","day"),R("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),R("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),R("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),S("day","d"),S("weekday","e"),S("isoWeekday","E"),Y("d",lr),Y("e",lr),Y("E",lr),Y("dd",xr),Y("ddd",xr),Y("dddd",xr),$(["dd","ddd","dddd"],function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:h(n).invalidWeekday=t}),$(["d","e","E"],function(t,e,n,r){e[r]=b(t)});var ri="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ii="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ai="Su_Mo_Tu_We_Th_Fr_Sa".split("_");R("DDD",["DDDD",3],"DDDo","dayOfYear"),S("dayOfYear","DDD"),Y("DDD",dr),Y("DDDD",or),z(["DDD","DDDD"],function(t,e,n){n._dayOfYear=b(t)}),R("H",["HH",2],0,"hour"),R("h",["hh",2],0,an),R("hmm",0,0,function(){return""+an.apply(this)+I(this.minutes(),2)}),R("hmmss",0,0,function(){return""+an.apply(this)+I(this.minutes(),2)+I(this.seconds(),2)}),R("Hmm",0,0,function(){return""+this.hours()+I(this.minutes(),2)}),R("Hmmss",0,0,function(){return""+this.hours()+I(this.minutes(),2)+I(this.seconds(),2)}),un("a",!0),un("A",!1),S("hour","h"),Y("a",on),Y("A",on),Y("H",lr),Y("h",lr),Y("HH",lr,ur),Y("hh",lr,ur),Y("hmm",hr),Y("hmmss",fr),Y("Hmm",hr),Y("Hmmss",fr),z(["H","HH"],Cr),z(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),z(["h","hh"],function(t,e,n){e[Cr]=b(t),h(n).bigHour=!0}),z("hmm",function(t,e,n){var r=t.length-2;e[Cr]=b(t.substr(0,r)),e[Sr]=b(t.substr(r)),h(n).bigHour=!0}),z("hmmss",function(t,e,n){var r=t.length-4,i=t.length-2;e[Cr]=b(t.substr(0,r)),e[Sr]=b(t.substr(r,2)),e[Mr]=b(t.substr(i)),h(n).bigHour=!0}),z("Hmm",function(t,e){var n=t.length-2;e[Cr]=b(t.substr(0,n)),e[Sr]=b(t.substr(n))}),z("Hmmss",function(t,e){var n=t.length-4,r=t.length-2;e[Cr]=b(t.substr(0,n)),e[Sr]=b(t.substr(n,2)),e[Mr]=b(t.substr(r))});var ui=/[ap]\.?m?\.?/i,oi=B("Hours",!0);R("m",["mm",2],0,"minute"),S("minute","m"),Y("m",lr),Y("mm",lr,ur),z(["m","mm"],Sr);var si=B("Minutes",!1);R("s",["ss",2],0,"second"),S("second","s"),Y("s",lr),Y("ss",lr,ur),z(["s","ss"],Mr);var ci=B("Seconds",!1);R("S",0,0,function(){return~~(this.millisecond()/100)}),R(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,function(){return 10*this.millisecond()}),R(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),R(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),R(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),R(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),R(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),S("millisecond","ms"),Y("S",dr,ar),Y("SS",dr,ur),Y("SSS",dr,or);var li;for(li="SSSS";li.length<=9;li+="S")Y(li,mr);for(li="S";li.length<=9;li+="S")z(li,ln);var hi=B("Milliseconds",!1);R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var fi=m.prototype;fi.add=Kr,fi.calendar=ae,fi.clone=ue,fi.diff=de,fi.endOf=Ee,fi.format=ye,fi.from=ve,fi.fromNow=be,fi.to=_e,fi.toNow=xe,fi.get=O,fi.invalidAt=Ne,fi.isAfter=oe,fi.isBefore=se,fi.isBetween=ce,fi.isSame=le,fi.isSameOrAfter=he,fi.isSameOrBefore=fe,fi.isValid=Be,fi.lang=ti,fi.locale=we,fi.localeData=Ae,fi.max=$r,fi.min=zr,fi.parsingFlags=Le,fi.set=O,fi.startOf=ke,fi.subtract=Qr,fi.toArray=Me,fi.toObject=Te,fi.toDate=Se,fi.toISOString=me,fi.toJSON=Fe,fi.toString=ge,fi.unix=Ce,fi.valueOf=De,fi.creationData=Oe,fi.year=Gr,fi.isLeapYear=gt,fi.weekYear=Re,fi.isoWeekYear=Pe,fi.quarter=fi.quarters=Ve,fi.month=tt,fi.daysInMonth=et,fi.week=fi.weeks=$e,fi.isoWeek=fi.isoWeeks=We,fi.weeksInYear=je,fi.isoWeeksInYear=qe,fi.date=ni,fi.day=fi.days=tn,fi.weekday=en,fi.isoWeekday=nn,fi.dayOfYear=rn,fi.hour=fi.hours=oi,fi.minute=fi.minutes=si,fi.second=fi.seconds=ci,fi.millisecond=fi.milliseconds=hi,fi.utcOffset=Yt,fi.utc=Ht,fi.local=Gt,fi.parseZone=zt,fi.hasAlignedHourOffset=$t,fi.isDST=Wt,fi.isDSTShifted=Zt,fi.isLocal=Xt,fi.isUtcOffset=Jt,fi.isUtc=Kt,fi.isUTC=Kt,fi.zoneAbbr=hn,fi.zoneName=fn,fi.dates=ot("dates accessor is deprecated. Use date instead.",ni),fi.months=ot("months accessor is deprecated. Use month instead",tt),fi.years=ot("years accessor is deprecated. Use year instead",Gr),fi.zone=ot("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Vt);var di=fi,pi={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},gi={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},mi="Invalid date",yi="%d",vi=/\d{1,2}/,bi={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},_i=x.prototype;_i._calendar=pi,_i.calendar=gn,_i._longDateFormat=gi,_i.longDateFormat=mn,_i._invalidDate=mi,_i.invalidDate=yn,_i._ordinal=yi,_i.ordinal=vn,_i._ordinalParse=vi,_i.preparse=bn,_i.postformat=bn,_i._relativeTime=bi,_i.relativeTime=_n,_i.pastFuture=xn,_i.set=wn,_i.months=X,_i._months=Nr,_i.monthsShort=J,_i._monthsShort=Or,_i.monthsParse=K,_i._monthsRegex=Rr,_i.monthsRegex=rt,_i._monthsShortRegex=Ir,_i.monthsShortRegex=nt,_i.week=He,_i._week=ei,_i.firstDayOfYear=ze,_i.firstDayOfWeek=Ge,_i.weekdays=Xe,_i._weekdays=ri,_i.weekdaysMin=Ke,_i._weekdaysMin=ai,_i.weekdaysShort=Je,_i._weekdaysShort=ii,_i.weekdaysParse=Qe,_i.isPM=sn,_i._meridiemParse=ui,_i.meridiem=cn,E("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===b(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),n.lang=ot("moment.lang is deprecated. Use moment.locale instead.",E),n.langData=ot("moment.langData is deprecated. Use moment.localeData instead.",C);var xi=Math.abs,wi=jn("ms"),Ai=jn("s"),ki=jn("m"),Ei=jn("h"),Di=jn("d"),Ci=jn("w"),Si=jn("M"),Mi=jn("y"),Ti=Yn("milliseconds"),Fi=Yn("seconds"),Bi=Yn("minutes"),Li=Yn("hours"),Ni=Yn("days"),Oi=Yn("months"),Ii=Yn("years"),Ri=Math.round,Pi={s:45,m:45,h:22,d:26,M:11},qi=Math.abs,ji=It.prototype;ji.abs=Tn,ji.add=Bn,ji.subtract=Ln,ji.as=Pn,ji.asMilliseconds=wi,ji.asSeconds=Ai,ji.asMinutes=ki,ji.asHours=Ei,ji.asDays=Di,ji.asWeeks=Ci,ji.asMonths=Si,ji.asYears=Mi,ji.valueOf=qn,ji._bubble=On,ji.get=Un,ji.milliseconds=Ti,ji.seconds=Fi,ji.minutes=Bi,ji.hours=Li,ji.days=Ni,ji.weeks=Vn,ji.months=Oi,ji.years=Ii,ji.humanize=$n,ji.toISOString=Wn,ji.toString=Wn,ji.toJSON=Wn,ji.locale=we,ji.localeData=Ae,ji.toIsoString=ot("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Wn),ji.lang=ti,R("X",0,0,"unix"),R("x",0,0,"valueOf"),Y("x",yr),Y("X",_r),z("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),z("x",function(t,e,n){n._d=new Date(b(t))}),n.version="2.11.1",r(Bt),n.fn=di,n.min=Nt,n.max=Ot,n.now=Wr,n.utc=c,n.unix=dn,n.months=En,n.isDate=a,n.locale=E,n.invalid=d,n.duration=Qt,n.isMoment=y,n.weekdays=Cn,n.parseZone=pn,n.localeData=C,n.isDuration=Rt,n.monthsShort=Dn,n.weekdaysMin=Mn,n.defineLocale=D,n.weekdaysShort=Sn,n.normalizeUnits=M,n.relativeTimeThreshold=zn,n.prototype=di;var Ui=n;return Ui})},{}],107:[function(t,e){e.exports={name:"mermaid",version:"0.5.8",description:"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams and gantt charts.",main:"src/mermaid.js",keywords:["diagram","markdown","flowchart","sequence diagram","gantt"],bin:{mermaid:"./bin/mermaid.js"},scripts:{live:"live-server ./test/examples",lint:"node node_modules/eslint/bin/eslint.js src",jison:"gulp jison_legacy",karma:"node node_modules/karma/bin/karma start karma.conf.js --single-run",watch:"source ./scripts/watch.sh",doc:"rm -r build;rm -r dist/www;gulp vartree;cp dist/www/all.html ../mermaid-pages/index.html;cp dist/mermaid.js ../mermaid-pages/javascripts/lib;cp dist/mermaid.forest.css ../mermaid-pages/stylesheets",tape:"node node_modules/tape/bin/tape test/cli_test-*.js",jasmine:"npm run jison &&node node_modules/jasmine-es6/bin/jasmine.js",pretest:"npm run jison",test:"npm run dist && npm run karma && npm run tape","dist-slim-mermaid":"node node_modules/browserify/bin/cmd.js src/mermaid.js -t babelify -s mermaid -o dist/mermaid.slim.js -x d3 && cat dist/mermaid.slim.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaid.slim.min.js","dist-slim-mermaidAPI":"node node_modules/browserify/bin/cmd.js src/mermaidAPI.js -t babelify -s mermaidAPI -o dist/mermaidAPI.slim.js -x d3 && cat dist/mermaidAPI.slim.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaidAPI.slim.min.js","dist-mermaid":"node node_modules/browserify/bin/cmd.js src/mermaid.js -t babelify -s mermaid -o dist/mermaid.js && cat dist/mermaid.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaid.min.js","dist-mermaidAPI":"node node_modules/browserify/bin/cmd.js src/mermaidAPI.js -t babelify -s mermaidAPI -o dist/mermaidAPI.js && cat dist/mermaidAPI.js | node node_modules/uglifyjs/bin/uglifyjs -mc > dist/mermaidAPI.min.js",dist:"npm run dist-slim-mermaid && npm run dist-slim-mermaidAPI && npm run dist-mermaid && npm run dist-mermaidAPI"},repository:{type:"git",url:"https://github.com/knsv/mermaid"},author:"Knut Sveidqvist",license:"MIT",dependencies:{chalk:"^0.5.1",d3:"3.5.6",dagre:"^0.7.4","dagre-d3":"0.4.10",he:"^0.5.0",minimist:"^1.1.0",mkdirp:"^0.5.0",moment:"^2.9.0",semver:"^4.1.1",which:"^1.0.8"},devDependencies:{async:"^0.9.0","babel-eslint":"^4.1.3",babelify:"^6.4.0",browserify:"~6.2.0",clone:"^0.2.0","codeclimate-test-reporter":"0.0.4",dateformat:"^1.0.11",dox:"^0.8.0",eslint:"^1.6.0","eslint-watch":"^2.1.2","event-stream":"^3.2.0",foundation:"^4.2.1-1","front-matter":"^0.2.0",gulp:"~3.9.0","gulp-bower":"0.0.10","gulp-browserify":"^0.5.0","gulp-bump":"^0.1.11","gulp-concat":"~2.4.1","gulp-data":"^1.1.1","gulp-dox":"^0.1.6","gulp-ext-replace":"^0.2.0","gulp-filelog":"^0.4.1","gulp-front-matter":"^1.2.3","gulp-hogan":"^1.1.0","gulp-if":"^1.2.5","gulp-insert":"^0.4.0","gulp-istanbul":"^0.4.0","gulp-jasmine":"~2.1.0","gulp-jasmine-browser":"^0.2.3","gulp-jison":"~1.2.0","gulp-jshint":"^1.9.0","gulp-less":"^3.0.1","gulp-livereload":"^3.8.0","gulp-marked":"^1.0.0","gulp-mdvars":"^2.0.0","gulp-qunit":"~1.2.1","gulp-rename":"~1.2.0","gulp-shell":"^0.2.10","gulp-tag-version":"^1.2.1","gulp-uglify":"~1.0.1","gulp-util":"^3.0.7","gulp-vartree":"^2.0.1","hogan.js":"^3.0.2",jasmine:"2.3.2","jasmine-es6":"0.0.18",jison:"zaach/jison",jsdom:"^7.0.2","jshint-stylish":"^2.0.1",karma:"^0.13.15","karma-babel-preprocessor":"^6.0.1","karma-browserify":"^4.4.0","karma-jasmine":"^0.3.6","karma-phantomjs-launcher":"^0.2.1","live-server":"^0.9.0","map-stream":"0.0.6",marked:"^0.3.2","mock-browser":"^0.91.34",path:"^0.4.9",phantomjs:"^1.9.18",proxyquire:"^1.7.3","proxyquire-universal":"^1.0.8",proxyquireify:"^3.0.0","require-dir":"^0.3.0",rewire:"^2.1.3",rimraf:"^2.2.8",tape:"^3.0.3",testdom:"^2.0.0",uglifyjs:"^2.4.10","vinyl-source-stream":"^1.1.0",watchify:"^3.6.1"}}},{}],108:[function(t,e){"use strict";var n;if(t)try{n=t("d3")}catch(r){}n||(n=window.d3),e.exports=n,function(){var t=!1;if(t="tspans",n.selection.prototype.textwrap)return!1;if("undefined"==typeof t)var t=!1;n.selection.prototype.textwrap=n.selection.enter.prototype.textwrap=function(e,r){var i,r=parseInt(r)||0,a=this,u=function(t){var e=t[0][0],r=e.tagName.toString();if("rect"!==r)return!1;var i={};return i.x=n.select(e).attr("x")||0,i.y=n.select(e).attr("y")||0,i.width=n.select(e).attr("width")||0,i.height=n.select(e).attr("height")||0,i.attr=t.attr,i},o=function(t){if(t.attr||(t.attr=function(t){return this[t]?this[t]:void 0}),"object"==typeof t&&"undefined"!=typeof t.x&&"undefined"!=typeof t.y&&"undefined"!=typeof t.width&&"undefined"!=typeof t.height)return t;if("function"==typeof Array.isArray&&Array.isArray(t)||"[object Array]"===Object.prototype.toString.call(t)){var e=u(t);return e}return!1},s=function(t,e){var n=t;return 0!==e&&(n.x=parseInt(n.x)+e,n.y=parseInt(n.y)+e,n.width-=2*e,n.height-=2*e),n},c=o(e);if(r&&(c=s(c,r)),0!=a.length&&n&&e&&c){e=c;var l,h=function(t){var r=n.select(t[0].parentNode),a=r.select("text"),u=a.style("line-height"),o=a.text();a.remove();var s=r.append("foreignObject");s.attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").attr("x",e.x).attr("y",e.y).attr("width",e.width).attr("height",e.height);var c=s.append("xhtml:div").attr("class","wrapped");c.style("height",e.height).style("width",e.width).html(o),u&&c.style("line-height",u),i=r.select("foreignObject")},f=function(t){var a,u=t[0],o=u.parentNode,s=n.select(u),c=u.getBBox().height,l=u.getBBox().width,h=c,f=s.style("line-height");if(a=f&&parseInt(f)?parseInt(f.replace("px","")):h,l>e.width){var d=s.text();if(s.text(""),d){var p,g;if(-1!==d.indexOf(" ")){var p=" ";g=d.split(" ")}else{p="";var m=d.length,y=Math.ceil(l/e.width),v=Math.floor(m/y);v*y>=m||y++;for(var b,_,g=[],x=0;y>x;x++)_=x*v,b=d.substr(_,v),g.push(b)}for(var w=[],A=0,k={},x=0;xe.width&&C&&""!==C&&(A+=S,k={string:C,width:S,offset:A},w.push(k),s.text(""),s.text(D),x==g.length-1&&(E=D,s.text(E),M=u.getComputedTextLength())),x==g.length-1){s.text("");var T=E;T&&""!==T&&(M-A>0&&(M-=A),k={string:T,width:M,offset:A},w.push(k))}}var F;s.text("");for(var x=0;x0){w[x-1]}x*a0?a:void 0}),F.attr("x",function(){var t=e.x;return r&&(t+=r),t}))}}}s.attr("y",function(){var t=e.y;return a&&(t+=a),r&&(t+=r),t}),s.attr("x",function(){var t=e.x;return r&&(t+=r),t}),i=n.select(o).selectAll("text")};t&&("foreignobjects"==t?l=h:"tspans"==t&&(l=f)),t||(l="undefined"!=typeof SVGForeignObjectElement?h:f);for(var d=0;d "+t.w+": "+JSON.stringify(u.edge(t))),p(i,u.edge(t),u.edge(t).relation)}),i.attr("height","100%"),i.attr("width","100%")}},{"../../d3":108,"../../logger":127,"./classDb":109,"./parser/classDiagram":111,dagre:54}],111:[function(t,e,n){(function(r){"use strict";var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,11],r=[1,12],i=[1,13],a=[1,15],u=[1,16],o=[1,17],s=[6,8],c=[1,26],l=[1,27],h=[1,28],f=[1,29],d=[1,30],p=[1,31],g=[6,8,13,17,23,26,27,28,29,30,31],m=[6,8,13,17,23,26,27,28,29,30,31,45,46,47],y=[23,45,46,47],v=[23,30,31,45,46,47],b=[23,26,27,28,29,45,46,47],_=[6,8,13],x=[1,46],w={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,CLASS_DIAGRAM:5,NEWLINE:6,statements:7,EOF:8,statement:9,className:10,alphaNumToken:11,relationStatement:12,LABEL:13,classStatement:14,methodStatement:15,CLASS:16,STRUCT_START:17,members:18,STRUCT_STOP:19,MEMBER:20,SEPARATOR:21,relation:22,STR:23,relationType:24,lineType:25,AGGREGATION:26,EXTENSION:27,COMPOSITION:28,DEPENDENCY:29,LINE:30,DOTTED_LINE:31,commentToken:32,textToken:33,graphCodeTokens:34,textNoTagsToken:35,TAGSTART:36,TAGEND:37,"==":38,"--":39,PCT:40,DEFAULT:41,SPACE:42,MINUS:43,keywords:44,UNICODE_TEXT:45,NUM:46,ALPHA:47,$accept:0,$end:1},terminals_:{2:"error",5:"CLASS_DIAGRAM",6:"NEWLINE",8:"EOF",13:"LABEL",16:"CLASS",17:"STRUCT_START",19:"STRUCT_STOP",20:"MEMBER",21:"SEPARATOR",23:"STR",26:"AGGREGATION",27:"EXTENSION",28:"COMPOSITION",29:"DEPENDENCY",30:"LINE",31:"DOTTED_LINE",34:"graphCodeTokens",36:"TAGSTART",37:"TAGEND",38:"==",39:"--",40:"PCT",41:"DEFAULT",42:"SPACE",43:"MINUS",44:"keywords",45:"UNICODE_TEXT",46:"NUM",47:"ALPHA"},productions_:[0,[3,1],[4,4],[7,1],[7,3],[10,2],[10,1],[9,1],[9,2],[9,1],[9,1],[14,2],[14,5],[18,1],[18,2],[15,1],[15,2],[15,1],[15,1],[12,3],[12,4],[12,4],[12,5],[22,3],[22,2],[22,2],[22,1],[24,1],[24,1],[24,1],[24,1],[25,1],[25,1],[32,1],[32,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[35,1],[35,1],[35,1],[35,1],[11,1],[11,1],[11,1]],performAction:function(t,e,n,r,i,a){var u=a.length-1;switch(i){case 5:this.$=a[u-1]+a[u];break;case 6:this.$=a[u];break;case 7:r.addRelation(a[u]);break;case 8:a[u-1].title=r.cleanupLabel(a[u]),r.addRelation(a[u-1]);break;case 12:r.addMembers(a[u-3],a[u-1]);break;case 13:this.$=[a[u]];break;case 14:a[u].push(a[u-1]),this.$=a[u];break;case 15:break;case 16:r.addMembers(a[u-1],r.cleanupLabel(a[u]));break;case 17:console.warn("Member",a[u]);break;case 18:break;case 19:this.$={id1:a[u-2],id2:a[u],relation:a[u-1],relationTitle1:"none",relationTitle2:"none"};break;case 20:this.$={id1:a[u-3],id2:a[u],relation:a[u-1],relationTitle1:a[u-2],relationTitle2:"none"};break;case 21:this.$={id1:a[u-3],id2:a[u],relation:a[u-2],relationTitle1:"none",relationTitle2:a[u-1]};break;case 22:this.$={id1:a[u-4],id2:a[u],relation:a[u-2],relationTitle1:a[u-3],relationTitle2:a[u-1]};break;case 23:this.$={type1:a[u-2],type2:a[u],lineType:a[u-1]};break;case 24:this.$={type1:"none",type2:a[u],lineType:a[u-1]};break;case 25:this.$={type1:a[u-1],type2:"none",lineType:a[u]};break;case 26:this.$={type1:"none",type2:"none",lineType:a[u]};break;case 27:this.$=r.relationType.AGGREGATION;break;case 28:this.$=r.relationType.EXTENSION;break;case 29:this.$=r.relationType.COMPOSITION;break;case 30:this.$=r.relationType.DEPENDENCY;break;case 31:this.$=r.lineType.LINE;break;case 32:this.$=r.lineType.DOTTED_LINE}},table:[{3:1,4:2,5:[1,3]},{1:[3]},{1:[2,1]},{6:[1,4]},{7:5,9:6,10:10,11:14,12:7,14:8,15:9,16:n,20:r,21:i,45:a,46:u,47:o},{8:[1,18]},{6:[1,19],8:[2,3]},e(s,[2,7],{13:[1,20]}),e(s,[2,9]),e(s,[2,10]),e(s,[2,15],{22:21,24:24,25:25,13:[1,23],23:[1,22],26:c,27:l,28:h,29:f,30:d,31:p}),{10:32,11:14,45:a,46:u,47:o},e(s,[2,17]),e(s,[2,18]),e(g,[2,6],{11:14,10:33,45:a,46:u,47:o}),e(m,[2,46]),e(m,[2,47]),e(m,[2,48]),{1:[2,2]},{7:34,9:6,10:10,11:14,12:7,14:8,15:9,16:n,20:r,21:i,45:a,46:u,47:o},e(s,[2,8]),{10:35,11:14,23:[1,36],45:a,46:u,47:o},{22:37,24:24,25:25,26:c,27:l,28:h,29:f,30:d,31:p},e(s,[2,16]),{25:38,30:d,31:p},e(y,[2,26],{24:39,26:c,27:l,28:h,29:f}),e(v,[2,27]),e(v,[2,28]),e(v,[2,29]),e(v,[2,30]),e(b,[2,31]),e(b,[2,32]),e(s,[2,11],{17:[1,40]}),e(g,[2,5]),{8:[2,4]},e(_,[2,19]),{10:41,11:14,45:a,46:u,47:o},{10:42,11:14,23:[1,43],45:a,46:u,47:o},e(y,[2,25],{24:44,26:c,27:l,28:h,29:f}),e(y,[2,24]),{18:45,20:x},e(_,[2,21]),e(_,[2,20]),{10:47,11:14,45:a,46:u,47:o},e(y,[2,23]),{19:[1,48]},{18:49,19:[2,13],20:x},e(_,[2,22]),e(s,[2,12]),{19:[2,14]}],defaultActions:{2:[2,1],18:[2,2],34:[2,4],49:[2,14]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=new Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,u="",o=0,s=0,c=0,l=2,h=1,f=i.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);d.setInput(t,p.yy),p.yy.lexer=d,p.yy.parser=this,"undefined"==typeof d.yylloc&&(d.yylloc={});var m=d.yylloc;i.push(m);var y=d.options&&d.options.ranges;this.parseError="function"==typeof p.yy.parseError?p.yy.parseError:Object.getPrototypeOf(this).parseError;for(var v,b,_,x,w,A,k,E,D,C=function(){var t;return t=d.lex()||h,"number"!=typeof t&&(t=e.symbols_[t]||t),t},S={};;){if(_=n[n.length-1],this.defaultActions[_]?x=this.defaultActions[_]:((null===v||"undefined"==typeof v)&&(v=C()),x=a[_]&&a[_][v]),"undefined"==typeof x||!x.length||!x[0]){var M="";D=[];for(A in a[_])this.terminals_[A]&&A>l&&D.push("'"+this.terminals_[A]+"'");M=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(o+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:d.match,token:this.terminals_[v]||v,line:d.yylineno,loc:m,expected:D})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+v);switch(x[0]){case 1:n.push(v),r.push(d.yytext),i.push(d.yylloc),n.push(x[1]),v=null,b?(v=b,b=null):(s=d.yyleng,u=d.yytext,o=d.yylineno,m=d.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[x[1]][1],S.$=r[r.length-k],S._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},y&&(S._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),w=this.performAction.apply(S,[u,s,o,p.yy,x[1],r,i].concat(f)),"undefined"!=typeof w)return w;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),i=i.slice(0,-1*k)),n.push(this.productions_[x[1]][0]),r.push(S.$),i.push(S._$),E=a[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},A=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var e=t.match(/(?:\r\n?|\n).*/g);return e?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{ +text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(t=this.test_match(n,i[a]),t!==!1)return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?(t=this.test_match(e,i[r]),t!==!1?t:!1):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){var t=this.conditionStack.length-1;return t>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:break;case 1:return 6;case 2:break;case 3:return 5;case 4:return this.begin("struct"),17;case 5:return this.popState(),19;case 6:break;case 7:return"MEMBER";case 8:return 16;case 9:this.begin("string");break;case 10:this.popState();break;case 11:return"STR";case 12:return 27;case 13:return 27;case 14:return 29;case 15:return 29;case 16:return 28;case 17:return 26;case 18:return 30;case 19:return 31;case 20:return 13;case 21:return 43;case 22:return"DOT";case 23:return"PLUS";case 24:return 40;case 25:return"EQUALS";case 26:return"EQUALS";case 27:return 47;case 28:return"PUNCTUATION";case 29:return 46;case 30:return 45;case 31:return 42;case 32:return 8}},rules:[/^(?:%%[^\n]*)/,/^(?:\n+)/,/^(?:\s+)/,/^(?:classDiagram\b)/,/^(?:[\{])/,/^(?:\})/,/^(?:[\n])/,/^(?:[^\{\}\n]*)/,/^(?:class\b)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::[^#\n;]+)/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[10,11],inclusive:!1},struct:{rules:[5,6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],inclusive:!0}}};return t}();return w.lexer=A,t.prototype=w,w.Parser=t,new t}();"undefined"!=typeof t&&"undefined"!=typeof n&&(n.parser=i,n.Parser=i.Parser,n.parse=function(){return i.parse.apply(i,arguments)},n.main=function(e){e[1]||(console.log("Usage: "+e[0]+" FILE"),r.exit(1));var i=t("fs").readFileSync(t("path").normalize(e[1]),"utf8");return n.parser.parse(i)},"undefined"!=typeof e&&t.main===e&&n.main(r.argv.slice(1)))}).call(this,t("_process"))},{_process:3,fs:1,path:2}],112:[function(t,e,n){(function(e){"use strict";var r=t("../../logger"),i=new r.Log,a="",u=!1;n.setMessage=function(t){i.debug("Setting message to: "+t),a=t},n.getMessage=function(){return a},n.setInfo=function(t){u=t},n.getInfo=function(){return u},n.parseError=function(t,n){e.mermaidAPI.parseError(t,n)}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../logger":127}],113:[function(t,e,n){"use strict";var r=t("./exampleDb"),i=t("./parser/example.js"),a=t("../../d3"),u=t("../../logger"),o=new u.Log;n.draw=function(t,e,n){var u;u=i.parser,u.yy=r,o.debug("Renering example diagram"),u.parse(t);var s=a.select("#"+e),c=s.append("g");c.append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("mermaid "+n),s.attr("height",100),s.attr("width",400)}},{"../../d3":108,"../../logger":127,"./exampleDb":112,"./parser/example.js":114}],114:[function(t,e,n){(function(r){"use strict";var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[6,9,10,12],r={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,message:11,say:12,TXT:13,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo",12:"say",13:"TXT"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1],[8,1],[11,2]],performAction:function(t,e,n,r,i,a){var u=a.length-1;switch(i){case 1:return r;case 4:break;case 6:r.setInfo(!0);break;case 7:r.setMessage(a[u]);break;case 8:this.$=a[u-1].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:[1,2]},{1:[3]},e(n,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8],11:9,12:[1,10]},{1:[2,1]},e(n,[2,3]),e(n,[2,4]),e(n,[2,5]),e(n,[2,6]),e(n,[2,7]),{13:[1,11]},e(n,[2,8])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=new Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,u="",o=0,s=0,c=0,l=2,h=1,f=i.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);d.setInput(t,p.yy),p.yy.lexer=d,p.yy.parser=this,"undefined"==typeof d.yylloc&&(d.yylloc={});var m=d.yylloc;i.push(m);var y=d.options&&d.options.ranges;this.parseError="function"==typeof p.yy.parseError?p.yy.parseError:Object.getPrototypeOf(this).parseError;for(var v,b,_,x,w,A,k,E,D,C=function(){var t;return t=d.lex()||h,"number"!=typeof t&&(t=e.symbols_[t]||t),t},S={};;){if(_=n[n.length-1],this.defaultActions[_]?x=this.defaultActions[_]:((null===v||"undefined"==typeof v)&&(v=C()),x=a[_]&&a[_][v]),"undefined"==typeof x||!x.length||!x[0]){var M="";D=[];for(A in a[_])this.terminals_[A]&&A>l&&D.push("'"+this.terminals_[A]+"'");M=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(o+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:d.match,token:this.terminals_[v]||v,line:d.yylineno,loc:m,expected:D})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+v);switch(x[0]){case 1:n.push(v),r.push(d.yytext),i.push(d.yylloc),n.push(x[1]),v=null,b?(v=b,b=null):(s=d.yyleng,u=d.yytext,o=d.yylineno,m=d.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[x[1]][1],S.$=r[r.length-k],S._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},y&&(S._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),w=this.performAction.apply(S,[u,s,o,p.yy,x[1],r,i].concat(f)),"undefined"!=typeof w)return w;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),i=i.slice(0,-1*k)),n.push(this.productions_[x[1]][0]),r.push(S.$),i.push(S._$),E=a[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},i=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var e=t.match(/(?:\r\n?|\n).*/g);return e?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(t=this.test_match(n,i[a]),t!==!1)return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?(t=this.test_match(e,i[r]),t!==!1?t:!1):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){var t=this.conditionStack.length-1;return t>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 9;case 1:return 10;case 2:return 4;case 3:return 12;case 4:return 13;case 5:return 6;case 6:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:showInfo\b)/i,/^(?:info\b)/i,/^(?:say\b)/i,/^(?::[^#\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6],inclusive:!0}}};return t}();return r.lexer=i,t.prototype=r,r.Parser=t,new t}();"undefined"!=typeof t&&"undefined"!=typeof n&&(n.parser=i,n.Parser=i.Parser,n.parse=function(){return i.parse.apply(i,arguments)},n.main=function(e){e[1]||(console.log("Usage: "+e[0]+" FILE"),r.exit(1));var i=t("fs").readFileSync(t("path").normalize(e[1]),"utf8");return n.parser.parse(i)},"undefined"!=typeof e&&t.main===e&&n.main(r.argv.slice(1)))}).call(this,t("_process"))},{_process:3,fs:1,path:2}],115:[function(t,e){"use strict";var n,r=t("../../logger"),i=new r.Log;if(t)try{n=t("dagre-d3")}catch(a){i.debug("Could not load dagre-d3")}n||(n=window.dagreD3),e.exports=n},{"../../logger":127,"dagre-d3":5}],116:[function(t,e,n){"use strict";var r=t("./graphDb"),i=t("./parser/flow"),a=t("./parser/dot"),u=t("../../d3"),o=t("./dagre-d3"),s=t("../../logger"),c=new s.Log,l={};e.exports.setConf=function(t){var e,n=Object.keys(t);for(e=0;e0&&(u=a.classes.join(" "));var o="";o=r(o,a.styles),i="undefined"==typeof a.text?a.id:a.text;var s="";l.htmlLabels?(s="html",i=i.replace(/fa:fa[\w\-]+/g,function(t){return''})):(i=i.replace(/
/g,"\n"),s="text");var c=0,h="";switch(a.type){case"round":c=5,h="rect";break;case"square":h="rect";break;case"diamond":h="question";break;case"odd":h="rect_left_inv_arrow";break;case"odd_right":h="rect_left_inv_arrow";break;case"circle":h="circle";break;case"ellipse":h="ellipse";break;case"group":h="rect",i="";break;default:h="rect"}e.setNode(a.id,{labelType:s,shape:h,label:i,rx:c,ry:c,"class":u,style:o,id:a.id})})},n.addEdges=function(t,e){var n,r,i=0;"undefined"!=typeof t.defaultStyle&&(r=t.defaultStyle.toString().replace(/,/g,";")),t.forEach(function(t){i++,n="arrow_open"===t.type?"none":"normal";var a="";if("undefined"!=typeof t.style)t.style.forEach(function(t){a=a+t+";"});else switch(t.stroke){case"normal":a="fill:none","undefined"!=typeof r&&(a=r);break;case"dotted":a="stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":a="stroke: #333; stroke-width: 3.5px;fill:none"}if("undefined"==typeof t.text)"undefined"==typeof t.style?e.setEdge(t.start,t.end,{style:a,arrowhead:n},i):e.setEdge(t.start,t.end,{style:a,arrowheadStyle:"fill: #333",arrowhead:n},i);else{var u=t.text.replace(/
/g,"\n");"undefined"==typeof t.style?l.htmlLabels?e.setEdge(t.start,t.end,{labelType:"html",style:a,labelpos:"c",label:''+t.text+"",arrowheadStyle:"fill: #333",arrowhead:n},i):e.setEdge(t.start,t.end,{labelType:"text",style:"stroke: #333; stroke-width: 1.5px;fill:none",labelpos:"c",label:u,arrowheadStyle:"fill: #333",arrowhead:n},i):e.setEdge(t.start,t.end,{labelType:"text",style:a,arrowheadStyle:"fill: #333",label:u,arrowhead:n},i)}})},n.getClasses=function(t,e){var n;r.clear(),n=e?a.parser:i.parser,n.yy=r,n.parse(t);var u=r.getClasses();return"undefined"==typeof u["default"]&&(u["default"]={id:"default"},u["default"].styles=[],u["default"].clusterStyles=["rx:4px","fill: rgb(255, 255, 222)","rx: 4px","stroke: rgb(170, 170, 51)","stroke-width: 1px"],u["default"].nodeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"],u["default"].edgeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"]),u},n.draw=function(t,e,s){c.debug("Drawing flowchart");var h;r.clear(),h=s?a.parser:i.parser,h.yy=r;try{h.parse(t)}catch(f){c.debug("Parsing failed")}var d;d=r.getDirection(),"undefined"==typeof d&&(d="TD");var p,g=new o.graphlib.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:d,marginx:20,marginy:20}).setDefaultEdgeLabel(function(){return{}}),m=r.getSubGraphs(),y=0;for(y=m.length-1;y>=0;y--)p=m[y],r.addVertex(p.id,p.title,"group",void 0);var v=r.getVertices(),b=r.getEdges();y=0;var _;for(y=m.length-1;y>=0;y--)for(p=m[y],u.selectAll("cluster").append("text"),_=0;_0?t.split(",").forEach(function(t){"undefined"!=typeof vertices[t]&&vertices[t].classes.push(e)}):"undefined"!=typeof vertices[t]&&vertices[t].classes.push(e)};var setTooltip=function(t,e){"undefined"!=typeof e&&(tooltips[t]=e)},setClickFun=function setClickFun(id,functionName){"undefined"!=typeof functionName&&"undefined"!=typeof vertices[id]&&funs.push(function(element){var elem=d3.select(element).select("#"+id);null!==elem&&elem.on("click",function(){eval(functionName+"('"+id+"')")})})},setLink=function(t,e){"undefined"!=typeof e&&"undefined"!=typeof vertices[t]&&funs.push(function(n){var r=d3.select(n).select("#"+t);null!==r&&r.on("click",function(){window.open(e,"newTab")})})};exports.getTooltip=function(t){return tooltips[t]},exports.setClickEvent=function(t,e,n,r){t.indexOf(",")>0?t.split(",").forEach(function(t){setTooltip(t,r),setClickFun(t,e),setLink(t,n)}):(setTooltip(t,r),setClickFun(t,e),setLink(t,n))},exports.bindFunctions=function(t){funs.forEach(function(e){e(t)})},exports.getDirection=function(){return direction},exports.getVertices=function(){return vertices},exports.getEdges=function(){return edges},exports.getClasses=function(){return classes};var setupToolTips=function(t){var e=d3.select(".mermaidTooltip");null===e[0][0]&&(e=d3.select("body").append("div").attr("class","mermaidTooltip").style("opacity",0));var n=d3.select(t).select("svg"),r=n.selectAll("g.node");r.on("mouseover",function(){var t=d3.select(this),n=t.attr("title");if(null!==n){var r=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.html(t.attr("title")).style("left",r.left+(r.right-r.left)/2+"px").style("top",r.top-14+document.body.scrollTop+"px"),t.classed("hover",!0)}}).on("mouseout",function(){e.transition().duration(500).style("opacity",0);var t=d3.select(this);t.classed("hover",!1)})};funs.push(setupToolTips),exports.clear=function(){vertices={},classes={},edges=[],funs=[],funs.push(setupToolTips),subGraphs=[],subCount=0,tooltips=[]},exports.defaultStyle=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},exports.addSubGraph=function(t,e){function n(t){var e={"boolean":{},number:{},string:{}},n=[];return t.filter(function(t){var r=typeof t;return" "===t?!1:r in e?e[r].hasOwnProperty(t)?!1:e[r][t]=!0:n.indexOf(t)>=0?!1:n.push(t)})}var r=[];r=n(r.concat.apply(r,t));var i={id:"subGraph"+subCount,nodes:r,title:e};return subGraphs.push(i),subCount+=1,i.id};var getPosForId=function(t){var e;for(e=0;e2e3)){if(posCrossRef[secCount]=n,subGraphs[n].id===e)return{result:!0,count:0};for(var i=0,a=1;i=0){var o=t(e,u);if(o.result)return{result:!0,count:a+o.count};a+=o.count}i+=1}return{result:!1,count:a}}};exports.getDepthFirstPos=function(t){return posCrossRef[t]},exports.indexNodes=function(){secCount=-1,subGraphs.length>0&&indexNodes("none",subGraphs.length-1,0)},exports.getSubGraphs=function(){return subGraphs},exports.parseError=function(t,e){global.mermaidAPI.parseError(t,e)}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../d3":108,"../../logger":127}],118:[function(t,e,n){(function(r){"use strict";var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,5],r=[1,6],i=[1,12],a=[1,13],u=[1,14],o=[1,15],s=[1,16],c=[1,17],l=[1,18],h=[1,19],f=[1,20],d=[1,21],p=[1,22],g=[8,16,17,18,19,20,21,22,23,24,25,26],m=[1,37],y=[1,33],v=[1,34],b=[1,35],_=[1,36],x=[8,10,16,17,18,19,20,21,22,23,24,25,26,28,32,37,39,40,45,57,58],w=[10,28],A=[10,28,37,57,58],k=[2,49],E=[1,45],D=[1,48],C=[1,49],S=[1,52],M=[2,65],T=[1,65],F=[1,66],B=[1,67],L=[1,68],N=[1,69],O=[1,70],I=[1,71],R=[1,72],P=[1,73],q=[8,16,17,18,19,20,21,22,23,24,25,26,47],j=[10,28,37],U={trace:function(){},yy:{},symbols_:{error:2,expressions:3,graph:4,EOF:5,graphStatement:6,idStatement:7,"{":8,stmt_list:9,"}":10,strict:11,GRAPH:12,DIGRAPH:13,textNoTags:14,textNoTagsToken:15,ALPHA:16,NUM:17,COLON:18,PLUS:19,EQUALS:20,MULT:21,DOT:22,BRKT:23,SPACE:24,MINUS:25,keywords:26,stmt:27,";":28,node_stmt:29,edge_stmt:30,attr_stmt:31,"=":32,subgraph:33,attr_list:34,NODE:35,EDGE:36,"[":37,a_list:38,"]":39,",":40,edgeRHS:41,node_id:42,edgeop:43,port:44,":":45,compass_pt:46,SUBGRAPH:47,n:48,ne:49,e:50,se:51,s:52,sw:53,w:54,nw:55,c:56,ARROW_POINT:57,ARROW_OPEN:58,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",8:"{",10:"}",11:"strict",12:"GRAPH",13:"DIGRAPH",16:"ALPHA",17:"NUM",18:"COLON",19:"PLUS",20:"EQUALS",21:"MULT",22:"DOT",23:"BRKT",24:"SPACE",25:"MINUS",26:"keywords",28:";",32:"=",35:"NODE",36:"EDGE",37:"[",39:"]",40:",",45:":",47:"SUBGRAPH",48:"n",49:"ne",50:"e",51:"se",52:"s",53:"sw",54:"w",55:"nw",56:"c",57:"ARROW_POINT",58:"ARROW_OPEN"},productions_:[0,[3,2],[4,5],[4,6],[4,4],[6,1],[6,1],[7,1],[14,1],[14,2],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[9,1],[9,3],[27,1],[27,1],[27,1],[27,3],[27,1],[31,2],[31,2],[31,2],[34,4],[34,3],[34,3],[34,2],[38,5],[38,5],[38,3],[30,3],[30,3],[30,2],[30,2],[41,3],[41,3],[41,2],[41,2],[29,2],[29,1],[42,2],[42,1],[44,4],[44,2],[44,2],[33,5],[33,4],[33,3],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,0],[43,1],[43,1]], +performAction:function(t,e,n,r,i,a){var u=a.length-1;switch(i){case 1:this.$=a[u-1];break;case 2:this.$=a[u-4];break;case 3:this.$=a[u-5];break;case 4:this.$=a[u-3];break;case 8:case 10:case 11:this.$=a[u];break;case 9:this.$=a[u-1]+""+a[u];break;case 12:case 13:case 14:case 15:case 16:case 18:case 19:case 20:this.$=a[u];break;case 17:this.$="
";break;case 39:this.$="oy";break;case 40:r.addLink(a[u-1],a[u].id,a[u].op),this.$="oy";break;case 42:r.addLink(a[u-1],a[u].id,a[u].op),this.$={op:a[u-2],id:a[u-1]};break;case 44:this.$={op:a[u-1],id:a[u]};break;case 48:r.addVertex(a[u-1]),this.$=a[u-1];break;case 49:r.addVertex(a[u]),this.$=a[u];break;case 66:this.$="arrow";break;case 67:this.$="arrow_open"}},table:[{3:1,4:2,6:3,11:[1,4],12:n,13:r},{1:[3]},{5:[1,7]},{7:8,8:[1,9],14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p},{6:23,12:n,13:r},e(g,[2,5]),e(g,[2,6]),{1:[2,1]},{8:[1,24]},{7:30,8:m,9:25,12:y,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:v,36:b,42:32,47:_},e([8,10,28,32,37,39,40,45,57,58],[2,7],{15:38,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p}),e(x,[2,8]),e(x,[2,10]),e(x,[2,11]),e(x,[2,12]),e(x,[2,13]),e(x,[2,14]),e(x,[2,15]),e(x,[2,16]),e(x,[2,17]),e(x,[2,18]),e(x,[2,19]),e(x,[2,20]),{7:39,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p},{7:30,8:m,9:40,12:y,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:v,36:b,42:32,47:_},{10:[1,41]},{10:[2,21],28:[1,42]},e(w,[2,23]),e(w,[2,24]),e(w,[2,25]),e(A,k,{44:44,32:[1,43],45:E}),e(w,[2,27],{41:46,43:47,57:D,58:C}),e(w,[2,47],{43:47,34:50,41:51,37:S,57:D,58:C}),{34:53,37:S},{34:54,37:S},{34:55,37:S},{7:56,8:[1,57],14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p},{7:30,8:m,9:58,12:y,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:v,36:b,42:32,47:_},e(x,[2,9]),{8:[1,59]},{10:[1,60]},{5:[2,4]},{7:30,8:m,9:61,12:y,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:v,36:b,42:32,47:_},{7:62,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p},e(A,[2,48]),e(A,M,{14:10,15:11,7:63,46:64,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,48:T,49:F,50:B,51:L,52:N,53:O,54:I,55:R,56:P}),e(w,[2,41],{34:74,37:S}),{7:77,8:m,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,33:76,42:75,47:_},e(q,[2,66]),e(q,[2,67]),e(w,[2,46]),e(w,[2,40],{34:78,37:S}),{7:81,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,38:79,39:[1,80]},e(w,[2,28]),e(w,[2,29]),e(w,[2,30]),{8:[1,82]},{7:30,8:m,9:83,12:y,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:v,36:b,42:32,47:_},{10:[1,84]},{7:30,8:m,9:85,12:y,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:v,36:b,42:32,47:_},{5:[2,2]},{10:[2,22]},e(w,[2,26]),e(A,[2,51],{45:[1,86]}),e(A,[2,52]),e(A,[2,56]),e(A,[2,57]),e(A,[2,58]),e(A,[2,59]),e(A,[2,60]),e(A,[2,61]),e(A,[2,62]),e(A,[2,63]),e(A,[2,64]),e(w,[2,38]),e(j,[2,44],{43:47,41:87,57:D,58:C}),e(j,[2,45],{43:47,41:88,57:D,58:C}),e(A,k,{44:44,45:E}),e(w,[2,39]),{39:[1,89]},e(w,[2,34],{34:90,37:S}),{32:[1,91]},{7:30,8:m,9:92,12:y,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:v,36:b,42:32,47:_},{10:[1,93]},e(A,[2,55]),{10:[1,94]},e(A,M,{46:95,48:T,49:F,50:B,51:L,52:N,53:O,54:I,55:R,56:P}),e(j,[2,42]),e(j,[2,43]),e(w,[2,33],{34:96,37:S}),e(w,[2,32]),{7:97,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p},{10:[1,98]},e(A,[2,54]),{5:[2,3]},e(A,[2,50]),e(w,[2,31]),{28:[1,99],39:[2,37],40:[1,100]},e(A,[2,53]),{7:81,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,38:101},{7:81,14:10,15:11,16:i,17:a,18:u,19:o,20:s,21:c,22:l,23:h,24:f,25:d,26:p,38:102},{39:[2,35]},{39:[2,36]}],defaultActions:{7:[2,1],41:[2,4],60:[2,2],61:[2,22],94:[2,3],101:[2,35],102:[2,36]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=new Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,u="",o=0,s=0,c=0,l=2,h=1,f=i.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);d.setInput(t,p.yy),p.yy.lexer=d,p.yy.parser=this,"undefined"==typeof d.yylloc&&(d.yylloc={});var m=d.yylloc;i.push(m);var y=d.options&&d.options.ranges;this.parseError="function"==typeof p.yy.parseError?p.yy.parseError:Object.getPrototypeOf(this).parseError;for(var v,b,_,x,w,A,k,E,D,C=function(){var t;return t=d.lex()||h,"number"!=typeof t&&(t=e.symbols_[t]||t),t},S={};;){if(_=n[n.length-1],this.defaultActions[_]?x=this.defaultActions[_]:((null===v||"undefined"==typeof v)&&(v=C()),x=a[_]&&a[_][v]),"undefined"==typeof x||!x.length||!x[0]){var M="";D=[];for(A in a[_])this.terminals_[A]&&A>l&&D.push("'"+this.terminals_[A]+"'");M=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(o+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:d.match,token:this.terminals_[v]||v,line:d.yylineno,loc:m,expected:D})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+v);switch(x[0]){case 1:n.push(v),r.push(d.yytext),i.push(d.yylloc),n.push(x[1]),v=null,b?(v=b,b=null):(s=d.yyleng,u=d.yytext,o=d.yylineno,m=d.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[x[1]][1],S.$=r[r.length-k],S._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},y&&(S._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),w=this.performAction.apply(S,[u,s,o,p.yy,x[1],r,i].concat(f)),"undefined"!=typeof w)return w;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),i=i.slice(0,-1*k)),n.push(this.productions_[x[1]][0]),r.push(S.$),i.push(S._$),E=a[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},Y=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var e=t.match(/(?:\r\n?|\n).*/g);return e?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(t=this.test_match(n,i[a]),t!==!1)return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?(t=this.test_match(e,i[r]),t!==!1?t:!1):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){var t=this.conditionStack.length-1;return t>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return"STYLE";case 1:return"LINKSTYLE";case 2:return"CLASSDEF";case 3:return"CLASS";case 4:return"CLICK";case 5:return 12;case 6:return 13;case 7:return 47;case 8:return 35;case 9:return 36;case 10:return"DIR";case 11:return"DIR";case 12:return"DIR";case 13:return"DIR";case 14:return"DIR";case 15:return"DIR";case 16:return 17;case 17:return 23;case 18:return 18;case 19:return 28;case 20:return 40;case 21:return 32;case 22:return 21;case 23:return 22;case 24:return"ARROW_CROSS";case 25:return 57;case 26:return"ARROW_CIRCLE";case 27:return 58;case 28:return 25;case 29:return 19;case 30:return 20;case 31:return 16;case 32:return"PIPE";case 33:return"PS";case 34:return"PE";case 35:return 37;case 36:return 39;case 37:return 8;case 38:return 10;case 39:return"QUOTE";case 40:return 24;case 41:return"NEWLINE";case 42:return 5}},rules:[/^(?:style\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:digraph\b)/,/^(?:subgraph\b)/,/^(?:node\b)/,/^(?:edge\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9])/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:--[x])/,/^(?:->)/,/^(?:--[o])/,/^(?:--)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC_])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\s)/,/^(?:\n)/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],inclusive:!0}}};return t}();return U.lexer=Y,t.prototype=U,U.Parser=t,new t}();"undefined"!=typeof t&&"undefined"!=typeof n&&(n.parser=i,n.Parser=i.Parser,n.parse=function(){return i.parse.apply(i,arguments)},n.main=function(e){e[1]||(console.log("Usage: "+e[0]+" FILE"),r.exit(1));var i=t("fs").readFileSync(t("path").normalize(e[1]),"utf8");return n.parser.parse(i)},"undefined"!=typeof e&&t.main===e&&n.main(r.argv.slice(1)))}).call(this,t("_process"))},{_process:3,fs:1,path:2}],119:[function(t,e,n){(function(r){"use strict";var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,4],r=[1,3],i=[1,5],a=[1,8,9,10,11,13,18,30,46,71,72,73,74,75,81,85,87,88,90,91,93,94,95,96,97],u=[2,2],o=[1,12],s=[1,13],c=[1,14],l=[1,15],h=[1,31],f=[1,33],d=[1,22],p=[1,34],g=[1,24],m=[1,25],y=[1,26],v=[1,27],b=[1,28],_=[1,38],x=[1,40],w=[1,35],A=[1,39],k=[1,45],E=[1,44],D=[1,36],C=[1,37],S=[1,41],M=[1,42],T=[1,43],F=[1,8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,85,87,88,90,91,93,94,95,96,97],B=[1,53],L=[1,52],N=[1,54],O=[1,72],I=[1,80],R=[1,81],P=[1,66],q=[1,65],j=[1,85],U=[1,84],Y=[1,82],V=[1,83],H=[1,73],G=[1,68],z=[1,67],$=[1,63],W=[1,75],Z=[1,76],X=[1,77],J=[1,78],K=[1,79],Q=[1,70],tt=[1,69],et=[8,9,11],nt=[8,9,11,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],rt=[1,115],it=[8,9,10,11,13,15,18,36,38,40,42,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,85,87,88,90,91,93,94,95,96,97],at=[8,9,10,11,12,13,15,16,17,18,30,32,36,37,38,39,40,41,42,43,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,83,85,87,88,90,91,93,94,95,96,97],ut=[1,117],ot=[1,118],st=[8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,85,87,88,90,91,93,94,95,96,97],ct=[8,9,10,11,12,13,15,16,17,18,30,32,37,39,41,43,46,50,51,52,53,54,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,83,85,87,88,90,91,93,94,95,96,97],lt=[13,18,46,81,85,87,88,90,91,93,94,95,96,97],ht=[13,18,46,49,65,81,85,87,88,90,91,93,94,95,96,97],ft=[1,191],dt=[1,188],pt=[1,195],gt=[1,192],mt=[1,189],yt=[1,196],vt=[1,186],bt=[1,187],_t=[1,190],xt=[1,193],wt=[1,194],At=[1,211],kt=[8,9,11,85],Et=[8,9,10,11,46,71,80,81,83,85,87,88,89,90,91],Dt={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,DIR:13,FirstStmtSeperator:14,TAGEND:15,TAGSTART:16,UP:17,DOWN:18,ending:19,endToken:20,spaceList:21,spaceListNewline:22,verticeStatement:23,separator:24,styleStatement:25,linkStyleStatement:26,classDefStatement:27,classStatement:28,clickStatement:29,subgraph:30,text:31,end:32,vertex:33,link:34,alphaNum:35,SQS:36,SQE:37,PS:38,PE:39,"(-":40,"-)":41,DIAMOND_START:42,DIAMOND_STOP:43,alphaNumStatement:44,alphaNumToken:45,MINUS:46,linkStatement:47,arrowText:48,TESTSTR:49,"--":50,ARROW_POINT:51,ARROW_CIRCLE:52,ARROW_CROSS:53,ARROW_OPEN:54,"-.":55,DOTTED_ARROW_POINT:56,DOTTED_ARROW_CIRCLE:57,DOTTED_ARROW_CROSS:58,DOTTED_ARROW_OPEN:59,"==":60,THICK_ARROW_POINT:61,THICK_ARROW_CIRCLE:62,THICK_ARROW_CROSS:63,THICK_ARROW_OPEN:64,PIPE:65,textToken:66,STR:67,commentText:68,commentToken:69,keywords:70,STYLE:71,LINKSTYLE:72,CLASSDEF:73,CLASS:74,CLICK:75,textNoTags:76,textNoTagsToken:77,DEFAULT:78,stylesOpt:79,HEX:80,NUM:81,commentStatement:82,PCT:83,style:84,COMMA:85,styleComponent:86,ALPHA:87,COLON:88,UNIT:89,BRKT:90,DOT:91,graphCodeTokens:92,PUNCTUATION:93,UNICODE_TEXT:94,PLUS:95,EQUALS:96,MULT:97,TAG_START:98,TAG_END:99,QUOTE:100,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"DIR",15:"TAGEND",16:"TAGSTART",17:"UP",18:"DOWN",30:"subgraph",32:"end",36:"SQS",37:"SQE",38:"PS",39:"PE",40:"(-",41:"-)",42:"DIAMOND_START",43:"DIAMOND_STOP",46:"MINUS",49:"TESTSTR",50:"--",51:"ARROW_POINT",52:"ARROW_CIRCLE",53:"ARROW_CROSS",54:"ARROW_OPEN",55:"-.",56:"DOTTED_ARROW_POINT",57:"DOTTED_ARROW_CIRCLE",58:"DOTTED_ARROW_CROSS",59:"DOTTED_ARROW_OPEN",60:"==",61:"THICK_ARROW_POINT",62:"THICK_ARROW_CIRCLE",63:"THICK_ARROW_CROSS",64:"THICK_ARROW_OPEN",65:"PIPE",67:"STR",71:"STYLE",72:"LINKSTYLE",73:"CLASSDEF",74:"CLASS",75:"CLICK",78:"DEFAULT",80:"HEX",81:"NUM",83:"PCT",85:"COMMA",87:"ALPHA",88:"COLON",89:"UNIT",90:"BRKT",91:"DOT",93:"PUNCTUATION",94:"UNICODE_TEXT",95:"PLUS",96:"EQUALS",97:"MULT",98:"TAG_START",99:"TAG_END",100:"QUOTE"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,4],[4,4],[4,4],[4,4],[4,4],[19,2],[19,1],[20,1],[20,1],[20,1],[14,1],[14,1],[14,2],[22,2],[22,2],[22,1],[22,1],[21,2],[21,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,5],[7,4],[24,1],[24,1],[24,1],[23,3],[23,1],[33,4],[33,5],[33,6],[33,7],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,1],[33,2],[35,1],[35,2],[44,1],[44,1],[44,1],[44,1],[34,2],[34,3],[34,3],[34,1],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[48,3],[31,1],[31,2],[31,1],[68,1],[68,2],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[76,1],[76,2],[27,5],[27,5],[28,5],[29,5],[29,7],[29,5],[29,7],[25,5],[25,5],[26,5],[26,5],[82,3],[79,1],[79,3],[84,1],[84,2],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[86,1],[69,1],[69,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[77,1],[77,1],[77,1],[77,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1]],performAction:function(t,e,n,r,i,a){var u=a.length-1;switch(i){case 2:this.$=[];break;case 3:a[u]!==[]&&a[u-1].push(a[u]),this.$=a[u-1];break;case 4:case 57:case 59:case 60:case 92:case 94:case 95:case 108:this.$=a[u];break;case 11:r.setDirection(a[u-1]),this.$=a[u-1];break;case 12:r.setDirection("LR"),this.$=a[u-1];break;case 13:r.setDirection("RL"),this.$=a[u-1];break;case 14:r.setDirection("BT"),this.$=a[u-1];break;case 15:r.setDirection("TB"),this.$=a[u-1];break;case 30:this.$=a[u-1];break;case 31:case 32:case 33:case 34:case 35:this.$=[];break;case 36:this.$=r.addSubGraph(a[u-1],a[u-3]);break;case 37:this.$=r.addSubGraph(a[u-1],void 0);break;case 41:r.addLink(a[u-2],a[u],a[u-1]),this.$=[a[u-2],a[u]];break;case 42:this.$=[a[u]];break;case 43:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"square");break;case 44:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"square");break;case 45:this.$=a[u-5],r.addVertex(a[u-5],a[u-2],"circle");break;case 46:this.$=a[u-6],r.addVertex(a[u-6],a[u-3],"circle");break;case 47:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"ellipse");break;case 48:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"ellipse");break;case 49:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"round");break;case 50:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"round");break;case 51:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"diamond");break;case 52:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"diamond");break;case 53:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"odd");break;case 54:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"odd");break;case 55:this.$=a[u],r.addVertex(a[u]);break;case 56:this.$=a[u-1],r.addVertex(a[u-1]);break;case 58:case 93:case 96:case 109:this.$=a[u-1]+""+a[u];break;case 61:this.$="v";break;case 62:this.$="-";break;case 63:a[u-1].text=a[u],this.$=a[u-1];break;case 64:case 65:a[u-2].text=a[u-1],this.$=a[u-2];break;case 66:this.$=a[u];break;case 67:this.$={type:"arrow",stroke:"normal",text:a[u-1]};break;case 68:this.$={type:"arrow_circle",stroke:"normal",text:a[u-1]};break;case 69:this.$={type:"arrow_cross",stroke:"normal",text:a[u-1]};break;case 70:this.$={type:"arrow_open",stroke:"normal",text:a[u-1]};break;case 71:this.$={type:"arrow",stroke:"dotted",text:a[u-1]};break;case 72:this.$={type:"arrow_circle",stroke:"dotted",text:a[u-1]};break;case 73:this.$={type:"arrow_cross",stroke:"dotted",text:a[u-1]};break;case 74:this.$={type:"arrow_open",stroke:"dotted",text:a[u-1]};break;case 75:this.$={type:"arrow",stroke:"thick",text:a[u-1]};break;case 76:this.$={type:"arrow_circle",stroke:"thick",text:a[u-1]};break;case 77:this.$={type:"arrow_cross",stroke:"thick",text:a[u-1]};break;case 78:this.$={type:"arrow_open",stroke:"thick",text:a[u-1]};break;case 79:this.$={type:"arrow",stroke:"normal"};break;case 80:this.$={type:"arrow_circle",stroke:"normal"};break;case 81:this.$={type:"arrow_cross",stroke:"normal"};break;case 82:this.$={type:"arrow_open",stroke:"normal"};break;case 83:this.$={type:"arrow",stroke:"dotted"};break;case 84:this.$={type:"arrow_circle",stroke:"dotted"};break;case 85:this.$={type:"arrow_cross",stroke:"dotted"};break;case 86:this.$={type:"arrow_open",stroke:"dotted"};break;case 87:this.$={type:"arrow",stroke:"thick"};break;case 88:this.$={type:"arrow_circle",stroke:"thick"};break;case 89:this.$={type:"arrow_cross",stroke:"thick"};break;case 90:this.$={type:"arrow_open",stroke:"thick"};break;case 91:this.$=a[u-1];break;case 110:case 111:this.$=a[u-4],r.addClass(a[u-2],a[u]);break;case 112:this.$=a[u-4],r.setClass(a[u-2],a[u]);break;case 113:this.$=a[u-4],r.setClickEvent(a[u-2],a[u],void 0,void 0);break;case 114:this.$=a[u-6],r.setClickEvent(a[u-4],a[u-2],void 0,a[u]);break;case 115:this.$=a[u-4],r.setClickEvent(a[u-2],void 0,a[u],void 0);break;case 116:this.$=a[u-6],r.setClickEvent(a[u-4],void 0,a[u-2],a[u]);break;case 117:this.$=a[u-4],r.addVertex(a[u-2],void 0,void 0,a[u]);break;case 118:case 119:case 120:this.$=a[u-4],r.updateLink(a[u-2],a[u]);break;case 122:this.$=[a[u]];break;case 123:a[u-2].push(a[u]),this.$=a[u-2];break;case 125:this.$=a[u-1]+a[u]}},table:[{3:1,4:2,9:n,10:r,12:i},{1:[3]},e(a,u,{5:6}),{4:7,9:n,10:r,12:i},{4:8,9:n,10:r,12:i},{10:[1,9]},{1:[2,1],6:10,7:11,8:o,9:s,10:c,11:l,13:h,18:f,23:16,25:17,26:18,27:19,28:20,29:21,30:d,33:23,35:29,44:30,45:32,46:p,71:g,72:m,73:y,74:v,75:b,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(a,[2,9]),e(a,[2,10]),{13:[1,46],15:[1,47],16:[1,48],17:[1,49],18:[1,50]},e(F,[2,3]),e(F,[2,4]),e(F,[2,5]),e(F,[2,6]),e(F,[2,7]),e(F,[2,8]),{8:B,9:L,11:N,24:51},{8:B,9:L,11:N,24:55},{8:B,9:L,11:N,24:56},{8:B,9:L,11:N,24:57},{8:B,9:L,11:N,24:58},{8:B,9:L,11:N,24:59},{8:B,9:L,10:O,11:N,12:I,13:R,15:P,16:q,17:j,18:U,24:61,30:Y,31:60,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(et,[2,42],{34:86,47:87,50:[1,88],51:[1,91],52:[1,92],53:[1,93],54:[1,94],55:[1,89],56:[1,95],57:[1,96],58:[1,97],59:[1,98],60:[1,90],61:[1,99],62:[1,100],63:[1,101],64:[1,102]}),{10:[1,103]},{10:[1,104]},{10:[1,105]},{10:[1,106]},{10:[1,107]},e(nt,[2,55],{45:32,21:113,44:114,10:rt,13:h,15:[1,112],18:f,36:[1,108],38:[1,109],40:[1,110],42:[1,111],46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T}),e(it,[2,57]),e(it,[2,59]),e(it,[2,60]),e(it,[2,61]),e(it,[2,62]),e(at,[2,150]),e(at,[2,151]),e(at,[2,152]),e(at,[2,153]),e(at,[2,154]),e(at,[2,155]),e(at,[2,156]),e(at,[2,157]),e(at,[2,158]),e(at,[2,159]),e(at,[2,160]),{8:ut,9:ot,10:rt,14:116,21:119},{8:ut,9:ot,10:rt,14:120,21:119},{8:ut,9:ot,10:rt,14:121,21:119},{8:ut,9:ot,10:rt,14:122,21:119},{8:ut,9:ot,10:rt,14:123,21:119},e(F,[2,30]),e(F,[2,38]),e(F,[2,39]),e(F,[2,40]),e(F,[2,31]),e(F,[2,32]),e(F,[2,33]),e(F,[2,34]),e(F,[2,35]),{8:B,9:L,10:O,11:N,12:I,13:R,15:P,16:q,17:j,18:U,24:124,30:Y,32:V,45:71,46:H,50:G,60:z,66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(st,u,{5:126}),e(ct,[2,92]),e(ct,[2,94]),e(ct,[2,139]),e(ct,[2,140]),e(ct,[2,141]),e(ct,[2,142]),e(ct,[2,143]),e(ct,[2,144]),e(ct,[2,145]),e(ct,[2,146]),e(ct,[2,147]),e(ct,[2,148]),e(ct,[2,149]),e(ct,[2,97]),e(ct,[2,98]),e(ct,[2,99]),e(ct,[2,100]),e(ct,[2,101]),e(ct,[2,102]),e(ct,[2,103]),e(ct,[2,104]),e(ct,[2,105]),e(ct,[2,106]),e(ct,[2,107]),{13:h,18:f,33:127,35:29,44:30,45:32,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(lt,[2,66],{48:128,49:[1,129],65:[1,130]}),{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:131,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:132,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:133,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(ht,[2,79]),e(ht,[2,80]),e(ht,[2,81]),e(ht,[2,82]),e(ht,[2,83]),e(ht,[2,84]),e(ht,[2,85]),e(ht,[2,86]),e(ht,[2,87]),e(ht,[2,88]),e(ht,[2,89]),e(ht,[2,90]),{13:h,18:f,35:134,44:30,45:32,46:p,80:[1,135],81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{78:[1,136],81:[1,137]},{13:h,18:f,35:139,44:30,45:32,46:p,78:[1,138],81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{13:h,18:f,35:140,44:30,45:32,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{13:h,18:f,35:141,44:30,45:32,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:142,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:144,32:V,38:[1,143],45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:145,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:146,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:147,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(nt,[2,56]),e(it,[2,58]),e(nt,[2,29],{21:148,10:rt}),e(a,[2,11]),e(a,[2,21]),e(a,[2,22]),{9:[1,149]},e(a,[2,12]),e(a,[2,13]),e(a,[2,14]),e(a,[2,15]),e(st,u,{5:150}),e(ct,[2,93]),{6:10,7:11,8:o,9:s,10:c,11:l,13:h,18:f,23:16,25:17,26:18,27:19,28:20,29:21,30:d,32:[1,151],33:23,35:29,44:30,45:32,46:p,71:g,72:m,73:y,74:v,75:b,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(et,[2,41]),e(lt,[2,63],{10:[1,152]}),{10:[1,153]},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:154,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,45:71,46:H,50:G,51:[1,155],52:[1,156],53:[1,157],54:[1,158],60:z,66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,45:71, +46:H,50:G,56:[1,159],57:[1,160],58:[1,161],59:[1,162],60:z,66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,45:71,46:H,50:G,60:z,61:[1,163],62:[1,164],63:[1,165],64:[1,166],66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:[1,167],13:h,18:f,44:114,45:32,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:[1,168]},{10:[1,169]},{10:[1,170]},{10:[1,171]},{10:[1,172],13:h,18:f,44:114,45:32,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:[1,173],13:h,18:f,44:114,45:32,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:[1,174],13:h,18:f,44:114,45:32,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,37:[1,175],45:71,46:H,50:G,60:z,66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,31:176,32:V,45:71,46:H,50:G,60:z,66:62,67:$,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,39:[1,177],45:71,46:H,50:G,60:z,66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,41:[1,178],45:71,46:H,50:G,60:z,66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,43:[1,179],45:71,46:H,50:G,60:z,66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,37:[1,180],45:71,46:H,50:G,60:z,66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(nt,[2,28]),e(a,[2,23]),{6:10,7:11,8:o,9:s,10:c,11:l,13:h,18:f,23:16,25:17,26:18,27:19,28:20,29:21,30:d,32:[1,181],33:23,35:29,44:30,45:32,46:p,71:g,72:m,73:y,74:v,75:b,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(F,[2,37]),e(lt,[2,65]),e(lt,[2,64]),{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,45:71,46:H,50:G,60:z,65:[1,182],66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(lt,[2,67]),e(lt,[2,68]),e(lt,[2,69]),e(lt,[2,70]),e(lt,[2,71]),e(lt,[2,72]),e(lt,[2,73]),e(lt,[2,74]),e(lt,[2,75]),e(lt,[2,76]),e(lt,[2,77]),e(lt,[2,78]),{10:ft,46:dt,71:pt,79:183,80:gt,81:mt,83:yt,84:184,86:185,87:vt,88:bt,89:_t,90:xt,91:wt},{10:ft,46:dt,71:pt,79:197,80:gt,81:mt,83:yt,84:184,86:185,87:vt,88:bt,89:_t,90:xt,91:wt},{10:ft,46:dt,71:pt,79:198,80:gt,81:mt,83:yt,84:184,86:185,87:vt,88:bt,89:_t,90:xt,91:wt},{10:ft,46:dt,71:pt,79:199,80:gt,81:mt,83:yt,84:184,86:185,87:vt,88:bt,89:_t,90:xt,91:wt},{10:ft,46:dt,71:pt,79:200,80:gt,81:mt,83:yt,84:184,86:185,87:vt,88:bt,89:_t,90:xt,91:wt},{10:ft,46:dt,71:pt,79:201,80:gt,81:mt,83:yt,84:184,86:185,87:vt,88:bt,89:_t,90:xt,91:wt},{13:h,18:f,35:202,44:30,45:32,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},{13:h,18:f,35:203,44:30,45:32,46:p,67:[1,204],81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(nt,[2,43],{21:205,10:rt}),{10:O,12:I,13:R,15:P,16:q,17:j,18:U,30:Y,32:V,39:[1,206],45:71,46:H,50:G,60:z,66:125,70:74,71:W,72:Z,73:X,74:J,75:K,77:64,78:Q,81:_,83:tt,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T},e(nt,[2,49],{21:207,10:rt}),e(nt,[2,47],{21:208,10:rt}),e(nt,[2,51],{21:209,10:rt}),e(nt,[2,53],{21:210,10:rt}),e(F,[2,36]),e([10,13,18,46,81,85,87,88,90,91,93,94,95,96,97],[2,91]),e(et,[2,117],{85:At}),e(kt,[2,122],{86:212,10:ft,46:dt,71:pt,80:gt,81:mt,83:yt,87:vt,88:bt,89:_t,90:xt,91:wt}),e(Et,[2,124]),e(Et,[2,126]),e(Et,[2,127]),e(Et,[2,128]),e(Et,[2,129]),e(Et,[2,130]),e(Et,[2,131]),e(Et,[2,132]),e(Et,[2,133]),e(Et,[2,134]),e(Et,[2,135]),e(Et,[2,136]),e(et,[2,118],{85:At}),e(et,[2,119],{85:At}),e(et,[2,120],{85:At}),e(et,[2,110],{85:At}),e(et,[2,111],{85:At}),e(et,[2,112],{45:32,44:114,13:h,18:f,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T}),e(et,[2,113],{45:32,44:114,10:[1,213],13:h,18:f,46:p,81:_,85:x,87:w,88:A,90:k,91:E,93:D,94:C,95:S,96:M,97:T}),e(et,[2,115],{10:[1,214]}),e(nt,[2,44]),{39:[1,215]},e(nt,[2,50]),e(nt,[2,48]),e(nt,[2,52]),e(nt,[2,54]),{10:ft,46:dt,71:pt,80:gt,81:mt,83:yt,84:216,86:185,87:vt,88:bt,89:_t,90:xt,91:wt},e(Et,[2,125]),{67:[1,217]},{67:[1,218]},e(nt,[2,45],{21:219,10:rt}),e(kt,[2,123],{86:212,10:ft,46:dt,71:pt,80:gt,81:mt,83:yt,87:vt,88:bt,89:_t,90:xt,91:wt}),e(et,[2,114]),e(et,[2,116]),e(nt,[2,46])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=new Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,u="",o=0,s=0,c=0,l=2,h=1,f=i.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);d.setInput(t,p.yy),p.yy.lexer=d,p.yy.parser=this,"undefined"==typeof d.yylloc&&(d.yylloc={});var m=d.yylloc;i.push(m);var y=d.options&&d.options.ranges;this.parseError="function"==typeof p.yy.parseError?p.yy.parseError:Object.getPrototypeOf(this).parseError;for(var v,b,_,x,w,A,k,E,D,C=function(){var t;return t=d.lex()||h,"number"!=typeof t&&(t=e.symbols_[t]||t),t},S={};;){if(_=n[n.length-1],this.defaultActions[_]?x=this.defaultActions[_]:((null===v||"undefined"==typeof v)&&(v=C()),x=a[_]&&a[_][v]),"undefined"==typeof x||!x.length||!x[0]){var M="";D=[];for(A in a[_])this.terminals_[A]&&A>l&&D.push("'"+this.terminals_[A]+"'");M=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(o+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:d.match,token:this.terminals_[v]||v,line:d.yylineno,loc:m,expected:D})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+v);switch(x[0]){case 1:n.push(v),r.push(d.yytext),i.push(d.yylloc),n.push(x[1]),v=null,b?(v=b,b=null):(s=d.yyleng,u=d.yytext,o=d.yylineno,m=d.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[x[1]][1],S.$=r[r.length-k],S._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},y&&(S._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),w=this.performAction.apply(S,[u,s,o,p.yy,x[1],r,i].concat(f)),"undefined"!=typeof w)return w;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),i=i.slice(0,-1*k)),n.push(this.productions_[x[1]][0]),r.push(S.$),i.push(S._$),E=a[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},Ct=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var e=t.match(/(?:\r\n?|\n).*/g);return e?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(t=this.test_match(n,i[a]),t!==!1)return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?(t=this.test_match(e,i[r]),t!==!1?t:!1):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){var t=this.conditionStack.length-1;return t>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:break;case 1:this.begin("string");break;case 2:this.popState();break;case 3:return"STR";case 4:return 71;case 5:return 78;case 6:return 72;case 7:return 73;case 8:return 74;case 9:return 75;case 10:return 12;case 11:return 30;case 12:return 32;case 13:return 13;case 14:return 13;case 15:return 13;case 16:return 13;case 17:return 13;case 18:return 13;case 19:return 81;case 20:return 90;case 21:return 88;case 22:return 8;case 23:return 85;case 24:return 97;case 25:return 16;case 26:return 15;case 27:return 17;case 28:return 18;case 29:return 53;case 30:return 51;case 31:return 52;case 32:return 54;case 33:return 58;case 34:return 56;case 35:return 57;case 36:return 59;case 37:return 58;case 38:return 56;case 39:return 57;case 40:return 59;case 41:return 63;case 42:return 61;case 43:return 62;case 44:return 64;case 45:return 50;case 46:return 55;case 47:return 60;case 48:return 40;case 49:return 41;case 50:return 46;case 51:return 91;case 52:return 95;case 53:return 83;case 54:return 96;case 55:return 96;case 56:return 87;case 57:return 93;case 58:return 94;case 59:return 65;case 60:return 38;case 61:return 39;case 62:return 36;case 63:return 37;case 64:return 42;case 65:return 43;case 66:return 100;case 67:return 9;case 68:return 10;case 69:return 11}},rules:[/^(?:%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:v\b)/,/^(?:\s*--[x]\s*)/,/^(?:\s*-->\s*)/,/^(?:\s*--[o]\s*)/,/^(?:\s*---\s*)/,/^(?:\s*-\.-[x]\s*)/,/^(?:\s*-\.->\s*)/,/^(?:\s*-\.-[o]\s*)/,/^(?:\s*-\.-\s*)/,/^(?:\s*.-[x]\s*)/,/^(?:\s*\.->\s*)/,/^(?:\s*\.-[o]\s*)/,/^(?:\s*\.-\s*)/,/^(?:\s*==[x]\s*)/,/^(?:\s*==>\s*)/,/^(?:\s*==[o]\s*)/,/^(?:\s*==[\=]\s*)/,/^(?:\s*--\s*)/,/^(?:\s*-\.\s*)/,/^(?:\s*==\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\n+)/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[2,3],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69],inclusive:!0}}};return t}();return Dt.lexer=Ct,t.prototype=Dt,Dt.Parser=t,new t}();"undefined"!=typeof t&&"undefined"!=typeof n&&(n.parser=i,n.Parser=i.Parser,n.parse=function(){return i.parse.apply(i,arguments)},n.main=function(e){e[1]||(console.log("Usage: "+e[0]+" FILE"),r.exit(1));var i=t("fs").readFileSync(t("path").normalize(e[1]),"utf8");return n.parser.parse(i)},"undefined"!=typeof e&&t.main===e&&n.main(r.argv.slice(1)))}).call(this,t("_process"))},{_process:3,fs:1,path:2}],120:[function(t,e,n){(function(e){"use strict";var r=t("moment"),i=t("../../logger"),a=new i.Log,u="",o="",s=[],c=[],l="";n.clear=function(){s=[],c=[],l="",o="",g=0,h=void 0,f=void 0,b=[]},n.setDateFormat=function(t){u=t},n.getDateFormat=function(){return u},n.setTitle=function(t){o=t},n.getTitle=function(){return o},n.addSection=function(t){l=t,s.push(t)},n.getTasks=function(){for(var t=x(),e=10,n=0;!t&&e>n;)t=x(),n++;return c=b};var h,f,d=function(t,e,i){i=i.trim();var u=/^after\s+([\d\w\-]+)/,o=u.exec(i.trim());if(null!==o){var s=n.findTaskById(o[1]);if("undefined"==typeof s){var c=new Date;return c.setHours(0,0,0,0),c}return s.endTime}return r(i,e.trim(),!0).isValid()?r(i,e.trim(),!0).toDate():(a.debug("Invalid date:"+i),a.debug("With date format:"+e.trim()),new Date)},p=function(t,e,n){if(n=n.trim(),r(n,e.trim(),!0).isValid())return r(n,e.trim()).toDate();var i=r(t),a=/^([\d]+)([wdhms])/,u=a.exec(n.trim());if(null!==u){switch(u[2]){case"s":i.add(u[1],"seconds");break;case"m":i.add(u[1],"minutes");break;case"h":i.add(u[1],"hours");break;case"d":i.add(u[1],"days");break;case"w":i.add(u[1],"weeks")}return i.toDate()}return i.toDate()},g=0,m=function(t){return"undefined"==typeof t?(g+=1,"task"+g):t},y=function(t,e){var r;r=":"===e.substr(0,1)?e.substr(1,e.length):e;for(var i=r.split(","),a={},u=n.getDateFormat(),o=!0;o;)o=!1,i[0].match(/^\s*active\s*$/)&&(a.active=!0,i.shift(1),o=!0),i[0].match(/^\s*done\s*$/)&&(a.done=!0,i.shift(1),o=!0),i[0].match(/^\s*crit\s*$/)&&(a.crit=!0,i.shift(1),o=!0);var s;for(s=0;sn-e?n+i+1.5*u.sidePadding>o?e+r-5:n+r+5:(n-e)/2+e+r}).attr("y",function(t,r){return r*e+u.barHeight/2+(u.fontSize/2-2)+n}).attr("text-height",i).attr("class",function(t){for(var e=w(t.startTime),n=w(t.endTime),r=this.getBBox().width,i=0,a=0;an-e?n+r+1.5*u.sidePadding>o?"taskTextOutsideLeft taskTextOutside"+i+" "+s:"taskTextOutsideRight taskTextOutside"+i+" "+s:"taskText taskText"+i+" "+s})}function l(t,e,n,a){var o,s=[[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["h1 %I:%M",function(t){return t.getMinutes()}]],c=[["%Y",function(){return!0}]],l=[["%I:%M",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}]];"undefined"!=typeof u.axisFormatter&&(l=[],u.axisFormatter.forEach(function(t){var e=[];e[0]=t[0],e[1]=t[1],l.push(e)})),o=s.concat(l).concat(c);var h=i.svg.axis().scale(w).orient("bottom").tickSize(-a+e+u.gridLineStartPadding,0,0).tickFormat(i.time.format.multi(o));r>7&&230>r&&(h=h.ticks(i.time.monday.range)),b.append("g").attr("class","grid").attr("transform","translate("+t+", "+(a-50)+")").call(h).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em")}function h(t,e){for(var n=[],r=0,i=0;i0))return i[1]*t/2+e;for(var u=0;a>u;u++)return r+=n[a-1][1],i[1]*t/2+r*t+e}).attr("class",function(t){for(var e=0;er;++r)e.hasOwnProperty(t[r])||(e[t[r]]=!0,n.push(t[r]));return n}function p(t){for(var e=t.length,n={};e;)n[t[--e]]=(n[t[e]]||0)+1;return n}function g(t,e){return p(e)[t]||0}n.yy.clear(),n.parse(t);var m=document.getElementById(e);o=m.parentElement.offsetWidth,"undefined"==typeof o&&(o=1200),"undefined"!=typeof u.useWidth&&(o=u.useWidth);var y=n.yy.getTasks(),v=y.length*(u.barHeight+u.barGap)+2*u.topPadding;m.setAttribute("height","100%"),m.setAttribute("viewBox","0 0 "+o+" "+v);var b=i.select("#"+e),_=i.min(y,function(t){return t.startTime}),x=i.max(y,function(t){return t.endTime}),w=i.time.scale().domain([i.min(y,function(t){return t.startTime}),i.max(y,function(t){return t.endTime})]).rangeRound([0,o-150]),A=[];r=a.duration(x-_).asDays();for(var k=0;kl&&D.push("'"+this.terminals_[A]+"'");M=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(o+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:d.match,token:this.terminals_[v]||v,line:d.yylineno,loc:m,expected:D})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+v);switch(x[0]){case 1:n.push(v),r.push(d.yytext),i.push(d.yylloc),n.push(x[1]),v=null,b?(v=b,b=null):(s=d.yyleng,u=d.yytext,o=d.yylineno,m=d.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[x[1]][1],S.$=r[r.length-k],S._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},y&&(S._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),w=this.performAction.apply(S,[u,s,o,p.yy,x[1],r,i].concat(f)),"undefined"!=typeof w)return w;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),i=i.slice(0,-1*k)),n.push(this.productions_[x[1]][0]),r.push(S.$),i.push(S._$),E=a[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},s=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var e=t.match(/(?:\r\n?|\n).*/g);return e?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++, +this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(t=this.test_match(n,i[a]),t!==!1)return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?(t=this.test_match(e,i[r]),t!==!1?t:!1):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){var t=this.conditionStack.length-1;return t>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 10;case 1:break;case 2:break;case 3:break;case 4:return 4;case 5:return 11;case 6:return"date";case 7:return 12;case 8:return 13;case 9:return 14;case 10:return 15;case 11:return":";case 12:return 6;case 13:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}};return t}();return o.lexer=s,t.prototype=o,o.Parser=t,new t}();"undefined"!=typeof t&&"undefined"!=typeof n&&(n.parser=i,n.Parser=i.Parser,n.parse=function(){return i.parse.apply(i,arguments)},n.main=function(e){e[1]||(console.log("Usage: "+e[0]+" FILE"),r.exit(1));var i=t("fs").readFileSync(t("path").normalize(e[1]),"utf8");return n.parser.parse(i)},"undefined"!=typeof e&&t.main===e&&n.main(r.argv.slice(1)))}).call(this,t("_process"))},{_process:3,fs:1,path:2}],123:[function(t,e,n){(function(r){"use strict";var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[2,2],r=[1,5],i=[1,7],a=[1,8],u=[1,11],o=[1,12],s=[1,13],c=[1,14],l=[1,16],h=[1,17],f=[1,7,9,10,16,18,19,20,21,22,23,33],d=[7,9,10,16,18,19,20,21,23,33],p=[1,53],g={trace:function(){},yy:{},symbols_:{error:2,start:3,SD:4,document:5,line:6,SPACE:7,statement:8,NL:9,participant:10,actor:11,AS:12,restOfLine:13,signal:14,note_statement:15,title:16,text:17,loop:18,end:19,opt:20,alt:21,"else":22,note:23,placement:24,text2:25,over:26,actor_pair:27,spaceList:28,",":29,left_of:30,right_of:31,signaltype:32,ACTOR:33,SOLID_OPEN_ARROW:34,DOTTED_OPEN_ARROW:35,SOLID_ARROW:36,DOTTED_ARROW:37,SOLID_CROSS:38,DOTTED_CROSS:39,TXT:40,$accept:0,$end:1},terminals_:{2:"error",4:"SD",7:"SPACE",9:"NL",10:"participant",12:"AS",13:"restOfLine",16:"title",17:"text",18:"loop",19:"end",20:"opt",21:"alt",22:"else",23:"note",26:"over",29:",",30:"left_of",31:"right_of",33:"ACTOR",34:"SOLID_OPEN_ARROW",35:"DOTTED_OPEN_ARROW",36:"SOLID_ARROW",37:"DOTTED_ARROW",38:"SOLID_CROSS",39:"DOTTED_CROSS",40:"TXT"},productions_:[0,[3,2],[5,0],[5,2],[6,2],[6,1],[6,1],[8,5],[8,3],[8,2],[8,2],[8,4],[8,4],[8,4],[8,7],[15,4],[15,4],[28,2],[28,1],[27,3],[27,1],[24,1],[24,1],[14,4],[11,1],[32,1],[32,1],[32,1],[32,1],[32,1],[32,1],[25,1]],performAction:function(t,e,n,r,i,a){var u=a.length-1;switch(i){case 1:return r.apply(a[u]),a[u];case 2:this.$=[];break;case 3:a[u-1].push(a[u]),this.$=a[u-1];break;case 4:case 5:this.$=a[u];break;case 6:this.$=[];break;case 7:a[u-3].description=a[u-1],this.$=a[u-3];break;case 8:this.$=a[u-1];break;case 12:a[u-1].unshift({type:"loopStart",loopText:a[u-2],signalType:r.LINETYPE.LOOP_START}),a[u-1].push({type:"loopEnd",loopText:a[u-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[u-1];break;case 13:a[u-1].unshift({type:"optStart",optText:a[u-2],signalType:r.LINETYPE.OPT_START}),a[u-1].push({type:"optEnd",optText:a[u-2],signalType:r.LINETYPE.OPT_END}),this.$=a[u-1];break;case 14:a[u-4].unshift({type:"altStart",altText:a[u-5],signalType:r.LINETYPE.ALT_START}),a[u-4].push({type:"else",altText:a[u-2],signalType:r.LINETYPE.ALT_ELSE}),a[u-4]=a[u-4].concat(a[u-1]),a[u-4].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[u-4];break;case 15:this.$=[a[u-1],{type:"addNote",placement:a[u-2],actor:a[u-1].actor,text:a[u]}];break;case 16:a[u-2]=[].concat(a[u-1],a[u-1]).slice(0,2),a[u-2][0]=a[u-2][0].actor,a[u-2][1]=a[u-2][1].actor,this.$=[a[u-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[u-2].slice(0,2),text:a[u]}];break;case 19:this.$=[a[u-2],a[u]];break;case 20:this.$=a[u];break;case 21:this.$=r.PLACEMENT.LEFTOF;break;case 22:this.$=r.PLACEMENT.RIGHTOF;break;case 23:this.$=[a[u-3],a[u-1],{type:"addMessage",from:a[u-3].actor,to:a[u-1].actor,signalType:a[u-2],msg:a[u]}];break;case 24:this.$={type:"addActor",actor:a[u]};break;case 25:this.$=r.LINETYPE.SOLID_OPEN;break;case 26:this.$=r.LINETYPE.DOTTED_OPEN;break;case 27:this.$=r.LINETYPE.SOLID;break;case 28:this.$=r.LINETYPE.DOTTED;break;case 29:this.$=r.LINETYPE.SOLID_CROSS;break;case 30:this.$=r.LINETYPE.DOTTED_CROSS;break;case 31:this.$=a[u].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:[1,2]},{1:[3]},e([1,7,9,10,16,18,20,21,23,33],n,{5:3}),{1:[2,1],6:4,7:r,8:6,9:i,10:a,11:15,14:9,15:10,16:u,18:o,20:s,21:c,23:l,33:h},e(f,[2,3]),{8:18,10:a,11:15,14:9,15:10,16:u,18:o,20:s,21:c,23:l,33:h},e(f,[2,5]),e(f,[2,6]),{11:19,33:h},{9:[1,20]},{9:[1,21]},{7:[1,22]},{13:[1,23]},{13:[1,24]},{13:[1,25]},{32:26,34:[1,27],35:[1,28],36:[1,29],37:[1,30],38:[1,31],39:[1,32]},{24:33,26:[1,34],30:[1,35],31:[1,36]},e([9,12,29,34,35,36,37,38,39,40],[2,24]),e(f,[2,4]),{9:[1,38],12:[1,37]},e(f,[2,9]),e(f,[2,10]),{17:[1,39]},e(d,n,{5:40}),e(d,n,{5:41}),e([7,9,10,16,18,20,21,22,23,33],n,{5:42}),{11:43,33:h},{33:[2,25]},{33:[2,26]},{33:[2,27]},{33:[2,28]},{33:[2,29]},{33:[2,30]},{11:44,33:h},{11:46,27:45,33:h},{33:[2,21]},{33:[2,22]},{13:[1,47]},e(f,[2,8]),{9:[1,48]},{6:4,7:r,8:6,9:i,10:a,11:15,14:9,15:10,16:u,18:o,19:[1,49],20:s,21:c,23:l,33:h},{6:4,7:r,8:6,9:i,10:a,11:15,14:9,15:10,16:u,18:o,19:[1,50],20:s,21:c,23:l,33:h},{6:4,7:r,8:6,9:i,10:a,11:15,14:9,15:10,16:u,18:o,20:s,21:c,22:[1,51],23:l,33:h},{25:52,40:p},{25:54,40:p},{25:55,40:p},{29:[1,56],40:[2,20]},{9:[1,57]},e(f,[2,11]),e(f,[2,12]),e(f,[2,13]),{13:[1,58]},{9:[2,23]},{9:[2,31]},{9:[2,15]},{9:[2,16]},{11:59,33:h},e(f,[2,7]),e(d,n,{5:60}),{40:[2,19]},{6:4,7:r,8:6,9:i,10:a,11:15,14:9,15:10,16:u,18:o,19:[1,61],20:s,21:c,23:l,33:h},e(f,[2,14])],defaultActions:{27:[2,25],28:[2,26],29:[2,27],30:[2,28],31:[2,29],32:[2,30],35:[2,21],36:[2,22],52:[2,23],53:[2,31],54:[2,15],55:[2,16],59:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=new Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,u="",o=0,s=0,c=0,l=2,h=1,f=i.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);d.setInput(t,p.yy),p.yy.lexer=d,p.yy.parser=this,"undefined"==typeof d.yylloc&&(d.yylloc={});var m=d.yylloc;i.push(m);var y=d.options&&d.options.ranges;this.parseError="function"==typeof p.yy.parseError?p.yy.parseError:Object.getPrototypeOf(this).parseError;for(var v,b,_,x,w,A,k,E,D,C=function(){var t;return t=d.lex()||h,"number"!=typeof t&&(t=e.symbols_[t]||t),t},S={};;){if(_=n[n.length-1],this.defaultActions[_]?x=this.defaultActions[_]:((null===v||"undefined"==typeof v)&&(v=C()),x=a[_]&&a[_][v]),"undefined"==typeof x||!x.length||!x[0]){var M="";D=[];for(A in a[_])this.terminals_[A]&&A>l&&D.push("'"+this.terminals_[A]+"'");M=d.showPosition?"Parse error on line "+(o+1)+":\n"+d.showPosition()+"\nExpecting "+D.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(o+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:d.match,token:this.terminals_[v]||v,line:d.yylineno,loc:m,expected:D})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+_+", token: "+v);switch(x[0]){case 1:n.push(v),r.push(d.yytext),i.push(d.yylloc),n.push(x[1]),v=null,b?(v=b,b=null):(s=d.yyleng,u=d.yytext,o=d.yylineno,m=d.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[x[1]][1],S.$=r[r.length-k],S._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},y&&(S._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),w=this.performAction.apply(S,[u,s,o,p.yy,x[1],r,i].concat(f)),"undefined"!=typeof w)return w;k&&(n=n.slice(0,-1*k*2),r=r.slice(0,-1*k),i=i.slice(0,-1*k)),n.push(this.productions_[x[1]][0]),r.push(S.$),i.push(S._$),E=a[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},m=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var e=t.match(/(?:\r\n?|\n).*/g);return e?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(t=this.test_match(n,i[a]),t!==!1)return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?(t=this.test_match(e,i[r]),t!==!1?t:!1):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t?t:this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){var t=this.conditionStack.length-1;return t>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return t=this.conditionStack.length-1-Math.abs(t||0),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 9;case 1:break;case 2:break;case 3:break;case 4:break;case 5:return this.begin("ID"),10;case 6:return this.begin("ALIAS"),33;case 7:return this.popState(),this.popState(),this.begin("LINE"),12;case 8:return this.popState(),this.popState(),9;case 9:return this.begin("LINE"),18;case 10:return this.begin("LINE"),20;case 11:return this.begin("LINE"),21;case 12:return this.begin("LINE"),22;case 13:return this.popState(),13;case 14:return 19;case 15:return 30;case 16:return 31;case 17:return 26;case 18:return 23;case 19:return 16;case 20:return 4;case 21:return 29;case 22:return 9;case 23:return 33;case 24:return 36;case 25:return 37;case 26:return 34;case 27:return 35;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 9;case 32:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\->:\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[2,3,13],inclusive:!1},ALIAS:{rules:[2,3,7,8],inclusive:!1},ID:{rules:[2,3,6],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,9,10,11,12,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],inclusive:!0}}};return t}();return g.lexer=m,t.prototype=g,g.Parser=t,new t}();"undefined"!=typeof t&&"undefined"!=typeof n&&(n.parser=i,n.Parser=i.Parser,n.parse=function(){return i.parse.apply(i,arguments)},n.main=function(e){e[1]||(console.log("Usage: "+e[0]+" FILE"),r.exit(1));var i=t("fs").readFileSync(t("path").normalize(e[1]),"utf8");return n.parser.parse(i)},"undefined"!=typeof e&&t.main===e&&n.main(r.argv.slice(1)))}).call(this,t("_process"))},{_process:3,fs:1,path:2}],124:[function(t,e,n){(function(e){"use strict";var r={},i=[],a=[],u=t("../../logger"),o=new u.Log;n.addActor=function(t,e,n){var i=r[t];i&&e===i.name&&null==n||(null==n&&(n=e),r[t]={name:e,description:n})},n.addMessage=function(t,e,n,r){i.push({from:t,to:e,message:n,answer:r})},n.addSignal=function(t,e,n,r){o.debug("Adding message from="+t+" to="+e+" message="+n+" type="+r),i.push({from:t,to:e,message:n,type:r})},n.getMessages=function(){return i},n.getActors=function(){return r},n.getActor=function(t){return r[t]},n.getActorKeys=function(){return Object.keys(r)},n.clear=function(){r={},i=[]},n.LINETYPE={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16},n.ARROWTYPE={FILLED:0,OPEN:1},n.PLACEMENT={LEFTOF:0,RIGHTOF:1,OVER:2},n.addNote=function(t,e,r){var u={actor:t,placement:e,message:r},o=[].concat(t,t);a.push(u),i.push({from:o[0],to:o[1],message:r,type:n.LINETYPE.NOTE,placement:e})},n.parseError=function(t,n){e.mermaidAPI.parseError(t,n)},n.apply=function(t){if(t instanceof Array)t.forEach(function(t){n.apply(t)});else switch(t.type){case"addActor":n.addActor(t.actor,t.actor,t.description);break;case"addNote":n.addNote(t.actor,t.placement,t.text);break;case"addMessage":n.addSignal(t.from,t.to,t.msg,t.signalType);break;case"loopStart":n.addSignal(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":n.addSignal(void 0,void 0,void 0,t.signalType);break;case"optStart":n.addSignal(void 0,void 0,t.optText,t.signalType);break;case"optEnd":n.addSignal(void 0,void 0,void 0,t.signalType);break;case"altStart":n.addSignal(void 0,void 0,t.altText,t.signalType);break;case"else":n.addSignal(void 0,void 0,t.altText,t.signalType);break;case"altEnd":n.addSignal(void 0,void 0,void 0,t.signalType)}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../logger":127}],125:[function(t,e,n){"use strict";var r=t("./parser/sequenceDiagram").parser;r.yy=t("./sequenceDb");var i=t("./svgDraw"),a=t("../../d3"),u=t("../../logger"),o=new u.Log,s={diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!1,bottomMarginAdj:1};n.bounds={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,list:[],init:function(){this.list=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,r){t[e]="undefined"==typeof t[e]?n:r(n,t[e])},updateLoops:function(t,e,r,i){var a=this,u=0;this.list.forEach(function(o){u++;var c=a.list.length-u+1;a.updateVal(o,"startx",t-c*s.boxMargin,Math.min),a.updateVal(o,"starty",e-c*s.boxMargin,Math.min),a.updateVal(o,"stopx",r+c*s.boxMargin,Math.max),a.updateVal(o,"stopy",i+c*s.boxMargin,Math.max),a.updateVal(n.bounds.data,"startx",t-c*s.boxMargin,Math.min),a.updateVal(n.bounds.data,"starty",e-c*s.boxMargin,Math.min),a.updateVal(n.bounds.data,"stopx",r+c*s.boxMargin,Math.max),a.updateVal(n.bounds.data,"stopy",i+c*s.boxMargin,Math.max)})},insert:function(t,e,r,i){var a,u,o,s;a=Math.min(t,r),o=Math.max(t,r),u=Math.min(e,i),s=Math.max(e,i),this.updateVal(n.bounds.data,"startx",a,Math.min),this.updateVal(n.bounds.data,"starty",u,Math.min),this.updateVal(n.bounds.data,"stopx",o,Math.max),this.updateVal(n.bounds.data,"stopy",s,Math.max),this.updateLoops(a,u,o,s)},newLoop:function(t){this.list.push({startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t})},endLoop:function(){var t=this.list.pop();return t},addElseToLoop:function(t){var e=this.list.pop();e.elsey=n.bounds.getVerticalPos(),e.elseText=t,this.list.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}};var c=function(t,e,r,a,u){var o=i.getNoteRect();o.x=e,o.y=r,o.width=u||s.width,o["class"]="note";var c=t.append("g"),l=i.drawRect(c,o),h=i.getTextObj();h.x=e-4,h.y=r-13,h.textMargin=s.noteMargin,h.dy="1em",h.text=a.message,h["class"]="noteText";var f=i.drawText(c,h,o.width-s.noteMargin),d=f[0][0].getBBox().height;!u&&d>s.width?(f.remove(),c=t.append("g"),f=i.drawText(c,h,2*o.width-s.noteMargin),d=f[0][0].getBBox().height,l.attr("width",2*o.width),n.bounds.insert(e,r,e+2*o.width,r+2*s.noteMargin+d)):n.bounds.insert(e,r,e+o.width,r+2*s.noteMargin+d),l.attr("height",d+2*s.noteMargin),n.bounds.bumpVerticalPos(d+2*s.noteMargin)},l=function(t,e,i,a,u){var o,c=t.append("g"),l=e+(i-e)/2,h=c.append("text").attr("x",l).attr("y",a-7).style("text-anchor","middle").attr("class","messageText").text(u.message);o="undefined"!=typeof h[0][0].getBBox?h[0][0].getBBox().width:h[0][0].getBoundingClientRect();var f;if(e===i){f=c.append("path").attr("d","M "+e+","+a+" C "+(e+60)+","+(a-10)+" "+(e+60)+","+(a+30)+" "+e+","+(a+20)),n.bounds.bumpVerticalPos(30);var d=Math.max(o/2,100);n.bounds.insert(e-d,n.bounds.getVerticalPos()-10,i+d,n.bounds.getVerticalPos())}else f=c.append("line"),f.attr("x1",e),f.attr("y1",a),f.attr("x2",i),f.attr("y2",a),n.bounds.insert(e,n.bounds.getVerticalPos()-10,i,n.bounds.getVerticalPos());u.type===r.yy.LINETYPE.DOTTED||u.type===r.yy.LINETYPE.DOTTED_CROSS||u.type===r.yy.LINETYPE.DOTTED_OPEN?(f.style("stroke-dasharray","3, 3"),f.attr("class","messageLine1")):f.attr("class","messageLine0");var p="";s.arrowMarkerAbsolute&&(p=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,p=p.replace(/\(/g,"\\("),p=p.replace(/\)/g,"\\)")),f.attr("stroke-width",2),f.attr("stroke","black"),f.style("fill","none"),(u.type===r.yy.LINETYPE.SOLID||u.type===r.yy.LINETYPE.DOTTED)&&f.attr("marker-end","url("+p+"#arrowhead)"),(u.type===r.yy.LINETYPE.SOLID_CROSS||u.type===r.yy.LINETYPE.DOTTED_CROSS)&&f.attr("marker-end","url("+p+"#crosshead)")};e.exports.drawActors=function(t,e,r,a){var u;for(u=0;u/gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.attr("fill",e.fill),"undefined"!=typeof e["class"]&&i.attr("class",e["class"]);var a=i.append("tspan");return a.attr("x",e.x+2*e.textMargin),a.text(r),"undefined"!=typeof i.textwrap&&i.textwrap({x:e.x,y:e.y,width:n,height:1800},e.textMargin),i},n.drawLabel=function(t,e){var r=n.getNoteRect();r.x=e.x,r.y=e.y,r.width=50,r.height=20,r.fill="#526e52",r.stroke="none",r["class"]="labelBox",n.drawRect(t,r),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,e.fill="white",n.drawText(t,e)};var r=-1;n.drawActor=function(t,e,i,a,u){var o=e+u.width/2,s=t.append("g");0===i&&(r++,s.append("line").attr("id","actor"+r).attr("x1",o).attr("y1",5).attr("x2",o).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var c=n.getNoteRect();c.x=e,c.y=i,c.fill="#eaeaea",c.width=u.width,c.height=u.height,c["class"]="actor",c.rx=3,c.ry=3,n.drawRect(s,c),s.append("text").attr("x",o).attr("y",i+u.height/2+5).attr("class","actor").style("text-anchor","middle").text(a)},n.drawLoop=function(t,e,r,i){var a=t.append("g"),u=function(t,e,n,r){a.append("line").attr("x1",t).attr("y1",e).attr("x2",n).attr("y2",r).attr("stroke-width",2).attr("stroke","#526e52").attr("class","loopLine")};u(e.startx,e.starty,e.stopx,e.starty),u(e.stopx,e.starty,e.stopx,e.stopy),u(e.startx,e.stopy,e.stopx,e.stopy),u(e.startx,e.starty,e.startx,e.stopy),"undefined"!=typeof e.elsey&&u(e.startx,e.elsey,e.stopx,e.elsey);var o=n.getTextObj();o.text=r,o.x=e.startx,o.y=e.starty,o.labelMargin=1.5*i.boxMargin,o["class"]="labelText",o.fill="white",n.drawLabel(a,o),o=n.getTextObj(),o.text="[ "+e.title+" ]",o.x=e.startx+(e.stopx-e.startx)/2,o.y=e.starty+1.5*i.boxMargin,o.anchor="middle",o["class"]="loopText",n.drawText(a,o),"undefined"!=typeof e.elseText&&(o.text="[ "+e.elseText+" ]",o.y=e.elsey+1.5*i.boxMargin,n.drawText(a,o))},n.insertArrowHead=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")},n.insertArrowCrossHead=function(t){var e=t.append("defs"),n=e.append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);n.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),n.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},n.getTextObj=function(){var t={x:0,y:0,fill:"black","text-anchor":"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0};return t},n.getNoteRect=function(){var t={x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0};return t}},{}],127:[function(t,e,n){"use strict";function r(t){var e=t.getUTCHours(),n=t.getUTCMinutes(),r=t.getSeconds(),i=t.getMilliseconds();10>e&&(e="0"+e),10>n&&(n="0"+n),10>r&&(r="0"+r),100>i&&(i="0"+i),10>i&&(i="00"+i);var a=e+":"+n+":"+r+" ("+i+")";return a}function i(t){this.level=t,this.log=function(t,e){var n=this.level;return"undefined"==typeof n&&(n=u),e>=n&&"undefined"!=typeof console&&"undefined"!=typeof console.log?console.log("["+r(new Date)+"] "+t):void 0},this.trace=function(t){this.log(t,a.trace)},this.debug=function(t){this.log(t,a.debug)},this.info=function(t){this.log(t,a.info)},this.warn=function(t){this.log(t,a.warn)},this.error=function(t){this.log(t,a.error); + +}}var a={debug:1,info:2,warn:3,error:4,fatal:5,"default":5},u=a.error;n.setLogLevel=function(t){u=t},n.Log=i},{}],128:[function(t,e,n){(function(r){"use strict";var i=t("./logger"),a=new i.Log,u=t("./mermaidAPI"),o=0,s=t("he");e.exports.mermaidAPI=u;var c=function(){var t=u.getConfig();a.debug("Starting rendering diagrams");var e;arguments.length>=2?("undefined"!=typeof arguments[0]&&(r.mermaid.sequenceConfig=arguments[0]),e=arguments[1]):e=arguments[0];var n;"function"==typeof arguments[arguments.length-1]?(n=arguments[arguments.length-1],a.debug("Callback function found")):"undefined"!=typeof t.mermaid&&("function"==typeof t.mermaid.callback?(n=t.mermaid.callback,a.debug("Callback function found")):a.debug("No Callback function found")),e=void 0===e?document.querySelectorAll(".mermaid"):"string"==typeof e?document.querySelectorAll(e):e instanceof Node?[e]:e;var i;"undefined"!=typeof mermaid_config&&u.initialize(r.mermaid_config),a.debug("Start On Load before: "+r.mermaid.startOnLoad),"undefined"!=typeof r.mermaid.startOnLoad&&(a.debug("Start On Load inner: "+r.mermaid.startOnLoad),u.initialize({startOnLoad:r.mermaid.startOnLoad})),"undefined"!=typeof r.mermaid.ganttConfig&&u.initialize({gantt:r.mermaid.ganttConfig});var c,l=function(t,e){h.innerHTML=t,"undefined"!=typeof n&&n(f),e(h)};for(i=0;i0&&(r+=n.selectorText+" { "+n.style.cssText+"}\n")}}catch(l){"undefined"!=typeof n&&i.warn('Invalid CSS selector "'+n.selectorText+'"',l)}var h="",f="";for(var d in e)e.hasOwnProperty(d)&&"undefined"!=typeof d&&("default"===d?(e["default"].styles instanceof Array&&(h+="#"+t.id.trim()+" .node>rect { "+e[d].styles.join("; ")+"; }\n"),e["default"].nodeLabelStyles instanceof Array&&(h+="#"+t.id.trim()+" .node text { "+e[d].nodeLabelStyles.join("; ")+"; }\n"),e["default"].edgeLabelStyles instanceof Array&&(h+="#"+t.id.trim()+" .edgeLabel text { "+e[d].edgeLabelStyles.join("; ")+"; }\n"),e["default"].clusterStyles instanceof Array&&(h+="#"+t.id.trim()+" .cluster rect { "+e[d].clusterStyles.join("; ")+"; }\n")):e[d].styles instanceof Array&&(f+="#"+t.id.trim()+" ."+d+">rect, ."+d+">polygon, ."+d+">ellipse { "+e[d].styles.join("; ")+"; }\n"));if(""!==r||""!==h||""!==f){var p=document.createElement("style");p.setAttribute("type","text/css"),p.setAttribute("title","mermaid-svg-internal-css"),p.innerHTML="/* */\n",t.insertBefore(p,t.firstChild)}};n.cloneCssStyles=u},{"./logger":127}]},{},[128])(128)}); \ No newline at end of file diff --git a/static/mermaid.min.js.map b/static/mermaid.min.js.map new file mode 100644 index 0000000..2f2955b --- /dev/null +++ b/static/mermaid.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://mermaid/webpack/universalModuleDefinition","webpack://mermaid/webpack/bootstrap","webpack://mermaid/./src/themes/dark/index.scss","webpack://mermaid/./src/themes/default/index.scss","webpack://mermaid/./src/themes/forest/index.scss","webpack://mermaid/./src/themes/neutral/index.scss","webpack://mermaid/./node_modules/css-loader/dist/runtime/api.js","webpack://mermaid/./node_modules/path-browserify/index.js","webpack://mermaid/./node_modules/process/browser.js","webpack://mermaid/(webpack)/buildin/module.js","webpack://mermaid/./src/diagrams/class/classDb.js","webpack://mermaid/./src/diagrams/class/classRenderer.js","webpack://mermaid/./src/diagrams/class/parser/classDiagram.js","webpack://mermaid/./src/diagrams/flowchart/flowDb.js","webpack://mermaid/./src/diagrams/flowchart/flowRenderer.js","webpack://mermaid/./src/diagrams/flowchart/parser/flow.js","webpack://mermaid/./src/diagrams/gantt/ganttDb.js","webpack://mermaid/./src/diagrams/gantt/ganttRenderer.js","webpack://mermaid/./src/diagrams/gantt/parser/gantt.js","webpack://mermaid/./src/diagrams/git/gitGraphAst.js","webpack://mermaid/./src/diagrams/git/gitGraphRenderer.js","webpack://mermaid/./src/diagrams/git/parser/gitGraph.js","webpack://mermaid/./src/diagrams/info/infoDb.js","webpack://mermaid/./src/diagrams/info/infoRenderer.js","webpack://mermaid/./src/diagrams/info/parser/info.js","webpack://mermaid/./src/diagrams/sequence/parser/sequenceDiagram.js","webpack://mermaid/./src/diagrams/sequence/sequenceDb.js","webpack://mermaid/./src/diagrams/sequence/sequenceRenderer.js","webpack://mermaid/./src/diagrams/sequence/svgDraw.js","webpack://mermaid/./src/logger.js","webpack://mermaid/./src/mermaid.js","webpack://mermaid/./src/mermaidAPI.js","webpack://mermaid/./src/themes sync ^\\.\\/.*\\/index\\.scss$","webpack://mermaid/./src/themes/dark/index.scss?3bd3","webpack://mermaid/./src/themes/default/index.scss?54ca","webpack://mermaid/./src/themes/forest/index.scss?3c73","webpack://mermaid/./src/themes/neutral/index.scss?dee9","webpack://mermaid/./src/utils.js","webpack://mermaid/external \"d3\"","webpack://mermaid/external \"dagre-d3-renderer\"","webpack://mermaid/external \"dagre-d3-renderer/lib/label/add-html-label.js\"","webpack://mermaid/external \"dagre-layout\"","webpack://mermaid/external \"graphlibrary\"","webpack://mermaid/external \"he\"","webpack://mermaid/external \"lodash\"","webpack://mermaid/external \"moment-mini\"","webpack://mermaid/external \"scope-css\""],"names":["relations","classes","addClass","id","methods","members","clear","getClass","getClasses","getRelations","addRelation","relation","logger","debug","JSON","stringify","id1","id2","push","addMember","className","member","theClass","substr","addMembers","MembersArr","Array","isArray","forEach","cleanupLabel","label","substring","trim","lineType","LINE","DOTTED_LINE","relationType","AGGREGATION","EXTENSION","COMPOSITION","DEPENDENCY","parser","yy","classDb","idCache","classCnt","conf","dividerMargin","padding","textHeight","getGraphId","keys","Object","i","length","undefined","insertMarkers","elem","append","attr","edgeCount","total","drawEdge","path","getRelationType","type","points","filter","p","Number","isNaN","y","lineData","lineFunction","d3","x","d","curve","svgPath","url","arrowMarkerAbsolute","window","location","protocol","host","pathname","search","replace","type1","type2","l","p1","Math","floor","p2","ceil","title","g","text","bounds","node","getBBox","insert","width","height","drawClass","classDef","info","addTspan","textEl","txt","isFirst","tSpan","classInfo","titleHeight","membersLine","membersBox","methodsLine","method","classBox","setConf","cnf","key","draw","parse","diagram","graphlib","Graph","multigraph","setGraph","isMultiGraph","setDefaultEdgeLabel","setNode","setEdge","dagre","layout","nodes","v","edges","e","edge","w","graph","o","k","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","trace","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","console","warn","relationTitle1","relationTitle2","table","defaultActions","parseError","str","hash","recoverable","error","Error","input","self","stack","tstack","vstack","lstack","recovering","TERROR","EOF","args","slice","call","arguments","lexer","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","ranges","options","getPrototypeOf","popStack","n","lex","token","pop","symbol","preErrorSymbol","state","action","a","r","yyval","len","newState","expected","errStr","showPosition","join","match","line","loc","first_line","last_line","first_column","last_column","range","apply","concat","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","lines","unput","split","oldLines","more","reject","backtrack_lexer","less","pastInput","past","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","YYSTATE","Parser","exports","main","commonjsMain","log","process","exit","source","require","readFileSync","normalize","module","argv","vertices","subGraphs","subGraphLookup","tooltips","subCount","direction","funs","addVertex","style","styles","s","addLink","start","end","linktext","stroke","updateLinkInterpolate","positions","interp","pos","defaultInterpolate","interpolate","updateLink","defaultStyle","utils","isSubstringInArray","setDirection","dir","setClass","ids","setTooltip","tooltip","setClickFun","functionName","element","select","on","setLink","linkStr","link","getTooltip","setClickEvent","bindFunctions","fun","getDirection","getVertices","getEdges","setupToolTips","tooltipElem","_groups","svg","selectAll","el","rect","getBoundingClientRect","transition","duration","html","left","right","top","document","body","scrollTop","classed","addSubGraph","list","uniq","prims","objs","item","indexOf","nodeList","subGraph","getPosForId","secCount","posCrossRef","indexNodes2","result","count","posCount","childPos","res","getDepthFirstPos","indexNodes","getSubGraphs","addVertices","vert","svgId","styleFromStyleArr","styleStr","arr","vertex","classStr","vertexText","vertexNode","htmlLabels","addHtmlLabel","parentNode","removeChild","svgLabel","createElementNS","rows","j","tspan","setAttributeNS","setAttribute","textContent","appendChild","radious","_shape","labelType","shape","rx","ry","addEdges","cnt","toString","edgeData","arrowhead","interpolateToCurve","arrowheadStyle","labelpos","flowDb","flow","err","compound","rankdir","marginx","marginy","subG","setParent","Render","dagreD3","render","shapes","question","parent","bbox","h","shapeSvg","map","intersect","point","polygon","rect_left_inv_arrow","rect_right_inv_arrow","arrows","none","normal","marker","util","applyStyle","maxX","minX","maxY","minY","clusterRects","querySelectorAll","clusterEl","xPos","baseVal","value","yPos","cluster","te","labels","dim","insertBefore","firstChild","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","$V71","$V81","$V91","$Va1","$Vb1","$Vc1","$Vd1","$Ve1","dateFormat","axisFormat","excludes","sections","tasks","currentSection","tags","taskCnt","lastTask","lastTaskID","rawTasks","setAxisFormat","getAxisFormat","setDateFormat","setExcludes","toLowerCase","setTitle","getTitle","addSection","getTasks","allItemsPricessed","compileTasks","maxDepth","iterationCount","isInvalidDate","date","isoWeekday","format","checkTaskDates","task","manualEndTime","startTime","moment","add","endTime","renderEndTime","fixTaskDates","toDate","invalid","getStartDate","prevTime","re","afterStatement","exec","findTaskById","dt","Date","setHours","mDate","isValid","getEndDate","durationStatement","parseId","idStr","compileData","prevTask","dataStr","ds","data","getTaskTags","endTimeData","parseData","prevTaskId","startData","taskDb","addTask","descr","rawTask","section","processed","raw","taskInfo","active","crit","milestone","addTaskOrg","newTask","description","compileTask","allProcessed","pushFun","open","functionArgs","argList","charAt","callbackFunction","matchFound","t","pattern","regex","RegExp","shift","ganttDb","titleTopMargin","barHeight","barGap","topPadding","rightPadding","leftPadding","gridLineStartPadding","fontSize","fontFamily","getElementById","parentElement","offsetWidth","useWidth","taskArray","timeScale","domain","rangeRound","categories","catsUnfiltered","checkUnique","makeGant","pageWidth","pageHeight","gap","colorScale","makeGrid","drawRects","vertLabels","drawToday","theArray","theGap","theTopPad","theSidePad","theBarHeight","theColorScale","enter","numberSectionStyles","rectangles","secNum","taskClass","startX","endX","textWidth","taskType","xAxis","tickSize","tickFormat","numOccurances","prevGap","getCount","todayG","today","getCounts","obj","word","commits","head","branches","curBranch","seq","getRandomInt","min","max","random","getId","pool","isfastforwardable","currentCommit","otherCommit","isReachableFrom","currentSeq","otherSeq","setOptions","rawOptString","message","getOptions","commit","msg","branch","name","merge","otherBranch","checkout","reset","commitRef","ref","parentCount","parseInt","upsert","newval","splice","prettyPrintCommitHistory","commitArr","_","maxBy","newCommit","nextCommit","uniqBy","prettyPrint","getCommitsArray","getBranchesAsObjArray","branchArr","getBranches","getCommits","orderBy","getCurrentBranch","getHead","allCommitsDict","branchNum","config","nodeSpacing","nodeFillColor","nodeStrokeWidth","nodeStrokeColor","lineStrokeWidth","branchOffset","lineColor","leftMargin","branchColors","nodeRadius","nodeLabel","apiConfig","svgCreateDefs","svgDrawLine","colorIdx","color","lineGen","round","getElementCoords","coords","ctm","getCTM","xn","yn","f","svgDrawLineForCommits","fromId","toId","fromBbox","toBbox","lineStart","lineEnd","cloneNode","selector","renderCommitHistory","commitid","numCommits","size","branchName","renderLines","branchColor","lineDrawn","ver","gitGraphParser","db","assign","setMessage","getMessage","setInfo","inf","getInfo","infoParser","signalType","LINETYPE","ACTIVE_START","actor","ACTIVE_END","unshift","loopText","LOOP_START","LOOP_END","optText","OPT_START","OPT_END","altText","ALT_START","ALT_END","parText","PAR_START","PAR_END","PAR_AND","ALT_ELSE","placement","PLACEMENT","OVER","LEFTOF","RIGHTOF","from","to","SOLID_OPEN","DOTTED_OPEN","SOLID","DOTTED","SOLID_CROSS","DOTTED_CROSS","actors","messages","notes","addActor","old","addMessage","idFrom","idTo","answer","addSignal","messageType","getMessages","getActors","getActor","getActorKeys","NOTE","ARROWTYPE","FILLED","OPEN","addNote","note","titleText","param","sequenceDb","diagramMarginX","diagramMarginY","actorMargin","actorFontSize","actorFontFamily","boxMargin","boxTextMargin","noteMargin","messageMargin","mirrorActors","bottomMarginAdj","activationWidth","textPlacement","startx","stopx","starty","stopy","verticalPos","sequenceItems","activations","init","updateVal","val","updateBounds","_self","updateFn","updateItemBounds","_startx","_stopx","_starty","_stopy","newActivation","actorRect","stackedSize","actorActivations","anchored","svgDraw","anchorElement","endActivation","lastActorActivationIdx","activation","lastIndexOf","newLoop","endLoop","loop","addSectionToLoop","sectionTitles","getVerticalPos","bumpVerticalPos","bump","getBounds","_drawLongText","textObj","getTextObj","textMargin","dy","class","textElem","drawText","drawNote","forceWidth","getNoteRect","rectElem","drawRect","drawMessage","txtCenter","rightAngles","dx","drawActors","actorKeys","drawActor","actorFlowVerticaBounds","reduce","acc","insertArrowHead","insertArrowCrossHead","activeEnd","activationData","drawActivation","loopData","drawLoop","fromBounds","toBounds","fromIdx","toIdx","allBounds","box","actorLines","useMaxWidth","extraVertForTitle","rectData","fill","textData","nText","anchor","span","drawLabel","txtObject","genPoints","cut","labelMargin","actorCnt","center","_drawTextCandidateFunc","labelText","drawLoopLine","idx","defs","byText","content","textAttrs","_setTextAttrs","byTspan","byFo","toText","fromTextAttrsDict","LEVELS","fatal","setLogLevel","level","bind","time","mermaidAPI","getConfig","mermaid","sequenceConfig","callback","Node","startOnLoad","initialize","ganttConfig","gantt","getAttribute","now","innerHTML","he","decode","svgCode","contentLoaded","addEventListener","themes","themeName","theme","themeCSS","logLevel","flowchart","sequence","git","graphType","detectType","gitGraphAst","flowParser","sequenceParser","ganttParser","classParser","infoDb","encodeEntities","innerTxt","isInt","test","decodeEntities","cb","container","querySelector","flowRenderer","style1","createElement","scope","style2","cs","getComputedStyle","font","gitGraphRenderer","sequenceDiagram","sequenceRenderer","ganttRenderer","classRenderer","infoRenderer","pkg","version","remove","lvl1Keys","lvl2Keys","defaultCurve","curveName","toUpperCase"],"mappings":"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AACA;AACA,qDAAqD,cAAc;AACnE;AACA,C;;;;;;;;;;;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,MAAM;AAChB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,8BAA8B;AAClE;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,oBAAoB;AAC9B;AACA;;AAEA;AACA,UAAU,UAAU;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC/NA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;ACvLtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACpBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAIA,SAAS,GAAG,EAAhB;AACA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,EAAL;AAAQ,mBAAO,CAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO,EAAP;AACR;;AACA,eAAK,EAAL;AAAQ,mBAAO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","file":"mermaid.core.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"mermaid\"] = factory();\n\telse\n\t\troot[\"mermaid\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/mermaid.js\");\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #BDD5EA;\\n stroke: purple;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: lightgrey; }\\n\\n.edgePath .path {\\n stroke: lightgrey;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: #e8e8e8; }\\n\\n.cluster rect {\\n fill: #6D6D65;\\n stroke: rgba(255, 255, 255, 0.25);\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #F9FFFE; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #6D6D65;\\n border: 1px solid rgba(255, 255, 255, 0.25);\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #81B1DB;\\n fill: #BDD5EA; }\\n\\ntext.actor {\\n fill: black;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: lightgrey; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: lightgrey; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: lightgrey; }\\n\\n#arrowhead {\\n fill: lightgrey; }\\n\\n#crosshead path {\\n fill: lightgrey !important;\\n stroke: lightgrey !important; }\\n\\n.messageText {\\n fill: lightgrey;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #81B1DB;\\n fill: #BDD5EA; }\\n\\n.labelText {\\n fill: #323D47;\\n stroke: none; }\\n\\n.loopText {\\n fill: lightgrey;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #81B1DB; }\\n\\n.note {\\n stroke: rgba(255, 255, 255, 0.25);\\n fill: #fff5ad; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: rgba(255, 255, 255, 0.3); }\\n\\n.section2 {\\n fill: #EAE8B9; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle1 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle2 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle3 {\\n fill: #F9FFFE; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: lightgrey;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: #DB5757;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: #323D47;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: #323D47;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: #323D47; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #BDD5EA;\\n stroke: rgba(255, 255, 255, 0.5); }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: lightgrey; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: lightgrey; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #81B1DB;\\n stroke: rgba(255, 255, 255, 0.5); }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: #323D47 !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: grey;\\n fill: lightgrey;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: #323D47 !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #E83737;\\n fill: #E83737;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #E83737;\\n fill: #81B1DB;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #E83737;\\n fill: lightgrey;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: #323D47 !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: #323D47 !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: #323D47; }\\n\\ng.classGroup text {\\n fill: purple;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #BDD5EA;\\n stroke: purple; }\\n\\ng.classGroup line {\\n stroke: purple;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #BDD5EA;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: purple;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: purple;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #BDD5EA;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #BDD5EA;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: purple;\\n stroke: purple;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #ECECFF;\\n stroke: #9370DB;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: #333333; }\\n\\n.edgePath .path {\\n stroke: #333333;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: #e8e8e8; }\\n\\n.cluster rect {\\n fill: #ffffde;\\n stroke: #aaaa33;\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #333; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #ffffde;\\n border: 1px solid #aaaa33;\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #CCCCFF;\\n fill: #ECECFF; }\\n\\ntext.actor {\\n fill: black;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: grey; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n#arrowhead {\\n fill: #333; }\\n\\n#crosshead path {\\n fill: #333 !important;\\n stroke: #333 !important; }\\n\\n.messageText {\\n fill: #333;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #CCCCFF;\\n fill: #ECECFF; }\\n\\n.labelText {\\n fill: black;\\n stroke: none; }\\n\\n.loopText {\\n fill: black;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #CCCCFF; }\\n\\n.note {\\n stroke: #aaaa33;\\n fill: #fff5ad; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: rgba(102, 102, 255, 0.49); }\\n\\n.section2 {\\n fill: #fff400; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #333; }\\n\\n.sectionTitle1 {\\n fill: #333; }\\n\\n.sectionTitle2 {\\n fill: #333; }\\n\\n.sectionTitle3 {\\n fill: #333; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: lightgrey;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: red;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: black;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: black;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: white; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #8a90dd;\\n stroke: #534fbc; }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: black; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: black; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #bfc7ff;\\n stroke: #534fbc; }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: black !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: grey;\\n fill: lightgrey;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: black !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #ff8888;\\n fill: red;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #ff8888;\\n fill: #bfc7ff;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #ff8888;\\n fill: lightgrey;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: black !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: black !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: black; }\\n\\ng.classGroup text {\\n fill: #9370DB;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #ECECFF;\\n stroke: #9370DB; }\\n\\ng.classGroup line {\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #ECECFF;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: #9370DB;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: #9370DB;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #ECECFF;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #ECECFF;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: #9370DB;\\n stroke: #9370DB;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #cde498;\\n stroke: #13540c;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: green; }\\n\\n.edgePath .path {\\n stroke: green;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: #e8e8e8; }\\n\\n.cluster rect {\\n fill: #cdffb2;\\n stroke: #6eaa49;\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #333; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #cdffb2;\\n border: 1px solid #6eaa49;\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #13540c;\\n fill: #cde498; }\\n\\ntext.actor {\\n fill: black;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: grey; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n#arrowhead {\\n fill: #333; }\\n\\n#crosshead path {\\n fill: #333 !important;\\n stroke: #333 !important; }\\n\\n.messageText {\\n fill: #333;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #326932;\\n fill: #cde498; }\\n\\n.labelText {\\n fill: black;\\n stroke: none; }\\n\\n.loopText {\\n fill: black;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #326932; }\\n\\n.note {\\n stroke: #6eaa49;\\n fill: #fff5ad; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: #6eaa49; }\\n\\n.section2 {\\n fill: #6eaa49; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #333; }\\n\\n.sectionTitle1 {\\n fill: #333; }\\n\\n.sectionTitle2 {\\n fill: #333; }\\n\\n.sectionTitle3 {\\n fill: #333; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: lightgrey;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: red;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: black;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: black;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: white; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #487e3a;\\n stroke: #13540c; }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: black; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: black; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #cde498;\\n stroke: #13540c; }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: black !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: grey;\\n fill: lightgrey;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: black !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #ff8888;\\n fill: red;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #ff8888;\\n fill: #cde498;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #ff8888;\\n fill: lightgrey;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: black !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: black !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: black; }\\n\\ng.classGroup text {\\n fill: #13540c;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #cde498;\\n stroke: #13540c; }\\n\\ng.classGroup line {\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #cde498;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: #13540c;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: #13540c;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #cde498;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #cde498;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: #13540c;\\n stroke: #13540c;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"/* Flowchart variables */\\n/* Sequence Diagram variables */\\n/* Gantt chart variables */\\n.label {\\n font-family: 'trebuchet ms', verdana, arial;\\n color: #333; }\\n\\n.node rect,\\n.node circle,\\n.node ellipse,\\n.node polygon {\\n fill: #eee;\\n stroke: #999;\\n stroke-width: 1px; }\\n\\n.node.clickable {\\n cursor: pointer; }\\n\\n.arrowheadPath {\\n fill: #333333; }\\n\\n.edgePath .path {\\n stroke: #666;\\n stroke-width: 1.5px; }\\n\\n.edgeLabel {\\n background-color: white; }\\n\\n.cluster rect {\\n fill: #eaf2fb;\\n stroke: #26a;\\n stroke-width: 1px; }\\n\\n.cluster text {\\n fill: #333; }\\n\\ndiv.mermaidTooltip {\\n position: absolute;\\n text-align: center;\\n max-width: 200px;\\n padding: 2px;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 12px;\\n background: #eaf2fb;\\n border: 1px solid #26a;\\n border-radius: 2px;\\n pointer-events: none;\\n z-index: 100; }\\n\\n.actor {\\n stroke: #999;\\n fill: #eee; }\\n\\ntext.actor {\\n fill: #333;\\n stroke: none; }\\n\\n.actor-line {\\n stroke: #666; }\\n\\n.messageLine0 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n.messageLine1 {\\n stroke-width: 1.5;\\n stroke-dasharray: '2 2';\\n stroke: #333; }\\n\\n#arrowhead {\\n fill: #333; }\\n\\n#crosshead path {\\n fill: #333 !important;\\n stroke: #333 !important; }\\n\\n.messageText {\\n fill: #333;\\n stroke: none; }\\n\\n.labelBox {\\n stroke: #999;\\n fill: #eee; }\\n\\n.labelText {\\n fill: #333;\\n stroke: none; }\\n\\n.loopText {\\n fill: #333;\\n stroke: none; }\\n\\n.loopLine {\\n stroke-width: 2;\\n stroke-dasharray: '2 2';\\n stroke: #999; }\\n\\n.note {\\n stroke: #777700;\\n fill: #ffa; }\\n\\n.noteText {\\n fill: black;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 14px; }\\n\\n.activation0 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation1 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n.activation2 {\\n fill: #f4f4f4;\\n stroke: #666; }\\n\\n/** Section styling */\\n.section {\\n stroke: none;\\n opacity: 0.2; }\\n\\n.section0 {\\n fill: #80b3e6; }\\n\\n.section2 {\\n fill: #80b3e6; }\\n\\n.section1,\\n.section3 {\\n fill: white;\\n opacity: 0.2; }\\n\\n.sectionTitle0 {\\n fill: #333; }\\n\\n.sectionTitle1 {\\n fill: #333; }\\n\\n.sectionTitle2 {\\n fill: #333; }\\n\\n.sectionTitle3 {\\n fill: #333; }\\n\\n.sectionTitle {\\n text-anchor: start;\\n font-size: 11px;\\n text-height: 14px; }\\n\\n/* Grid and axis */\\n.grid .tick {\\n stroke: #e6e6e6;\\n opacity: 0.3;\\n shape-rendering: crispEdges; }\\n\\n.grid path {\\n stroke-width: 0; }\\n\\n/* Today line */\\n.today {\\n fill: none;\\n stroke: #d42;\\n stroke-width: 2px; }\\n\\n/* Task styling */\\n/* Default task */\\n.task {\\n stroke-width: 2; }\\n\\n.taskText {\\n text-anchor: middle;\\n font-size: 11px; }\\n\\n.taskTextOutsideRight {\\n fill: #333;\\n text-anchor: start;\\n font-size: 11px; }\\n\\n.taskTextOutsideLeft {\\n fill: #333;\\n text-anchor: end;\\n font-size: 11px; }\\n\\n/* Special case clickable */\\n.task.clickable {\\n cursor: pointer; }\\n\\n.taskText.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideLeft.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n.taskTextOutsideRight.clickable {\\n cursor: pointer;\\n fill: #003163 !important;\\n font-weight: bold; }\\n\\n/* Specific task settings for the sections*/\\n.taskText0,\\n.taskText1,\\n.taskText2,\\n.taskText3 {\\n fill: white; }\\n\\n.task0,\\n.task1,\\n.task2,\\n.task3 {\\n fill: #26a;\\n stroke: #1a4d80; }\\n\\n.taskTextOutside0,\\n.taskTextOutside2 {\\n fill: #333; }\\n\\n.taskTextOutside1,\\n.taskTextOutside3 {\\n fill: #333; }\\n\\n/* Active task */\\n.active0,\\n.active1,\\n.active2,\\n.active3 {\\n fill: #eee;\\n stroke: #1a4d80; }\\n\\n.activeText0,\\n.activeText1,\\n.activeText2,\\n.activeText3 {\\n fill: #333 !important; }\\n\\n/* Completed task */\\n.done0,\\n.done1,\\n.done2,\\n.done3 {\\n stroke: #666;\\n fill: #bbb;\\n stroke-width: 2; }\\n\\n.doneText0,\\n.doneText1,\\n.doneText2,\\n.doneText3 {\\n fill: #333 !important; }\\n\\n/* Tasks on the critical line */\\n.crit0,\\n.crit1,\\n.crit2,\\n.crit3 {\\n stroke: #b1361b;\\n fill: #d42;\\n stroke-width: 2; }\\n\\n.activeCrit0,\\n.activeCrit1,\\n.activeCrit2,\\n.activeCrit3 {\\n stroke: #b1361b;\\n fill: #eee;\\n stroke-width: 2; }\\n\\n.doneCrit0,\\n.doneCrit1,\\n.doneCrit2,\\n.doneCrit3 {\\n stroke: #b1361b;\\n fill: #bbb;\\n stroke-width: 2;\\n cursor: pointer;\\n shape-rendering: crispEdges; }\\n\\n.milestone {\\n transform: rotate(45deg) scale(0.8, 0.8); }\\n\\n.milestoneText {\\n font-style: italic; }\\n\\n.doneCritText0,\\n.doneCritText1,\\n.doneCritText2,\\n.doneCritText3 {\\n fill: #333 !important; }\\n\\n.activeCritText0,\\n.activeCritText1,\\n.activeCritText2,\\n.activeCritText3 {\\n fill: #333 !important; }\\n\\n.titleText {\\n text-anchor: middle;\\n font-size: 18px;\\n fill: #333; }\\n\\ng.classGroup text {\\n fill: #999;\\n stroke: none;\\n font-family: 'trebuchet ms', verdana, arial;\\n font-size: 10px; }\\n\\ng.classGroup rect {\\n fill: #eee;\\n stroke: #999; }\\n\\ng.classGroup line {\\n stroke: #999;\\n stroke-width: 1; }\\n\\n.classLabel .box {\\n stroke: none;\\n stroke-width: 0;\\n fill: #eee;\\n opacity: 0.5; }\\n\\n.classLabel .label {\\n fill: #999;\\n font-size: 10px; }\\n\\n.relation {\\n stroke: #999;\\n stroke-width: 1;\\n fill: none; }\\n\\n#compositionStart {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#compositionEnd {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#aggregationStart {\\n fill: #eee;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#aggregationEnd {\\n fill: #eee;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#dependencyStart {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#dependencyEnd {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#extensionStart {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n#extensionEnd {\\n fill: #999;\\n stroke: #999;\\n stroke-width: 1; }\\n\\n.commit-id,\\n.commit-msg,\\n.branch-label {\\n fill: lightgrey;\\n color: lightgrey; }\\n\", \"\"]);\n\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // 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\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // 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.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","\nimport { logger } from '../../logger'\n\nlet relations = []\nlet classes = {}\n\n/**\n * Function called by parser when a node definition has been found.\n * @param id\n * @param text\n * @param type\n * @param style\n */\nexport const addClass = function (id) {\n if (typeof classes[id] === 'undefined') {\n classes[id] = {\n id: id,\n methods: [],\n members: []\n }\n }\n}\n\nexport const clear = function () {\n relations = []\n classes = {}\n}\n\nexport const getClass = function (id) {\n return classes[id]\n}\nexport const getClasses = function () {\n return classes\n}\n\nexport const getRelations = function () {\n return relations\n}\n\nexport const addRelation = function (relation) {\n logger.debug('Adding relation: ' + JSON.stringify(relation))\n addClass(relation.id1)\n addClass(relation.id2)\n relations.push(relation)\n}\n\nexport const addMember = function (className, member) {\n const theClass = classes[className]\n if (typeof member === 'string') {\n if (member.substr(-1) === ')') {\n theClass.methods.push(member)\n } else {\n theClass.members.push(member)\n }\n }\n}\n\nexport const addMembers = function (className, MembersArr) {\n if (Array.isArray(MembersArr)) {\n MembersArr.forEach(member => addMember(className, member))\n }\n}\n\nexport const cleanupLabel = function (label) {\n if (label.substring(0, 1) === ':') {\n return label.substr(2).trim()\n } else {\n return label.trim()\n }\n}\n\nexport const lineType = {\n LINE: 0,\n DOTTED_LINE: 1\n}\n\nexport const relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3\n}\n\nexport default {\n addClass,\n clear,\n getClass,\n getClasses,\n getRelations,\n addRelation,\n addMember,\n addMembers,\n cleanupLabel,\n lineType,\n relationType\n}\n","import * as d3 from 'd3'\nimport dagre from 'dagre-layout'\nimport graphlib from 'graphlibrary'\nimport { logger } from '../../logger'\nimport classDb from './classDb'\nimport { parser } from './parser/classDiagram'\n\nparser.yy = classDb\n\nconst idCache = {}\n\nlet classCnt = 0\nconst conf = {\n dividerMargin: 10,\n padding: 5,\n textHeight: 10\n}\n\n// Todo optimize\nconst getGraphId = function (label) {\n const keys = Object.keys(idCache)\n\n for (let i = 0; i < keys.length; i++) {\n if (idCache[keys[i]].label === label) {\n return keys[i]\n }\n }\n\n return undefined\n}\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\nconst insertMarkers = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'extensionStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,7 L18,13 V 1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'extensionEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,1 V 13 L18,7 Z') // this is actual shape for arrowhead\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'compositionStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'compositionEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'aggregationStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'aggregationEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'dependencyStart')\n .attr('class', 'extension')\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z')\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'dependencyEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z')\n}\n\nlet edgeCount = 0\nlet total = 0\nconst drawEdge = function (elem, path, relation) {\n const getRelationType = function (type) {\n switch (type) {\n case classDb.relationType.AGGREGATION:\n return 'aggregation'\n case classDb.relationType.EXTENSION:\n return 'extension'\n case classDb.relationType.COMPOSITION:\n return 'composition'\n case classDb.relationType.DEPENDENCY:\n return 'dependency'\n }\n }\n\n path.points = path.points.filter(p => !Number.isNaN(p.y))\n\n // The data for our line\n const lineData = path.points\n\n // This is the accessor function we talked about above\n const lineFunction = d3\n .line()\n .x(function (d) {\n return d.x\n })\n .y(function (d) {\n return d.y\n })\n .curve(d3.curveBasis)\n\n const svgPath = elem\n .append('path')\n .attr('d', lineFunction(lineData))\n .attr('id', 'edge' + edgeCount)\n .attr('class', 'relation')\n let url = ''\n if (conf.arrowMarkerAbsolute) {\n url =\n window.location.protocol +\n '//' +\n window.location.host +\n window.location.pathname +\n window.location.search\n url = url.replace(/\\(/g, '\\\\(')\n url = url.replace(/\\)/g, '\\\\)')\n }\n\n if (relation.relation.type1 !== 'none') {\n svgPath.attr(\n 'marker-start',\n 'url(' +\n url +\n '#' +\n getRelationType(relation.relation.type1) +\n 'Start' +\n ')'\n )\n }\n if (relation.relation.type2 !== 'none') {\n svgPath.attr(\n 'marker-end',\n 'url(' +\n url +\n '#' +\n getRelationType(relation.relation.type2) +\n 'End' +\n ')'\n )\n }\n\n let x, y\n const l = path.points.length\n if (l % 2 !== 0 && l > 1) {\n const p1 = path.points[Math.floor(l / 2)]\n const p2 = path.points[Math.ceil(l / 2)]\n x = (p1.x + p2.x) / 2\n y = (p1.y + p2.y) / 2\n } else {\n const p = path.points[Math.floor(l / 2)]\n x = p.x\n y = p.y\n }\n\n if (typeof relation.title !== 'undefined') {\n const g = elem.append('g').attr('class', 'classLabel')\n const label = g\n .append('text')\n .attr('class', 'label')\n .attr('x', x)\n .attr('y', y)\n .attr('fill', 'red')\n .attr('text-anchor', 'middle')\n .text(relation.title)\n\n window.label = label\n const bounds = label.node().getBBox()\n\n g.insert('rect', ':first-child')\n .attr('class', 'box')\n .attr('x', bounds.x - conf.padding / 2)\n .attr('y', bounds.y - conf.padding / 2)\n .attr('width', bounds.width + conf.padding)\n .attr('height', bounds.height + conf.padding)\n }\n\n edgeCount++\n}\n\nconst drawClass = function (elem, classDef) {\n logger.info('Rendering class ' + classDef)\n\n const addTspan = function (textEl, txt, isFirst) {\n const tSpan = textEl\n .append('tspan')\n .attr('x', conf.padding)\n .text(txt)\n if (!isFirst) {\n tSpan.attr('dy', conf.textHeight)\n }\n }\n\n const id = 'classId' + (classCnt % total)\n const classInfo = {\n id: id,\n label: classDef.id,\n width: 0,\n height: 0\n }\n\n const g = elem\n .append('g')\n .attr('id', id)\n .attr('class', 'classGroup')\n const title = g\n .append('text')\n .attr('x', conf.padding)\n .attr('y', conf.textHeight + conf.padding)\n .text(classDef.id)\n\n const titleHeight = title.node().getBBox().height\n\n const membersLine = g\n .append('line') // text label for the x axis\n .attr('x1', 0)\n .attr('y1', conf.padding + titleHeight + conf.dividerMargin / 2)\n .attr('y2', conf.padding + titleHeight + conf.dividerMargin / 2)\n\n const members = g\n .append('text') // text label for the x axis\n .attr('x', conf.padding)\n .attr('y', titleHeight + conf.dividerMargin + conf.textHeight)\n .attr('fill', 'white')\n .attr('class', 'classText')\n\n let isFirst = true\n classDef.members.forEach(function (member) {\n addTspan(members, member, isFirst)\n isFirst = false\n })\n\n const membersBox = members.node().getBBox()\n\n const methodsLine = g\n .append('line') // text label for the x axis\n .attr('x1', 0)\n .attr(\n 'y1',\n conf.padding + titleHeight + conf.dividerMargin + membersBox.height\n )\n .attr(\n 'y2',\n conf.padding + titleHeight + conf.dividerMargin + membersBox.height\n )\n\n const methods = g\n .append('text') // text label for the x axis\n .attr('x', conf.padding)\n .attr(\n 'y',\n titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight\n )\n .attr('fill', 'white')\n .attr('class', 'classText')\n\n isFirst = true\n\n classDef.methods.forEach(function (method) {\n addTspan(methods, method, isFirst)\n isFirst = false\n })\n\n const classBox = g.node().getBBox()\n g.insert('rect', ':first-child')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', classBox.width + 2 * conf.padding)\n .attr('height', classBox.height + conf.padding + 0.5 * conf.dividerMargin)\n\n membersLine.attr('x2', classBox.width + 2 * conf.padding)\n methodsLine.attr('x2', classBox.width + 2 * conf.padding)\n\n classInfo.width = classBox.width + 2 * conf.padding\n classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin\n\n idCache[id] = classInfo\n classCnt++\n return classInfo\n}\n\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n parser.yy.clear()\n parser.parse(text)\n\n logger.info('Rendering diagram ' + text)\n\n /// / Fetch the default direction, use TD if none was found\n const diagram = d3.select(`[id='${id}']`)\n insertMarkers(diagram)\n\n // Layout graph, Create a new directed graph\n const g = new graphlib.Graph({\n multigraph: true\n })\n\n // Set an object for the graph label\n g.setGraph({\n isMultiGraph: true\n })\n\n // Default to assigning a new object as a label for each new edge.\n g.setDefaultEdgeLabel(function () {\n return {}\n })\n\n const classes = classDb.getClasses()\n const keys = Object.keys(classes)\n total = keys.length\n for (let i = 0; i < keys.length; i++) {\n const classDef = classes[keys[i]]\n const node = drawClass(diagram, classDef)\n // Add nodes to the graph. The first argument is the node id. The second is\n // metadata about the node. In this case we're going to add labels to each of\n // our nodes.\n g.setNode(node.id, node)\n logger.info('Org height: ' + node.height)\n }\n\n const relations = classDb.getRelations()\n relations.forEach(function (relation) {\n logger.info(\n 'tjoho' +\n getGraphId(relation.id1) +\n getGraphId(relation.id2) +\n JSON.stringify(relation)\n )\n g.setEdge(getGraphId(relation.id1), getGraphId(relation.id2), {\n relation: relation\n })\n })\n dagre.layout(g)\n g.nodes().forEach(function (v) {\n if (typeof v !== 'undefined' && typeof g.node(v) !== 'undefined') {\n logger.debug('Node ' + v + ': ' + JSON.stringify(g.node(v)))\n d3.select('#' + v).attr(\n 'transform',\n 'translate(' +\n (g.node(v).x - g.node(v).width / 2) +\n ',' +\n (g.node(v).y - g.node(v).height / 2) +\n ' )'\n )\n }\n })\n g.edges().forEach(function (e) {\n if (typeof e !== 'undefined' && typeof g.edge(e) !== 'undefined') {\n logger.debug(\n 'Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(g.edge(e))\n )\n drawEdge(diagram, g.edge(e), g.edge(e).relation)\n }\n })\n\n diagram.attr('height', '100%')\n diagram.attr('width', '100%')\n diagram.attr(\n 'viewBox',\n '0 0 ' + (g.graph().width + 20) + ' ' + (g.graph().height + 20)\n )\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,11],$V1=[1,12],$V2=[1,13],$V3=[1,15],$V4=[1,16],$V5=[1,17],$V6=[6,8],$V7=[1,26],$V8=[1,27],$V9=[1,28],$Va=[1,29],$Vb=[1,30],$Vc=[1,31],$Vd=[6,8,13,17,23,26,27,28,29,30,31],$Ve=[6,8,13,17,23,26,27,28,29,30,31,45,46,47],$Vf=[23,45,46,47],$Vg=[23,30,31,45,46,47],$Vh=[23,26,27,28,29,45,46,47],$Vi=[6,8,13],$Vj=[1,46];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"mermaidDoc\":3,\"graphConfig\":4,\"CLASS_DIAGRAM\":5,\"NEWLINE\":6,\"statements\":7,\"EOF\":8,\"statement\":9,\"className\":10,\"alphaNumToken\":11,\"relationStatement\":12,\"LABEL\":13,\"classStatement\":14,\"methodStatement\":15,\"CLASS\":16,\"STRUCT_START\":17,\"members\":18,\"STRUCT_STOP\":19,\"MEMBER\":20,\"SEPARATOR\":21,\"relation\":22,\"STR\":23,\"relationType\":24,\"lineType\":25,\"AGGREGATION\":26,\"EXTENSION\":27,\"COMPOSITION\":28,\"DEPENDENCY\":29,\"LINE\":30,\"DOTTED_LINE\":31,\"commentToken\":32,\"textToken\":33,\"graphCodeTokens\":34,\"textNoTagsToken\":35,\"TAGSTART\":36,\"TAGEND\":37,\"==\":38,\"--\":39,\"PCT\":40,\"DEFAULT\":41,\"SPACE\":42,\"MINUS\":43,\"keywords\":44,\"UNICODE_TEXT\":45,\"NUM\":46,\"ALPHA\":47,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"CLASS_DIAGRAM\",6:\"NEWLINE\",8:\"EOF\",13:\"LABEL\",16:\"CLASS\",17:\"STRUCT_START\",19:\"STRUCT_STOP\",20:\"MEMBER\",21:\"SEPARATOR\",23:\"STR\",26:\"AGGREGATION\",27:\"EXTENSION\",28:\"COMPOSITION\",29:\"DEPENDENCY\",30:\"LINE\",31:\"DOTTED_LINE\",34:\"graphCodeTokens\",36:\"TAGSTART\",37:\"TAGEND\",38:\"==\",39:\"--\",40:\"PCT\",41:\"DEFAULT\",42:\"SPACE\",43:\"MINUS\",44:\"keywords\",45:\"UNICODE_TEXT\",46:\"NUM\",47:\"ALPHA\"},\nproductions_: [0,[3,1],[4,4],[7,1],[7,2],[7,3],[10,2],[10,1],[9,1],[9,2],[9,1],[9,1],[14,2],[14,5],[18,1],[18,2],[15,1],[15,2],[15,1],[15,1],[12,3],[12,4],[12,4],[12,5],[22,3],[22,2],[22,2],[22,1],[24,1],[24,1],[24,1],[24,1],[25,1],[25,1],[32,1],[32,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[35,1],[35,1],[35,1],[35,1],[11,1],[11,1],[11,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 6:\n this.$=$$[$0-1]+$$[$0]; \nbreak;\ncase 7:\n this.$=$$[$0]; \nbreak;\ncase 8:\n yy.addRelation($$[$0]); \nbreak;\ncase 9:\n $$[$0-1].title = yy.cleanupLabel($$[$0]); yy.addRelation($$[$0-1]); \nbreak;\ncase 12:\nyy.addClass($$[$0]);\nbreak;\ncase 13:\n/*console.log($$[$0-3],JSON.stringify($$[$0-1]));*/yy.addClass($$[$0-3]);yy.addMembers($$[$0-3],$$[$0-1]);\nbreak;\ncase 14:\n this.$ = [$$[$0]]; \nbreak;\ncase 15:\n $$[$0].push($$[$0-1]);this.$=$$[$0];\nbreak;\ncase 16:\n/*console.log('Rel found',$$[$0]);*/\nbreak;\ncase 17:\nyy.addMember($$[$0-1],yy.cleanupLabel($$[$0]));\nbreak;\ncase 18:\nconsole.warn('Member',$$[$0]);\nbreak;\ncase 19:\n/*console.log('sep found',$$[$0]);*/\nbreak;\ncase 20:\n this.$ = {'id1':$$[$0-2],'id2':$$[$0], relation:$$[$0-1], relationTitle1:'none', relationTitle2:'none'}; \nbreak;\ncase 21:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-1], relationTitle1:$$[$0-2], relationTitle2:'none'}\nbreak;\ncase 22:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-2], relationTitle1:'none', relationTitle2:$$[$0-1]}; \nbreak;\ncase 23:\n this.$ = {id1:$$[$0-4], id2:$$[$0], relation:$$[$0-2], relationTitle1:$$[$0-3], relationTitle2:$$[$0-1]} \nbreak;\ncase 24:\n this.$={type1:$$[$0-2],type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 25:\n this.$={type1:'none',type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 26:\n this.$={type1:$$[$0-1],type2:'none',lineType:$$[$0]}; \nbreak;\ncase 27:\n this.$={type1:'none',type2:'none',lineType:$$[$0]}; \nbreak;\ncase 28:\n this.$=yy.relationType.AGGREGATION;\nbreak;\ncase 29:\n this.$=yy.relationType.EXTENSION;\nbreak;\ncase 30:\n this.$=yy.relationType.COMPOSITION;\nbreak;\ncase 31:\n this.$=yy.relationType.DEPENDENCY;\nbreak;\ncase 32:\nthis.$=yy.lineType.LINE;\nbreak;\ncase 33:\nthis.$=yy.lineType.DOTTED_LINE;\nbreak;\n}\n},\ntable: [{3:1,4:2,5:[1,3]},{1:[3]},{1:[2,1]},{6:[1,4]},{7:5,9:6,10:10,11:14,12:7,14:8,15:9,16:$V0,20:$V1,21:$V2,45:$V3,46:$V4,47:$V5},{8:[1,18]},{6:[1,19],8:[2,3]},o($V6,[2,8],{13:[1,20]}),o($V6,[2,10]),o($V6,[2,11]),o($V6,[2,16],{22:21,24:24,25:25,13:[1,23],23:[1,22],26:$V7,27:$V8,28:$V9,29:$Va,30:$Vb,31:$Vc}),{10:32,11:14,45:$V3,46:$V4,47:$V5},o($V6,[2,18]),o($V6,[2,19]),o($Vd,[2,7],{11:14,10:33,45:$V3,46:$V4,47:$V5}),o($Ve,[2,47]),o($Ve,[2,48]),o($Ve,[2,49]),{1:[2,2]},{7:34,8:[2,4],9:6,10:10,11:14,12:7,14:8,15:9,16:$V0,20:$V1,21:$V2,45:$V3,46:$V4,47:$V5},o($V6,[2,9]),{10:35,11:14,23:[1,36],45:$V3,46:$V4,47:$V5},{22:37,24:24,25:25,26:$V7,27:$V8,28:$V9,29:$Va,30:$Vb,31:$Vc},o($V6,[2,17]),{25:38,30:$Vb,31:$Vc},o($Vf,[2,27],{24:39,26:$V7,27:$V8,28:$V9,29:$Va}),o($Vg,[2,28]),o($Vg,[2,29]),o($Vg,[2,30]),o($Vg,[2,31]),o($Vh,[2,32]),o($Vh,[2,33]),o($V6,[2,12],{17:[1,40]}),o($Vd,[2,6]),{8:[2,5]},o($Vi,[2,20]),{10:41,11:14,45:$V3,46:$V4,47:$V5},{10:42,11:14,23:[1,43],45:$V3,46:$V4,47:$V5},o($Vf,[2,26],{24:44,26:$V7,27:$V8,28:$V9,29:$Va}),o($Vf,[2,25]),{18:45,20:$Vj},o($Vi,[2,22]),o($Vi,[2,21]),{10:47,11:14,45:$V3,46:$V4,47:$V5},o($Vf,[2,24]),{19:[1,48]},{18:49,19:[2,14],20:$Vj},o($Vi,[2,23]),o($V6,[2,13]),{19:[2,15]}],\ndefaultActions: {2:[2,1],18:[2,2],34:[2,5],49:[2,15]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* do nothing */\nbreak;\ncase 1:return 6;\nbreak;\ncase 2:/* skip whitespace */\nbreak;\ncase 3:return 5;\nbreak;\ncase 4: this.begin(\"struct\"); /*console.log('Starting struct');*/return 17;\nbreak;\ncase 5: /*console.log('Ending struct');*/this.popState(); return 19;\nbreak;\ncase 6:/* nothing */\nbreak;\ncase 7: /*console.log('lex-member: ' + yy_.yytext);*/ return \"MEMBER\";\nbreak;\ncase 8:return 16;\nbreak;\ncase 9:this.begin(\"string\");\nbreak;\ncase 10:this.popState();\nbreak;\ncase 11:return \"STR\";\nbreak;\ncase 12:return 27;\nbreak;\ncase 13:return 27;\nbreak;\ncase 14:return 29;\nbreak;\ncase 15:return 29;\nbreak;\ncase 16:return 28;\nbreak;\ncase 17:return 26;\nbreak;\ncase 18:return 30;\nbreak;\ncase 19:return 31;\nbreak;\ncase 20:return 13;\nbreak;\ncase 21:return 43;\nbreak;\ncase 22:return 'DOT';\nbreak;\ncase 23:return 'PLUS';\nbreak;\ncase 24:return 40;\nbreak;\ncase 25:return 'EQUALS';\nbreak;\ncase 26:return 'EQUALS';\nbreak;\ncase 27:return 47;\nbreak;\ncase 28:return 'PUNCTUATION';\nbreak;\ncase 29:return 46;\nbreak;\ncase 30:return 45;\nbreak;\ncase 31:return 42;\nbreak;\ncase 32:return 8;\nbreak;\n}\n},\nrules: [/^(?:%%[^\\n]*)/,/^(?:\\n+)/,/^(?:\\s+)/,/^(?:classDiagram\\b)/,/^(?:[\\{])/,/^(?:\\})/,/^(?:[\\n])/,/^(?:[^\\{\\}\\n]*)/,/^(?:class\\b)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:\\s*<\\|)/,/^(?:\\s*\\|>)/,/^(?:\\s*>)/,/^(?:\\s*<)/,/^(?:\\s*\\*)/,/^(?:\\s*o\\b)/,/^(?:--)/,/^(?:\\.\\.)/,/^(?::[^#\\n;]+)/,/^(?:-)/,/^(?:\\.)/,/^(?:\\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!\"#$%&'*+,-.`?\\\\_\\/])/,/^(?:[0-9]+)/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"string\":{\"rules\":[10,11],\"inclusive\":false},\"struct\":{\"rules\":[5,6,7],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import * as d3 from 'd3'\n\nimport { logger } from '../../logger'\nimport utils from '../../utils'\n\nlet vertices = {}\nlet edges = []\nlet classes = []\nlet subGraphs = []\nlet subGraphLookup = {}\nlet tooltips = {}\nlet subCount = 0\nlet direction\n// Functions to be run after graph rendering\nlet funs = []\n/**\n * Function called by parser when a node definition has been found\n * @param id\n * @param text\n * @param type\n * @param style\n * @param classes\n */\nexport const addVertex = function (id, text, type, style, classes) {\n let txt\n\n if (typeof id === 'undefined') {\n return\n }\n if (id.trim().length === 0) {\n return\n }\n\n if (typeof vertices[id] === 'undefined') {\n vertices[id] = { id: id, styles: [], classes: [] }\n }\n if (typeof text !== 'undefined') {\n txt = text.trim()\n\n // strip quotes if string starts and exnds with a quote\n if (txt[0] === '\"' && txt[txt.length - 1] === '\"') {\n txt = txt.substring(1, txt.length - 1)\n }\n\n vertices[id].text = txt\n }\n if (typeof type !== 'undefined') {\n vertices[id].type = type\n }\n if (typeof style !== 'undefined') {\n if (style !== null) {\n style.forEach(function (s) {\n vertices[id].styles.push(s)\n })\n }\n }\n if (typeof classes !== 'undefined') {\n if (classes !== null) {\n classes.forEach(function (s) {\n vertices[id].classes.push(s)\n })\n }\n }\n}\n\n/**\n * Function called by parser when a link/edge definition has been found\n * @param start\n * @param end\n * @param type\n * @param linktext\n */\nexport const addLink = function (start, end, type, linktext) {\n logger.info('Got edge...', start, end)\n const edge = { start: start, end: end, type: undefined, text: '' }\n linktext = type.text\n\n if (typeof linktext !== 'undefined') {\n edge.text = linktext.trim()\n\n // strip quotes if string starts and exnds with a quote\n if (edge.text[0] === '\"' && edge.text[edge.text.length - 1] === '\"') {\n edge.text = edge.text.substring(1, edge.text.length - 1)\n }\n }\n\n if (typeof type !== 'undefined') {\n edge.type = type.type\n edge.stroke = type.stroke\n }\n edges.push(edge)\n}\n\n/**\n * Updates a link's line interpolation algorithm\n * @param pos\n * @param interpolate\n */\nexport const updateLinkInterpolate = function (positions, interp) {\n positions.forEach(function (pos) {\n if (pos === 'default') {\n edges.defaultInterpolate = interp\n } else {\n edges[pos].interpolate = interp\n }\n })\n}\n\n/**\n * Updates a link with a style\n * @param pos\n * @param style\n */\nexport const updateLink = function (positions, style) {\n positions.forEach(function (pos) {\n if (pos === 'default') {\n edges.defaultStyle = style\n } else {\n if (utils.isSubstringInArray('fill', style) === -1) {\n style.push('fill:none')\n }\n edges[pos].style = style\n }\n })\n}\n\nexport const addClass = function (id, style) {\n if (typeof classes[id] === 'undefined') {\n classes[id] = { id: id, styles: [] }\n }\n\n if (typeof style !== 'undefined') {\n if (style !== null) {\n style.forEach(function (s) {\n classes[id].styles.push(s)\n })\n }\n }\n}\n\n/**\n * Called by parser when a graph definition is found, stores the direction of the chart.\n * @param dir\n */\nexport const setDirection = function (dir) {\n direction = dir\n}\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n ids.split(',').forEach(function (id) {\n if (typeof vertices[id] !== 'undefined') {\n vertices[id].classes.push(className)\n }\n\n if (typeof subGraphLookup[id] !== 'undefined') {\n subGraphLookup[id].classes.push(className)\n }\n })\n}\n\nconst setTooltip = function (ids, tooltip) {\n ids.split(',').forEach(function (id) {\n if (typeof tooltip !== 'undefined') {\n tooltips[id] = tooltip\n }\n })\n}\n\nconst setClickFun = function (id, functionName) {\n if (typeof functionName === 'undefined') {\n return\n }\n if (typeof vertices[id] !== 'undefined') {\n funs.push(function (element) {\n const elem = d3.select(element).select(`[id=\"${id}\"]`)\n if (elem !== null) {\n elem.on('click', function () {\n window[functionName](id)\n })\n }\n })\n }\n}\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n * @param ids Comma separated list of ids\n * @param linkStr URL to create a link for\n * @param tooltip Tooltip for the clickable element\n */\nexport const setLink = function (ids, linkStr, tooltip) {\n ids.split(',').forEach(function (id) {\n if (typeof vertices[id] !== 'undefined') {\n vertices[id].link = linkStr\n }\n })\n setTooltip(ids, tooltip)\n setClass(ids, 'clickable')\n}\nexport const getTooltip = function (id) {\n return tooltips[id]\n}\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param tooltip Tooltip for the clickable element\n */\nexport const setClickEvent = function (ids, functionName, tooltip) {\n ids.split(',').forEach(function (id) { setClickFun(id, functionName) })\n setTooltip(ids, tooltip)\n setClass(ids, 'clickable')\n}\n\nexport const bindFunctions = function (element) {\n funs.forEach(function (fun) {\n fun(element)\n })\n}\nexport const getDirection = function () {\n return direction\n}\n/**\n * Retrieval function for fetching the found nodes after parsing has completed.\n * @returns {{}|*|vertices}\n */\nexport const getVertices = function () {\n return vertices\n}\n\n/**\n * Retrieval function for fetching the found links after parsing has completed.\n * @returns {{}|*|edges}\n */\nexport const getEdges = function () {\n return edges\n}\n\n/**\n * Retrieval function for fetching the found class definitions after parsing has completed.\n * @returns {{}|*|classes}\n */\nexport const getClasses = function () {\n return classes\n}\n\nconst setupToolTips = function (element) {\n let tooltipElem = d3.select('.mermaidTooltip')\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = d3.select('body')\n .append('div')\n .attr('class', 'mermaidTooltip')\n .style('opacity', 0)\n }\n\n const svg = d3.select(element).select('svg')\n\n const nodes = svg.selectAll('g.node')\n nodes\n .on('mouseover', function () {\n const el = d3.select(this)\n const title = el.attr('title')\n // Dont try to draw a tooltip if no data is provided\n if (title === null) {\n return\n }\n const rect = this.getBoundingClientRect()\n\n tooltipElem.transition()\n .duration(200)\n .style('opacity', '.9')\n tooltipElem.html(el.attr('title'))\n .style('left', (rect.left + (rect.right - rect.left) / 2) + 'px')\n .style('top', (rect.top - 14 + document.body.scrollTop) + 'px')\n el.classed('hover', true)\n })\n .on('mouseout', function () {\n tooltipElem.transition()\n .duration(500)\n .style('opacity', 0)\n const el = d3.select(this)\n el.classed('hover', false)\n })\n}\nfuns.push(setupToolTips)\n\n/**\n * Clears the internal graph db so that a new graph can be parsed.\n */\nexport const clear = function () {\n vertices = {}\n classes = {}\n edges = []\n funs = []\n funs.push(setupToolTips)\n subGraphs = []\n subGraphLookup = {}\n subCount = 0\n tooltips = []\n}\n/**\n *\n * @returns {string}\n */\nexport const defaultStyle = function () {\n return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;'\n}\n\n/**\n * Clears the internal graph db so that a new graph can be parsed.\n */\nexport const addSubGraph = function (id, list, title) {\n function uniq (a) {\n const prims = { 'boolean': {}, 'number': {}, 'string': {} }\n const objs = []\n\n return a.filter(function (item) {\n const type = typeof item\n if (item.trim() === '') {\n return false\n }\n if (type in prims) { return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true) } else { return objs.indexOf(item) >= 0 ? false : objs.push(item) }\n })\n }\n\n let nodeList = []\n\n nodeList = uniq(nodeList.concat.apply(nodeList, list))\n\n id = id || ('subGraph' + subCount)\n title = title || ''\n subCount = subCount + 1\n const subGraph = { id: id, nodes: nodeList, title: title.trim(), classes: [] }\n subGraphs.push(subGraph)\n subGraphLookup[id] = subGraph\n return id\n}\n\nconst getPosForId = function (id) {\n for (let i = 0; i < subGraphs.length; i++) {\n if (subGraphs[i].id === id) {\n return i\n }\n }\n return -1\n}\nlet secCount = -1\nconst posCrossRef = []\nconst indexNodes2 = function (id, pos) {\n const nodes = subGraphs[pos].nodes\n secCount = secCount + 1\n if (secCount > 2000) {\n return\n }\n posCrossRef[secCount] = pos\n // Check if match\n if (subGraphs[pos].id === id) {\n return {\n result: true,\n count: 0\n }\n }\n\n let count = 0\n let posCount = 1\n while (count < nodes.length) {\n const childPos = getPosForId(nodes[count])\n // Ignore regular nodes (pos will be -1)\n if (childPos >= 0) {\n const res = indexNodes2(id, childPos)\n if (res.result) {\n return {\n result: true,\n count: posCount + res.count\n }\n } else {\n posCount = posCount + res.count\n }\n }\n count = count + 1\n }\n\n return {\n result: false,\n count: posCount\n }\n}\n\nexport const getDepthFirstPos = function (pos) {\n return posCrossRef[pos]\n}\nexport const indexNodes = function () {\n secCount = -1\n if (subGraphs.length > 0) {\n indexNodes2('none', subGraphs.length - 1, 0)\n }\n}\n\nexport const getSubGraphs = function () {\n return subGraphs\n}\n\nexport default {\n addVertex,\n addLink,\n updateLinkInterpolate,\n updateLink,\n addClass,\n setDirection,\n setClass,\n getTooltip,\n setClickEvent,\n setLink,\n bindFunctions,\n getDirection,\n getVertices,\n getEdges,\n getClasses,\n clear,\n defaultStyle,\n addSubGraph,\n getDepthFirstPos,\n indexNodes,\n getSubGraphs\n}\n","import graphlib from 'graphlibrary'\nimport * as d3 from 'd3'\n\nimport flowDb from './flowDb'\nimport flow from './parser/flow'\nimport dagreD3 from 'dagre-d3-renderer'\nimport addHtmlLabel from 'dagre-d3-renderer/lib/label/add-html-label.js'\nimport { logger } from '../../logger'\nimport { interpolateToCurve } from '../../utils'\n\nconst conf = {\n}\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n for (let i = 0; i < keys.length; i++) {\n conf[keys[i]] = cnf[keys[i]]\n }\n}\n\n/**\n * Function that adds the vertices found in the graph definition to the graph to be rendered.\n * @param vert Object containing the vertices.\n * @param g The graph that is to be drawn.\n */\nexport const addVertices = function (vert, g, svgId) {\n const svg = d3.select(`[id=\"${svgId}\"]`)\n const keys = Object.keys(vert)\n\n const styleFromStyleArr = function (styleStr, arr) {\n // Create a compound style definition from the style definitions found for the node in the graph definition\n for (let i = 0; i < arr.length; i++) {\n if (typeof arr[i] !== 'undefined') {\n styleStr = styleStr + arr[i] + ';'\n }\n }\n\n return styleStr\n }\n\n // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition\n keys.forEach(function (id) {\n const vertex = vert[id]\n\n /**\n * Variable for storing the classes for the vertex\n * @type {string}\n */\n let classStr = ''\n if (vertex.classes.length > 0) {\n classStr = vertex.classes.join(' ')\n }\n\n /**\n * Variable for storing the extracted style for the vertex\n * @type {string}\n */\n let style = ''\n // Create a compound style definition from the style definitions found for the node in the graph definition\n style = styleFromStyleArr(style, vertex.styles)\n\n // Use vertex id as text in the box if no text is provided by the graph definition\n let vertexText = vertex.text !== undefined ? vertex.text : vertex.id\n\n // We create a SVG label, either by delegating to addHtmlLabel or manually\n let vertexNode\n if (conf.htmlLabels) {\n // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n const node = { label: vertexText.replace(/fa[lrsb]?:fa-[\\w-]+/g, s => ``) }\n vertexNode = addHtmlLabel(svg, node).node()\n vertexNode.parentNode.removeChild(vertexNode)\n } else {\n const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text')\n\n const rows = vertexText.split(//)\n\n for (let j = 0; j < rows.length; j++) {\n const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan')\n tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve')\n tspan.setAttribute('dy', '1em')\n tspan.setAttribute('x', '1')\n tspan.textContent = rows[j]\n svgLabel.appendChild(tspan)\n }\n vertexNode = svgLabel\n }\n\n // If the node has a link, we wrap it in a SVG link\n if (vertex.link) {\n const link = document.createElementNS('http://www.w3.org/2000/svg', 'a')\n link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link)\n link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener')\n link.appendChild(vertexNode)\n vertexNode = link\n }\n\n let radious = 0\n let _shape = ''\n // Set the shape based parameters\n switch (vertex.type) {\n case 'round':\n radious = 5\n _shape = 'rect'\n break\n case 'square':\n _shape = 'rect'\n break\n case 'diamond':\n _shape = 'question'\n break\n case 'odd':\n _shape = 'rect_left_inv_arrow'\n break\n case 'odd_right':\n _shape = 'rect_left_inv_arrow'\n break\n case 'circle':\n _shape = 'circle'\n break\n case 'ellipse':\n _shape = 'ellipse'\n break\n case 'group':\n _shape = 'rect'\n break\n default:\n _shape = 'rect'\n }\n // Add the node\n g.setNode(vertex.id, { labelType: 'svg', shape: _shape, label: vertexNode, rx: radious, ry: radious, 'class': classStr, style: style, id: vertex.id })\n })\n}\n\n/**\n * Add edges to graph based on parsed graph defninition\n * @param {Object} edges The edges to add to the graph\n * @param {Object} g The graph object\n */\nexport const addEdges = function (edges, g) {\n let cnt = 0\n\n let defaultStyle\n if (typeof edges.defaultStyle !== 'undefined') {\n defaultStyle = edges.defaultStyle.toString().replace(/,/g, ';')\n }\n\n edges.forEach(function (edge) {\n cnt++\n const edgeData = {}\n\n // Set link type for rendering\n if (edge.type === 'arrow_open') {\n edgeData.arrowhead = 'none'\n } else {\n edgeData.arrowhead = 'normal'\n }\n\n let style = ''\n if (typeof edge.style !== 'undefined') {\n edge.style.forEach(function (s) {\n style = style + s + ';'\n })\n } else {\n switch (edge.stroke) {\n case 'normal':\n style = 'fill:none'\n if (typeof defaultStyle !== 'undefined') {\n style = defaultStyle\n }\n break\n case 'dotted':\n style = 'stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;'\n break\n case 'thick':\n style = 'stroke: #333; stroke-width: 3.5px;fill:none'\n break\n }\n }\n edgeData.style = style\n\n if (typeof edge.interpolate !== 'undefined') {\n edgeData.curve = interpolateToCurve(edge.interpolate, d3.curveLinear)\n } else if (typeof edges.defaultInterpolate !== 'undefined') {\n edgeData.curve = interpolateToCurve(edges.defaultInterpolate, d3.curveLinear)\n } else {\n edgeData.curve = interpolateToCurve(conf.curve, d3.curveLinear)\n }\n\n if (typeof edge.text === 'undefined') {\n if (typeof edge.style !== 'undefined') {\n edgeData.arrowheadStyle = 'fill: #333'\n }\n } else {\n edgeData.arrowheadStyle = 'fill: #333'\n if (typeof edge.style === 'undefined') {\n edgeData.labelpos = 'c'\n if (conf.htmlLabels) {\n edgeData.labelType = 'html'\n edgeData.label = '' + edge.text + ''\n } else {\n edgeData.labelType = 'text'\n edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none'\n edgeData.label = edge.text.replace(/
/g, '\\n')\n }\n } else {\n edgeData.label = edge.text.replace(/
/g, '\\n')\n }\n }\n // Add the edge to the graph\n g.setEdge(edge.start, edge.end, edgeData, cnt)\n })\n}\n\n/**\n * Returns the all the styles from classDef statements in the graph definition.\n * @returns {object} classDef styles\n */\nexport const getClasses = function (text) {\n flowDb.clear()\n const parser = flow.parser\n parser.yy = flowDb\n\n // Parse the graph definition\n parser.parse(text)\n return flowDb.getClasses()\n}\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n logger.debug('Drawing flowchart')\n flowDb.clear()\n const parser = flow.parser\n parser.yy = flowDb\n\n // Parse the graph definition\n try {\n parser.parse(text)\n } catch (err) {\n logger.debug('Parsing failed')\n }\n\n // Fetch the default direction, use TD if none was found\n let dir = flowDb.getDirection()\n if (typeof dir === 'undefined') {\n dir = 'TD'\n }\n\n // Create the input mermaid.graph\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true\n })\n .setGraph({\n rankdir: dir,\n marginx: 20,\n marginy: 20\n\n })\n .setDefaultEdgeLabel(function () {\n return {}\n })\n\n let subG\n const subGraphs = flowDb.getSubGraphs()\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i]\n flowDb.addVertex(subG.id, subG.title, 'group', undefined, subG.classes)\n }\n\n // Fetch the verices/nodes and edges/links from the parsed graph definition\n const vert = flowDb.getVertices()\n\n const edges = flowDb.getEdges()\n\n let i = 0\n for (i = subGraphs.length - 1; i >= 0; i--) {\n subG = subGraphs[i]\n\n d3.selectAll('cluster').append('text')\n\n for (let j = 0; j < subG.nodes.length; j++) {\n g.setParent(subG.nodes[j], subG.id)\n }\n }\n addVertices(vert, g, id)\n addEdges(edges, g)\n\n // Create the renderer\n const Render = dagreD3.render\n const render = new Render()\n\n // Add custom shape for rhombus type of boc (decision)\n render.shapes().question = function (parent, bbox, node) {\n const w = bbox.width\n const h = bbox.height\n const s = (w + h) * 0.9\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 }\n ]\n const shapeSvg = parent.insert('polygon', ':first-child')\n .attr('points', points.map(function (d) {\n return d.x + ',' + d.y\n }).join(' '))\n .attr('rx', 5)\n .attr('ry', 5)\n .attr('transform', 'translate(' + (-s / 2) + ',' + (s * 2 / 4) + ')')\n node.intersect = function (point) {\n return dagreD3.intersect.polygon(node, points, point)\n }\n return shapeSvg\n }\n\n // Add custom shape for box with inverted arrow on left side\n render.shapes().rect_left_inv_arrow = function (parent, bbox, node) {\n const w = bbox.width\n const h = bbox.height\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 }\n ]\n const shapeSvg = parent.insert('polygon', ':first-child')\n .attr('points', points.map(function (d) {\n return d.x + ',' + d.y\n }).join(' '))\n .attr('transform', 'translate(' + (-w / 2) + ',' + (h * 2 / 4) + ')')\n node.intersect = function (point) {\n return dagreD3.intersect.polygon(node, points, point)\n }\n return shapeSvg\n }\n\n // Add custom shape for box with inverted arrow on right side\n render.shapes().rect_right_inv_arrow = function (parent, bbox, node) {\n const w = bbox.width\n const h = bbox.height\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h }\n ]\n const shapeSvg = parent.insert('polygon', ':first-child')\n .attr('points', points.map(function (d) {\n return d.x + ',' + d.y\n }).join(' '))\n .attr('transform', 'translate(' + (-w / 2) + ',' + (h * 2 / 4) + ')')\n node.intersect = function (point) {\n return dagreD3.intersect.polygon(node, points, point)\n }\n return shapeSvg\n }\n\n // Add our custom arrow - an empty arrowhead\n render.arrows().none = function normal (parent, id, edge, type) {\n const marker = parent.append('marker')\n .attr('id', id)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'strokeWidth')\n .attr('markerWidth', 8)\n .attr('markerHeight', 6)\n .attr('orient', 'auto')\n\n const path = marker.append('path')\n .attr('d', 'M 0 0 L 0 0 L 0 0 z')\n dagreD3.util.applyStyle(path, edge[type + 'Style'])\n }\n\n // Override normal arrowhead defined in d3. Remove style & add class to allow css styling.\n render.arrows().normal = function normal (parent, id, edge, type) {\n const marker = parent.append('marker')\n .attr('id', id)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'strokeWidth')\n .attr('markerWidth', 8)\n .attr('markerHeight', 6)\n .attr('orient', 'auto')\n\n marker.append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n .attr('class', 'arrowheadPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0')\n }\n\n // Set up an SVG group so that we can translate the final graph.\n const svg = d3.select(`[id=\"${id}\"]`)\n\n // Run the renderer. This is what draws the final graph.\n const element = d3.select('#' + id + ' g')\n render(element, g)\n\n element.selectAll('g.node')\n .attr('title', function () {\n return flowDb.getTooltip(this.id)\n })\n\n const padding = 8\n const width = g.maxX - g.minX + padding * 2\n const height = g.maxY - g.minY + padding * 2\n svg.attr('width', '100%')\n svg.attr('style', `max-width: ${width}px;`)\n svg.attr('viewBox', `0 0 ${width} ${height}`)\n svg.select('g').attr('transform', `translate(${padding - g.minX}, ${padding - g.minY})`)\n\n // Index nodes\n flowDb.indexNodes('subGraph' + i)\n\n // reposition labels\n for (i = 0; i < subGraphs.length; i++) {\n subG = subGraphs[i]\n\n if (subG.title !== 'undefined') {\n const clusterRects = document.querySelectorAll('#' + id + ' #' + subG.id + ' rect')\n const clusterEl = document.querySelectorAll('#' + id + ' #' + subG.id)\n\n const xPos = clusterRects[0].x.baseVal.value\n const yPos = clusterRects[0].y.baseVal.value\n const width = clusterRects[0].width.baseVal.value\n const cluster = d3.select(clusterEl[0])\n const te = cluster.select('.label')\n te.attr('transform', `translate(${xPos + width / 2}, ${yPos + 14})`)\n te.attr('id', id + 'Text')\n }\n }\n\n // Add label rects for non html labels\n if (!conf.htmlLabels) {\n const labels = document.querySelectorAll('#' + id + ' .edgeLabel .label')\n for (let k = 0; k < labels.length; k++) {\n const label = labels[k]\n\n // Get dimensions of label\n const dim = label.getBBox()\n\n const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect')\n rect.setAttribute('rx', 0)\n rect.setAttribute('ry', 0)\n rect.setAttribute('width', dim.width)\n rect.setAttribute('height', dim.height)\n rect.setAttribute('style', 'fill:#e8e8e8;')\n\n label.insertBefore(rect, label.firstChild)\n }\n }\n}\n\nexport default {\n setConf,\n addVertices,\n addEdges,\n getClasses,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,3],$V2=[1,5],$V3=[1,8,9,10,11,13,18,30,47,71,72,73,74,75,85,86,89,90,92,93,95,96,97,98,99],$V4=[2,2],$V5=[1,12],$V6=[1,13],$V7=[1,14],$V8=[1,15],$V9=[1,31],$Va=[1,33],$Vb=[1,22],$Vc=[1,34],$Vd=[1,24],$Ve=[1,25],$Vf=[1,26],$Vg=[1,27],$Vh=[1,28],$Vi=[1,38],$Vj=[1,40],$Vk=[1,35],$Vl=[1,39],$Vm=[1,45],$Vn=[1,44],$Vo=[1,36],$Vp=[1,37],$Vq=[1,41],$Vr=[1,42],$Vs=[1,43],$Vt=[1,8,9,10,11,13,18,30,35,47,71,72,73,74,75,85,86,89,90,92,93,95,96,97,98,99],$Vu=[1,53],$Vv=[1,52],$Vw=[1,54],$Vx=[8,9,11],$Vy=[8,9,11,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],$Vz=[1,91],$VA=[8,9,10,11,13,15,18,32,39,41,43,47,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,85,86,89,90,92,93,95,96,97,98,99],$VB=[8,9,10,11,12,13,15,16,17,18,30,32,34,35,39,40,41,42,43,44,47,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,71,72,73,74,75,78,84,85,86,89,90,92,93,95,96,97,98,99],$VC=[1,93],$VD=[1,94],$VE=[8,9,10,11,13,18,30,35,47,71,72,73,74,75,85,86,89,90,92,93,95,96,97,98,99],$VF=[13,18,47,85,86,89,90,92,93,95,96,97,98,99],$VG=[1,118],$VH=[1,126],$VI=[1,127],$VJ=[1,112],$VK=[1,111],$VL=[1,131],$VM=[1,130],$VN=[1,128],$VO=[1,129],$VP=[1,109],$VQ=[1,119],$VR=[1,114],$VS=[1,113],$VT=[1,121],$VU=[1,122],$VV=[1,123],$VW=[1,124],$VX=[1,125],$VY=[1,116],$VZ=[1,115],$V_=[13,18,47,50,66,85,86,89,90,92,93,95,96,97,98,99],$V$=[10,12,13,15,16,17,18,30,34,35,40,42,44,47,51,52,53,54,55,57,58,59,60,61,62,63,64,65,66,71,72,73,74,75,78,84,85,86,89,90,92,93,95,96,97,98,99],$V01=[10,86],$V11=[1,198],$V21=[1,195],$V31=[1,202],$V41=[1,199],$V51=[1,203],$V61=[1,196],$V71=[1,193],$V81=[1,194],$V91=[1,197],$Va1=[1,200],$Vb1=[1,201],$Vc1=[1,224],$Vd1=[8,9,11,86],$Ve1=[8,9,10,11,47,71,80,84,85,86,89,90,91,92,93];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"mermaidDoc\":3,\"graphConfig\":4,\"document\":5,\"line\":6,\"statement\":7,\"SEMI\":8,\"NEWLINE\":9,\"SPACE\":10,\"EOF\":11,\"GRAPH\":12,\"DIR\":13,\"FirstStmtSeperator\":14,\"TAGEND\":15,\"TAGSTART\":16,\"UP\":17,\"DOWN\":18,\"ending\":19,\"endToken\":20,\"spaceList\":21,\"spaceListNewline\":22,\"verticeStatement\":23,\"separator\":24,\"styleStatement\":25,\"linkStyleStatement\":26,\"classDefStatement\":27,\"classStatement\":28,\"clickStatement\":29,\"subgraph\":30,\"alphaNum\":31,\"SQS\":32,\"text\":33,\"SQE\":34,\"end\":35,\"STR\":36,\"vertex\":37,\"link\":38,\"PS\":39,\"PE\":40,\"(-\":41,\"-)\":42,\"DIAMOND_START\":43,\"DIAMOND_STOP\":44,\"alphaNumStatement\":45,\"alphaNumToken\":46,\"MINUS\":47,\"linkStatement\":48,\"arrowText\":49,\"TESTSTR\":50,\"--\":51,\"ARROW_POINT\":52,\"ARROW_CIRCLE\":53,\"ARROW_CROSS\":54,\"ARROW_OPEN\":55,\"-.\":56,\"DOTTED_ARROW_POINT\":57,\"DOTTED_ARROW_CIRCLE\":58,\"DOTTED_ARROW_CROSS\":59,\"DOTTED_ARROW_OPEN\":60,\"==\":61,\"THICK_ARROW_POINT\":62,\"THICK_ARROW_CIRCLE\":63,\"THICK_ARROW_CROSS\":64,\"THICK_ARROW_OPEN\":65,\"PIPE\":66,\"textToken\":67,\"commentText\":68,\"commentToken\":69,\"keywords\":70,\"STYLE\":71,\"LINKSTYLE\":72,\"CLASSDEF\":73,\"CLASS\":74,\"CLICK\":75,\"textNoTags\":76,\"textNoTagsToken\":77,\"DEFAULT\":78,\"stylesOpt\":79,\"HEX\":80,\"numList\":81,\"INTERPOLATE\":82,\"commentStatement\":83,\"PCT\":84,\"NUM\":85,\"COMMA\":86,\"style\":87,\"styleComponent\":88,\"ALPHA\":89,\"COLON\":90,\"UNIT\":91,\"BRKT\":92,\"DOT\":93,\"graphCodeTokens\":94,\"PUNCTUATION\":95,\"UNICODE_TEXT\":96,\"PLUS\":97,\"EQUALS\":98,\"MULT\":99,\"TAG_START\":100,\"TAG_END\":101,\"QUOTE\":102,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",8:\"SEMI\",9:\"NEWLINE\",10:\"SPACE\",11:\"EOF\",12:\"GRAPH\",13:\"DIR\",15:\"TAGEND\",16:\"TAGSTART\",17:\"UP\",18:\"DOWN\",30:\"subgraph\",32:\"SQS\",34:\"SQE\",35:\"end\",36:\"STR\",39:\"PS\",40:\"PE\",41:\"(-\",42:\"-)\",43:\"DIAMOND_START\",44:\"DIAMOND_STOP\",47:\"MINUS\",50:\"TESTSTR\",51:\"--\",52:\"ARROW_POINT\",53:\"ARROW_CIRCLE\",54:\"ARROW_CROSS\",55:\"ARROW_OPEN\",56:\"-.\",57:\"DOTTED_ARROW_POINT\",58:\"DOTTED_ARROW_CIRCLE\",59:\"DOTTED_ARROW_CROSS\",60:\"DOTTED_ARROW_OPEN\",61:\"==\",62:\"THICK_ARROW_POINT\",63:\"THICK_ARROW_CIRCLE\",64:\"THICK_ARROW_CROSS\",65:\"THICK_ARROW_OPEN\",66:\"PIPE\",71:\"STYLE\",72:\"LINKSTYLE\",73:\"CLASSDEF\",74:\"CLASS\",75:\"CLICK\",78:\"DEFAULT\",80:\"HEX\",82:\"INTERPOLATE\",84:\"PCT\",85:\"NUM\",86:\"COMMA\",89:\"ALPHA\",90:\"COLON\",91:\"UNIT\",92:\"BRKT\",93:\"DOT\",95:\"PUNCTUATION\",96:\"UNICODE_TEXT\",97:\"PLUS\",98:\"EQUALS\",99:\"MULT\",100:\"TAG_START\",101:\"TAG_END\",102:\"QUOTE\"},\nproductions_: [0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,4],[4,4],[4,4],[4,4],[4,4],[19,2],[19,1],[20,1],[20,1],[20,1],[14,1],[14,1],[14,2],[22,2],[22,2],[22,1],[22,1],[21,2],[21,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,6],[7,4],[24,1],[24,1],[24,1],[23,3],[23,1],[37,4],[37,5],[37,6],[37,7],[37,4],[37,5],[37,4],[37,5],[37,4],[37,5],[37,4],[37,5],[37,1],[37,2],[31,1],[31,2],[45,1],[45,1],[45,1],[45,1],[38,2],[38,3],[38,3],[38,1],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[38,3],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[48,1],[49,3],[33,1],[33,2],[33,1],[68,1],[68,2],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[76,1],[76,2],[27,5],[27,5],[28,5],[29,5],[29,7],[29,5],[29,7],[25,5],[25,5],[26,5],[26,5],[26,9],[26,9],[26,7],[26,7],[83,3],[81,1],[81,3],[79,1],[79,3],[87,1],[87,2],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[69,1],[69,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[77,1],[77,1],[77,1],[77,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1],[94,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 2:\n this.$ = [];\nbreak;\ncase 3:\n\n\t if($$[$0] !== []){\n\t $$[$0-1].push($$[$0]);\n\t }\n\t this.$=$$[$0-1];\nbreak;\ncase 4: case 59: case 61: case 62: case 94: case 96: case 97: case 110:\nthis.$=$$[$0];\nbreak;\ncase 11:\n yy.setDirection($$[$0-1]);this.$ = $$[$0-1];\nbreak;\ncase 12:\n yy.setDirection(\"LR\");this.$ = $$[$0-1];\nbreak;\ncase 13:\n yy.setDirection(\"RL\");this.$ = $$[$0-1];\nbreak;\ncase 14:\n yy.setDirection(\"BT\");this.$ = $$[$0-1];\nbreak;\ncase 15:\n yy.setDirection(\"TB\");this.$ = $$[$0-1];\nbreak;\ncase 30:\nthis.$=$$[$0-1]\nbreak;\ncase 31: case 32: case 33: case 34: case 35:\nthis.$=[];\nbreak;\ncase 36:\nthis.$=yy.addSubGraph($$[$0-6],$$[$0-1],$$[$0-4]);\nbreak;\ncase 37:\nthis.$=yy.addSubGraph(undefined,$$[$0-1],$$[$0-3]);\nbreak;\ncase 38:\nthis.$=yy.addSubGraph($$[$0-3],$$[$0-1],$$[$0-3]);\nbreak;\ncase 39:\nthis.$=yy.addSubGraph(undefined,$$[$0-1],undefined);\nbreak;\ncase 43:\n yy.addLink($$[$0-2],$$[$0],$$[$0-1]);this.$ = [$$[$0-2],$$[$0]];\nbreak;\ncase 44:\nthis.$ = [$$[$0]];\nbreak;\ncase 45:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square');\nbreak;\ncase 46:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'square');\nbreak;\ncase 47:\nthis.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'circle');\nbreak;\ncase 48:\nthis.$ = $$[$0-6];yy.addVertex($$[$0-6],$$[$0-3],'circle');\nbreak;\ncase 49:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'ellipse');\nbreak;\ncase 50:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'ellipse');\nbreak;\ncase 51:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round');\nbreak;\ncase 52:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'round');\nbreak;\ncase 53:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond');\nbreak;\ncase 54:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'diamond');\nbreak;\ncase 55:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'odd');\nbreak;\ncase 56:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-4],$$[$0-2],'odd');\nbreak;\ncase 57:\nthis.$ = $$[$0];yy.addVertex($$[$0]);\nbreak;\ncase 58:\nthis.$ = $$[$0-1];yy.addVertex($$[$0-1]);\nbreak;\ncase 60: case 95: case 98: case 111:\nthis.$=$$[$0-1]+''+$$[$0];\nbreak;\ncase 63:\nthis.$='v';\nbreak;\ncase 64:\nthis.$='-';\nbreak;\ncase 65:\n$$[$0-1].text = $$[$0];this.$ = $$[$0-1];\nbreak;\ncase 66: case 67:\n$$[$0-2].text = $$[$0-1];this.$ = $$[$0-2];\nbreak;\ncase 68:\nthis.$ = $$[$0];\nbreak;\ncase 69:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 70:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 71:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 72:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"normal\",\"text\":$$[$0-1]};\nbreak;\ncase 73:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 74:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 75:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 76:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"dotted\",\"text\":$$[$0-1]};\nbreak;\ncase 77:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 78:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 79:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 80:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"thick\",\"text\":$$[$0-1]};\nbreak;\ncase 81:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"normal\"};\nbreak;\ncase 82:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"normal\"};\nbreak;\ncase 83:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"normal\"};\nbreak;\ncase 84:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"normal\"};\nbreak;\ncase 85:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"dotted\"};\nbreak;\ncase 86:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"dotted\"};\nbreak;\ncase 87:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"dotted\"};\nbreak;\ncase 88:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"dotted\"};\nbreak;\ncase 89:\nthis.$ = {\"type\":\"arrow\",\"stroke\":\"thick\"};\nbreak;\ncase 90:\nthis.$ = {\"type\":\"arrow_circle\",\"stroke\":\"thick\"};\nbreak;\ncase 91:\nthis.$ = {\"type\":\"arrow_cross\",\"stroke\":\"thick\"};\nbreak;\ncase 92:\nthis.$ = {\"type\":\"arrow_open\",\"stroke\":\"thick\"};\nbreak;\ncase 93:\nthis.$ = $$[$0-1];\nbreak;\ncase 112: case 113:\nthis.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);\nbreak;\ncase 114:\nthis.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]);\nbreak;\ncase 115:\nthis.$ = $$[$0-4];yy.setClickEvent($$[$0-2], $$[$0], undefined);\nbreak;\ncase 116:\nthis.$ = $$[$0-6];yy.setClickEvent($$[$0-4], $$[$0-2], $$[$0]) ;\nbreak;\ncase 117:\nthis.$ = $$[$0-4];yy.setLink($$[$0-2], $$[$0], undefined);\nbreak;\ncase 118:\nthis.$ = $$[$0-6];yy.setLink($$[$0-4], $$[$0-2], $$[$0] );\nbreak;\ncase 119:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]);\nbreak;\ncase 120: case 122:\nthis.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]);\nbreak;\ncase 121:\nthis.$ = $$[$0-4];yy.updateLink([$$[$0-2]],$$[$0]);\nbreak;\ncase 123:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate([$$[$0-6]],$$[$0-2]);yy.updateLink([$$[$0-6]],$$[$0]);\nbreak;\ncase 124:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate($$[$0-6],$$[$0-2]);yy.updateLink($$[$0-6],$$[$0]);\nbreak;\ncase 125:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate([$$[$0-4]],$$[$0]);\nbreak;\ncase 126:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate($$[$0-4],$$[$0]);\nbreak;\ncase 128: case 130:\nthis.$ = [$$[$0]]\nbreak;\ncase 129: case 131:\n$$[$0-2].push($$[$0]);this.$ = $$[$0-2];\nbreak;\ncase 133:\nthis.$ = $$[$0-1] + $$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:2,9:$V0,10:$V1,12:$V2},{1:[3]},o($V3,$V4,{5:6}),{4:7,9:$V0,10:$V1,12:$V2},{4:8,9:$V0,10:$V1,12:$V2},{10:[1,9]},{1:[2,1],6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($V3,[2,9]),o($V3,[2,10]),{13:[1,46],15:[1,47],16:[1,48],17:[1,49],18:[1,50]},o($Vt,[2,3]),o($Vt,[2,4]),o($Vt,[2,5]),o($Vt,[2,6]),o($Vt,[2,7]),o($Vt,[2,8]),{8:$Vu,9:$Vv,11:$Vw,24:51},{8:$Vu,9:$Vv,11:$Vw,24:55},{8:$Vu,9:$Vv,11:$Vw,24:56},{8:$Vu,9:$Vv,11:$Vw,24:57},{8:$Vu,9:$Vv,11:$Vw,24:58},{8:$Vu,9:$Vv,11:$Vw,24:59},{8:$Vu,9:$Vv,10:[1,60],11:$Vw,24:61},o($Vx,[2,44],{38:62,48:63,51:[1,64],52:[1,67],53:[1,68],54:[1,69],55:[1,70],56:[1,65],57:[1,71],58:[1,72],59:[1,73],60:[1,74],61:[1,66],62:[1,75],63:[1,76],64:[1,77],65:[1,78]}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{10:[1,83]},o($Vy,[2,57],{46:32,21:89,45:90,10:$Vz,13:$V9,15:[1,88],18:$Va,32:[1,84],39:[1,85],41:[1,86],43:[1,87],47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($VA,[2,59]),o($VA,[2,61]),o($VA,[2,62]),o($VA,[2,63]),o($VA,[2,64]),o($VB,[2,158]),o($VB,[2,159]),o($VB,[2,160]),o($VB,[2,161]),o($VB,[2,162]),o($VB,[2,163]),o($VB,[2,164]),o($VB,[2,165]),o($VB,[2,166]),o($VB,[2,167]),o($VB,[2,168]),{8:$VC,9:$VD,10:$Vz,14:92,21:95},{8:$VC,9:$VD,10:$Vz,14:96,21:95},{8:$VC,9:$VD,10:$Vz,14:97,21:95},{8:$VC,9:$VD,10:$Vz,14:98,21:95},{8:$VC,9:$VD,10:$Vz,14:99,21:95},o($Vt,[2,30]),o($Vt,[2,40]),o($Vt,[2,41]),o($Vt,[2,42]),o($Vt,[2,31]),o($Vt,[2,32]),o($Vt,[2,33]),o($Vt,[2,34]),o($Vt,[2,35]),{13:$V9,18:$Va,31:100,36:[1,101],45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VE,$V4,{5:102}),{13:$V9,18:$Va,31:29,37:103,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VF,[2,68],{49:104,50:[1,105],66:[1,106]}),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:107,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:132,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:133,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($V_,[2,81]),o($V_,[2,82]),o($V_,[2,83]),o($V_,[2,84]),o($V_,[2,85]),o($V_,[2,86]),o($V_,[2,87]),o($V_,[2,88]),o($V_,[2,89]),o($V_,[2,90]),o($V_,[2,91]),o($V_,[2,92]),{13:$V9,18:$Va,31:134,45:30,46:32,47:$Vc,80:[1,135],85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{78:[1,136],81:137,85:[1,138]},{13:$V9,18:$Va,31:140,45:30,46:32,47:$Vc,78:[1,139],85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:141,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:142,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:143,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:145,35:$VO,36:$VP,39:[1,144],46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:146,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:147,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:148,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,58]),o($VA,[2,60]),o($Vy,[2,29],{21:149,10:$Vz}),o($V3,[2,11]),o($V3,[2,21]),o($V3,[2,22]),{9:[1,150]},o($V3,[2,12]),o($V3,[2,13]),o($V3,[2,14]),o($V3,[2,15]),{8:$Vu,9:$Vv,11:$Vw,13:$V9,18:$Va,24:152,32:[1,151],45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{8:$Vu,9:$Vv,11:$Vw,24:153},{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,154],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vx,[2,43]),o($VF,[2,65],{10:[1,155]}),{10:[1,156]},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:157,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,52:[1,158],53:[1,159],54:[1,160],55:[1,161],61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($V$,[2,94]),o($V$,[2,96]),o($V$,[2,147]),o($V$,[2,148]),o($V$,[2,149]),o($V$,[2,150]),o($V$,[2,151]),o($V$,[2,152]),o($V$,[2,153]),o($V$,[2,154]),o($V$,[2,155]),o($V$,[2,156]),o($V$,[2,157]),o($V$,[2,99]),o($V$,[2,100]),o($V$,[2,101]),o($V$,[2,102]),o($V$,[2,103]),o($V$,[2,104]),o($V$,[2,105]),o($V$,[2,106]),o($V$,[2,107]),o($V$,[2,108]),o($V$,[2,109]),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,57:[1,163],58:[1,164],59:[1,165],60:[1,166],61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,61:$VS,62:[1,167],63:[1,168],64:[1,169],65:[1,170],67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,171],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,172]},{10:[1,173]},{10:[1,174],86:[1,175]},o($V01,[2,128]),{10:[1,176]},{10:[1,177],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,178],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:[1,179],13:$V9,18:$Va,45:90,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,34:[1,180],35:$VO,46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:181,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,40:[1,182],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,42:[1,183],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,44:[1,184],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,34:[1,185],35:$VO,46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,28]),o($V3,[2,23]),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,33:186,35:$VO,36:$VP,46:117,47:$VQ,51:$VR,61:$VS,67:108,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VE,$V4,{5:187}),o($VE,$V4,{5:188}),o($Vt,[2,39]),o($VF,[2,67]),o($VF,[2,66]),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,46:117,47:$VQ,51:$VR,61:$VS,66:[1,189],67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($VF,[2,69]),o($VF,[2,70]),o($VF,[2,71]),o($VF,[2,72]),o($V$,[2,95]),o($VF,[2,73]),o($VF,[2,74]),o($VF,[2,75]),o($VF,[2,76]),o($VF,[2,77]),o($VF,[2,78]),o($VF,[2,79]),o($VF,[2,80]),{10:$V11,47:$V21,71:$V31,79:190,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:204,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:205,80:$V41,82:[1,206],84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:207,80:$V41,82:[1,208],84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{85:[1,209]},{10:$V11,47:$V21,71:$V31,79:210,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:211,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{13:$V9,18:$Va,31:212,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:213,36:[1,214],45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,45],{21:215,10:$Vz}),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,35:$VO,40:[1,216],46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o($Vy,[2,51],{21:217,10:$Vz}),o($Vy,[2,49],{21:218,10:$Vz}),o($Vy,[2,53],{21:219,10:$Vz}),o($Vy,[2,55],{21:220,10:$Vz}),{10:$VG,12:$VH,13:$VI,15:$VJ,16:$VK,17:$VL,18:$VM,30:$VN,34:[1,221],35:$VO,46:117,47:$VQ,51:$VR,61:$VS,67:162,70:120,71:$VT,72:$VU,73:$VV,74:$VW,75:$VX,77:110,78:$VY,84:$VZ,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,222],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,223],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},o([10,13,18,47,85,86,89,90,92,93,95,96,97,98,99],[2,93]),o($Vx,[2,119],{86:$Vc1}),o($Vd1,[2,130],{88:225,10:$V11,47:$V21,71:$V31,80:$V41,84:$V51,85:$V61,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1}),o($Ve1,[2,132]),o($Ve1,[2,134]),o($Ve1,[2,135]),o($Ve1,[2,136]),o($Ve1,[2,137]),o($Ve1,[2,138]),o($Ve1,[2,139]),o($Ve1,[2,140]),o($Ve1,[2,141]),o($Ve1,[2,142]),o($Ve1,[2,143]),o($Ve1,[2,144]),o($Vx,[2,120],{86:$Vc1}),o($Vx,[2,121],{86:$Vc1}),{10:[1,226]},o($Vx,[2,122],{86:$Vc1}),{10:[1,227]},o($V01,[2,129]),o($Vx,[2,112],{86:$Vc1}),o($Vx,[2,113],{86:$Vc1}),o($Vx,[2,114],{46:32,45:90,13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,115],{46:32,45:90,10:[1,228],13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,117],{10:[1,229]}),o($Vy,[2,46]),{40:[1,230]},o($Vy,[2,52]),o($Vy,[2,50]),o($Vy,[2,54]),o($Vy,[2,56]),{8:$Vu,9:$Vv,11:$Vw,24:231},o($Vt,[2,38]),o($Vt,[2,37]),{10:$V11,47:$V21,71:$V31,80:$V41,84:$V51,85:$V61,87:232,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},o($Ve1,[2,133]),{13:$V9,18:$Va,31:233,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{13:$V9,18:$Va,31:234,45:30,46:32,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{36:[1,235]},{36:[1,236]},o($Vy,[2,47],{21:237,10:$Vz}),o($VE,$V4,{5:238}),o($Vd1,[2,131],{88:225,10:$V11,47:$V21,71:$V31,80:$V41,84:$V51,85:$V61,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1}),o($Vx,[2,125],{46:32,45:90,10:[1,239],13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,126],{46:32,45:90,10:[1,240],13:$V9,18:$Va,47:$Vc,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs}),o($Vx,[2,116]),o($Vx,[2,118]),o($Vy,[2,48]),{6:10,7:11,8:$V5,9:$V6,10:$V7,11:$V8,13:$V9,18:$Va,23:16,25:17,26:18,27:19,28:20,29:21,30:$Vb,31:29,35:[1,241],37:23,45:30,46:32,47:$Vc,71:$Vd,72:$Ve,73:$Vf,74:$Vg,75:$Vh,85:$Vi,86:$Vj,89:$Vk,90:$Vl,92:$Vm,93:$Vn,95:$Vo,96:$Vp,97:$Vq,98:$Vr,99:$Vs},{10:$V11,47:$V21,71:$V31,79:242,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},{10:$V11,47:$V21,71:$V31,79:243,80:$V41,84:$V51,85:$V61,87:191,88:192,89:$V71,90:$V81,91:$V91,92:$Va1,93:$Vb1},o($Vt,[2,36]),o($Vx,[2,123],{86:$Vc1}),o($Vx,[2,124],{86:$Vc1})],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* do nothing */\nbreak;\ncase 1:this.begin(\"string\");\nbreak;\ncase 2:this.popState();\nbreak;\ncase 3:return \"STR\";\nbreak;\ncase 4:return 71;\nbreak;\ncase 5:return 78;\nbreak;\ncase 6:return 72;\nbreak;\ncase 7:return 82;\nbreak;\ncase 8:return 73;\nbreak;\ncase 9:return 74;\nbreak;\ncase 10:return 75;\nbreak;\ncase 11:return 12;\nbreak;\ncase 12:return 30;\nbreak;\ncase 13:return 35;\nbreak;\ncase 14:return 13;\nbreak;\ncase 15:return 13;\nbreak;\ncase 16:return 13;\nbreak;\ncase 17:return 13;\nbreak;\ncase 18:return 13;\nbreak;\ncase 19:return 13;\nbreak;\ncase 20:return 85;\nbreak;\ncase 21:return 92;\nbreak;\ncase 22:return 90;\nbreak;\ncase 23:return 8;\nbreak;\ncase 24:return 86;\nbreak;\ncase 25:return 99;\nbreak;\ncase 26:return 16;\nbreak;\ncase 27:return 15;\nbreak;\ncase 28:return 17;\nbreak;\ncase 29:return 18;\nbreak;\ncase 30:return 54;\nbreak;\ncase 31:return 52;\nbreak;\ncase 32:return 53;\nbreak;\ncase 33:return 55;\nbreak;\ncase 34:return 59;\nbreak;\ncase 35:return 57;\nbreak;\ncase 36:return 58;\nbreak;\ncase 37:return 60;\nbreak;\ncase 38:return 59;\nbreak;\ncase 39:return 57;\nbreak;\ncase 40:return 58;\nbreak;\ncase 41:return 60;\nbreak;\ncase 42:return 64;\nbreak;\ncase 43:return 62;\nbreak;\ncase 44:return 63;\nbreak;\ncase 45:return 65;\nbreak;\ncase 46:return 51;\nbreak;\ncase 47:return 56;\nbreak;\ncase 48:return 61;\nbreak;\ncase 49:return 41;\nbreak;\ncase 50:return 42;\nbreak;\ncase 51:return 47;\nbreak;\ncase 52:return 93;\nbreak;\ncase 53:return 97;\nbreak;\ncase 54:return 84;\nbreak;\ncase 55:return 98;\nbreak;\ncase 56:return 98;\nbreak;\ncase 57:return 89;\nbreak;\ncase 58:return 95;\nbreak;\ncase 59:return 96;\nbreak;\ncase 60:return 66;\nbreak;\ncase 61:return 39;\nbreak;\ncase 62:return 40;\nbreak;\ncase 63:return 32;\nbreak;\ncase 64:return 34;\nbreak;\ncase 65:return 43\nbreak;\ncase 66:return 44\nbreak;\ncase 67:return 102;\nbreak;\ncase 68:return 9;\nbreak;\ncase 69:return 10;\nbreak;\ncase 70:return 11;\nbreak;\n}\n},\nrules: [/^(?:%%[^\\n]*)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:style\\b)/,/^(?:default\\b)/,/^(?:linkStyle\\b)/,/^(?:interpolate\\b)/,/^(?:classDef\\b)/,/^(?:class\\b)/,/^(?:click\\b)/,/^(?:graph\\b)/,/^(?:subgraph\\b)/,/^(?:end\\b\\s*)/,/^(?:LR\\b)/,/^(?:RL\\b)/,/^(?:TB\\b)/,/^(?:BT\\b)/,/^(?:TD\\b)/,/^(?:BR\\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\\*)/,/^(?:<)/,/^(?:>)/,/^(?:\\^)/,/^(?:v\\b)/,/^(?:\\s*--[x]\\s*)/,/^(?:\\s*-->\\s*)/,/^(?:\\s*--[o]\\s*)/,/^(?:\\s*---\\s*)/,/^(?:\\s*-\\.-[x]\\s*)/,/^(?:\\s*-\\.->\\s*)/,/^(?:\\s*-\\.-[o]\\s*)/,/^(?:\\s*-\\.-\\s*)/,/^(?:\\s*.-[x]\\s*)/,/^(?:\\s*\\.->\\s*)/,/^(?:\\s*\\.-[o]\\s*)/,/^(?:\\s*\\.-\\s*)/,/^(?:\\s*==[x]\\s*)/,/^(?:\\s*==>\\s*)/,/^(?:\\s*==[o]\\s*)/,/^(?:\\s*==[\\=]\\s*)/,/^(?:\\s*--\\s*)/,/^(?:\\s*-\\.\\s*)/,/^(?:\\s*==\\s*)/,/^(?:\\(-)/,/^(?:-\\))/,/^(?:-)/,/^(?:\\.)/,/^(?:\\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!\"#$%&'*+,-.`?\\\\_\\/])/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\|)/,/^(?:\\()/,/^(?:\\))/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\{)/,/^(?:\\})/,/^(?:\")/,/^(?:\\n+)/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"string\":{\"rules\":[2,3],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import moment from 'moment-mini'\nimport { logger } from '../../logger'\nimport * as d3 from 'd3'\n\nlet dateFormat = ''\nlet axisFormat = ''\nlet excludes = []\nlet title = ''\nlet sections = []\nlet tasks = []\nlet currentSection = ''\nconst tags = ['active', 'done', 'crit', 'milestone']\nlet funs = []\n\nexport const clear = function () {\n sections = []\n tasks = []\n currentSection = ''\n funs = []\n title = ''\n taskCnt = 0\n lastTask = undefined\n lastTaskID = undefined\n rawTasks = []\n}\n\nexport const setAxisFormat = function (txt) {\n axisFormat = txt\n}\n\nexport const getAxisFormat = function () {\n return axisFormat\n}\n\nexport const setDateFormat = function (txt) {\n dateFormat = txt\n}\n\nexport const setExcludes = function (txt) {\n excludes = txt.toLowerCase().split(/[\\s,]+/)\n}\n\nexport const setTitle = function (txt) {\n title = txt\n}\n\nexport const getTitle = function () {\n return title\n}\n\nexport const addSection = function (txt) {\n currentSection = txt\n sections.push(txt)\n}\n\nexport const getTasks = function () {\n let allItemsPricessed = compileTasks()\n const maxDepth = 10\n let iterationCount = 0\n while (!allItemsPricessed && (iterationCount < maxDepth)) {\n allItemsPricessed = compileTasks()\n iterationCount++\n }\n\n tasks = rawTasks\n\n return tasks\n}\n\nconst isInvalidDate = function (date, dateFormat, excludes) {\n if (date.isoWeekday() >= 6 && excludes.indexOf('weekends') >= 0) {\n return true\n }\n if (excludes.indexOf(date.format('dddd').toLowerCase()) >= 0) {\n return true\n }\n return excludes.indexOf(date.format(dateFormat.trim())) >= 0\n}\n\nconst checkTaskDates = function (task, dateFormat, excludes) {\n if (!excludes.length || task.manualEndTime) return\n let startTime = moment(task.startTime, dateFormat, true)\n startTime.add(1, 'd')\n let endTime = moment(task.endTime, dateFormat, true)\n let renderEndTime = fixTaskDates(startTime, endTime, dateFormat, excludes)\n task.endTime = endTime.toDate()\n task.renderEndTime = renderEndTime\n}\n\nconst fixTaskDates = function (startTime, endTime, dateFormat, excludes) {\n let invalid = false\n let renderEndTime = null\n while (startTime.date() <= endTime.date()) {\n if (!invalid) {\n renderEndTime = endTime.toDate()\n }\n invalid = isInvalidDate(startTime, dateFormat, excludes)\n if (invalid) {\n endTime.add(1, 'd')\n }\n startTime.add(1, 'd')\n }\n return renderEndTime\n}\n\nconst getStartDate = function (prevTime, dateFormat, str) {\n str = str.trim()\n\n // Test for after\n const re = /^after\\s+([\\d\\w-]+)/\n const afterStatement = re.exec(str.trim())\n\n if (afterStatement !== null) {\n const task = findTaskById(afterStatement[1])\n\n if (typeof task === 'undefined') {\n const dt = new Date()\n dt.setHours(0, 0, 0, 0)\n return dt\n }\n return task.endTime\n }\n\n // Check for actual date set\n let mDate = moment(str, dateFormat.trim(), true)\n if (mDate.isValid()) {\n return mDate.toDate()\n } else {\n logger.debug('Invalid date:' + str)\n logger.debug('With date format:' + dateFormat.trim())\n }\n\n // Default date - now\n return new Date()\n}\n\nconst getEndDate = function (prevTime, dateFormat, str) {\n str = str.trim()\n\n // Check for actual date\n let mDate = moment(str, dateFormat.trim(), true)\n if (mDate.isValid()) {\n return mDate.toDate()\n }\n\n const d = moment(prevTime)\n // Check for length\n const re = /^([\\d]+)([wdhms])/\n const durationStatement = re.exec(str.trim())\n\n if (durationStatement !== null) {\n switch (durationStatement[2]) {\n case 's':\n d.add(durationStatement[1], 'seconds')\n break\n case 'm':\n d.add(durationStatement[1], 'minutes')\n break\n case 'h':\n d.add(durationStatement[1], 'hours')\n break\n case 'd':\n d.add(durationStatement[1], 'days')\n break\n case 'w':\n d.add(durationStatement[1], 'weeks')\n break\n }\n }\n // Default date - now\n return d.toDate()\n}\n\nlet taskCnt = 0\nconst parseId = function (idStr) {\n if (typeof idStr === 'undefined') {\n taskCnt = taskCnt + 1\n return 'task' + taskCnt\n }\n return idStr\n}\n// id, startDate, endDate\n// id, startDate, length\n// id, after x, endDate\n// id, after x, length\n// startDate, endDate\n// startDate, length\n// after x, endDate\n// after x, length\n// endDate\n// length\n\nconst compileData = function (prevTask, dataStr) {\n let ds\n\n if (dataStr.substr(0, 1) === ':') {\n ds = dataStr.substr(1, dataStr.length)\n } else {\n ds = dataStr\n }\n\n const data = ds.split(',')\n\n const task = {}\n\n // Get tags like active, done, crit and milestone\n getTaskTags(data, task, tags)\n\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim()\n }\n\n let endTimeData = ''\n switch (data.length) {\n case 1:\n task.id = parseId()\n task.startTime = prevTask.endTime\n endTimeData = data[0]\n break\n case 2:\n task.id = parseId()\n task.startTime = getStartDate(undefined, dateFormat, data[0])\n endTimeData = data[1]\n break\n case 3:\n task.id = parseId(data[0])\n task.startTime = getStartDate(undefined, dateFormat, data[1])\n endTimeData = data[2]\n break\n default:\n }\n\n if (endTimeData) {\n task.endTime = getEndDate(task.startTime, dateFormat, endTimeData)\n task.manualEndTime = endTimeData === moment(task.endTime).format(dateFormat.trim())\n checkTaskDates(task, dateFormat, excludes)\n }\n\n return task\n}\n\nconst parseData = function (prevTaskId, dataStr) {\n let ds\n if (dataStr.substr(0, 1) === ':') {\n ds = dataStr.substr(1, dataStr.length)\n } else {\n ds = dataStr\n }\n\n const data = ds.split(',')\n\n const task = {}\n\n // Get tags like active, done, crit and milestone\n getTaskTags(data, task, tags)\n\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim()\n }\n\n switch (data.length) {\n case 1:\n task.id = parseId()\n task.startTime = {\n type: 'prevTaskEnd',\n id: prevTaskId\n }\n task.endTime = {\n data: data[0]\n }\n break\n case 2:\n task.id = parseId()\n task.startTime = {\n type: 'getStartDate',\n startData: data[0]\n }\n task.endTime = {\n data: data[1]\n }\n break\n case 3:\n task.id = parseId(data[0])\n task.startTime = {\n type: 'getStartDate',\n startData: data[1]\n }\n task.endTime = {\n data: data[2]\n }\n break\n default:\n }\n\n return task\n}\n\nlet lastTask\nlet lastTaskID\nlet rawTasks = []\nconst taskDb = {}\nexport const addTask = function (descr, data) {\n const rawTask = {\n section: currentSection,\n type: currentSection,\n processed: false,\n manualEndTime: false,\n renderEndTime: null,\n raw: { data: data },\n task: descr,\n classes: []\n }\n const taskInfo = parseData(lastTaskID, data)\n rawTask.raw.startTime = taskInfo.startTime\n rawTask.raw.endTime = taskInfo.endTime\n rawTask.id = taskInfo.id\n rawTask.prevTaskId = lastTaskID\n rawTask.active = taskInfo.active\n rawTask.done = taskInfo.done\n rawTask.crit = taskInfo.crit\n rawTask.milestone = taskInfo.milestone\n\n const pos = rawTasks.push(rawTask)\n\n lastTaskID = rawTask.id\n // Store cross ref\n taskDb[rawTask.id] = pos - 1\n}\n\nexport const findTaskById = function (id) {\n const pos = taskDb[id]\n return rawTasks[pos]\n}\n\nexport const addTaskOrg = function (descr, data) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: []\n }\n const taskInfo = compileData(lastTask, data)\n newTask.startTime = taskInfo.startTime\n newTask.endTime = taskInfo.endTime\n newTask.id = taskInfo.id\n newTask.active = taskInfo.active\n newTask.done = taskInfo.done\n newTask.crit = taskInfo.crit\n newTask.milestone = taskInfo.milestone\n lastTask = newTask\n tasks.push(newTask)\n}\n\nconst compileTasks = function () {\n const compileTask = function (pos) {\n const task = rawTasks[pos]\n let startTime = ''\n switch (rawTasks[pos].raw.startTime.type) {\n case 'prevTaskEnd':\n const prevTask = findTaskById(task.prevTaskId)\n task.startTime = prevTask.endTime\n break\n case 'getStartDate':\n startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData)\n if (startTime) {\n rawTasks[pos].startTime = startTime\n }\n break\n }\n\n if (rawTasks[pos].startTime) {\n rawTasks[pos].endTime = getEndDate(rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data)\n if (rawTasks[pos].endTime) {\n rawTasks[pos].processed = true\n rawTasks[pos].manualEndTime = rawTasks[pos].raw.endTime.data === moment(rawTasks[pos].endTime).format(dateFormat.trim())\n checkTaskDates(rawTasks[pos], dateFormat, excludes)\n }\n }\n\n return rawTasks[pos].processed\n }\n\n let allProcessed = true\n for (let i = 0; i < rawTasks.length; i++) {\n compileTask(i)\n\n allProcessed = allProcessed && rawTasks[i].processed\n }\n return allProcessed\n}\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n * @param ids Comma separated list of ids\n * @param linkStr URL to create a link for\n */\nexport const setLink = function (ids, linkStr) {\n ids.split(',').forEach(function (id) {\n let rawTask = findTaskById(id)\n if (typeof rawTask !== 'undefined') {\n pushFun(id, () => { window.open(linkStr, '_self') })\n }\n })\n setClass(ids, 'clickable')\n}\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n ids.split(',').forEach(function (id) {\n let rawTask = findTaskById(id)\n if (typeof rawTask !== 'undefined') {\n rawTask.classes.push(className)\n }\n })\n}\n\nconst setClickFun = function (id, functionName, functionArgs) {\n if (typeof functionName === 'undefined') {\n return\n }\n\n let argList = []\n if (typeof functionArgs === 'string') {\n /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/)\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim()\n /* Removes all double quotes at the start and end of an argument */\n /* This preserves all starting and ending whitespace inside */\n if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n item = item.substr(1, item.length - 2)\n }\n argList[i] = item\n }\n }\n\n let rawTask = findTaskById(id)\n if (typeof rawTask !== 'undefined') {\n pushFun(id, () => { window[functionName](...argList) })\n }\n}\n\n/**\n * The callbackFunction is executed in a click event bound to the task with the specified id or the task's assigned text\n * @param id The task's id\n * @param callbackFunction A function to be executed when clicked on the task or the task's text\n */\nconst pushFun = function (id, callbackFunction) {\n funs.push(function (element) {\n const elem = d3.select(element).select(`[id=\"${id}\"]`)\n if (elem !== null) {\n elem.on('click', function () {\n callbackFunction()\n })\n }\n })\n funs.push(function (element) {\n const elem = d3.select(element).select(`[id=\"${id}-text\"]`)\n if (elem !== null) {\n elem.on('click', function () {\n callbackFunction()\n })\n }\n })\n}\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param functionArgs Function args the function should be called with\n */\nexport const setClickEvent = function (ids, functionName, functionArgs) {\n ids.split(',').forEach(function (id) {\n setClickFun(id, functionName, functionArgs)\n })\n setClass(ids, 'clickable')\n}\n\n/**\n * Binds all functions previously added to fun (specified through click) to the element\n * @param element\n */\nexport const bindFunctions = function (element) {\n funs.forEach(function (fun) {\n fun(element)\n })\n}\n\nexport default {\n clear,\n setDateFormat,\n setAxisFormat,\n getAxisFormat,\n setTitle,\n getTitle,\n addSection,\n getTasks,\n addTask,\n findTaskById,\n addTaskOrg,\n setExcludes,\n setClickEvent,\n setLink,\n bindFunctions\n}\n\nfunction getTaskTags (data, task, tags) {\n let matchFound = true\n while (matchFound) {\n matchFound = false\n tags.forEach(function (t) {\n const pattern = '^\\\\s*' + t + '\\\\s*$'\n const regex = new RegExp(pattern)\n if (data[0].match(regex)) {\n task[t] = true\n data.shift(1)\n matchFound = true\n }\n })\n }\n}\n","import * as d3 from 'd3'\n\nimport { parser } from './parser/gantt'\nimport ganttDb from './ganttDb'\n\nparser.yy = ganttDb\n\nconst conf = {\n titleTopMargin: 25,\n barHeight: 20,\n barGap: 4,\n topPadding: 50,\n rightPadding: 75,\n leftPadding: 75,\n gridLineStartPadding: 35,\n fontSize: 11,\n fontFamily: '\"Open-Sans\", \"sans-serif\"'\n}\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\nlet w\nexport const draw = function (text, id) {\n parser.yy.clear()\n parser.parse(text)\n\n const elem = document.getElementById(id)\n w = elem.parentElement.offsetWidth\n\n if (typeof w === 'undefined') {\n w = 1200\n }\n\n if (typeof conf.useWidth !== 'undefined') {\n w = conf.useWidth\n }\n\n const taskArray = parser.yy.getTasks()\n\n // Set height based on number of tasks\n const h = taskArray.length * (conf.barHeight + conf.barGap) + 2 * conf.topPadding\n\n elem.setAttribute('height', '100%')\n // Set viewBox\n elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h)\n const svg = d3.select(`[id=\"${id}\"]`)\n\n // Set timescale\n const timeScale = d3.scaleTime()\n .domain([d3.min(taskArray, function (d) {\n return d.startTime\n }),\n d3.max(taskArray, function (d) {\n return d.endTime\n })])\n .rangeRound([0, w - conf.leftPadding - conf.rightPadding])\n\n let categories = []\n\n for (let i = 0; i < taskArray.length; i++) {\n categories.push(taskArray[i].type)\n }\n\n const catsUnfiltered = categories // for vert labels\n\n categories = checkUnique(categories)\n\n makeGant(taskArray, w, h)\n if (typeof conf.useWidth !== 'undefined') {\n elem.setAttribute('width', w)\n }\n\n svg.append('text')\n .text(parser.yy.getTitle())\n .attr('x', w / 2)\n .attr('y', conf.titleTopMargin)\n .attr('class', 'titleText')\n\n function makeGant (tasks, pageWidth, pageHeight) {\n const barHeight = conf.barHeight\n const gap = barHeight + conf.barGap\n const topPadding = conf.topPadding\n const leftPadding = conf.leftPadding\n\n const colorScale = d3.scaleLinear()\n .domain([0, categories.length])\n .range(['#00B9FA', '#F95002'])\n .interpolate(d3.interpolateHcl)\n\n makeGrid(leftPadding, topPadding, pageWidth, pageHeight)\n drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight)\n vertLabels(gap, topPadding, leftPadding, barHeight, colorScale)\n drawToday(leftPadding, topPadding, pageWidth, pageHeight)\n }\n\n function drawRects (theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w, h) {\n // Draw background rects covering the entire width of the graph, these form the section rows.\n svg.append('g')\n .selectAll('rect')\n .data(theArray)\n .enter()\n .append('rect')\n .attr('x', 0)\n .attr('y', function (d, i) {\n return i * theGap + theTopPad - 2\n })\n .attr('width', function () {\n return w - conf.rightPadding / 2\n })\n .attr('height', theGap)\n .attr('class', function (d) {\n for (let i = 0; i < categories.length; i++) {\n if (d.type === categories[i]) {\n return 'section section' + (i % conf.numberSectionStyles)\n }\n }\n return 'section section0'\n })\n\n // Draw the rects representing the tasks\n const rectangles = svg.append('g')\n .selectAll('rect')\n .data(theArray)\n .enter()\n\n rectangles.append('rect')\n .attr('id', function (d) { return d.id })\n .attr('rx', 3)\n .attr('ry', 3)\n .attr('x', function (d) {\n if (d.milestone) {\n return timeScale(d.startTime) + theSidePad + (0.5 * (timeScale(d.endTime) - timeScale(d.startTime))) - (0.5 * theBarHeight)\n }\n return timeScale(d.startTime) + theSidePad\n })\n .attr('y', function (d, i) {\n return i * theGap + theTopPad\n })\n .attr('width', function (d) {\n if (d.milestone) {\n return theBarHeight\n }\n return (timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime))\n })\n .attr('height', theBarHeight)\n .attr('transform-origin', function (d, i) {\n return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + 'px ' + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + 'px'\n })\n .attr('class', function (d) {\n const res = 'task'\n\n let classStr = ''\n if (d.classes.length > 0) {\n classStr = d.classes.join(' ')\n }\n\n let secNum = 0\n for (let i = 0; i < categories.length; i++) {\n if (d.type === categories[i]) {\n secNum = (i % conf.numberSectionStyles)\n }\n }\n\n let taskClass = ''\n if (d.active) {\n if (d.crit) {\n taskClass += ' activeCrit'\n } else {\n taskClass = ' active'\n }\n } else if (d.done) {\n if (d.crit) {\n taskClass = ' doneCrit'\n } else {\n taskClass = ' done'\n }\n } else {\n if (d.crit) {\n taskClass += ' crit'\n }\n }\n\n if (taskClass.length === 0) {\n taskClass = ' task'\n }\n\n if (d.milestone) {\n taskClass = ' milestone ' + taskClass\n }\n\n taskClass += secNum\n\n taskClass += ' ' + classStr\n\n return res + taskClass\n })\n\n // Append task labels\n rectangles.append('text')\n .text(function (d) {\n return d.task\n })\n .attr('font-size', conf.fontSize)\n .attr('x', function (d) {\n let startX = timeScale(d.startTime)\n let endX = timeScale(d.renderEndTime || d.endTime)\n if (d.milestone) {\n startX += (0.5 * (timeScale(d.endTime) - timeScale(d.startTime))) - (0.5 * theBarHeight)\n }\n if (d.milestone) {\n endX = startX + theBarHeight\n }\n const textWidth = this.getBBox().width\n\n // Check id text width > width of rectangle\n if (textWidth > (endX - startX)) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n return startX + theSidePad - 5\n } else {\n return endX + theSidePad + 5\n }\n } else {\n return (endX - startX) / 2 + startX + theSidePad\n }\n })\n .attr('y', function (d, i) {\n return i * theGap + (conf.barHeight / 2) + (conf.fontSize / 2 - 2) + theTopPad\n })\n .attr('text-height', theBarHeight)\n .attr('class', function (d) {\n const startX = timeScale(d.startTime)\n let endX = timeScale(d.endTime)\n if (d.milestone) {\n endX = startX + theBarHeight\n }\n const textWidth = this.getBBox().width\n\n let classStr = ''\n if (d.classes.length > 0) {\n classStr = d.classes.join(' ')\n }\n\n let secNum = 0\n for (let i = 0; i < categories.length; i++) {\n if (d.type === categories[i]) {\n secNum = (i % conf.numberSectionStyles)\n }\n }\n\n let taskType = ''\n if (d.active) {\n if (d.crit) {\n taskType = 'activeCritText' + secNum\n } else {\n taskType = 'activeText' + secNum\n }\n }\n\n if (d.done) {\n if (d.crit) {\n taskType = taskType + ' doneCritText' + secNum\n } else {\n taskType = taskType + ' doneText' + secNum\n }\n } else {\n if (d.crit) {\n taskType = taskType + ' critText' + secNum\n }\n }\n\n if (d.milestone) {\n taskType += ' milestoneText'\n }\n\n // Check id text width > width of rectangle\n if (textWidth > (endX - startX)) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n return classStr + ' taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType\n } else {\n return classStr + ' taskTextOutsideRight taskTextOutside' + secNum + ' ' + taskType\n }\n } else {\n return classStr + ' taskText taskText' + secNum + ' ' + taskType\n }\n })\n }\n\n function makeGrid (theSidePad, theTopPad, w, h) {\n let xAxis = d3.axisBottom(timeScale)\n .tickSize(-h + theTopPad + conf.gridLineStartPadding)\n .tickFormat(d3.timeFormat(parser.yy.getAxisFormat() || conf.axisFormat || '%Y-%m-%d'))\n\n svg.append('g')\n .attr('class', 'grid')\n .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')')\n .call(xAxis)\n .selectAll('text')\n .style('text-anchor', 'middle')\n .attr('fill', '#000')\n .attr('stroke', 'none')\n .attr('font-size', 10)\n .attr('dy', '1em')\n }\n\n function vertLabels (theGap, theTopPad) {\n const numOccurances = []\n let prevGap = 0\n\n for (let i = 0; i < categories.length; i++) {\n numOccurances[i] = [categories[i], getCount(categories[i], catsUnfiltered)]\n }\n\n svg.append('g') // without doing this, impossible to put grid lines behind text\n .selectAll('text')\n .data(numOccurances)\n .enter()\n .append('text')\n .text(function (d) {\n return d[0]\n })\n .attr('x', 10)\n .attr('y', function (d, i) {\n if (i > 0) {\n for (let j = 0; j < i; j++) {\n prevGap += numOccurances[i - 1][1]\n return d[1] * theGap / 2 + prevGap * theGap + theTopPad\n }\n } else {\n return d[1] * theGap / 2 + theTopPad\n }\n })\n .attr('class', function (d) {\n for (let i = 0; i < categories.length; i++) {\n if (d[0] === categories[i]) {\n return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles)\n }\n }\n return 'sectionTitle'\n })\n }\n\n function drawToday (theSidePad, theTopPad, w, h) {\n const todayG = svg.append('g')\n .attr('class', 'today')\n\n const today = new Date()\n\n todayG.append('line')\n .attr('x1', timeScale(today) + theSidePad)\n .attr('x2', timeScale(today) + theSidePad)\n .attr('y1', conf.titleTopMargin)\n .attr('y2', h - conf.titleTopMargin)\n .attr('class', 'today')\n }\n\n // from this stackexchange question: http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript\n function checkUnique (arr) {\n const hash = {}\n const result = []\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (!hash.hasOwnProperty(arr[i])) { // it works with objects! in FF, at least\n hash[arr[i]] = true\n result.push(arr[i])\n }\n }\n return result\n }\n\n // from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array\n function getCounts (arr) {\n let i = arr.length // const to loop over\n const obj = {} // obj to store results\n while (i) {\n obj[arr[--i]] = (obj[arr[i]] || 0) + 1 // count occurrences\n }\n return obj\n }\n\n // get specific from everything\n function getCount (word, arr) {\n return getCounts(arr)[word] || 0\n }\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,12,13,14,15,17,19],$V1=[1,9],$V2=[1,10],$V3=[1,11],$V4=[1,12],$V5=[1,13],$V6=[1,15],$V7=[1,16];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"gantt\":4,\"document\":5,\"EOF\":6,\"line\":7,\"SPACE\":8,\"statement\":9,\"NL\":10,\"dateFormat\":11,\"axisFormat\":12,\"excludes\":13,\"title\":14,\"section\":15,\"clickStatement\":16,\"taskTxt\":17,\"taskData\":18,\"click\":19,\"callbackname\":20,\"callbackargs\":21,\"href\":22,\"clickStatementDebug\":23,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"gantt\",6:\"EOF\",8:\"SPACE\",10:\"NL\",11:\"dateFormat\",12:\"axisFormat\",13:\"excludes\",14:\"title\",15:\"section\",17:\"taskTxt\",18:\"taskData\",19:\"click\",20:\"callbackname\",21:\"callbackargs\",22:\"href\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[16,2],[16,3],[16,3],[16,4],[16,3],[16,4],[16,2],[23,2],[23,3],[23,3],[23,4],[23,3],[23,4],[23,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 2:\n this.$ = [] \nbreak;\ncase 3:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 4: case 5:\n this.$ = $$[$0] \nbreak;\ncase 6: case 7:\n this.$=[];\nbreak;\ncase 8:\nyy.setDateFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 9:\nyy.setAxisFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 10:\nyy.setExcludes($$[$0].substr(9));this.$=$$[$0].substr(9);\nbreak;\ncase 11:\nyy.setTitle($$[$0].substr(6));this.$=$$[$0].substr(6);\nbreak;\ncase 12:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 14:\nyy.addTask($$[$0-1],$$[$0]);this.$='task';\nbreak;\ncase 15:\nthis.$ = $$[$0-1];yy.setClickEvent($$[$0-1], $$[$0], null);\nbreak;\ncase 16:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 17:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], null);yy.setLink($$[$0-2],$$[$0]);\nbreak;\ncase 18:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-2], $$[$0-1]);yy.setLink($$[$0-3],$$[$0]);\nbreak;\ncase 19:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0], null);yy.setLink($$[$0-2],$$[$0-1]);\nbreak;\ncase 20:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-1], $$[$0]);yy.setLink($$[$0-3],$$[$0-2]);\nbreak;\ncase 21:\nthis.$ = $$[$0-1];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 22: case 28:\nthis.$=$$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 23: case 24: case 26:\nthis.$=$$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 25: case 27:\nthis.$=$$[$0-3] + ' ' + $$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:14,17:$V6,19:$V7},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:17,11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:14,17:$V6,19:$V7},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,8]),o($V0,[2,9]),o($V0,[2,10]),o($V0,[2,11]),o($V0,[2,12]),o($V0,[2,13]),{18:[1,18]},{20:[1,19],22:[1,20]},o($V0,[2,4]),o($V0,[2,14]),o($V0,[2,15],{21:[1,21],22:[1,22]}),o($V0,[2,21],{20:[1,23]}),o($V0,[2,16],{22:[1,24]}),o($V0,[2,17]),o($V0,[2,19],{21:[1,25]}),o($V0,[2,18]),o($V0,[2,20])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 10;\nbreak;\ncase 1:/* skip whitespace */\nbreak;\ncase 2:/* skip comments */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:this.begin(\"href\");\nbreak;\ncase 5:this.popState();\nbreak;\ncase 6:return 22;\nbreak;\ncase 7:this.begin(\"callbackname\");\nbreak;\ncase 8:this.popState();\nbreak;\ncase 9:this.popState(); this.begin(\"callbackargs\");\nbreak;\ncase 10:return 20;\nbreak;\ncase 11:this.popState();\nbreak;\ncase 12:return 21;\nbreak;\ncase 13:this.begin(\"click\");\nbreak;\ncase 14:this.popState();\nbreak;\ncase 15:return 19;\nbreak;\ncase 16:return 4;\nbreak;\ncase 17:return 11;\nbreak;\ncase 18:return 12;\nbreak;\ncase 19:return 13;\nbreak;\ncase 20:return 'date';\nbreak;\ncase 21:return 14;\nbreak;\ncase 22:return 15;\nbreak;\ncase 23:return 17;\nbreak;\ncase 24:return 18;\nbreak;\ncase 25:return ':';\nbreak;\ncase 26:return 6;\nbreak;\ncase 27:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:href[\\s]+[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:call[\\s]+)/i,/^(?:\\([\\s]*\\))/i,/^(?:\\()/i,/^(?:[^(]*)/i,/^(?:\\))/i,/^(?:[^)]*)/i,/^(?:click[\\s]+)/i,/^(?:[\\s\\n])/i,/^(?:[^\\s\\n]*)/i,/^(?:gantt\\b)/i,/^(?:dateFormat\\s[^#\\n;]+)/i,/^(?:axisFormat\\s[^#\\n;]+)/i,/^(?:excludes\\s[^#\\n;]+)/i,/^(?:\\d\\d\\d\\d-\\d\\d-\\d\\d\\b)/i,/^(?:title\\s[^#\\n;]+)/i,/^(?:section\\s[^#:\\n;]+)/i,/^(?:[^#:\\n;]+)/i,/^(?::[^#\\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"callbackargs\":{\"rules\":[11,12],\"inclusive\":false},\"callbackname\":{\"rules\":[8,9,10],\"inclusive\":false},\"href\":{\"rules\":[5,6],\"inclusive\":false},\"click\":{\"rules\":[14,15],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,7,13,16,17,18,19,20,21,22,23,24,25,26,27],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import _ from 'lodash'\n\nimport { logger } from '../../logger'\n\nlet commits = {}\nlet head = null\nlet branches = { 'master': head }\nlet curBranch = 'master'\nlet direction = 'LR'\nlet seq = 0\n\nfunction getRandomInt (min, max) {\n return Math.floor(Math.random() * (max - min)) + min\n}\n\nfunction getId () {\n const pool = '0123456789abcdef'\n let id = ''\n for (let i = 0; i < 7; i++) {\n id += pool[getRandomInt(0, 16)]\n }\n return id\n}\n\nfunction isfastforwardable (currentCommit, otherCommit) {\n logger.debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id)\n while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit) {\n // only if other branch has more commits\n if (otherCommit.parent == null) break\n if (Array.isArray(otherCommit.parent)) {\n logger.debug('In merge commit:', otherCommit.parent)\n return isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) ||\n isfastforwardable(currentCommit, commits[otherCommit.parent[1]])\n } else {\n otherCommit = commits[otherCommit.parent]\n }\n }\n logger.debug(currentCommit.id, otherCommit.id)\n return currentCommit.id === otherCommit.id\n}\n\nfunction isReachableFrom (currentCommit, otherCommit) {\n const currentSeq = currentCommit.seq\n const otherSeq = otherCommit.seq\n if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit)\n return false\n}\n\nexport const setDirection = function (dir) {\n direction = dir\n}\nlet options = {}\nexport const setOptions = function (rawOptString) {\n logger.debug('options str', rawOptString)\n rawOptString = rawOptString && rawOptString.trim()\n rawOptString = rawOptString || '{}'\n try {\n options = JSON.parse(rawOptString)\n } catch (e) {\n logger.error('error while parsing gitGraph options', e.message)\n }\n}\n\nexport const getOptions = function () {\n return options\n}\n\nexport const commit = function (msg) {\n const commit = {\n id: getId(),\n message: msg,\n seq: seq++,\n parent: head == null ? null : head.id\n }\n head = commit\n commits[commit.id] = commit\n branches[curBranch] = commit.id\n logger.debug('in pushCommit ' + commit.id)\n}\n\nexport const branch = function (name) {\n branches[name] = head != null ? head.id : null\n logger.debug('in createBranch')\n}\n\nexport const merge = function (otherBranch) {\n const currentCommit = commits[branches[curBranch]]\n const otherCommit = commits[branches[otherBranch]]\n if (isReachableFrom(currentCommit, otherCommit)) {\n logger.debug('Already merged')\n return\n }\n if (isfastforwardable(currentCommit, otherCommit)) {\n branches[curBranch] = branches[otherBranch]\n head = commits[branches[curBranch]]\n } else {\n // create merge commit\n const commit = {\n id: getId(),\n message: 'merged branch ' + otherBranch + ' into ' + curBranch,\n seq: seq++,\n parent: [head == null ? null : head.id, branches[otherBranch]]\n }\n head = commit\n commits[commit.id] = commit\n branches[curBranch] = commit.id\n }\n logger.debug(branches)\n logger.debug('in mergeBranch')\n}\n\nexport const checkout = function (branch) {\n logger.debug('in checkout')\n curBranch = branch\n const id = branches[curBranch]\n head = commits[id]\n}\n\nexport const reset = function (commitRef) {\n logger.debug('in reset', commitRef)\n const ref = commitRef.split(':')[0]\n let parentCount = parseInt(commitRef.split(':')[1])\n let commit = ref === 'HEAD' ? head : commits[branches[ref]]\n logger.debug(commit, parentCount)\n while (parentCount > 0) {\n commit = commits[commit.parent]\n parentCount--\n if (!commit) {\n const err = 'Critical error - unique parent commit not found during reset'\n logger.error(err)\n throw err\n }\n }\n head = commit\n branches[curBranch] = commit.id\n}\n\nfunction upsert (arr, key, newval) {\n const index = arr.indexOf(key)\n if (index === -1) {\n arr.push(newval)\n } else {\n arr.splice(index, 1, newval)\n }\n}\n\nfunction prettyPrintCommitHistory (commitArr) {\n const commit = _.maxBy(commitArr, 'seq')\n let line = ''\n commitArr.forEach(function (c) {\n if (c === commit) {\n line += '\\t*'\n } else {\n line += '\\t|'\n }\n })\n const label = [line, commit.id, commit.seq]\n for (let branch in branches) {\n if (branches[branch] === commit.id) label.push(branch)\n }\n logger.debug(label.join(' '))\n if (Array.isArray(commit.parent)) {\n const newCommit = commits[commit.parent[0]]\n upsert(commitArr, commit, newCommit)\n commitArr.push(commits[commit.parent[1]])\n } else if (commit.parent == null) {\n return\n } else {\n const nextCommit = commits[commit.parent]\n upsert(commitArr, commit, nextCommit)\n }\n commitArr = _.uniqBy(commitArr, 'id')\n prettyPrintCommitHistory(commitArr)\n}\n\nexport const prettyPrint = function () {\n logger.debug(commits)\n const node = getCommitsArray()[0]\n prettyPrintCommitHistory([node])\n}\n\nexport const clear = function () {\n commits = {}\n head = null\n branches = { 'master': head }\n curBranch = 'master'\n seq = 0\n}\n\nexport const getBranchesAsObjArray = function () {\n const branchArr = []\n for (let branch in branches) {\n branchArr.push({ name: branch, commit: commits[branches[branch]] })\n }\n return branchArr\n}\n\nexport const getBranches = function () { return branches }\nexport const getCommits = function () { return commits }\nexport const getCommitsArray = function () {\n const commitArr = Object.keys(commits).map(function (key) {\n return commits[key]\n })\n commitArr.forEach(function (o) { logger.debug(o.id) })\n return _.orderBy(commitArr, ['seq'], ['desc'])\n}\nexport const getCurrentBranch = function () { return curBranch }\nexport const getDirection = function () { return direction }\nexport const getHead = function () { return head }\n\nexport default {\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n checkout,\n reset,\n prettyPrint,\n clear,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead\n}\n","import * as d3 from 'd3'\nimport _ from 'lodash'\n\nimport db from './gitGraphAst'\nimport gitGraphParser from './parser/gitGraph'\nimport { logger } from '../../logger'\nimport { interpolateToCurve } from '../../utils'\n\nlet allCommitsDict = {}\nlet branchNum\nlet config = {\n nodeSpacing: 150,\n nodeFillColor: 'yellow',\n nodeStrokeWidth: 2,\n nodeStrokeColor: 'grey',\n lineStrokeWidth: 4,\n branchOffset: 50,\n lineColor: 'grey',\n leftMargin: 50,\n branchColors: ['#442f74', '#983351', '#609732', '#AA9A39'],\n nodeRadius: 10,\n nodeLabel: {\n width: 75,\n height: 100,\n x: -25,\n y: 0\n }\n}\nlet apiConfig = {}\nexport const setConf = function (c) {\n apiConfig = c\n}\n\nfunction svgCreateDefs (svg) {\n svg\n .append('defs')\n .append('g')\n .attr('id', 'def-commit')\n .append('circle')\n .attr('r', config.nodeRadius)\n .attr('cx', 0)\n .attr('cy', 0)\n svg.select('#def-commit')\n .append('foreignObject')\n .attr('width', config.nodeLabel.width)\n .attr('height', config.nodeLabel.height)\n .attr('x', config.nodeLabel.x)\n .attr('y', config.nodeLabel.y)\n .attr('class', 'node-label')\n .attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility')\n .append('p')\n .html('')\n}\n\nfunction svgDrawLine (svg, points, colorIdx, interpolate) {\n const curve = interpolateToCurve(interpolate, d3.curveBasis)\n const color = config.branchColors[colorIdx % config.branchColors.length]\n const lineGen = d3.line()\n .x(function (d) {\n return Math.round(d.x)\n })\n .y(function (d) {\n return Math.round(d.y)\n })\n .curve(curve)\n\n svg\n .append('svg:path')\n .attr('d', lineGen(points))\n .style('stroke', color)\n .style('stroke-width', config.lineStrokeWidth)\n .style('fill', 'none')\n}\n\n// Pass in the element and its pre-transform coords\nfunction getElementCoords (element, coords) {\n coords = coords || element.node().getBBox()\n const ctm = element.node().getCTM()\n const xn = ctm.e + coords.x * ctm.a\n const yn = ctm.f + coords.y * ctm.d\n return {\n left: xn,\n top: yn,\n width: coords.width,\n height: coords.height\n }\n}\n\nfunction svgDrawLineForCommits (svg, fromId, toId, direction, color) {\n logger.debug('svgDrawLineForCommits: ', fromId, toId)\n const fromBbox = getElementCoords(svg.select('#node-' + fromId + ' circle'))\n const toBbox = getElementCoords(svg.select('#node-' + toId + ' circle'))\n switch (direction) {\n case 'LR':\n // (toBbox)\n // +--------\n // + (fromBbox)\n if (fromBbox.left - toBbox.left > config.nodeSpacing) {\n const lineStart = { x: fromBbox.left - config.nodeSpacing, y: toBbox.top + toBbox.height / 2 }\n const lineEnd = { x: toBbox.left + toBbox.width, y: toBbox.top + toBbox.height / 2 }\n svgDrawLine(svg, [lineStart, lineEnd], color, 'linear')\n svgDrawLine(svg, [\n { x: fromBbox.left, y: fromBbox.top + fromBbox.height / 2 },\n { x: fromBbox.left - config.nodeSpacing / 2, y: fromBbox.top + fromBbox.height / 2 },\n { x: fromBbox.left - config.nodeSpacing / 2, y: lineStart.y },\n lineStart], color)\n } else {\n svgDrawLine(svg, [{\n 'x': fromBbox.left,\n 'y': fromBbox.top + fromBbox.height / 2\n }, {\n 'x': fromBbox.left - config.nodeSpacing / 2,\n 'y': fromBbox.top + fromBbox.height / 2\n }, {\n 'x': fromBbox.left - config.nodeSpacing / 2,\n 'y': toBbox.top + toBbox.height / 2\n }, {\n 'x': toBbox.left + toBbox.width,\n 'y': toBbox.top + toBbox.height / 2\n }], color)\n }\n break\n case 'BT':\n // + (fromBbox)\n // |\n // |\n // + (toBbox)\n if (toBbox.top - fromBbox.top > config.nodeSpacing) {\n const lineStart = { x: toBbox.left + toBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing }\n const lineEnd = { x: toBbox.left + toBbox.width / 2, y: toBbox.top }\n svgDrawLine(svg, [lineStart, lineEnd], color, 'linear')\n svgDrawLine(svg, [\n { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height },\n { x: fromBbox.left + fromBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing / 2 },\n { x: toBbox.left + toBbox.width / 2, y: lineStart.y - config.nodeSpacing / 2 },\n lineStart], color)\n } else {\n svgDrawLine(svg, [{\n 'x': fromBbox.left + fromBbox.width / 2,\n 'y': fromBbox.top + fromBbox.height\n }, {\n 'x': fromBbox.left + fromBbox.width / 2,\n 'y': fromBbox.top + config.nodeSpacing / 2\n }, {\n 'x': toBbox.left + toBbox.width / 2,\n 'y': toBbox.top - config.nodeSpacing / 2\n }, {\n 'x': toBbox.left + toBbox.width / 2,\n 'y': toBbox.top\n }], color)\n }\n break\n }\n}\n\nfunction cloneNode (svg, selector) {\n return svg.select(selector).node().cloneNode(true)\n}\n\nfunction renderCommitHistory (svg, commitid, branches, direction) {\n let commit\n const numCommits = Object.keys(allCommitsDict).length\n if (typeof commitid === 'string') {\n do {\n commit = allCommitsDict[commitid]\n logger.debug('in renderCommitHistory', commit.id, commit.seq)\n if (svg.select('#node-' + commitid).size() > 0) {\n return\n }\n svg\n .append(function () {\n return cloneNode(svg, '#def-commit')\n })\n .attr('class', 'commit')\n .attr('id', function () {\n return 'node-' + commit.id\n })\n .attr('transform', function () {\n switch (direction) {\n case 'LR':\n return 'translate(' + (commit.seq * config.nodeSpacing + config.leftMargin) + ', ' +\n (branchNum * config.branchOffset) + ')'\n case 'BT':\n return 'translate(' + (branchNum * config.branchOffset + config.leftMargin) + ', ' +\n ((numCommits - commit.seq) * config.nodeSpacing) + ')'\n }\n })\n .attr('fill', config.nodeFillColor)\n .attr('stroke', config.nodeStrokeColor)\n .attr('stroke-width', config.nodeStrokeWidth)\n\n let branch\n for (let branchName in branches) {\n if (branches[branchName].commit === commit) {\n branch = branches[branchName]\n break\n }\n }\n if (branch) {\n logger.debug('found branch ', branch.name)\n svg.select('#node-' + commit.id + ' p')\n .append('xhtml:span')\n .attr('class', 'branch-label')\n .text(branch.name + ', ')\n }\n svg.select('#node-' + commit.id + ' p')\n .append('xhtml:span')\n .attr('class', 'commit-id')\n .text(commit.id)\n if (commit.message !== '' && direction === 'BT') {\n svg.select('#node-' + commit.id + ' p')\n .append('xhtml:span')\n .attr('class', 'commit-msg')\n .text(', ' + commit.message)\n }\n commitid = commit.parent\n } while (commitid && allCommitsDict[commitid])\n }\n\n if (Array.isArray(commitid)) {\n logger.debug('found merge commmit', commitid)\n renderCommitHistory(svg, commitid[0], branches, direction)\n branchNum++\n renderCommitHistory(svg, commitid[1], branches, direction)\n branchNum--\n }\n}\n\nfunction renderLines (svg, commit, direction, branchColor) {\n branchColor = branchColor || 0\n while (commit.seq > 0 && !commit.lineDrawn) {\n if (typeof commit.parent === 'string') {\n svgDrawLineForCommits(svg, commit.id, commit.parent, direction, branchColor)\n commit.lineDrawn = true\n commit = allCommitsDict[commit.parent]\n } else if (Array.isArray(commit.parent)) {\n svgDrawLineForCommits(svg, commit.id, commit.parent[0], direction, branchColor)\n svgDrawLineForCommits(svg, commit.id, commit.parent[1], direction, branchColor + 1)\n renderLines(svg, allCommitsDict[commit.parent[1]], direction, branchColor + 1)\n commit.lineDrawn = true\n commit = allCommitsDict[commit.parent[0]]\n }\n }\n}\n\nexport const draw = function (txt, id, ver) {\n try {\n const parser = gitGraphParser.parser\n parser.yy = db\n\n logger.debug('in gitgraph renderer', txt, id, ver)\n // Parse the graph definition\n parser.parse(txt + '\\n')\n\n config = _.assign(config, apiConfig, db.getOptions())\n logger.debug('effective options', config)\n const direction = db.getDirection()\n allCommitsDict = db.getCommits()\n const branches = db.getBranchesAsObjArray()\n if (direction === 'BT') {\n config.nodeLabel.x = branches.length * config.branchOffset\n config.nodeLabel.width = '100%'\n config.nodeLabel.y = -1 * 2 * config.nodeRadius\n }\n const svg = d3.select(`[id=\"${id}\"]`)\n svgCreateDefs(svg)\n branchNum = 1\n for (let branch in branches) {\n const v = branches[branch]\n renderCommitHistory(svg, v.commit.id, branches, direction)\n renderLines(svg, v.commit, direction)\n branchNum++\n }\n svg.attr('height', function () {\n if (direction === 'BT') return Object.keys(allCommitsDict).length * config.nodeSpacing\n return (branches.length + 1) * config.branchOffset\n })\n } catch (e) {\n logger.error('Error while rendering gitgraph')\n logger.error(e.message)\n }\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[2,3],$V1=[1,7],$V2=[7,12,15,17,19,20,21],$V3=[7,11,12,15,17,19,20,21],$V4=[2,20],$V5=[1,32];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"GG\":4,\":\":5,\"document\":6,\"EOF\":7,\"DIR\":8,\"options\":9,\"body\":10,\"OPT\":11,\"NL\":12,\"line\":13,\"statement\":14,\"COMMIT\":15,\"commit_arg\":16,\"BRANCH\":17,\"ID\":18,\"CHECKOUT\":19,\"MERGE\":20,\"RESET\":21,\"reset_arg\":22,\"STR\":23,\"HEAD\":24,\"reset_parents\":25,\"CARET\":26,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"GG\",5:\":\",7:\"EOF\",8:\"DIR\",11:\"OPT\",12:\"NL\",15:\"COMMIT\",17:\"BRANCH\",18:\"ID\",19:\"CHECKOUT\",20:\"MERGE\",21:\"RESET\",23:\"STR\",24:\"HEAD\",26:\"CARET\"},\nproductions_: [0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 2:\nyy.setDirection($$[$0-3]); return $$[$0-1];\nbreak;\ncase 4:\n yy.setOptions($$[$0-1]); this.$ = $$[$0]\nbreak;\ncase 5:\n$$[$0-1] +=$$[$0]; this.$=$$[$0-1]\nbreak;\ncase 7:\nthis.$ = []\nbreak;\ncase 8:\n$$[$0-1].push($$[$0]); this.$=$$[$0-1];\nbreak;\ncase 9:\nthis.$ =$$[$0-1]\nbreak;\ncase 11:\nyy.commit($$[$0])\nbreak;\ncase 12:\nyy.branch($$[$0])\nbreak;\ncase 13:\nyy.checkout($$[$0])\nbreak;\ncase 14:\nyy.merge($$[$0])\nbreak;\ncase 15:\nyy.reset($$[$0])\nbreak;\ncase 16:\nthis.$ = \"\"\nbreak;\ncase 17:\nthis.$=$$[$0]\nbreak;\ncase 18:\nthis.$ = $$[$0-1]+ \":\" + $$[$0] \nbreak;\ncase 19:\nthis.$ = $$[$0-1]+ \":\" + yy.count; yy.count = 0\nbreak;\ncase 20:\nyy.count = 0\nbreak;\ncase 21:\n yy.count += 1 \nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:$V0,9:6,12:$V1},{5:[1,8]},{7:[1,9]},o($V2,[2,7],{10:10,11:[1,11]}),o($V3,[2,6]),{6:12,7:$V0,9:6,12:$V1},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},o($V3,[2,5]),{7:[1,21]},o($V2,[2,8]),{12:[1,22]},o($V2,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},o($V2,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:$V4,25:31,26:$V5},{12:$V4,25:33,26:$V5},{12:[2,18]},{12:$V4,25:34,26:$V5},{12:[2,19]},{12:[2,21]}],\ndefaultActions: {9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 12;\nbreak;\ncase 1:/* skip all whitespace */\nbreak;\ncase 2:/* skip comments */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:return 4;\nbreak;\ncase 5:return 15;\nbreak;\ncase 6:return 17;\nbreak;\ncase 7:return 20;\nbreak;\ncase 8:return 21;\nbreak;\ncase 9:return 19;\nbreak;\ncase 10:return 8;\nbreak;\ncase 11:return 8;\nbreak;\ncase 12:return 5;\nbreak;\ncase 13:return 26\nbreak;\ncase 14:this.begin(\"options\");\nbreak;\ncase 15:this.popState();\nbreak;\ncase 16:return 11;\nbreak;\ncase 17:this.begin(\"string\");\nbreak;\ncase 18:this.popState();\nbreak;\ncase 19:return 23;\nbreak;\ncase 20:return 18;\nbreak;\ncase 21:return 7;\nbreak;\n}\n},\nrules: [/^(?:(\\r?\\n)+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:gitGraph\\b)/i,/^(?:commit\\b)/i,/^(?:branch\\b)/i,/^(?:merge\\b)/i,/^(?:reset\\b)/i,/^(?:checkout\\b)/i,/^(?:LR\\b)/i,/^(?:BT\\b)/i,/^(?::)/i,/^(?:\\^)/i,/^(?:options\\r?\\n)/i,/^(?:end\\r?\\n)/i,/^(?:[^\\n]+\\r?\\n)/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[a-zA-Z][a-zA-Z0-9_]+)/i,/^(?:$)/i],\nconditions: {\"options\":{\"rules\":[15,16],\"inclusive\":false},\"string\":{\"rules\":[18,19],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","/**\n * Created by knut on 15-01-14.\n */\nimport { logger } from '../../logger'\n\nvar message = ''\nvar info = false\n\nexport const setMessage = txt => {\n logger.debug('Setting message to: ' + txt)\n message = txt\n}\n\nexport const getMessage = () => {\n return message\n}\n\nexport const setInfo = inf => {\n info = inf\n}\n\nexport const getInfo = () => {\n return info\n}\n\n// export const parseError = (err, hash) => {\n// global.mermaidAPI.parseError(err, hash)\n// }\n\nexport default {\n setMessage,\n getMessage,\n setInfo,\n getInfo\n // parseError\n}\n","/**\n * Created by knut on 14-12-11.\n */\nimport * as d3 from 'd3'\nimport db from './infoDb'\nimport infoParser from './parser/info.js'\nimport { logger } from '../../logger'\n\nconst conf = {\n}\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\n\n/**\n * Draws a an info picture in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = (txt, id, ver) => {\n try {\n const parser = infoParser.parser\n parser.yy = db\n logger.debug('Renering info diagram\\n' + txt)\n // Parse the graph definition\n parser.parse(txt)\n logger.debug('Parsed info diagram')\n // Fetch the default direction, use TD if none was found\n const svg = d3.select('#' + id)\n\n const g = svg.append('g')\n\n g.append('text') // text label for the x axis\n .attr('x', 100)\n .attr('y', 40)\n .attr('class', 'version')\n .attr('font-size', '32px')\n .style('text-anchor', 'middle')\n .text('v ' + ver)\n\n svg.attr('height', 100)\n svg.attr('width', 400)\n // svg.attr('viewBox', '0 0 300 150');\n } catch (e) {\n logger.error('Error while rendering info diagram')\n logger.error(e.message)\n }\n}\n\nexport default {\n setConf,\n draw\n}\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,9,10,12];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"info\":4,\"document\":5,\"EOF\":6,\"line\":7,\"statement\":8,\"NL\":9,\"showInfo\":10,\"message\":11,\"say\":12,\"TXT\":13,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"info\",6:\"EOF\",9:\"NL\",10:\"showInfo\",12:\"say\",13:\"TXT\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1],[8,1],[11,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return yy; \nbreak;\ncase 4:\n \nbreak;\ncase 6:\n yy.setInfo(true); \nbreak;\ncase 7:\n yy.setMessage($$[$0]); \nbreak;\ncase 8:\n this.$ = $$[$0-1].substring(1).trim().replace(/\\\\n/gm, \"\\n\"); \nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8],11:9,12:[1,10]},{1:[2,1]},o($V0,[2,3]),o($V0,[2,4]),o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,7]),{13:[1,11]},o($V0,[2,8])],\ndefaultActions: {4:[2,1]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\t// Pre-lexer code can go here\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 4 ;\nbreak;\ncase 1:return 9 ;\nbreak;\ncase 2:return 'space'\nbreak;\ncase 3:return 10;\nbreak;\ncase 4:return 12 ;\nbreak;\ncase 5:return 6 ;\nbreak;\ncase 6:return 13 ;\nbreak;\n}\n},\nrules: [/^(?:info\\b)/i,/^(?:[\\s\\n\\r]+)/i,/^(?:[\\s]+)/i,/^(?:showInfo\\b)/i,/^(?:say\\b)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,4],$V3=[2,4],$V4=[1,9],$V5=[1,11],$V6=[1,12],$V7=[1,14],$V8=[1,15],$V9=[1,17],$Va=[1,18],$Vb=[1,19],$Vc=[1,20],$Vd=[1,21],$Ve=[1,23],$Vf=[1,24],$Vg=[1,4,5,10,15,16,18,20,21,22,23,25,27,28,29,40],$Vh=[1,32],$Vi=[4,5,10,15,16,18,20,21,22,23,25,29,40],$Vj=[4,5,10,15,16,18,20,21,22,23,25,28,29,40],$Vk=[4,5,10,15,16,18,20,21,22,23,25,27,29,40],$Vl=[38,39,40];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"SPACE\":4,\"NL\":5,\"SD\":6,\"document\":7,\"line\":8,\"statement\":9,\"participant\":10,\"actor\":11,\"AS\":12,\"restOfLine\":13,\"signal\":14,\"activate\":15,\"deactivate\":16,\"note_statement\":17,\"title\":18,\"text2\":19,\"loop\":20,\"end\":21,\"opt\":22,\"alt\":23,\"else_sections\":24,\"par\":25,\"par_sections\":26,\"and\":27,\"else\":28,\"note\":29,\"placement\":30,\"over\":31,\"actor_pair\":32,\"spaceList\":33,\",\":34,\"left_of\":35,\"right_of\":36,\"signaltype\":37,\"+\":38,\"-\":39,\"ACTOR\":40,\"SOLID_OPEN_ARROW\":41,\"DOTTED_OPEN_ARROW\":42,\"SOLID_ARROW\":43,\"DOTTED_ARROW\":44,\"SOLID_CROSS\":45,\"DOTTED_CROSS\":46,\"TXT\":47,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACE\",5:\"NL\",6:\"SD\",10:\"participant\",12:\"AS\",13:\"restOfLine\",15:\"activate\",16:\"deactivate\",18:\"title\",20:\"loop\",21:\"end\",22:\"opt\",23:\"alt\",25:\"par\",27:\"and\",28:\"else\",29:\"note\",31:\"over\",34:\",\",35:\"left_of\",36:\"right_of\",38:\"+\",39:\"-\",40:\"ACTOR\",41:\"SOLID_OPEN_ARROW\",42:\"DOTTED_OPEN_ARROW\",43:\"SOLID_ARROW\",44:\"DOTTED_ARROW\",45:\"SOLID_CROSS\",46:\"DOTTED_CROSS\",47:\"TXT\"},\nproductions_: [0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,5],[9,3],[9,2],[9,3],[9,3],[9,2],[9,3],[9,4],[9,4],[9,4],[9,4],[26,1],[26,4],[24,1],[24,4],[17,4],[17,4],[33,2],[33,1],[32,3],[32,1],[30,1],[30,1],[14,5],[14,5],[14,4],[11,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[19,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 3:\n yy.apply($$[$0]);return $$[$0]; \nbreak;\ncase 4:\n this.$ = [] \nbreak;\ncase 5:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 6: case 7:\n this.$ = $$[$0] \nbreak;\ncase 8:\n this.$=[];\nbreak;\ncase 9:\n$$[$0-3].description=$$[$0-1]; this.$=$$[$0-3];\nbreak;\ncase 10:\nthis.$=$$[$0-1];\nbreak;\ncase 12:\nthis.$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]};\nbreak;\ncase 13:\nthis.$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-1]};\nbreak;\ncase 15:\nthis.$=[{type:'setTitle', text:$$[$0-1]}]\nbreak;\ncase 16:\n\n\t\t$$[$0-1].unshift({type: 'loopStart', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_START});\n\t\t$$[$0-1].push({type: 'loopEnd', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 17:\n\n\t\t$$[$0-1].unshift({type: 'optStart', optText:$$[$0-2], signalType: yy.LINETYPE.OPT_START});\n\t\t$$[$0-1].push({type: 'optEnd', optText:$$[$0-2], signalType: yy.LINETYPE.OPT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 18:\n\n\t\t// Alt start\n\t\t$$[$0-1].unshift({type: 'altStart', altText:$$[$0-2], signalType: yy.LINETYPE.ALT_START});\n\t\t// Content in alt is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 19:\n\n\t\t// Parallel start\n\t\t$$[$0-1].unshift({type: 'parStart', parText:$$[$0-2], signalType: yy.LINETYPE.PAR_START});\n\t\t// Content in par is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 21:\n this.$ = $$[$0-3].concat([{type: 'and', parText:$$[$0-1], signalType: yy.LINETYPE.PAR_AND}, $$[$0]]); \nbreak;\ncase 23:\n this.$ = $$[$0-3].concat([{type: 'else', altText:$$[$0-1], signalType: yy.LINETYPE.ALT_ELSE}, $$[$0]]); \nbreak;\ncase 24:\n\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:$$[$0-2], actor:$$[$0-1].actor, text:$$[$0]}];\nbreak;\ncase 25:\n\n\t\t// Coerce actor_pair into a [to, from, ...] array\n\t\t$$[$0-2] = [].concat($$[$0-1], $$[$0-1]).slice(0, 2);\n\t\t$$[$0-2][0] = $$[$0-2][0].actor;\n\t\t$$[$0-2][1] = $$[$0-2][1].actor;\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$$[$0-2].slice(0, 2), text:$$[$0]}];\nbreak;\ncase 28:\n this.$ = [$$[$0-2], $$[$0]]; \nbreak;\ncase 29:\n this.$ = $$[$0]; \nbreak;\ncase 30:\n this.$ = yy.PLACEMENT.LEFTOF; \nbreak;\ncase 31:\n this.$ = yy.PLACEMENT.RIGHTOF; \nbreak;\ncase 32:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]}\n\t ]\nbreak;\ncase 33:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-4]}\n\t ]\nbreak;\ncase 34:\n this.$ = [$$[$0-3],$$[$0-1],{type: 'addMessage', from:$$[$0-3].actor, to:$$[$0-1].actor, signalType:$$[$0-2], msg:$$[$0]}]\nbreak;\ncase 35:\nthis.$={type: 'addActor', actor:$$[$0]}\nbreak;\ncase 36:\n this.$ = yy.LINETYPE.SOLID_OPEN; \nbreak;\ncase 37:\n this.$ = yy.LINETYPE.DOTTED_OPEN; \nbreak;\ncase 38:\n this.$ = yy.LINETYPE.SOLID; \nbreak;\ncase 39:\n this.$ = yy.LINETYPE.DOTTED; \nbreak;\ncase 40:\n this.$ = yy.LINETYPE.SOLID_CROSS; \nbreak;\ncase 41:\n this.$ = yy.LINETYPE.DOTTED_CROSS; \nbreak;\ncase 42:\nthis.$ = $$[$0].substring(1).trim().replace(/\\\\n/gm, \"\\n\");\nbreak;\n}\n},\ntable: [{3:1,4:$V0,5:$V1,6:$V2},{1:[3]},{3:5,4:$V0,5:$V1,6:$V2},{3:6,4:$V0,5:$V1,6:$V2},o([1,4,5,10,15,16,18,20,22,23,25,29,40],$V3,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},o($Vg,[2,5]),{9:25,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},o($Vg,[2,7]),o($Vg,[2,8]),{11:26,40:$Vf},{5:[1,27]},{11:28,40:$Vf},{11:29,40:$Vf},{5:[1,30]},{19:31,47:$Vh},{13:[1,33]},{13:[1,34]},{13:[1,35]},{13:[1,36]},{37:37,41:[1,38],42:[1,39],43:[1,40],44:[1,41],45:[1,42],46:[1,43]},{30:44,31:[1,45],35:[1,46],36:[1,47]},o([5,12,34,41,42,43,44,45,46,47],[2,35]),o($Vg,[2,6]),{5:[1,49],12:[1,48]},o($Vg,[2,11]),{5:[1,50]},{5:[1,51]},o($Vg,[2,14]),{5:[1,52]},{5:[2,42]},o($Vi,$V3,{7:53}),o($Vi,$V3,{7:54}),o($Vj,$V3,{24:55,7:56}),o($Vk,$V3,{26:57,7:58}),{11:61,38:[1,59],39:[1,60],40:$Vf},o($Vl,[2,36]),o($Vl,[2,37]),o($Vl,[2,38]),o($Vl,[2,39]),o($Vl,[2,40]),o($Vl,[2,41]),{11:62,40:$Vf},{11:64,32:63,40:$Vf},{40:[2,30]},{40:[2,31]},{13:[1,65]},o($Vg,[2,10]),o($Vg,[2,12]),o($Vg,[2,13]),o($Vg,[2,15]),{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[1,66],22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[1,67],22:$Vb,23:$Vc,25:$Vd,29:$Ve,40:$Vf},{21:[1,68]},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[2,22],22:$Vb,23:$Vc,25:$Vd,28:[1,69],29:$Ve,40:$Vf},{21:[1,70]},{4:$V4,5:$V5,8:8,9:10,10:$V6,11:22,14:13,15:$V7,16:$V8,17:16,18:$V9,20:$Va,21:[2,20],22:$Vb,23:$Vc,25:$Vd,27:[1,71],29:$Ve,40:$Vf},{11:72,40:$Vf},{11:73,40:$Vf},{19:74,47:$Vh},{19:75,47:$Vh},{19:76,47:$Vh},{34:[1,77],47:[2,29]},{5:[1,78]},o($Vg,[2,16]),o($Vg,[2,17]),o($Vg,[2,18]),{13:[1,79]},o($Vg,[2,19]),{13:[1,80]},{19:81,47:$Vh},{19:82,47:$Vh},{5:[2,34]},{5:[2,24]},{5:[2,25]},{11:83,40:$Vf},o($Vg,[2,9]),o($Vj,$V3,{7:56,24:84}),o($Vk,$V3,{7:58,26:85}),{5:[2,32]},{5:[2,33]},{47:[2,28]},{21:[2,23]},{21:[2,21]}],\ndefaultActions: {5:[2,1],6:[2,2],32:[2,42],46:[2,30],47:[2,31],74:[2,34],75:[2,24],76:[2,25],81:[2,32],82:[2,33],83:[2,28],84:[2,23],85:[2,21]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 5;\nbreak;\ncase 1:/* skip all whitespace */\nbreak;\ncase 2:/* skip same-line whitespace */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:/* skip comments */\nbreak;\ncase 5: this.begin('ID'); return 10; \nbreak;\ncase 6: this.begin('ALIAS'); return 40; \nbreak;\ncase 7: this.popState(); this.popState(); this.begin('LINE'); return 12; \nbreak;\ncase 8: this.popState(); this.popState(); return 5; \nbreak;\ncase 9: this.begin('LINE'); return 20; \nbreak;\ncase 10: this.begin('LINE'); return 22; \nbreak;\ncase 11: this.begin('LINE'); return 23; \nbreak;\ncase 12: this.begin('LINE'); return 28; \nbreak;\ncase 13: this.begin('LINE'); return 25; \nbreak;\ncase 14: this.begin('LINE'); return 27; \nbreak;\ncase 15: this.popState(); return 13; \nbreak;\ncase 16:return 21;\nbreak;\ncase 17:return 35;\nbreak;\ncase 18:return 36;\nbreak;\ncase 19:return 31;\nbreak;\ncase 20:return 29;\nbreak;\ncase 21: this.begin('ID'); return 15; \nbreak;\ncase 22: this.begin('ID'); return 16; \nbreak;\ncase 23:return 18;\nbreak;\ncase 24:return 6;\nbreak;\ncase 25:return 34;\nbreak;\ncase 26:return 5;\nbreak;\ncase 27: yy_.yytext = yy_.yytext.trim(); return 40; \nbreak;\ncase 28:return 43;\nbreak;\ncase 29:return 44;\nbreak;\ncase 30:return 41;\nbreak;\ncase 31:return 42;\nbreak;\ncase 32:return 45;\nbreak;\ncase 33:return 46;\nbreak;\ncase 34:return 47;\nbreak;\ncase 35:return 38;\nbreak;\ncase 36:return 39;\nbreak;\ncase 37:return 5;\nbreak;\ncase 38:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:((?!\\n)\\s)+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:participant\\b)/i,/^(?:[^\\->:\\n,;]+?(?=((?!\\n)\\s)+as(?!\\n)\\s|[#\\n;]|$))/i,/^(?:as\\b)/i,/^(?:(?:))/i,/^(?:loop\\b)/i,/^(?:opt\\b)/i,/^(?:alt\\b)/i,/^(?:else\\b)/i,/^(?:par\\b)/i,/^(?:and\\b)/i,/^(?:[^#\\n;]*)/i,/^(?:end\\b)/i,/^(?:left of\\b)/i,/^(?:right of\\b)/i,/^(?:over\\b)/i,/^(?:note\\b)/i,/^(?:activate\\b)/i,/^(?:deactivate\\b)/i,/^(?:title\\b)/i,/^(?:sequenceDiagram\\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\\+\\->:\\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\\n;]+)/i,/^(?:\\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"LINE\":{\"rules\":[2,3,15],\"inclusive\":false},\"ALIAS\":{\"rules\":[2,3,7,8],\"inclusive\":false},\"ID\":{\"rules\":[2,3,6],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,3,4,5,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n if (!args[1]) {\n console.log('Usage: '+args[0]+' FILE');\n process.exit(1);\n }\n var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n exports.main(process.argv.slice(1));\n}\n}","import { logger } from '../../logger'\n\nlet actors = {}\nlet messages = []\nconst notes = []\nlet title = ''\n\nexport const addActor = function (id, name, description) {\n // Don't allow description nulling\n const old = actors[id]\n if (old && name === old.name && description == null) return\n\n // Don't allow null descriptions, either\n if (description == null) description = name\n\n actors[id] = { name: name, description: description }\n}\n\nexport const addMessage = function (idFrom, idTo, message, answer) {\n messages.push({ from: idFrom, to: idTo, message: message, answer: answer })\n}\n\nexport const addSignal = function (idFrom, idTo, message, messageType) {\n logger.debug('Adding message from=' + idFrom + ' to=' + idTo + ' message=' + message + ' type=' + messageType)\n messages.push({ from: idFrom, to: idTo, message: message, type: messageType })\n}\n\nexport const getMessages = function () {\n return messages\n}\n\nexport const getActors = function () {\n return actors\n}\nexport const getActor = function (id) {\n return actors[id]\n}\nexport const getActorKeys = function () {\n return Object.keys(actors)\n}\nexport const getTitle = function () {\n return title\n}\n\nexport const clear = function () {\n actors = {}\n messages = []\n}\n\nexport const LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21\n}\n\nexport const ARROWTYPE = {\n FILLED: 0,\n OPEN: 1\n}\n\nexport const PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2\n}\n\nexport const addNote = function (actor, placement, message) {\n const note = { actor: actor, placement: placement, message: message }\n\n // Coerce actor into a [to, from, ...] array\n const actors = [].concat(actor, actor)\n\n notes.push(note)\n messages.push({ from: actors[0], to: actors[1], message: message, type: LINETYPE.NOTE, placement: placement })\n}\n\nexport const setTitle = function (titleText) {\n title = titleText\n}\n\nexport const apply = function (param) {\n if (param instanceof Array) {\n param.forEach(function (item) {\n apply(item)\n })\n } else {\n switch (param.type) {\n case 'addActor':\n addActor(param.actor, param.actor, param.description)\n break\n case 'activeStart':\n addSignal(param.actor, undefined, undefined, param.signalType)\n break\n case 'activeEnd':\n addSignal(param.actor, undefined, undefined, param.signalType)\n break\n case 'addNote':\n addNote(param.actor, param.placement, param.text)\n break\n case 'addMessage':\n addSignal(param.from, param.to, param.msg, param.signalType)\n break\n case 'loopStart':\n addSignal(undefined, undefined, param.loopText, param.signalType)\n break\n case 'loopEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n case 'optStart':\n addSignal(undefined, undefined, param.optText, param.signalType)\n break\n case 'optEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n case 'altStart':\n addSignal(undefined, undefined, param.altText, param.signalType)\n break\n case 'else':\n addSignal(undefined, undefined, param.altText, param.signalType)\n break\n case 'altEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n case 'setTitle':\n setTitle(param.text)\n break\n case 'parStart':\n addSignal(undefined, undefined, param.parText, param.signalType)\n break\n case 'and':\n addSignal(undefined, undefined, param.parText, param.signalType)\n break\n case 'parEnd':\n addSignal(undefined, undefined, undefined, param.signalType)\n break\n }\n }\n}\n\nexport default {\n addActor,\n addMessage,\n addSignal,\n getMessages,\n getActors,\n getActor,\n getActorKeys,\n getTitle,\n clear,\n LINETYPE,\n ARROWTYPE,\n PLACEMENT,\n addNote,\n setTitle,\n apply\n}\n","import * as d3 from 'd3'\n\nimport svgDraw from './svgDraw'\nimport { logger } from '../../logger'\nimport { parser } from './parser/sequenceDiagram'\nimport sequenceDb from './sequenceDb'\n\nparser.yy = sequenceDb\n\nconst conf = {\n\n diagramMarginX: 50,\n diagramMarginY: 30,\n // Margin between actors\n actorMargin: 50,\n // Width of actor boxes\n width: 150,\n // Height of actor boxes\n height: 65,\n actorFontSize: 14,\n actorFontFamily: '\"Open-Sans\", \"sans-serif\"',\n // Margin around loop boxes\n boxMargin: 10,\n boxTextMargin: 5,\n noteMargin: 10,\n // Space between messages\n messageMargin: 35,\n // mirror actors under diagram\n mirrorActors: false,\n // Depending on css styling this might need adjustment\n // Prolongs the edge of the diagram downwards\n bottomMarginAdj: 1,\n\n // width of activation box\n activationWidth: 10,\n\n // text placement as: tspan | fo | old only text as before\n textPlacement: 'tspan'\n}\n\nexport const bounds = {\n data: {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined\n },\n verticalPos: 0,\n\n sequenceItems: [],\n activations: [],\n init: function () {\n this.sequenceItems = []\n this.activations = []\n this.data = {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined\n }\n this.verticalPos = 0\n },\n updateVal: function (obj, key, val, fun) {\n if (typeof obj[key] === 'undefined') {\n obj[key] = val\n } else {\n obj[key] = fun(val, obj[key])\n }\n },\n updateBounds: function (startx, starty, stopx, stopy) {\n const _self = this\n let cnt = 0\n function updateFn (type) {\n return function updateItemBounds (item) {\n cnt++\n // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems\n const n = _self.sequenceItems.length - cnt + 1\n\n _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min)\n _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max)\n\n _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min)\n _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max)\n\n if (!(type === 'activation')) {\n _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min)\n _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max)\n\n _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min)\n _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max)\n }\n }\n }\n\n this.sequenceItems.forEach(updateFn())\n this.activations.forEach(updateFn('activation'))\n },\n insert: function (startx, starty, stopx, stopy) {\n const _startx = Math.min(startx, stopx)\n const _stopx = Math.max(startx, stopx)\n const _starty = Math.min(starty, stopy)\n const _stopy = Math.max(starty, stopy)\n\n this.updateVal(bounds.data, 'startx', _startx, Math.min)\n this.updateVal(bounds.data, 'starty', _starty, Math.min)\n this.updateVal(bounds.data, 'stopx', _stopx, Math.max)\n this.updateVal(bounds.data, 'stopy', _stopy, Math.max)\n\n this.updateBounds(_startx, _starty, _stopx, _stopy)\n },\n newActivation: function (message, diagram) {\n const actorRect = parser.yy.getActors()[message.from.actor]\n const stackedSize = actorActivations(message.from.actor).length\n const x = actorRect.x + conf.width / 2 + (stackedSize - 1) * conf.activationWidth / 2\n this.activations.push({\n startx: x,\n starty: this.verticalPos + 2,\n stopx: x + conf.activationWidth,\n stopy: undefined,\n actor: message.from.actor,\n anchored: svgDraw.anchorElement(diagram)\n })\n },\n endActivation: function (message) {\n // find most recent activation for given actor\n const lastActorActivationIdx = this.activations\n .map(function (activation) { return activation.actor })\n .lastIndexOf(message.from.actor)\n const activation = this.activations.splice(lastActorActivationIdx, 1)[0]\n return activation\n },\n newLoop: function (title) {\n this.sequenceItems.push({ startx: undefined, starty: this.verticalPos, stopx: undefined, stopy: undefined, title: title })\n },\n endLoop: function () {\n const loop = this.sequenceItems.pop()\n return loop\n },\n addSectionToLoop: function (message) {\n const loop = this.sequenceItems.pop()\n loop.sections = loop.sections || []\n loop.sectionTitles = loop.sectionTitles || []\n loop.sections.push(bounds.getVerticalPos())\n loop.sectionTitles.push(message)\n this.sequenceItems.push(loop)\n },\n bumpVerticalPos: function (bump) {\n this.verticalPos = this.verticalPos + bump\n this.data.stopy = this.verticalPos\n },\n getVerticalPos: function () {\n return this.verticalPos\n },\n getBounds: function () {\n return this.data\n }\n}\n\nconst _drawLongText = (text, x, y, g, width) => {\n let textHeight = 0\n const lines = text.split(//ig)\n for (const line of lines) {\n const textObj = svgDraw.getTextObj()\n textObj.x = x\n textObj.y = y + textHeight\n textObj.textMargin = conf.noteMargin\n textObj.dy = '1em'\n textObj.text = line\n textObj.class = 'noteText'\n const textElem = svgDraw.drawText(g, textObj, width)\n textHeight += (textElem._groups || textElem)[0][0].getBBox().height\n }\n return textHeight\n}\n\n/**\n * Draws an actor in the diagram with the attaced line\n * @param center - The center of the the actor\n * @param pos The position if the actor in the liost of actors\n * @param description The text in the box\n */\nconst drawNote = function (elem, startx, verticalPos, msg, forceWidth) {\n const rect = svgDraw.getNoteRect()\n rect.x = startx\n rect.y = verticalPos\n rect.width = forceWidth || conf.width\n rect.class = 'note'\n\n let g = elem.append('g')\n const rectElem = svgDraw.drawRect(g, rect)\n\n const textHeight = _drawLongText(msg.message, startx - 4, verticalPos + 24, g, rect.width - conf.noteMargin)\n\n bounds.insert(startx, verticalPos, startx + rect.width, verticalPos + 2 * conf.noteMargin + textHeight)\n rectElem.attr('height', textHeight + 2 * conf.noteMargin)\n bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin)\n}\n\n/**\n * Draws a message\n * @param elem\n * @param startx\n * @param stopx\n * @param verticalPos\n * @param txtCenter\n * @param msg\n */\nconst drawMessage = function (elem, startx, stopx, verticalPos, msg) {\n const g = elem.append('g')\n const txtCenter = startx + (stopx - startx) / 2\n\n const textElem = g.append('text') // text label for the x axis\n .attr('x', txtCenter)\n .attr('y', verticalPos - 7)\n .style('text-anchor', 'middle')\n .attr('class', 'messageText')\n .text(msg.message)\n\n let textWidth = (textElem._groups || textElem)[0][0].getBBox().width\n\n let line\n if (startx === stopx) {\n if (conf.rightAngles) {\n line = g.append('path').attr('d', `M ${startx},${verticalPos} H ${startx + (conf.width / 2)} V ${verticalPos + 25} H ${startx}`)\n } else {\n line = g.append('path')\n .attr('d', 'M ' + startx + ',' + verticalPos + ' C ' + (startx + 60) + ',' + (verticalPos - 10) + ' ' + (startx + 60) + ',' +\n (verticalPos + 30) + ' ' + startx + ',' + (verticalPos + 20))\n }\n\n bounds.bumpVerticalPos(30)\n const dx = Math.max(textWidth / 2, 100)\n bounds.insert(startx - dx, bounds.getVerticalPos() - 10, stopx + dx, bounds.getVerticalPos())\n } else {\n line = g.append('line')\n line.attr('x1', startx)\n line.attr('y1', verticalPos)\n line.attr('x2', stopx)\n line.attr('y2', verticalPos)\n bounds.insert(startx, bounds.getVerticalPos() - 10, stopx, bounds.getVerticalPos())\n }\n // Make an SVG Container\n // Draw the line\n if (msg.type === parser.yy.LINETYPE.DOTTED || msg.type === parser.yy.LINETYPE.DOTTED_CROSS || msg.type === parser.yy.LINETYPE.DOTTED_OPEN) {\n line.style('stroke-dasharray', ('3, 3'))\n line.attr('class', 'messageLine1')\n } else {\n line.attr('class', 'messageLine0')\n }\n\n let url = ''\n if (conf.arrowMarkerAbsolute) {\n url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search\n url = url.replace(/\\(/g, '\\\\(')\n url = url.replace(/\\)/g, '\\\\)')\n }\n\n line.attr('stroke-width', 2)\n line.attr('stroke', 'black')\n line.style('fill', 'none') // remove any fill colour\n if (msg.type === parser.yy.LINETYPE.SOLID || msg.type === parser.yy.LINETYPE.DOTTED) {\n line.attr('marker-end', 'url(' + url + '#arrowhead)')\n }\n\n if (msg.type === parser.yy.LINETYPE.SOLID_CROSS || msg.type === parser.yy.LINETYPE.DOTTED_CROSS) {\n line.attr('marker-end', 'url(' + url + '#crosshead)')\n }\n}\n\nexport const drawActors = function (diagram, actors, actorKeys, verticalPos) {\n // Draw the actors\n for (let i = 0; i < actorKeys.length; i++) {\n const key = actorKeys[i]\n\n // Add some rendering data to the object\n actors[key].x = i * conf.actorMargin + i * conf.width\n actors[key].y = verticalPos\n actors[key].width = conf.diagramMarginX\n actors[key].height = conf.diagramMarginY\n\n // Draw the box with the attached line\n svgDraw.drawActor(diagram, actors[key].x, verticalPos, actors[key].description, conf)\n bounds.insert(actors[key].x, verticalPos, actors[key].x + conf.width, conf.height)\n }\n\n // Add a margin between the actor boxes and the first arrow\n bounds.bumpVerticalPos(conf.height)\n}\n\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf)\n\n keys.forEach(function (key) {\n conf[key] = cnf[key]\n })\n}\n\nconst actorActivations = function (actor) {\n return bounds.activations.filter(function (activation) {\n return activation.actor === actor\n })\n}\n\nconst actorFlowVerticaBounds = function (actor) {\n // handle multiple stacked activations for same actor\n const actors = parser.yy.getActors()\n const activations = actorActivations(actor)\n\n const left = activations.reduce(function (acc, activation) { return Math.min(acc, activation.startx) }, actors[actor].x + conf.width / 2)\n const right = activations.reduce(function (acc, activation) { return Math.max(acc, activation.stopx) }, actors[actor].x + conf.width / 2)\n return [left, right]\n}\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n parser.yy.clear()\n parser.parse(text + '\\n')\n\n bounds.init()\n const diagram = d3.select(`[id=\"${id}\"]`)\n\n let startx\n let stopx\n let forceWidth\n\n // Fetch data from the parsing\n const actors = parser.yy.getActors()\n const actorKeys = parser.yy.getActorKeys()\n const messages = parser.yy.getMessages()\n const title = parser.yy.getTitle()\n drawActors(diagram, actors, actorKeys, 0)\n\n // The arrow head definition is attached to the svg once\n svgDraw.insertArrowHead(diagram)\n svgDraw.insertArrowCrossHead(diagram)\n\n function activeEnd (msg, verticalPos) {\n const activationData = bounds.endActivation(msg)\n if (activationData.starty + 18 > verticalPos) {\n activationData.starty = verticalPos - 6\n verticalPos += 12\n }\n svgDraw.drawActivation(diagram, activationData, verticalPos, conf, actorActivations(msg.from.actor).length)\n\n bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos)\n }\n\n // const lastMsg\n\n // Draw the messages/signals\n messages.forEach(function (msg) {\n let loopData\n switch (msg.type) {\n case parser.yy.LINETYPE.NOTE:\n bounds.bumpVerticalPos(conf.boxMargin)\n\n startx = actors[msg.from].x\n stopx = actors[msg.to].x\n\n if (msg.placement === parser.yy.PLACEMENT.RIGHTOF) {\n drawNote(diagram, startx + (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg)\n } else if (msg.placement === parser.yy.PLACEMENT.LEFTOF) {\n drawNote(diagram, startx - (conf.width + conf.actorMargin) / 2, bounds.getVerticalPos(), msg)\n } else if (msg.to === msg.from) {\n // Single-actor over\n drawNote(diagram, startx, bounds.getVerticalPos(), msg)\n } else {\n // Multi-actor over\n forceWidth = Math.abs(startx - stopx) + conf.actorMargin\n drawNote(diagram, (startx + stopx + conf.width - forceWidth) / 2, bounds.getVerticalPos(), msg,\n forceWidth)\n }\n break\n case parser.yy.LINETYPE.ACTIVE_START:\n bounds.newActivation(msg, diagram)\n break\n case parser.yy.LINETYPE.ACTIVE_END:\n activeEnd(msg, bounds.getVerticalPos())\n break\n case parser.yy.LINETYPE.LOOP_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.LOOP_END:\n loopData = bounds.endLoop()\n\n svgDraw.drawLoop(diagram, loopData, 'loop', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.OPT_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.OPT_END:\n loopData = bounds.endLoop()\n\n svgDraw.drawLoop(diagram, loopData, 'opt', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.ALT_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.ALT_ELSE:\n bounds.bumpVerticalPos(conf.boxMargin)\n loopData = bounds.addSectionToLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.ALT_END:\n loopData = bounds.endLoop()\n\n svgDraw.drawLoop(diagram, loopData, 'alt', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.PAR_START:\n bounds.bumpVerticalPos(conf.boxMargin)\n bounds.newLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin)\n break\n case parser.yy.LINETYPE.PAR_AND:\n bounds.bumpVerticalPos(conf.boxMargin)\n loopData = bounds.addSectionToLoop(msg.message)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n case parser.yy.LINETYPE.PAR_END:\n loopData = bounds.endLoop()\n svgDraw.drawLoop(diagram, loopData, 'par', conf)\n bounds.bumpVerticalPos(conf.boxMargin)\n break\n default:\n try {\n // lastMsg = msg\n bounds.bumpVerticalPos(conf.messageMargin)\n const fromBounds = actorFlowVerticaBounds(msg.from)\n const toBounds = actorFlowVerticaBounds(msg.to)\n const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0\n const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1\n startx = fromBounds[fromIdx]\n stopx = toBounds[toIdx]\n\n const verticalPos = bounds.getVerticalPos()\n drawMessage(diagram, startx, stopx, verticalPos, msg)\n const allBounds = fromBounds.concat(toBounds)\n bounds.insert(Math.min.apply(null, allBounds), verticalPos, Math.max.apply(null, allBounds), verticalPos)\n } catch (e) {\n logger.error('error while drawing message', e)\n }\n }\n })\n\n if (conf.mirrorActors) {\n // Draw actors below diagram\n bounds.bumpVerticalPos(conf.boxMargin * 2)\n drawActors(diagram, actors, actorKeys, bounds.getVerticalPos())\n }\n\n const box = bounds.getBounds()\n\n // Adjust line height of actor lines now that the height of the diagram is known\n logger.debug('For line height fix Querying: #' + id + ' .actor-line')\n const actorLines = d3.selectAll('#' + id + ' .actor-line')\n actorLines.attr('y2', box.stopy)\n\n let height = box.stopy - box.starty + 2 * conf.diagramMarginY\n if (conf.mirrorActors) {\n height = height - conf.boxMargin + conf.bottomMarginAdj\n }\n\n const width = (box.stopx - box.startx) + (2 * conf.diagramMarginX)\n\n if (title) {\n diagram.append('text')\n .text(title)\n .attr('x', ((box.stopx - box.startx) / 2) - (2 * conf.diagramMarginX))\n .attr('y', -25)\n }\n\n if (conf.useMaxWidth) {\n diagram.attr('height', '100%')\n diagram.attr('width', '100%')\n diagram.attr('style', 'max-width:' + (width) + 'px;')\n } else {\n diagram.attr('height', height)\n diagram.attr('width', width)\n }\n const extraVertForTitle = title ? 40 : 0\n diagram.attr('viewBox', (box.startx - conf.diagramMarginX) + ' -' + (conf.diagramMarginY + extraVertForTitle) + ' ' + width + ' ' + (height + extraVertForTitle))\n}\n\nexport default {\n bounds,\n drawActors,\n setConf,\n draw\n}\n","export const drawRect = function (elem, rectData) {\n const rectElem = elem.append('rect')\n rectElem.attr('x', rectData.x)\n rectElem.attr('y', rectData.y)\n rectElem.attr('fill', rectData.fill)\n rectElem.attr('stroke', rectData.stroke)\n rectElem.attr('width', rectData.width)\n rectElem.attr('height', rectData.height)\n rectElem.attr('rx', rectData.rx)\n rectElem.attr('ry', rectData.ry)\n\n if (typeof rectData.class !== 'undefined') {\n rectElem.attr('class', rectData.class)\n }\n\n return rectElem\n}\n\nexport const drawText = function (elem, textData, width) {\n // Remove and ignore br:s\n const nText = textData.text.replace(//ig, ' ')\n\n const textElem = elem.append('text')\n textElem.attr('x', textData.x)\n textElem.attr('y', textData.y)\n textElem.style('text-anchor', textData.anchor)\n textElem.attr('fill', textData.fill)\n if (typeof textData.class !== 'undefined') {\n textElem.attr('class', textData.class)\n }\n\n const span = textElem.append('tspan')\n span.attr('x', textData.x + textData.textMargin * 2)\n span.attr('fill', textData.fill)\n span.text(nText)\n\n return textElem\n}\n\nexport const drawLabel = function (elem, txtObject) {\n function genPoints (x, y, width, height, cut) {\n return x + ',' + y + ' ' +\n (x + width) + ',' + y + ' ' +\n (x + width) + ',' + (y + height - cut) + ' ' +\n (x + width - cut * 1.2) + ',' + (y + height) + ' ' +\n (x) + ',' + (y + height)\n }\n const polygon = elem.append('polygon')\n polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7))\n polygon.attr('class', 'labelBox')\n\n txtObject.y = txtObject.y + txtObject.labelMargin\n txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin\n drawText(elem, txtObject)\n}\n\nlet actorCnt = -1\n/**\n * Draws an actor in the diagram with the attaced line\n * @param center - The center of the the actor\n * @param pos The position if the actor in the liost of actors\n * @param description The text in the box\n */\nexport const drawActor = function (elem, left, verticalPos, description, conf) {\n const center = left + (conf.width / 2)\n const g = elem.append('g')\n if (verticalPos === 0) {\n actorCnt++\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', 5)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n }\n\n const rect = getNoteRect()\n rect.x = left\n rect.y = verticalPos\n rect.fill = '#eaeaea'\n rect.width = conf.width\n rect.height = conf.height\n rect.class = 'actor'\n rect.rx = 3\n rect.ry = 3\n drawRect(g, rect)\n\n _drawTextCandidateFunc(conf)(description, g,\n rect.x, rect.y, rect.width, rect.height, { 'class': 'actor' }, conf)\n}\n\nexport const anchorElement = function (elem) {\n return elem.append('g')\n}\n/**\n * Draws an actor in the diagram with the attaced line\n * @param elem - element to append activation rect\n * @param bounds - activation box bounds\n * @param verticalPos - precise y cooridnate of bottom activation box edge\n */\nexport const drawActivation = function (elem, bounds, verticalPos, conf, actorActivations) {\n const rect = getNoteRect()\n const g = bounds.anchored\n rect.x = bounds.startx\n rect.y = bounds.starty\n rect.class = 'activation' + (actorActivations % 3) // Will evaluate to 0, 1 or 2\n rect.width = bounds.stopx - bounds.startx\n rect.height = verticalPos - bounds.starty\n drawRect(g, rect)\n}\n\n/**\n * Draws an actor in the diagram with the attaced line\n * @param center - The center of the the actor\n * @param pos The position if the actor in the list of actors\n * @param description The text in the box\n */\nexport const drawLoop = function (elem, bounds, labelText, conf) {\n const g = elem.append('g')\n const drawLoopLine = function (startx, starty, stopx, stopy) {\n return g.append('line')\n .attr('x1', startx)\n .attr('y1', starty)\n .attr('x2', stopx)\n .attr('y2', stopy)\n .attr('class', 'loopLine')\n }\n drawLoopLine(bounds.startx, bounds.starty, bounds.stopx, bounds.starty)\n drawLoopLine(bounds.stopx, bounds.starty, bounds.stopx, bounds.stopy)\n drawLoopLine(bounds.startx, bounds.stopy, bounds.stopx, bounds.stopy)\n drawLoopLine(bounds.startx, bounds.starty, bounds.startx, bounds.stopy)\n if (typeof bounds.sections !== 'undefined') {\n bounds.sections.forEach(function (item) {\n drawLoopLine(bounds.startx, item, bounds.stopx, item).style('stroke-dasharray', '3, 3')\n })\n }\n\n let txt = getTextObj()\n txt.text = labelText\n txt.x = bounds.startx\n txt.y = bounds.starty\n txt.labelMargin = 1.5 * 10 // This is the small box that says \"loop\"\n txt.class = 'labelText' // Its size & position are fixed.\n\n drawLabel(g, txt)\n\n txt = getTextObj()\n txt.text = '[ ' + bounds.title + ' ]'\n txt.x = bounds.startx + (bounds.stopx - bounds.startx) / 2\n txt.y = bounds.starty + 1.5 * conf.boxMargin\n txt.anchor = 'middle'\n txt.class = 'loopText'\n\n drawText(g, txt)\n\n if (typeof bounds.sectionTitles !== 'undefined') {\n bounds.sectionTitles.forEach(function (item, idx) {\n if (item !== '') {\n txt.text = '[ ' + item + ' ]'\n txt.y = bounds.sections[idx] + 1.5 * conf.boxMargin\n drawText(g, txt)\n }\n })\n }\n}\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\nexport const insertArrowHead = function (elem) {\n elem.append('defs').append('marker')\n .attr('id', 'arrowhead')\n .attr('refX', 5)\n .attr('refY', 2)\n .attr('markerWidth', 6)\n .attr('markerHeight', 4)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0,0 V 4 L6,2 Z') // this is actual shape for arrowhead\n}\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n */\nexport const insertArrowCrossHead = function (elem) {\n const defs = elem.append('defs')\n const marker = defs.append('marker')\n .attr('id', 'crosshead')\n .attr('markerWidth', 15)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .attr('refX', 16)\n .attr('refY', 4)\n\n // The arrow\n marker.append('path')\n .attr('fill', 'black')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', ('0, 0'))\n .attr('stroke-width', '1px')\n .attr('d', 'M 9,2 V 6 L16,4 Z')\n\n // The cross\n marker.append('path')\n .attr('fill', 'none')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', ('0, 0'))\n .attr('stroke-width', '1px')\n .attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7')\n // this is actual shape for arrowhead\n}\n\nexport const getTextObj = function () {\n const txt = {\n x: 0,\n y: 0,\n 'fill': undefined,\n 'text-anchor': 'start',\n style: '#666',\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0\n }\n return txt\n}\n\nexport const getNoteRect = function () {\n const rect = {\n x: 0,\n y: 0,\n fill: '#EDF2AE',\n stroke: '#666',\n width: 100,\n anchor: 'start',\n height: 100,\n rx: 0,\n ry: 0\n }\n return rect\n}\n\nconst _drawTextCandidateFunc = (function () {\n function byText (content, g, x, y, width, height, textAttrs) {\n const text = g.append('text')\n .attr('x', x + width / 2).attr('y', y + height / 2 + 5)\n .style('text-anchor', 'middle')\n .text(content)\n _setTextAttrs(text, textAttrs)\n }\n\n function byTspan (content, g, x, y, width, height, textAttrs, conf) {\n const { actorFontSize, actorFontFamily } = conf\n\n const lines = content.split(//ig)\n for (let i = 0; i < lines.length; i++) {\n const dy = (i * actorFontSize) - (actorFontSize * (lines.length - 1) / 2)\n const text = g.append('text')\n .attr('x', x + width / 2).attr('y', y)\n .style('text-anchor', 'middle')\n .style('font-size', actorFontSize)\n .style('font-family', actorFontFamily)\n text.append('tspan')\n .attr('x', x + width / 2).attr('dy', dy)\n .text(lines[i])\n\n text.attr('y', y + height / 2.0)\n .attr('dominant-baseline', 'central')\n .attr('alignment-baseline', 'central')\n\n _setTextAttrs(text, textAttrs)\n }\n }\n\n function byFo (content, g, x, y, width, height, textAttrs, conf) {\n const s = g.append('switch')\n const f = s.append('foreignObject')\n .attr('x', x).attr('y', y)\n .attr('width', width).attr('height', height)\n\n const text = f.append('div').style('display', 'table')\n .style('height', '100%').style('width', '100%')\n\n text.append('div').style('display', 'table-cell')\n .style('text-align', 'center').style('vertical-align', 'middle')\n .text(content)\n\n byTspan(content, s, x, y, width, height, textAttrs, conf)\n _setTextAttrs(text, textAttrs)\n }\n\n function _setTextAttrs (toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key])\n }\n }\n }\n\n return function (conf) {\n return conf.textPlacement === 'fo' ? byFo : (\n conf.textPlacement === 'old' ? byText : byTspan)\n }\n})()\n\nexport default {\n drawRect,\n drawText,\n drawLabel,\n drawActor,\n anchorElement,\n drawActivation,\n drawLoop,\n insertArrowHead,\n insertArrowCrossHead,\n getTextObj,\n getNoteRect\n}\n","import moment from 'moment-mini'\n\nexport const LEVELS = {\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5\n}\n\nexport const logger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n fatal: () => {}\n}\n\nexport const setLogLevel = function (level) {\n logger.debug = () => {}\n logger.info = () => {}\n logger.warn = () => {}\n logger.error = () => {}\n logger.fatal = () => {}\n if (level <= LEVELS.fatal) {\n logger.fatal = console.log.bind(console, '\\x1b[35m', format('FATAL'))\n }\n if (level <= LEVELS.error) {\n logger.error = console.log.bind(console, '\\x1b[31m', format('ERROR'))\n }\n if (level <= LEVELS.warn) {\n logger.warn = console.log.bind(console, `\\x1b[33m`, format('WARN'))\n }\n if (level <= LEVELS.info) {\n logger.info = console.log.bind(console, '\\x1b[34m', format('INFO'))\n }\n if (level <= LEVELS.debug) {\n logger.debug = console.log.bind(console, '\\x1b[32m', format('DEBUG'))\n }\n}\n\nconst format = (level) => {\n const time = moment().format('HH:mm:ss.SSS')\n return `${time} : ${level} : `\n}\n","/**\n * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid functionality and to render\n * the diagrams to svg code.\n */\nimport he from 'he'\n\nimport mermaidAPI from './mermaidAPI'\nimport { logger } from './logger'\n\n/**\n * ## init\n * Function that goes through the document to find the chart definitions in there and render them.\n *\n * The function tags the processed attributes with the attribute data-processed and ignores found elements with the\n * attribute already set. This way the init function can be triggered several times.\n *\n * Optionally, `init` can accept in the second argument one of the following:\n * - a DOM Node\n * - an array of DOM nodes (as would come from a jQuery selector)\n * - a W3C selector, a la `.mermaid`\n *\n * ```mermaid\n * graph LR;\n * a(Find elements)-->b{Processed}\n * b-->|Yes|c(Leave element)\n * b-->|No |d(Transform)\n * ```\n * Renders the mermaid diagrams\n * @param nodes a css selector or an array of nodes\n */\nconst init = function () {\n const conf = mermaidAPI.getConfig()\n logger.debug('Starting rendering diagrams')\n let nodes\n if (arguments.length >= 2) {\n /*! sequence config was passed as #1 */\n if (typeof arguments[0] !== 'undefined') {\n mermaid.sequenceConfig = arguments[0]\n }\n\n nodes = arguments[1]\n } else {\n nodes = arguments[0]\n }\n\n // if last argument is a function this is the callback function\n let callback\n if (typeof arguments[arguments.length - 1] === 'function') {\n callback = arguments[arguments.length - 1]\n logger.debug('Callback function found')\n } else {\n if (typeof conf.mermaid !== 'undefined') {\n if (typeof conf.mermaid.callback === 'function') {\n callback = conf.mermaid.callback\n logger.debug('Callback function found')\n } else {\n logger.debug('No Callback function found')\n }\n }\n }\n nodes = nodes === undefined ? document.querySelectorAll('.mermaid')\n : typeof nodes === 'string' ? document.querySelectorAll(nodes)\n : nodes instanceof window.Node ? [nodes]\n : nodes // Last case - sequence config was passed pick next\n\n logger.debug('Start On Load before: ' + mermaid.startOnLoad)\n if (typeof mermaid.startOnLoad !== 'undefined') {\n logger.debug('Start On Load inner: ' + mermaid.startOnLoad)\n mermaidAPI.initialize({ startOnLoad: mermaid.startOnLoad })\n }\n\n if (typeof mermaid.ganttConfig !== 'undefined') {\n mermaidAPI.initialize({ gantt: mermaid.ganttConfig })\n }\n\n let txt\n\n for (let i = 0; i < nodes.length; i++) {\n const element = nodes[i]\n\n /*! Check if previously processed */\n if (!element.getAttribute('data-processed')) {\n element.setAttribute('data-processed', true)\n } else {\n continue\n }\n\n const id = `mermaid-${Date.now()}`\n\n // Fetch the graph definition including tags\n txt = element.innerHTML\n\n // transforms the html to pure text\n txt = he.decode(txt).trim().replace(/
/ig, '
')\n\n mermaidAPI.render(id, txt, (svgCode, bindFunctions) => {\n element.innerHTML = svgCode\n if (typeof callback !== 'undefined') {\n callback(id)\n }\n bindFunctions(element)\n }, element)\n }\n}\n\nconst initialize = function (config) {\n logger.debug('Initializing mermaid ')\n if (typeof config.mermaid !== 'undefined') {\n if (typeof config.mermaid.startOnLoad !== 'undefined') {\n mermaid.startOnLoad = config.mermaid.startOnLoad\n }\n if (typeof config.mermaid.htmlLabels !== 'undefined') {\n mermaid.htmlLabels = config.mermaid.htmlLabels\n }\n }\n mermaidAPI.initialize(config)\n}\n\n/**\n * ##contentLoaded\n * Callback function that is called when page is loaded. This functions fetches configuration for mermaid rendering and\n * calls init for rendering the mermaid diagrams on the page.\n */\nconst contentLoaded = function () {\n let config\n\n if (mermaid.startOnLoad) {\n // No config found, do check API config\n config = mermaidAPI.getConfig()\n if (config.startOnLoad) {\n mermaid.init()\n }\n } else {\n if (typeof mermaid.startOnLoad === 'undefined') {\n logger.debug('In start, no config')\n config = mermaidAPI.getConfig()\n if (config.startOnLoad) {\n mermaid.init()\n }\n }\n }\n}\n\nif (typeof document !== 'undefined') {\n /*!\n * Wait for document loaded before starting the execution\n */\n window.addEventListener('load', function () {\n contentLoaded()\n }, false)\n}\n\nconst mermaid = {\n startOnLoad: true,\n htmlLabels: true,\n\n mermaidAPI,\n parse: mermaidAPI.parse,\n render: mermaidAPI.render,\n\n init,\n initialize,\n\n contentLoaded\n}\n\nexport default mermaid\n","/**\n * ---\n * title: mermaidAPI\n * order: 5\n * ---\n * # mermaidAPI\n * This is the api to be used when handling the integration with the web page instead of using the default integration\n * (mermaid.js).\n *\n * The core of this api is the **render** function that given a graph definitionas text renders the graph/diagram and\n * returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it\n * somewhere in the page or something completely different.\n*/\nimport * as d3 from 'd3'\nimport scope from 'scope-css'\nimport pkg from '../package.json'\n\nimport { logger, setLogLevel } from './logger'\nimport utils from './utils'\nimport flowRenderer from './diagrams/flowchart/flowRenderer'\nimport flowParser from './diagrams/flowchart/parser/flow'\nimport flowDb from './diagrams/flowchart/flowDb'\nimport sequenceRenderer from './diagrams/sequence/sequenceRenderer'\nimport sequenceParser from './diagrams/sequence/parser/sequenceDiagram'\nimport sequenceDb from './diagrams/sequence/sequenceDb'\nimport ganttRenderer from './diagrams/gantt/ganttRenderer'\nimport ganttParser from './diagrams/gantt/parser/gantt'\nimport ganttDb from './diagrams/gantt/ganttDb'\nimport classRenderer from './diagrams/class/classRenderer'\nimport classParser from './diagrams/class/parser/classDiagram'\nimport classDb from './diagrams/class/classDb'\nimport gitGraphRenderer from './diagrams/git/gitGraphRenderer'\nimport gitGraphParser from './diagrams/git/parser/gitGraph'\nimport gitGraphAst from './diagrams/git/gitGraphAst'\nimport infoRenderer from './diagrams/info/infoRenderer'\nimport infoParser from './diagrams/info/parser/info'\nimport infoDb from './diagrams/info/infoDb'\n\nconst themes = {}\nfor (const themeName of ['default', 'forest', 'dark', 'neutral']) {\n themes[themeName] = require(`./themes/${themeName}/index.scss`)\n}\n\n/**\n * ## Configuration\n * These are the default options which can be overridden with the initialization call as in the example below:\n * ```\n * mermaid.initialize({\n * flowchart:{\n * htmlLabels: false\n * }\n * });\n * ```\n */\nconst config = {\n\n /** theme , the CSS style sheet\n *\n * **theme** - Choose one of the built-in themes: default, forest, dark or neutral. To disable any pre-defined mermaid theme, use \"null\".\n * **themeCSS** - Use your own CSS. This overrides **theme**.\n *```\n * \"theme\": \"forest\",\n * \"themeCSS\": \".node rect { fill: red; }\"\n *```\n */\n\n theme: 'default',\n themeCSS: undefined,\n\n /**\n * logLevel , decides the amount of logging to be used.\n * * debug: 1\n * * info: 2\n * * warn: 3\n * * error: 4\n * * fatal: 5\n */\n logLevel: 5,\n\n /**\n * **startOnLoad** - This options controls whether or mermaid starts when the page loads\n */\n startOnLoad: true,\n\n /**\n * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or\n * an anchor, #. This matters if you are using base tag settings.\n */\n arrowMarkerAbsolute: false,\n\n /**\n * ### flowchart\n * *The object containing configurations specific for flowcharts*\n */\n flowchart: {\n /**\n * **htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels\n * on the edges\n */\n htmlLabels: true,\n\n curve: 'linear'\n },\n\n /**\n * ### sequenceDiagram\n * The object containing configurations specific for sequence diagrams\n */\n sequence: {\n\n /**\n * **diagramMarginX** - margin to the right and left of the sequence diagram\n */\n diagramMarginX: 50,\n\n /**\n * **diagramMarginY** - margin to the over and under the sequence diagram\n */\n diagramMarginY: 10,\n\n /**\n * **actorMargin** - Margin between actors\n */\n actorMargin: 50,\n\n /**\n * **width** - Width of actor boxes\n */\n width: 150,\n\n /**\n * **height** - Height of actor boxes\n */\n height: 65,\n\n /**\n * **boxMargin** - Margin around loop boxes\n */\n boxMargin: 10,\n\n /**\n * **boxTextMargin** - margin around the text in loop/alt/opt boxes\n */\n boxTextMargin: 5,\n\n /**\n * **noteMargin** - margin around notes\n */\n noteMargin: 10,\n\n /**\n * **messageMargin** - Space between messages\n */\n messageMargin: 35,\n\n /**\n * **mirrorActors** - mirror actors under diagram\n */\n mirrorActors: true,\n\n /**\n * **bottomMarginAdj** - Depending on css styling this might need adjustment.\n * Prolongs the edge of the diagram downwards\n */\n bottomMarginAdj: 1,\n\n /**\n * **useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the\n * available space if not the absolute space required is used\n */\n useMaxWidth: true,\n\n /**\n * **rightAngles** - this will display arrows that start and begin at the same node as right angles, rather than a curve\n */\n rightAngles: false\n },\n\n /** ### gantt\n * The object containing configurations specific for gantt diagrams*\n */\n gantt: {\n /**\n * **titleTopMargin** - margin top for the text over the gantt diagram\n */\n titleTopMargin: 25,\n\n /**\n * **barHeight** - the height of the bars in the graph\n */\n barHeight: 20,\n\n /**\n * **barGap** - the margin between the different activities in the gantt diagram\n */\n barGap: 4,\n\n /**\n * **topPadding** - margin between title and gantt diagram and between axis and gantt diagram.\n */\n topPadding: 50,\n\n /**\n * **leftPadding** - the space allocated for the section name to the left of the activities.\n */\n leftPadding: 75,\n\n /**\n * **gridLineStartPadding** - Vertical starting position of the grid lines\n */\n gridLineStartPadding: 35,\n\n /**\n * **fontSize** - font size ...\n */\n fontSize: 11,\n\n /**\n * **fontFamily** - font family ...\n */\n fontFamily: '\"Open-Sans\", \"sans-serif\"',\n\n /**\n * **numberSectionStyles** - the number of alternating section styles\n */\n numberSectionStyles: 4,\n\n /**\n * **axisFormat** - datetime format of the axis, this might need adjustment to match your locale and preferences\n */\n axisFormat: '%Y-%m-%d'\n },\n class: {},\n git: {}\n}\n\nsetLogLevel(config.logLevel)\n\nfunction parse (text) {\n const graphType = utils.detectType(text)\n let parser\n\n logger.debug('Type ' + graphType)\n switch (graphType) {\n case 'git':\n parser = gitGraphParser\n parser.parser.yy = gitGraphAst\n break\n case 'flowchart':\n parser = flowParser\n parser.parser.yy = flowDb\n break\n case 'sequence':\n parser = sequenceParser\n parser.parser.yy = sequenceDb\n break\n case 'gantt':\n parser = ganttParser\n parser.parser.yy = ganttDb\n break\n case 'class':\n parser = classParser\n parser.parser.yy = classDb\n break\n case 'info':\n logger.debug('info info info')\n parser = infoParser\n parser.parser.yy = infoDb\n break\n }\n\n parser.parser.yy.parseError = (str, hash) => {\n const error = { str, hash }\n throw error\n }\n\n parser.parse(text)\n}\n\nexport const encodeEntities = function (text) {\n let txt = text\n\n txt = txt.replace(/style.*:\\S*#.*;/g, function (s) {\n const innerTxt = s.substring(0, s.length - 1)\n return innerTxt\n })\n txt = txt.replace(/classDef.*:\\S*#.*;/g, function (s) {\n const innerTxt = s.substring(0, s.length - 1)\n return innerTxt\n })\n\n txt = txt.replace(/#\\w+;/g, function (s) {\n const innerTxt = s.substring(1, s.length - 1)\n\n const isInt = /^\\+?\\d+$/.test(innerTxt)\n if (isInt) {\n return 'fl°°' + innerTxt + '¶ß'\n } else {\n return 'fl°' + innerTxt + '¶ß'\n }\n })\n\n return txt\n}\n\nexport const decodeEntities = function (text) {\n let txt = text\n\n txt = txt.replace(/fl°°/g, function () {\n return '&#'\n })\n txt = txt.replace(/fl°/g, function () {\n return '&'\n })\n txt = txt.replace(/¶ß/g, function () {\n return ';'\n })\n\n return txt\n}\n/**\n * ##render\n * Function that renders an svg with a graph from a chart definition. Usage example below.\n *\n * ```\n * mermaidAPI.initialize({\n * startOnLoad:true\n * });\n * $(function(){\n * const graphDefinition = 'graph TB\\na-->b';\n * const cb = function(svgGraph){\n * console.log(svgGraph);\n * };\n * mermaidAPI.render('id1',graphDefinition,cb);\n * });\n *```\n * @param id the id of the element to be rendered\n * @param txt the graph definition\n * @param cb callback which is called after rendering is finished with the svg code as inparam.\n * @param container selector to element in which a div with the graph temporarily will be inserted. In one is\n * provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is\n * completed.\n */\nconst render = function (id, txt, cb, container) {\n if (typeof container !== 'undefined') {\n container.innerHTML = ''\n\n d3.select(container).append('div')\n .attr('id', 'd' + id)\n .append('svg')\n .attr('id', id)\n .attr('width', '100%')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .append('g')\n } else {\n const element = document.querySelector('#' + 'd' + id)\n if (element) {\n element.innerHTML = ''\n }\n\n d3.select('body').append('div')\n .attr('id', 'd' + id)\n .append('svg')\n .attr('id', id)\n .attr('width', '100%')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .append('g')\n }\n\n window.txt = txt\n txt = encodeEntities(txt)\n\n const element = d3.select('#d' + id).node()\n const graphType = utils.detectType(txt)\n\n // insert inline style into svg\n const svg = element.firstChild\n const firstChild = svg.firstChild\n\n // pre-defined theme\n let style = themes[config.theme]\n if (style === undefined) {\n style = ''\n }\n\n // user provided theme CSS\n if (config.themeCSS !== undefined) {\n style += `\\n${config.themeCSS}`\n }\n\n // classDef\n if (graphType === 'flowchart') {\n const classes = flowRenderer.getClasses(txt)\n for (const className in classes) {\n style += `\\n.${className} > * { ${classes[className].styles.join(' !important; ')} !important; }`\n }\n }\n\n const style1 = document.createElement('style')\n style1.innerHTML = scope(style, `#${id}`)\n svg.insertBefore(style1, firstChild)\n\n const style2 = document.createElement('style')\n const cs = window.getComputedStyle(svg)\n style2.innerHTML = `#${id} {\n color: ${cs.color};\n font: ${cs.font};\n }`\n svg.insertBefore(style2, firstChild)\n\n switch (graphType) {\n case 'git':\n config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n gitGraphRenderer.setConf(config.git)\n gitGraphRenderer.draw(txt, id, false)\n break\n case 'flowchart':\n config.flowchart.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n flowRenderer.setConf(config.flowchart)\n flowRenderer.draw(txt, id, false)\n break\n case 'sequence':\n config.sequence.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n if (config.sequenceDiagram) { // backwards compatibility\n sequenceRenderer.setConf(Object.assign(config.sequence, config.sequenceDiagram))\n console.error('`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.')\n } else {\n sequenceRenderer.setConf(config.sequence)\n }\n sequenceRenderer.draw(txt, id)\n break\n case 'gantt':\n config.gantt.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n ganttRenderer.setConf(config.gantt)\n ganttRenderer.draw(txt, id)\n break\n case 'class':\n config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n classRenderer.setConf(config.class)\n classRenderer.draw(txt, id)\n break\n case 'info':\n config.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute\n infoRenderer.setConf(config.class)\n infoRenderer.draw(txt, id, pkg.version)\n break\n }\n\n d3.select(`[id=\"${id}\"]`).selectAll('foreignobject > *').attr('xmlns', 'http://www.w3.org/1999/xhtml')\n\n let url = ''\n if (config.arrowMarkerAbsolute) {\n url = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search\n url = url.replace(/\\(/g, '\\\\(')\n url = url.replace(/\\)/g, '\\\\)')\n }\n\n // Fix for when the base tag is used\n let svgCode = d3.select('#d' + id).node().innerHTML.replace(/url\\(#arrowhead/g, 'url(' + url + '#arrowhead', 'g')\n\n svgCode = decodeEntities(svgCode)\n\n if (typeof cb !== 'undefined') {\n cb(svgCode, flowDb.bindFunctions)\n cb(svgCode, ganttDb.bindFunctions)\n } else {\n logger.warn('CB = undefined!')\n }\n\n const node = d3.select('#d' + id).node()\n if (node !== null && typeof node.remove === 'function') {\n d3.select('#d' + id).node().remove()\n }\n\n return svgCode\n}\n\nconst setConf = function (cnf) {\n // Top level initially mermaid, gflow, sequenceDiagram and gantt\n const lvl1Keys = Object.keys(cnf)\n for (let i = 0; i < lvl1Keys.length; i++) {\n if (typeof cnf[lvl1Keys[i]] === 'object' && cnf[lvl1Keys[i]] != null) {\n const lvl2Keys = Object.keys(cnf[lvl1Keys[i]])\n\n for (let j = 0; j < lvl2Keys.length; j++) {\n logger.debug('Setting conf ', lvl1Keys[i], '-', lvl2Keys[j])\n if (typeof config[lvl1Keys[i]] === 'undefined') {\n config[lvl1Keys[i]] = {}\n }\n logger.debug('Setting config: ' + lvl1Keys[i] + ' ' + lvl2Keys[j] + ' to ' + cnf[lvl1Keys[i]][lvl2Keys[j]])\n config[lvl1Keys[i]][lvl2Keys[j]] = cnf[lvl1Keys[i]][lvl2Keys[j]]\n }\n } else {\n config[lvl1Keys[i]] = cnf[lvl1Keys[i]]\n }\n }\n}\n\nfunction initialize (options) {\n logger.debug('Initializing mermaidAPI ', pkg.version)\n // Update default config with options supplied at initialization\n if (typeof options === 'object') {\n setConf(options)\n }\n setLogLevel(config.logLevel)\n}\n\nfunction getConfig () {\n return config\n}\n\nconst mermaidAPI = {\n render,\n parse,\n initialize,\n getConfig\n}\n\nexport default mermaidAPI\n","var map = {\n\t\"./dark/index.scss\": \"./src/themes/dark/index.scss\",\n\t\"./default/index.scss\": \"./src/themes/default/index.scss\",\n\t\"./forest/index.scss\": \"./src/themes/forest/index.scss\",\n\t\"./neutral/index.scss\": \"./src/themes/neutral/index.scss\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/themes sync recursive ^\\\\.\\\\/.*\\\\/index\\\\.scss$\";","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","// css-to-string-loader: transforms styles from css-loader to a string output\n\n// Get the styles\nvar styles = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./index.scss\");\n\nif (typeof styles === 'string') {\n // Return an existing string\n module.exports = styles;\n} else {\n // Call the custom toString method from css-loader module\n module.exports = styles.toString();\n}","import * as d3 from 'd3'\nimport { logger } from './logger'\n\n/**\n * @function detectType\n * Detects the type of the graph text.\n * ```mermaid\n * graph LR\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * @param {string} text The text defining the graph\n * @returns {string} A graph definition key\n */\nexport const detectType = function (text) {\n text = text.replace(/^\\s*%%.*\\n/g, '\\n')\n logger.debug('Detecting diagram type based on the text ' + text)\n if (text.match(/^\\s*sequenceDiagram/)) {\n return 'sequence'\n }\n\n if (text.match(/^\\s*gantt/)) {\n return 'gantt'\n }\n\n if (text.match(/^\\s*classDiagram/)) {\n return 'class'\n }\n\n if (text.match(/^\\s*gitGraph/)) {\n return 'git'\n }\n\n if (text.match(/^\\s*info/)) {\n return 'info'\n }\n\n return 'flowchart'\n}\n\n/**\n * @function isSubstringInArray\n * Detects whether a substring in present in a given array\n * @param {string} str The substring to detect\n * @param {array} arr The array to search\n * @returns {number} the array index containing the substring or -1 if not present\n **/\nexport const isSubstringInArray = function (str, arr) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i].match(str)) return i\n }\n return -1\n}\n\nexport const interpolateToCurve = (interpolate, defaultCurve) => {\n if (!interpolate) {\n return defaultCurve\n }\n const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`\n return d3[curveName] || defaultCurve\n}\n\nexport default {\n detectType,\n isSubstringInArray,\n interpolateToCurve\n}\n","module.exports = require(\"d3\");","module.exports = require(\"dagre-d3-renderer\");","module.exports = require(\"dagre-d3-renderer/lib/label/add-html-label.js\");","module.exports = require(\"dagre-layout\");","module.exports = require(\"graphlibrary\");","module.exports = require(\"he\");","module.exports = require(\"lodash\");","module.exports = require(\"moment-mini\");","module.exports = require(\"scope-css\");"],"sourceRoot":""} \ No newline at end of file diff --git a/sysjob2html.py b/sysjob2html.py new file mode 100644 index 0000000..56c94e4 --- /dev/null +++ b/sysjob2html.py @@ -0,0 +1,21 @@ +from typing import Union,List +from inn import getEngine +import markdown +from sysjobs import * + + +def getHtml(sysjob: List[Union[Sysjobs,Sysjobhistory]]) -> str: + resReturn: str='' + resReturn = "# Title\n" + resReturn+= "~~~mermaid\n" + resReturn+= "gantt\n" + #resReturn+= "dateFormat YYYY-MM-DD H HH\n" + for a in sysjob: + resReturn+=a[0].name + ' : ' + str(a[1].getStartTime()) + ',' + str(a[1].getRunDurationInHourMinSec())+ '\n' + resReturn+="​~~~" + resReturn=markdown.markdown(resReturn, extensions=['md_mermaid']) + resReturn=resReturn.replace('','') + return resReturn + +def getJson(sysjob: List[Union[Sysjobs,Sysjobhistory]]): + return '' \ No newline at end of file diff --git a/sysjobs.py b/sysjobs.py new file mode 100644 index 0000000..171b4c0 --- /dev/null +++ b/sysjobs.py @@ -0,0 +1,141 @@ +#from __future__ import annotations +from typing import List + +from sqlalchemy import BOOLEAN, Column,INTEGER,NVARCHAR, ForeignKey,Select, and_, or_ +from sqlalchemy.dialects.mssql import UNIQUEIDENTIFIER, TINYINT +from sqlalchemy.orm import relationship,Session,Mapped,mapped_column +from sqlalchemy.ext.declarative import declarative_base +from datetime import datetime,timedelta,time +import json +from json import JSONEncoder +#import sysjobhistory +import inn + +class MyEncoder(JSONEncoder): + def default(self, obj): + if(isinstance(obj,Sysjobs) or isinstance(obj,Sysjobhistory)): + return obj.getDict() + else: + return object.__dict__ + +Base = declarative_base() + +class Sysjobs(Base): + __tablename__ = "sysjobs" + job_id: Mapped[str] = mapped_column(UNIQUEIDENTIFIER,primary_key=True) + name=Column(NVARCHAR(128)) + enabled=Column(TINYINT) + sysjobhistories: Mapped[List["Sysjobhistory"]] = relationship(back_populates="sysjob") + dataflow_jobs: Mapped[List["DataflowManagement_JobListe"]] = relationship(back_populates="sysjob") + + def __iter__(self): + yield from { + "job_id": self.job_id, + "name": self.name + }.items() + + def __iter__(self): + yield from { + "job_id": str(self.job_id), + "name": self.name + }.items() + def __str__(self): + return json.dumps(self.getDict()) + + def getDict(self): + return {'job_id': str(self.job_id), 'name': self.name} + + def __repr__(self): + return self.__str__() + + def getTest(self,session: Session): + stmt = Select(Sysjobs).join(Sysjobhistory).where(Sysjobhistory.run_date>20230601).distinct() + print(stmt) + with Session(engine) as session: + row : Sysjobs + res = session.execute(stmt).all() + for row in res: + print(row.Sysjobs.name + ' ' + str(row.Sysjobhistory.run_date) + ' ' + str(row.Sysjobhistory.run_time)) + + def getNattensKoersel(session) -> List['Sysjobs']: + natStat=(datetime.today()-timedelta(days=1)).replace(hour=20,minute=0,second=0,microsecond=0) + resReturn: List['Sysjobs'] = list() + stmt = Select(Sysjobs,Sysjobhistory).join(DataflowManagement_JobListe).join(Sysjobhistory).where(Sysjobhistory.step_id==0).where(DataflowManagement_JobListe.Aktiv==1).where(or_(and_(Sysjobhistory.run_date>=int((natStat.strftime('%Y%m%d'))),(Sysjobhistory.run_time>=int((natStat.strftime('%H%M%S'))))),Sysjobhistory.run_date>int((datetime.today().strftime('%Y%m%d'))))).distinct() + row : Sysjobs + res = session.execute(stmt).all() + # resReturn=[x[0] for x in res] + return res + + + +class Sysjobhistory(Base): + __tablename__ = "sysjobhistory" + instance_id=Column(INTEGER,primary_key=True) + job_id: Mapped[str] = mapped_column(ForeignKey("sysjobs.job_id")) + step_id = Column(INTEGER) + step_name=Column(NVARCHAR(128)) + run_date=Column(INTEGER) + run_time=Column(INTEGER) + run_duration=Column(INTEGER) + sysjob: Mapped["Sysjobs"] = relationship(back_populates="sysjobhistories") + + def __iter__(self): + yield from { + "instance_id": self.instance_id, + "job_id": str(self.job_id), + "step_id": self.step_id, + "step_name": self.step_name, + "getStartTime": str(self.getStartTime()), + "getEndTime": str(self.getEndTime()) + }.items() + def __str__(self): + return json.dumps(self.getDict()) + + def getDict(self): + return {'instance_id': self.instance_id, 'job_id': str(self.job_id), 'step_id' : self.step_id, 'step_name': self.step_name, 'getStartTime': str(self.getStartTime()), 'getEndTime': str(self.getEndTime())} + + def __repr__(self): + return self.__str__() + + def getTest(self): + engine=inn.getEngine("msdb") + # stmt = Select(Sysjobhistory) + # with Session(engine) as session: + # for row in session.execute(stmt).first(): + # print(row) + def getStartTime(self) -> datetime: + resReturn: datetime + resReturn = datetime.fromisoformat(str(self.run_date)[0:4]+'-'+ str(self.run_date)[4:6]+'-'+str(self.run_date)[6:8]+' '+str(1000000+self.run_time)[1:3]+':'+str(1000000+self.run_time)[3:5]+':'+str(1000000+self.run_time)[5:7]) + return resReturn + + def getEndTime(self) -> datetime: + resReturn: datetime + resReturn = self.getStartTime()+timedelta(seconds=self.getRunDurationInSec()) + return resReturn + + + def getRunDurationInSec(self) -> int: + resReturn: int + resReturn = 3600*(int(str(self.run_duration+1000000)[1:3]))+60*(int(str(self.run_duration+1000000)[3:5]))+(int(str(self.run_duration+1000000)[3:5])) + return resReturn + + def getRunDurationInHourMinSec(self) -> str: + resReturn: str + resReturn=str(timedelta(seconds=self.getRunDurationInSec())) + return resReturn + + def getRunHistory(self,Sysjob): + engine=inn.getEngine("msdb") + stmt = Select(Sysjobhistory).join(Sysjobhistory).filter(Sysjob) + with Session(engine) as session: + row : Sysjobs + res = session.execute(stmt).all() + print(res.__len__) + + +class DataflowManagement_JobListe(Base): + __tablename__ = "JobListe" + __table_args__ = { "schema": "dataflowmanagement.flw" } + JobID: Mapped[str] = mapped_column(ForeignKey("sysjobs.job_id"),primary_key=True) + Aktiv=Column(BOOLEAN) + sysjob: Mapped["Sysjobs"] = relationship(back_populates="dataflow_jobs") \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..638200e --- /dev/null +++ b/templates/index.html @@ -0,0 +1,9 @@ + + + + + FlaskBlog + + + + \ No newline at end of file diff --git a/test.md b/test.md new file mode 100644 index 0000000..887fa37 --- /dev/null +++ b/test.md @@ -0,0 +1,57 @@ +```mermaid +gantt +title Writing my thesis +dateFormat YYYY-MM-DD H HH +axisFormat %X +BI - Flow - DSI_CPR : 2023-06-11 20:01:58,0:08:08 +BI - Flow - DSO_PAS_MDS : 2023-06-11 22:26:41,0:00:00 +BI - Flow - DSO_SharedDimensions_Personale : 2023-06-11 22:21:15,0:03:03 +BI - Flow - DSO_SharedDimensions_Sikkerhed : 2023-06-11 22:41:49,0:04:04 +BI - Flow - DSI_IFDB_BOOKING : 2023-06-11 22:00:00,0:11:11 +BI - Flow - DSI_IFDB_PAS_LPR3 : 2023-06-11 22:00:00,0:21:21 +BI - Flow - DSO_SharedDimensions_Dimensions_ALLE : 2023-06-11 22:25:54,0:26:26 +BI - Flow - DSI_SSI : 2023-06-11 20:01:14,0:02:02 +BI - Flow - DSO_PAS_PRE : 2023-06-11 22:25:52,0:00:00 +BI - Flow - DSO_SharedDimensions_SKSBrowser : 2023-06-11 22:00:39,0:03:03 +BI - Flow - DSI_IFDB_MEDICIN : 2023-06-11 22:00:00,0:13:13 +BI - Flow - DSO_SharedDimensions_Bridge_IFDB : 2023-06-11 22:52:16,0:10:10 +BI - Flow - DSO_PAS_DIM : 2023-06-11 22:27:25,0:08:08 +BI - Flow - DSO_SharedDimensions_Borger : 2023-06-11 22:21:14,0:13:13 +BI - Flow - DSI_IFDB_SHARED : 2023-06-11 22:00:00,0:00:00 +BI - Flow - Batch Start Daglig kl. 20.00 : 2023-06-11 20:00:00,0:02:02 +BI - Flow - DSI_SST : 2023-06-11 20:01:56,0:01:01 +BI - Flow - DSO_SharedDimensions_Organisation : 2023-06-11 22:21:12,0:20:20 +BI - Flow - DPA_SharedDimensions : 2023-06-11 23:03:04,0:07:07 +BI - Flow - DSO_SharedDimensions_Dimensions_PRE : 2023-06-11 22:21:18,0:04:04 +BI - Flow - DPA_SharedDimensions_Sikkerhed : 2023-06-11 22:45:54,0:01:01 +BI - Flow - DSI_IFDB_PAS_SFI : 2023-06-11 22:00:00,0:05:05 +BI - Flow - DSO_PAS_FACT : 2023-06-11 23:03:00,0:47:47 +BI - Flow - DSO_SharedDimensions_Shared : 2023-06-11 20:01:29,0:00:00 +BI - Flow - DPA_SharedDimensions_Shared : 2023-06-11 20:01:45,0:00:00 +BI - Flow - DSI_IFDB_PAS : 2023-06-11 22:00:00,0:14:14 +BI - Flow - DSI_LUNAADM : 2023-06-11 20:01:13,0:03:03 +``` + + titleTopMargin:25, + barHeight:20, + barGap:4, + topPadding:50, + leftPadding:75, + gridLineStartPadding:35, + fontSize:11, + fontFamily:'"Open-Sans", "sans-serif"', + numberSectionStyles:4, + + +

Welcome to FlaskBlog

+ {{ test|safe }} + diff --git a/tmp.txt b/tmp.txt new file mode 100644 index 0000000..c32bea5 --- /dev/null +++ b/tmp.txt @@ -0,0 +1,2 @@ +tmp.txt + \ No newline at end of file